1с установить отбор и сортировку списка

Обновлено: 07.07.2024

Списки динамического просмотра данных. Интерактивная установка отбора и сортировки по умолчанию

Данный раздел содержит ответ на вопрос "По каким полям данных пользователь сможет выполнять отбор и сортировку в табличных полях, предназначенных для динамического просмотра данных". Эта информация позволит принимать решение о необходимости переопределить при помощи встроенного языка отборы и сортировки, доступные пользователю по умолчанию.

Предмет рассмотрения данного раздела - только табличные поля "динамического просмотра данных", т.е. табличные поля, связанные с объектами типа СправочникСписок. РегистрСведенийСписок. и т.д. Прочие табличные поля в разделе не рассматриваются.

Общие вопросы

Прежде всего хочется подчеркнуть, что предоставленные пользователю возможности управления отбором и порядком в общем случае меньше, чем возможности управления отбором и порядком из встроенного языка. Интерактивное управление ограничивается при помощи свойств НастройкаОтбора и НастройкаПорядка табличного поля, связанного со списком динамического просмотра (см. Расширение табличного поля списка справочника и т.п.). Управление из встроенного языка ограничивается составом полей свойств Отбор и Порядок списков динамического просмотра.

Для предоставления пользователю, например, возможности управлять отбором по тому или иному полю, нужно на основании настоящего материала определить, будет ли доступно такое поле "по умолчанию" и если нет - использовать объект НастройкаОтбора табличного поля для управления доступностью отбора из языка. Совсем не обязательно создавать на форме дополнительные элементы управления, предназначенные для организации такого "дополнительного" отбора - лучше, чтобы управление отбором находилось для пользователя в одном месте - в диалоге "Отбор и сортировка".

Сортировка

По умолчанию, для интерактивного управления сортировкой списка доступны такие поля источника данных, упорядочивание по которым будет эффективным. Например, по полям Код и Наименование справочника, полю Дата документа и т.д. Следует отметить, что у пользователя остается возможность сделать неэффективным просмотр списка, например, задав для справочника упорядочивание одновременно по коду и наименованию. Как именно система подбирает поля эффективного упорядочивания, а также как влияют настройки пользователя на эффективность работы списков динамического просмотра подробно обсуждается в статье "Особенности поведения списков динамического просмотра".

Кроме того, по умолчанию упорядочивание возможно только по тем полям источника данных, которые связаны с колонками табличного поля (свойства Данные и ДанныеФлажка).

Поля данных, по которым можно осуществлять сортировку, т.е. поля, которым соответствуют элементы порядка объекта Порядок, это все поля источника данных, кроме:

  • полей типа ХранилищеЗначения;
  • полей типа Строка неограниченной длины;
  • полей, имеющих "составной тип данных".

При этом следует помнить, что "составной тип данных" - это не только тип, в котором явным образом определено несколько типов данных (при конфигурировании это можно задать установив флажок "Составной тип данных" в диалоге редактирования типа), но еще и:

  • типы, задающие ссылку на любой справочник, документ и т.д.;
  • тип ЛюбаяСсылка;
  • типы Характеристика. < Имя плана видов характеристик > .

Отбор

По умолчанию, для интерактивного отбора доступны такие поля источника данных, которые:

  • связаны с данными колонки или данными флажка колонки табличного поля;
  • соответствуют элементу отбора объекта Отбор источника данных.

Видимость колонок табличного поля не влияет на состав доступных полей, как для отбора так и для сортировки. Это значит, что пользователь, управляя составом видимых полей табличного поля (команда "Настройка списка"), не влияет на состав полей, доступных для интерактивного управления отбором и сортировкой.

Поля данных, по которым можно осуществлять отбор, т.е. поля, которым соответствуют элементы отбора объекта Отбор, это все поля источника данных, кроме полей типа ХранилищеЗначения.

Тот факт, что состав доступных по умолчанию полей для сортировки подбирается намного "строже", чем для отбора, связан с тем, что в общем случае установка неоптимального упорядочивания сильнее влияет на эффективность работы списка динамического просмотра, чем установка неоптимального отбора.

Видеоролик выполнен в программе «1С:Бухгалтерия 8» версия 3.0.64.42.

Стандартные отчеты предназначены для получения данных бухгалтерского и налогового учета по остаткам и оборотам счетов, по объектам аналитического учета (субконто), а также для формирования списка корреспонденций счетов.

В верхней части любого стандартного отчета находится командная панель. С помощью настроек панели можно изменить параметры отчета: установить другой период, организацию и др.

По кнопке Показать настройки (Скрыть настройки) открывается (скрывается) панель настройки. В панели настройки на закладке Отбор можно выбрать параметр или реквизит, по которому будет произведен отбор в отчете, а также задать вид сравнения.

Параметр или реквизит, доступный для настройки отбора, указывается в графе Поле. Конкретное значение выбранного параметра или реквизита параметра указывается в последней графе Значение (если оно требуется).

В колонке Вид сравнения можно указать условие сравнения, которое зависит от типа параметра. Например, для элемента справочника условие сравнения можно выбрать среди следующих вариантов:

  • Равно – параметр должен быть точно равен значению, указанному в графе Значение;
  • Не равно – параметр не равен указанному значению;
  • В списке – параметр должен быть равен одному из значений, указанных в списке. При выборе такого условия в графе Значение становится возможным указать не одно значение, а список значений;
  • Не в списке – параметр не должен быть равен ни одному из значений, указанных в списке;
  • В группе – параметр должен быть равен либо самому значению, либо подчиненному значению;
  • Не в группе – параметр не должен быть равен ни самому значению, ни подчиненным значениям;
  • В группе из списка – параметр должен быть равен одному из значений, указанных в списке групп, либо подчиненному значению из списка групп;
  • Не в группе из списка – параметр не должен быть равен ни одному из значений, указанных в списке групп, ни подчиненным значениям из списка групп;
  • Заполнено (Не заполнено) – отбор по заполненным (незаполненным) значениям. В данном случае заполнение графы Значение не требуется.

Если в табличной части указать два или более условия заполнения нескольких строк, то при отборе данных для формирования отчета будет проверяться одновременное соблюдение всех указанных условий.

Значительная часть информации, связанной с учетом или ведением бухгалтерии, хранится в виде списков. Эта традиция заведена уже очень давно и табличная информация воспринимается уже как нечто само собой понятное. Списки могут быть разными и представлены могут быть различными способами.


Программные продукты от 1С предлагают свою версию реализации списков. Это стандартный механизм для всех продуктов от 1С. Очень полезно научиться работать со списками в этой среде. Знания будут полезны как бухгалтерам, так и абсолютно всем, кто так или иначе, вынужден работать в программах от 1С.

Начнем по порядку.

1. Дату можно не вбивать полностью


Можно не вбивать текущую дату каждый раз. Просто введите сегоднящнее число в соответствующее поле и нажмите Enter. Программа сама допишет отсутствующую информацию. Это не ахти насколько важные знания, но если вы работаете с большим потоком документов, то этот лайфхак значительно ускорит обработку данных. Ведь каждый раз тратятся драгоценные секунды.

2. Функция "вывести список" - начальная сортировка


Нажимаем кнопку "Ещё" и находим опцию "Вывести список". Нажимаем на этот пункт и перед нами открывается панель настройки. Эта панель позволяет галочками указать, какие данные нужно сохранить в результирующем списке, который мы, например, хотим вывести на печать.

После такой сортировки, на выходе мы получим таблицу со всеми выбранными данными. Эту таблицу можно распечатать или использовать любым способом.

3. Быстрый отбор


Если нам нужно получить данные по какому-то контрагенту, то можно использовать простой способ сортировки. Достаточно кликнуть правой кнопкой по наименованию партнера или контрагента и выбрать опцию "Найти". В результате, система предложит вам сводную таблицу со всеми данными, отвечающими поставленному запросу. Это называется быстрый отбор. Очень полезная на практике функция. Кстати говоря. результат отбора будет висеть над всей таблицей как закладка. Его можно закрыть крестиком.

4. Сортировка данных

Ещё одна очень полезная функция - это сортировка данных внутри сводной таблицы. На самом деле штука довольно стандартная, но пользу. безусловно, имеет.


Обратите внимание, что колонки имеют шапки с названиями, которые можно кликать. Кликайте по нужному столбцу и произойдет сортировка в установленном порядке. Это очень удобно, когда нужно выполнить сортировку по одному из параметров.

5. Изменить форму

Если перейти во вкладку "ещё", то там вы увидите закладку изменить форму. Появляется форма настройки.


Тут можно поубирать галочками лишние пункты или добавить что-то новое. Благодаря этому можно сделать список более компактным. Здесь же можно изменить стиль и форму отображения объектов.


У некоторых пунктов возможно расширить набор полей. используя справочник. Там, где это возможно. появляется зеленый плюсик рядом с надписью добавить поле в конструкторе формы. Там есть много интересных и полезных полей. Например, можно вытащить поле ИНН и т.п.


Здесь же можно сформировать удобный быстрый отбор. Просто кликните по вкладке, как показано на рисунке. а в появившемся наборном поле введите нужного контрагента (или любую другую информацию, соответствующую выбранному полю). Впоследствии, программа выведет подборку, аналогичную быстрому подбору.

6. Подборка документов по признаку

С помощью опции настройка списков можно не только сформировать удобную для прочтения форму или упорядочить данные, но и сделать выборку по признаку. Например, вывести все документы, которые нужно подписывать. Очень полезная функция. которая значительно сократит рутинную обработку стандартных документов.


Настроить эту функцию очень просто. Переходите во вкладку "ещё", выбирайте настройку списков. Тут выбираем вкладку отбор, как показано на картинке выше и в итоге получаем отсортированные данные, где подобраны все неподписанные документы.

7. Группировка


Данные можно не только сортировать, но и группировать. Иногда группировка внутри списка бывает очень и очень полезной. поскольку позволяет работать сразу с несколькими важными параметрами. Для того, чтобы выполнить группировку, нужно в уже знакомой нам вкладке "ещё", выбрать соответствующий раздел.

После выполнения группировки все данные будут отсортированы по группам. Можно сделать, например. группировку по контрагенту, как указано на рисунке выше. Это позволит нам выполнить удобную подборку всех данных, которые будут объединены в сводный перечень данных. Так можно в одном раскрывающемся списке увидеть и долги, и неподписанные документы, и другое.

8. Изменить форму внутри документа


Менять можно не только общий список, но и конкретный документ. Перейдем в уже известный нам раздел, там выберем "изменение формы".

Настройка формы позволяет открыть или спрятать ненужные нам пункты. Обратите внимание, что мы работаем не просто со списком, а с папками. Пункты будущего списка можно перемещать из папки в папку, а затем выводить в нужном поле.

Я сам новичок в 1С и знаю, как трудно поначалу разобраться в море незнакомой информации и быстро найти нужную для решения какой-либо срочной задачи. Поэтому эту статейку пишу и для себя тоже.

Иногда пользователю нужно быстро отобрать нужные строки в списке по нескольким не точным критериям.

В списках отбор может быть установлен вручную пользователем стандартным способом через контекстное меню списка «Установить отбор и сортировку списка»

Но если отборы часто используемые, то мы можем вынести поля для ввода критериев на форму и устанавливать отборы программно.

1) Рассмотрим установку такого отбора на примере списка справочника Номенклатура.

Открываем в конфигураторе форму списка справочника Номенклатура.

Уменьшим высоту табличного поля «Список».

На освободившееся место над табличным полем разместим 5 элементов:

со следующими именами:

2) фНомер – Булево

3) отбНомер – Строка(20)

4) фНаименование – Булево

5) отбНаименование – Строка(150)

Результат будет выглядеть примерно так:

Сверим список реквизитов формы на закладке «Реквизиты», наши новые обведены красным:

Теперь пишем в модуле формы обработчики событий «При изменении» для флажков и полей ввода.

Для назначения обработчика события элементу формы выбираем мышкой нужный элемент, идем в панель «Свойства» , ищем в разделе «События» событие «ПриИзменении» и щелкаем мышкой по лупе:

И в созданную заготовку процедуры вписываем нужный код:

Вот код этих четырех обработчиков:

// при изменении флажка фНомер
Процедура фНомерПриИзменении ( Элемент )
// если не заполнен Номер для отбора не будем понапрасну дергать Отбор
Если ЗначениеЗаполнено ( отбНомер ) Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры

// при изменении поля ввода отбНомер
Процедура отбНомерПриИзменении ( Элемент )
// если не установлен флажок не будем понапрасну дергать Отбор
Если фНомер Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры


Процедура фНаименованиеПриИзменении ( Элемент )
// если не заполнено Наименование для отбора не будем понапрасну дергать Отбор
Если ЗначениеЗаполнено ( отбНаименование ) Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры

Процедура отбНаименованиеПриИзменении ( Элемент )
// если не установлен флажок не будем понапрасну дергать Отбор
Если фНаименование Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры

На двух наших полях ввода включим свойство «КнопкаОчистки».
При очистке поля ввода мы будем сбрасывать соответсвующий флажок и перечитывать отбор:

// при очистке поля ввода отбНомер
Процедура отбНомерОчистка ( Элемент , СтандартнаяОбработка )
фНомер = Ложь;
УстановитьОтборыФормы ();
КонецПроцедуры

// при очистке поля ввода отбНаименование
Процедура отбНаименованиеОчистка ( Элемент , СтандартнаяОбработка )
фНаименование = Ложь;
УстановитьОтборыФормы ();
КонецПроцедуры

Теперь пишем процедуру установки отбора:

Процедура УстановитьОтборыФормы ()

// запомним состояние иерархии
мИерархическийПросмотр = ЭлементыФормы.Список.ИерархическийПросмотр;

Если ( фНомер И НЕ ПустаяСтрока ( отбНомер ))
или ( фНаименование И ЗначениеЗаполнено ( отбНаименование ))
Тогда

// сбросим иерархию
Если ЭлементыФормы . Список . ИерархическийПросмотр Тогда
ЭлементыФормы . Список . ИерархическийПросмотр = Ложь;
КонецЕсли;

// получаем запросом список с установленными критериями отбора
сз = ВернутьСписок ();

// устанавливаем отбор на ссылки, входящие в возвращенный список ссылок
ЭтаФорма . Отбор . Ссылка . ВидСравнения = ВидСравнения . ВСписке ;
ЭтаФорма . Отбор . Ссылка . Значение = сз ;
ЭтаФорма . Отбор . Ссылка . Использование = Истина;

// сбросим отбор
ЭтаФорма . Отбор . Ссылка . Использование = Ложь;
// вернем иерархию взад
Если НЕ мИерархическийПросмотр Тогда
ЭлементыФормы.Список.ИерархическийПросмотр = Истина;
КонецЕсли;

КонецЕсли;
КонецПроцедуры

А теперь пишем функцию, выбирающую запросом ссылки по введенным пользователем критериям и возвращающую как результат список отобранных ссылок:

Функция ВернутьСписок ()

Запрос = Новый Запрос ;

// устанавливаем параметры запроса введенными критериями
Запрос . УстановитьПараметр ( "фНомер" , фНомер );
Запрос . УстановитьПараметр ( "фНаименование" , фНаименование );
Запрос . УстановитьПараметр ( "пНомер" , "%" + СокрЛП ( отбНомер ) + "%" );
Запрос . УстановитьПараметр ( "пНаименование" , "%" + СокрЛП ( отбНаименование ) + "%" );

// нам нужна только ссылка для построения списка значений
Запрос . Текст = "ВЫБРАТЬ
| Ссылка
|ИЗ
| Справочник.Номенклатура
|
|ГДЕ
| // 1-ое условие
| (&фНомер = Ложь
| или (&фНомер и НоменклатурныйНомер ПОДОБНО &пНомер)
| )
| // соединим условия союзом И
| И
|
| // 2-ое условие
| (&фНаименование = Ложь
| или (&фНаименование и Наименование ПОДОБНО &пНаименование)
| )
|" ;

Результат = Запрос . Выполнить ();

// создаем новый список значений и выгружаем в него колонку «Ссылка» из результата запроса
сз = Новый СписокЗначений ;
сз . ЗагрузитьЗначения ( Результат . Выгрузить (). ВыгрузитьКолонку ( "Ссылка" ));

// возвращаем результат - полученный список зачений
Возврат сз ;

Вот результат отбора по двум критериям:

Взглянем на форму отборов опять для сравнения и видим на ней установленный наш отбор по ссылке:

2) Рассмотрим более сложный пример со справочником «Основные средства».

Размещаем над списком 7 элементов:

Где 1 – это просто метка, а остальные реквизиты имеют следующие типы:

Добавим в модуль списка новую процедуру ЭлементОтбораПриИзменении и впишем в нее следующий код:

Процедура ЭлементОтбораПриИзменении ( Элемент )
УстановитьОтборыФормы ();
КонецПроцедуры

Всем новым элементам (кроме метки, хе-хе) назначаем этот обработчик, чтобы не плодить их тучу однотипных:

Пишем процедуру установки снятия отбора:

мИерархияВкл = ЭлементыФормы . СправочникСписок . ИерархическийПросмотр ;

Если ( флПоИнвНомеру и НЕ ПустаяСтрока ( отбИнвНомер ))
или ( флПоПодразделению и ЗначениеЗаполнено ( отбПодразделение ))
или ( флПоМОЛ и ЗначениеЗаполнено ( отбМОЛ ))Тогда

Если мИерархияВкл Тогда
ЭлементыФормы . СправочникСписок . ИерархическийПросмотр = Ложь;
КонецЕсли;

ЭтаФорма . Отбор . Ссылка . ВидСравнения = ВидСравнения . ВСписке ;
ЭтаФорма . Отбор . Ссылка . Значение = СписокОС ;
ЭтаФорма . Отбор . Ссылка . Использование = Истина;
Иначе
Если ЭтаФорма . Отбор . Ссылка . Использование Тогда
ЭтаФорма . Отбор . Ссылка . Использование = Ложь;
ЭлементыФормы . СправочникСписок . ИерархическийПросмотр = мИерархияВкл ;
КонецЕсли;
КонецЕсли;

И пишем еще одну процедурку получения списка ссылок запросом.

Здесь мы будем получать последние сведения по ОС из регистров сведений:

- Инвентарный Номер из РС ПервоначальныеСведения

- Подразделение и МОЛ из РС МестонахождениеОС.

Запрос = Новый Запрос ;

Если флПоИнвНомеру и НЕ ( флПоПодразделению или флПоМОЛ ) Тогда

// отбор только по инв. номерам только
Запрос . Текст = "ВЫБРАТЬ
| ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(
| &пДата,
| ИнвентарныйНомер ПОДОБНО &пИнвНомер)
|КАК ПервоначальныеСведенияОССрезПоследних" ;

Если флПоПодразделению И ЗначениеЗаполнено ( отбПодразделение ) Тогда
аргУсловие = "МестонахождениеОССрезПоследних.Местонахождение = &пПодразделение"
КонецЕсли;

Если флПоМОЛ И ЗначениеЗаполнено ( отбМОЛ ) Тогда
стрМОЛ = "МестонахождениеОССрезПоследних.МОЛ = &пМОЛ" ;
аргУсловие = ?( ПустаяСтрока ( аргУсловие ), стрМОЛ , аргУсловие + " И " + стрМОЛ );
КонецЕсли;

Если НЕ флПоИнвНомеру Тогда

Запрос . Текст = "ВЫБРАТЬ
| МестонахождениеОССрезПоследних.ОсновноеСредство
|ИЗ
| РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&пДата, )
|КАК МестонахождениеОССрезПоследних
|ГДЕ " + аргУсловие ;

Запрос . Текст = "ВЫБРАТЬ
| ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(
| &пДата,
| ИнвентарныйНомер ПОДОБНО &пИнвНомер)
| КАК ПервоначальныеСведенияОССрезПоследних
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&пДата, )
| КАК МестонахождениеОССрезПоследних
| ПО ПервоначальныеСведенияОССрезПоследних.ОсновноеСредство = МестонахождениеОССрезПоследних.ОсновноеСредство
|ГДЕ " + аргУсловие ;
КонецЕсли;

Запрос . УстановитьПараметр ( "пИнвНомер" , "%" + СокрЛП ( отбИнвНомер ) + "%" );
Запрос . УстановитьПараметр ( "пДата" , ТекущаяДата ());
Запрос . УстановитьПараметр ( "пПодразделение" , отбПодразделение );
Запрос . УстановитьПараметр ( "пМОЛ" , отбМОЛ );

Результат = Запрос . Выполнить ();

сз = Новый СписокЗначений ;
сз . ЗагрузитьЗначения ( Результат . Выгрузить (). ВыгрузитьКолонку ( "ОсновноеСредство" ));

Теперь добавляем в список две новых колонки МОЛ и Местонахождение без привязки к данным

Установим их свойства «Видимость» в Ложь, чтобы они не светились в списке сразу. Их заполение мы будем обрабатывать в событии ПриПолученииДанных (см. ниже)

В свойстве ЭлементУправления обоим назначаем «Поле ввода»

В обработчик ПриПолученииДанных добавляем код для отображения значений наших добавленных колонок:

Процедура СправочникСписокПриПолученииДанных ( Элемент , ОформленияСтрок )

// создаем структуру для получения сведений из регистра
СтруктураОтбора = Новый Структура ;
СтруктураОтбора . Вставить ( "Организация" , Организация );
СтруктураОтбора . Вставить ( "ОсновноеСредство" , ДанныеСтроки . Ссылка );

// будем запрашивать и выводить данные только при видимости наших колонок
Если ОформлениеСтроки . Ячейки . МОЛ . Видимость
или ОформлениеСтроки . Ячейки . Местонахождение . Видимость Тогда

РегистрыСведений . МестонахождениеОСБухгалтерскийУчет . ПолучитьПоследнее (

ОформлениеСтроки . Ячейки . МОЛ . Значение = МестонахождениеОС . МОЛ ;
ОформлениеСтроки . Ячейки . Местонахождение . Значение =

МестонахождениеОС . Подразделение ;
КонецЕсли;

Открываем список ОС, устанавливаем видимость наших новых колонок МОЛ и Местонахождение, вводим критерии отбора и вуаля:

P . S .

Недостаток рассмотренного подхода в том, что если ранее был каким-либо образом установлен отбор по ссылке, то он будет затерт нашим.

Читайте также: