Андрей Смирнов
Время чтения: ~14 мин.
Просмотров: 110

Отборы в 1С 8.3 (Управляемые формы)

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

Отборы в динамическом списке 1С 8.3

Тут мы имеем два пути: создать отбор на форме списка и установить отбор программно.

Отбор в настройка формы

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

otboryi-v-dinamicheskih-spiskah-1s.png

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

Установка отбора в динамическом списке 1С программно

Дело в том, что Отбор является свойством динамического списка. Этим мы и воспользуемся. Сначала добавим в свойство отбора новый элемент:

НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

Чтобы отбор заработал, нужно прописать параметры «ЛевоеЗначение», «ВидСравнения» и «ПравоеЗначение». Кроме того необходимо свойство «Использование» установить в «Истина».

НовЭлементОтбора.ЛевоеЗначение =Новый ПолеКомпоновкиДанных("ПолеКомп_1"); НовЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;    НовЭлементОтбора.Использование =Истина;    НовЭлементОтбора.ПравоеЗначение = Знач_1;

Получите 267 видеоуроков по 1С бесплатно:

  • Бесплатный видео самоучитель по 1С Бухгалтерии 8.3;
  • Самоучитель по новой версии 1С ЗУП 3.1;

Таким образом, мы создаем простой отбор. Кроме простого, можно задать условия по нескольким полям. Для этого используем тип данных «ГруппаЭлементовОтбораКомпоновкиДанных»:

Гр_Отбора = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); Гр_Отбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭлементОтбора.Родитель = Гр_Отбора;    НовЭлементОтбора.ЛевоеЗначение =Новый ПолеКомпоновкиДанных("ПолеКомп_1"); НовЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; НовЭлементОтбора.Использование =Истина;    НовЭлементОтбора.ПравоеЗначение = Знач_1;

Отборы в таблице значений 1С

Тут у нас также имеется несколько вариантов.

  • Можно просто перебрать таблицу в цикле и выбрать нужные строки либо скрыть ненужные. Считаю этот способ самым неоптимальным, но для новичков пойдет.
  • Второй способ – использовать метод таблицы «НайтиСтроки». Иногда очень хороший способ, но есть серьезный недостаток. Это единственный тип для сравнения – «Равно».
  • Третий вариант отбора – мой любимый, так как лишен в итоге всех недостатков. В этом варианте я использую «ПостроительЗапроса». Вот пример:
&НаСервереПроцедура ОтборВТЗНаСервере()       ПостроительЗапр =Новый ПостроительЗапроса;       ПостроительЗапр.ИсточникДанных =Новый ОписаниеИсточникаДанных(ТабЗнач);       т_Отбор = ПостроительЗапр.Отбор.Добавить("Кол_1");       т_Отбор.ВидСравнения = ВидСравнения.Больше;       т_Отбор.Значение =1000;       т_Отбор.Использование =Истина;       ПостроительЗапр.Выполнить();       ТабРезультат = Построитель.Результат.Выгрузить();КонецПроцедуры

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Оцените статью, пожалуйста!

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

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

121019_0552_1.png

Новый элемент в список отбора можно добавить несколькими способами – двойной клик по доступному полю, перетаскивание, клавиша в меню:

121019_0552_2.png

При этом только через клавишу в меню можно добавить группу в отбор, которая объединяет элементы внутри этой группы по заданному условию (И, ИЛИ).

121019_0552_3.png

По умолчанию если элементы отбора не включены ни в какую группу и объединяются с помощью оператора «И».

Вид сравнения в элементе отбора зависит от типа поля (левого значения):

Операции доступные для числа:

121019_0552_4.png

Операции доступные для строки:

121019_0552_5.png

Для строки добавлены операции – «содержит», «начинается с», «соответствует шаблону» и те же операции с оператором «Не» (Не содержит и т.д.).

Операции доступные для ссылки:

121019_0552_6.png

Далее разберем типовые ситуации при использовании отбора

Самый простой вариант использование отбора – добавить фиксированный отбор, который будет действовать всегда (если конечно пользователь не изменит его в варианте отчета):

121019_0552_7.png

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

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

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

121019_0552_8.png

Допустим нам нужно исключить из отчета все строки, в которых итоговое количество по номенклатуре меньше 15. В запросе мы такое условие применить не можем. Установим для этого отбора для группировки «Номенклатура»:

121019_0552_9.png

Получим такой отчет:

121019_0552_10.png

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

121019_0552_11.png

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

Чтобы убрать отбор, выделенный на рисунке на закладке «Другие настройки» для этой же группировки отключим вывод отбора:

Обычно мы редко используем фиксированные отборы. Чаще нам нужны отборы, которые может изменять пользователь. Можно, чтобы пользователь изменял отборы через функционал 1С СКД «Изменить вариант», но это не совсем верный путь – вариант отчета это скорее постоянный «скелет», который настраивается один раз и потом используется многократно. Отборы же это что-то часто изменяемое, поэтому правильнее редактировать их через механизм пользовательских настроек.

Итак, вернемся к нашему отчету. Допустим нам необходимо добавить в отчет отбор по группе номенклатуры (или по элементу) и чтобы этот отбор был доступен для изменения пользователем.

Добавим для этого отбор на уровне отчета. Вид сравнения по умолчанию сделаем «В группе», отключим по умолчанию использование отбора и в диалоге редактирования пользовательских настроек включим наш отбор в пользовательские настройки.

121019_0552_16.png

Перейдем теперь в режим предприятия.

121019_0552_17.png

Наш отбор доступен для редактирования на форме. За доступность прямо в форме отчета отвечает «Режим редактирования». Значение «Быстрый доступ» означает, что отбор доступен прямо на форме отчета. Если значение равно «Обычный», отбор доступен через кнопку «Настройки». Как видно на рисунке пользователь может выбирать вариант сравнения, управлять действием (включен / отключен) отбора.

Если вам необходимо установить фиксированный отбор (вид сравнения и правое значение константы), но пользователь должен управлять включением / отключением отбора, тогда вам необходимо заполнить представление отбора в пользовательской настройке:

121019_0552_18.png

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

Если вам в отборе нужно изменить представления поля, по которому делается отбор, то для этого есть еще одно представление:

Получается вот так:

Мы можем вывести все отборы для редактирования пользователем. Для этого на уровне отчета вызовем диалог редактирования пользовательских настроек:

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

Как известно, в 1С СКД используется не только в отчетах, но и в формах, содержащих динамические списки. У динамического списка есть несколько свойств, которые относятся к СКД. Среди этих свойств имеется свойство «Отбор» с типом «ОтборКомпоновкиДанных». Чтобы установить отбор в динамическом списке есть два способа. Первый способ – передать отборы через параметр формы с одноименным названием – «Отбор». Этот параметр является структурой, в которой ключ ссылается на поле, для которого устанавливается отбор. Значение же содержит данные, с которыми производится сравнение. Можно также передать в качестве правого значения – массив, фиксированный массив, список значений. В этом случае вид сравнения равняется «ВСписке», для одиночного элемента вид сравнения устанавливается как «Равно». Этот способ ограничен в возможностях – с его помощью нельзя накладывать сложные условия с операторами «И» и «ИЛИ», нельзя использовать виды сравнения кроме двух указанных.

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

Второй способ – непосредственное редактирование отбора в динамическом списке или в компоновщике. Обычно в типовых конфигурация для этого есть ряд методов и функций для установки таких отборов.

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

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, «Ссылка», Параметры.ДобавитьДля, ВидСравненияКомпоновкиДанных.НеРавно);

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

В форме содержащей динамический список также как в отчете на СКД, возможно настроить пользовательский отбор. Как это можно сделать показано на рисунке:

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

В режиме предприятия это будет выглядеть следующим образом:

Отборы в отчётах. Нюансы работы компоновщика настроек

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

Курс по СКД

logo.png  

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

Процедура для обычного приложения

<font><font>Процедура</font> СобытиеНачалоВыбора<font>(</font>Элемент<font>,</font> СтандартнаяОбработка<font>)</font>СтандартнаяОбработка <font>=</font><font>Ложь;</font>ФормаВыбора <font>=</font> Документы<font>.</font>Документ1<font>.</font>ПолучитьФормуВыбора<font>(</font><font>,</font> Элемент<font>)</font><font>;</font>ФормаВыбора<font>.</font>Отбор<font>.</font>Реквизит1<font>.</font>ВидСравнения <font>=</font> ВидСравнения<font>.</font>Равно<font>;</font>ФормаВыбора<font>.</font>Отбор<font>.</font>Реквизит1<font>.</font>Значение <font>=</font><font>"Значение"</font><font>;</font>ФормаВыбора<font>.</font>Отбор<font>.</font>Реквизит1<font>.</font>Использование <font>=</font><font>Истина;</font>ФормаВыбора<font>.</font>ЭлементыФормы<font>.</font>ДокументСписок<font>.</font>НастройкаОтбора<font>.</font>Реквизит1<font>.</font>Доступность <font>=</font><font>Истина;</font>ФормаВыбора<font>.</font>Открыть<font>(</font><font>)</font><font>;</font><font>КонецПроцедуры </font></font>

Процедуры для управляемого приложения

Настройка отборов с использованием объекта НастройкиКомпоновкиДанных. Есть возможность задать вид сравнения, доступность элементов отбора для редактирования и т.д.

<font><font>&НаКлиенте</font><font>Процедура</font> СобытиеНачалоВыбора<font>(</font>Элемент<font>,</font> ДанныеВыбора<font>,</font> СтандартнаяОбработка<font>)</font>СтандартнаяОбработка <font>=</font><font>Ложь;</font>Настройки <font>=</font><font>Новый</font> НастройкиКомпоновкиДанных<font>;</font>Элемент <font>=</font> Настройки<font>.</font>Отбор<font>.</font>Элементы<font>.</font>Добавить<font>(</font>Тип<font>(</font><font>"ЭлементОтбораКомпоновкиДанных"</font><font>)</font><font>)</font><font>;</font>Элемент<font>.</font>Использование <font>=</font><font>Истина;</font>Элемент<font>.</font>ЛевоеЗначение <font>=</font><font>Новый</font> ПолеКомпоновкиДанных<font>(</font><font>"Реквизит1"</font><font>)</font><font>;</font>Элемент<font>.</font>ВидСравнения <font>=</font> ВидСравненияКомпоновкиДанных<font>.</font>Равно<font>;</font>Элемент<font>.</font>ПравоеЗначение <font>=</font><font>"Значение"</font><font>;</font>Элемент<font>.</font>РежимОтображения <font>=</font> РежимОтображенияЭлементаНастройкиКомпоновкиДанных<font>.</font>Обычный<font>;</font>ПараметрыФормы <font>=</font><font>Новый</font> Структура<font>;</font>ПараметрыФормы<font>.</font>Вставить<font>(</font><font>"ФиксированныеНастройки"</font><font>,</font> Настройки<font>)</font><font>;</font>ОткрытьФорму<font>(</font><font>"Документ.Документ1.ФормаВыбора"</font><font>,</font> ПараметрыФормы<font>,</font> Элементы<font>.</font>Реквизит1<font>)</font><font>;</font><font>КонецПроцедуры </font></font>

Настройка отборов с использованием структуры. Это более простой вариант открытия формы выбора с установленными отборами. В этом варианте некоторые настройки недоступны.

<font><font>&НаКлиенте</font><font>Процедура</font> СобытиеНачалоВыбора<font>(</font>Элемент<font>,</font> ДанныеВыбора<font>,</font> СтандартнаяОбработка<font>)</font>СтандартнаяОбработка <font>=</font><font>Ложь;</font>ПараметрыФормы <font>=</font><font>Новый</font> Структура<font>;</font>Отборы <font>=</font><font>Новый</font> Структура<font>;</font>Отборы<font>.</font>Вставить<font>(</font><font>"Реквизит1"</font><font>,</font><font>"Значение"</font><font>)</font><font>;</font>Отборы<font>.</font>Вставить<font>(</font><font>"Реквизит2"</font><font>,</font><font>"Значение"</font><font>)</font><font>;</font>Отборы<font>.</font>Вставить<font>(</font><font>"Реквизит3"</font><font>,</font><font>"Значение"</font><font>)</font><font>;</font>ПараметрыФормы<font>.</font>Вставить<font>(</font><font>"Отбор"</font><font>,</font> Отборы<font>)</font><font>;</font>ОткрытьФорму<font>(</font><font>"Документ.Документ1.ФормаВыбора"</font><font>,</font> ПараметрыФормы<font>,</font> Элементы<font>.</font>Реквизит1<font>)</font><font>;</font><font>КонецПроцедуры </font></font>

Комментарии (0)

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

 
  • Регистрация
  • Восстановить пароль
  • Вход>

    registration.png

</td></tr> </td></tr></table>Используемые источники:

  • https://programmist1s.ru/otboryi-v-1s-8-3-upravlyaemyie-formyi/
  • https://wiki.programstore.ru/ispolzovanie-otborov-v-1s-skd/
  • https://1clenta.ru/pattern/45

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации