Установить параметры динамического списка 1с программно.

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

За основу возьмем некую тестовую конфигурацию 1С:»Бухгалтерия предприятия 3.0″. Не будем сейчас делать подбор, просто в справочнике «Номенклатура» добавим еще одну форму выбора и сделаем ее временно основной:

При создании система по умолчанию добавит на форму табличное поле с типом «Динамический список».

Зайдем в его свойства и посмотрим, что там.

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

Откроется окно с уже готовым кодом на . Пока что там просто перечислены все поля справочника «Номенклатура».

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

Как видим, имеется кнопка вызова « » и флажок, который дает возможность динамически изменять содержимое списка. То есть когда другой пользователь меняет что-то в справочнике, в нашем списке это тоже изменится. Кроме того, имеется закладка «Настройки», но ее мы коснемся позже.

Собственный запрос в динамическом списке

Сначала создадим нужный нам запрос с остатками и ценами. Примерно так:

Закладка «Настройки»

И вот теперь самое вкусное! Переходим на закладку «Настройки». И сразу видим, что на первой вкладке мы можем делать любые отборы по любому полю в запросе:

Программная установка параметров запроса в динамическом списке 1С 8.3

Не забываем, что в запросе у нас присутствуют два параметра: «Период» и «Тип цен». Мы должны передать их в запрос, иначе будет ошибка.

Пропишем эти параметры в параметрах формы, а в модуле формы добавим следующие строки:

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Список. Параметры. УстановитьЗначениеПараметра("Период" , Параметры. Дата) ; Список. Параметры. УстановитьЗначениеПараметра("ТипЦен" , Параметры. ТипЦен) ; КонецПроцедуры

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

Для демонстрации возможностей динамического списка создадим внешнюю обработку, добавим основную форму. На форму добавим новый реквизит с типом «Динамический список». Зайдем в его свойства и посмотрим, что там.
Нас интересует свойство «Произвольный запрос». Его включение продемонстрирует нам все возможности динамического списка. Мы сможем написать запрос, используя практически все возможности языка запросов системы 1С: Предприятие. Устанавливаем флажок и нажимаем ссылку «Открыть»:

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


В качестве основной таблицы выберем «Справочник.Номенклатура», это позволит нам работать с динамическим списком, как со списком номенклатуры - добавлять, изменять, помечать на удаление элементы справочника. Так же, установка основной таблицы делает доступным возможность динамического считывания данных - это означает, что выборка будет производиться порциями, по мере необходимости.
Далее необходимо создать элементы формы для нашего списка:

Если мы попробуем запустить нашу обработку в таком виде, то получим ошибку:


Для ее устранения необходимо установить значение параметру «Период». Для этого можно воспользоваться методом «УстановитьЗначениеПараметра» коллекции «Параметры» динамического списка. Метод принимает два параметра:
. «Параметр» - Тип: Строка; ПараметрКомпоновкиДанных. Имя параметра или параметр компоновки данных, значение которого нужно установить;
. «Значение» - Тип: Произвольный. Значение, которое нужно установить.
Может быть вызван в обработчике «ПриСозданииНаСервере» формы:

У вас есть вопрос, нужна помощь консультанта?


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


В обработчике «ПриИзменении» элемента формы «Дата» вызовем метод «УстановитьЗначениеПараметра», передав в качестве значения значение связанного реквизита. Аналогичным образом изменим процедуру «ПриСозданииНаСервере» формы. Так как метод доступен на клиенте, вызов сервера не потребуется:


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




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


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


Результат внесенных изменений:



Главная Для начинающих разработчиков Учимся программировать

Есть форма, содержащая динамический список с произвольным запросом. Как при открытии формы установить нужные параметры в этом запросе?

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

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

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

ВЫБРАТЬ РегистрСведенийЦеныТоваров.Период, РегистрСведенийЦеныТоваров.Товар, РегистрСведенийЦеныТоваров.Цена ИЗ РегистрСведений.ЦеныТоваров КАК РегистрСведенийЦеныТоваров ГДЕ РегистрСведенийЦеныТоваров.Товар = &Товар И РегистрСведенийЦеныТоваров.Период >= &НачалоПериода И РегистрСведенийЦеныТоваров.Период <= &КонецПериода

Как видно из текста запроса, у запроса есть три параметра: Товар , НачалоПериода и КонецПериода . Для нормального функционирования формы значения этих параметров должны быть заданы при открытии формы, иначе в результате открытия формы будет получена ошибка.

Чтобы передать собственные параметры в форму, желательно создать их в редакторе формы.

Вообще говоря, делать это не обязательно. Любые параметры, переданные в функцию ОткрытьФорму() , будут доступны в обработчике события формы ПриСозданииНаСервере . Но все же лучше создать их у формы в явном виде.

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

Итак, создадим у формы списка регистра сведений три параметра: НачалоПериода , КонецПериода (тип Дата ) и Товар (тип СправочникСсылка.Товары ).

Теперь в форме элемента справочника Товары создадим команду ЦеныВДекабре со следующим текстом:

ПараметрыФормы = Новый Структура("НачалоПериода, КонецПериода, Товар", "20121201000000", "20121231235959", Объект.Ссылка); ОткрытьФорму("РегистрСведений.ЦеныТоваров.Форма.ФормаСписка", ПараметрыФормы);

Этой командой мы открываем форму списка регистра сведений и передаем ей значения трех параметров.

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

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Список.Параметры.УстановитьЗначениеПараметра("НачалоПериода", Параметры.НачалоПериода); Список.Параметры.УстановитьЗначениеПараметра("КонецПериода", Параметры.КонецПериода); Список.Параметры.УстановитьЗначениеПараметра("Товар", Параметры.Товар); КонецПроцедуры



Статьи по теме