1С 8.3 : Как открыть форму списка документов с отбором?
Данный код позволяет открыть список документов с установленным отбором, также можно открыть список элементов справочника с нужным отбором
Для того, чтобы открыть форму списка с заранее установленным отбором используйте следующие способы:
Первый способ заключается в том, что при открытии формы можно задать параметр формы Отбор, и открыть форму списка с этим параметром.
Параметр Отбор представляет собой структуру. Имена элементов соответствуют именам полей, по которым производится отбор, а значения содержат значения отбора. Это параметр расширения управляемой формы динамического списка. То есть он существует у форм, основным реквизитом которых является реквизит типа ДинамическийСписок, например у форм списка и форм выбора.
Например, в следующем примере открывается список приходных накладных с отбором по полю Номер, равному 333.
Второй способ
Можно открыть форму списка без параметров:
И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:
Преимущества данного метода в том, что ВидСравнения у отбора можно задавать не только Равно, как в первом случае, а и Больше, Меньше и т.п.
Третий способ
И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка.
Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.
Для этого в форме списка номенклатуры создадим команду и соответствующую ей кнопку Приходные накладные.
Обработчик выполнения этой команды заполним следующим образом:
В этом обработчике мы открываем форму списка приходных накладных, передавая в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры.
Затем создадим форму списка документов ПриходнаяНакладная и создадим параметр формы ФильтрПоТовару, который мы будем использовать для открытия формы с нужным отбором.
Теперь откроем палитру свойств основного реквизита формы Список. Установим флаг ПроизвольныйЗапрос и в строке Настройка списка нажмём Открыть.
В поле Запрос введём следующий текст запроса:
В запросе мы используем параметр Товар, в который и будет передаваться ссылка на текущую строку в списке номенклатуры, содержащуюся в параметре формы списка приходных накладных ФильтрПоТовару.
Для этого в обработчике события формы списка ПриСозданииНаСервере напишем код для установки значения параметра запроса Товар:
В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.
Как открыть форму списка с некоторым отбором?
Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:
ЗначениеОтбора = Новый Структура(«Номер», «333»);
ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);
2. Можно открыть форму списка без параметров:
И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Номер»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = «000000001»;
3. И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка. Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.
Обработчик выполнения этой команды заполним следующим образом:
ФормаСписка = ПолучитьФорму(«Документ.ПриходнаяНакладная.ФормаСписка»);
ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;
ФормаСписка.Открыть();
В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.
В поле Запрос введем следующий текст запроса:
В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.
Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.
Форма выбора (подбор) в управляемых формах
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 1.
Простой вызов формы выбора с одним возвращаемым результатом:
Пример 2.
Выбор нескольких значений (документов или справочников) :
В первых 2-х примерах мы использовали обработчик (Событие) формы «ОбработкаВыбора».
Теперь рассмотрим пример с использованием «Обработки оповещения», на мой взгляд более удобно )
Пример 3.
Думаю многие не знают про фишку Оповещением «на Сервере». То есть результат можно вернуть сразу на сервер без дополнительных условий. Работает до 8.3.13.1644, с 8.3.16.1063 этот метод недоступен.
Пример 4.
Мы видим что открывается форма выбора (из списка документов «Реализация товаров и услуг»), но иногда необходимо добавить некий отбор, чтобы при открытии формы не выводить все документы в целом.
Пример 5.
Есть моменты когда не всегда можно обойтись простым отбором, например необходимо открыть форму выбора со списком за определенный период.
Пример 6.
Пример 7.
Как открыть форму выбора с Позиционированием ранее выбранного значения:
Тестировалось на 1С:Предприятие 8.3 (8.3.16.1063) и 1С:Предприятие 8.3 (8.3.13.1644), Спасибо за внимание, возможно, кому-то поможет)
Личный блог
Блог программиста 1С
Рубрики
Боковая колонка
Боковая колонка
Свежие записи
Свежие комментарии
Рубрики
Архивы
Открытие списка с отбором
Открытие управляемой формы списка с установленным отбором 1С.
Приветствую всех заглянувших на огонёк! ?
Тема открытия списка документов, справочников, регистра с отбором на управляемых формах (УФ) давно «избита». Но нюансы как всегда появляются.
Реализация такого функционала возможна несколькими способами. Но в данной заметке я рассмотрю 2 очень похожих и тем не менее несколько различающихся: с отображением примененного отбора на форме и без отображения примененного отбора.
Отбор устанавливается программно.
Установка программного отбора на управляемых формах имеет на мой взгляд одно неоспоримое преимущество: нет необходимости изменять целевую форму (форму списка), достаточно прописать несколько строчек кода в том месте, откуда вызывается отбор. Это может очень пригодиться, когда ведется доработка типовой конфигурации и желательно изменять как можно меньше объектов с максимумом эффективности. Открытие списка с отбором может пригодиться в разных задачах, но как правило это подбор нужного документа (или элемента справочника) в вашу форму.
Чаще всего применяется второй способ, но иногда необходим и первый.
На форумах информация есть, но она чаще всего сильно разрозненная и не полная (
В первом случае выделенный раздел выводится, во втором случае — нет.
1. Если необходимо отразить примененный отбор на форме списка:
Ключевой момент в этом коде то, что используется пользовательская настройка отбора в динамическом списке той формы, которую необходимо открыть.
2. Если необходимо открыть без отображения отбора:
Второй вариант проще первого, но в этом случае не используется пользовательская настройка, а значить условия отбора не появляются над формой списка.
На этом все, тема Открытие списка с отбором — на мой взгляд раскрыта ?
Если есть вопросы, задавайте в комментариях.
Как программно открыть форму выбора с отбором?
Для открытия формы выбора (справочника, документа и т.п.) необходимо воспользоваться параметрами открываемой формы.
Обязательным условием является наличие в открываемой форме динамического списка, который назначен основным реквизитом формы. В качестве полей отбора можно воспользоваться любым полем, настроенным в динамическом списке.
Давайте рассмотрим работу механизма на примере: в документе «Поступление товаров» при выборе контрагента необходимо выбирать только поставщиков (отбор будем производить по реквизиту Поставщик типа Булево справочника «Контрагенты»).
Для начала, проверим наличие поля отбора «Поставщик» в настройках отбора динамического списка. Для этого откроем форму выбора справочника «Контрагенты» и перейдем к настройкам динамического списка:
Мы видим, что поле Поставщик есть среди полей отбора. Значит, наш отбор работать будет (на самом деле, мы можем добавить дополнительные поля в динамический список и использовать их для отбора):
Теперь нам осталось написать только код процедуры, который будет вызывать форму выбора:
Как видите, ничего сложного нет: мы создаем структуру, имитирующую отбор (ключ структуры — имя поля отбора, а значение — значение отбора), и включаем его в параметры открываемой формы.