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