1с как открыть форму выбора с отбором
Перейти к содержимому

1с как открыть форму выбора с отбором

  • автор:

Как открыть форму списка с некоторым отбором?

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

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

В процессе открытия формы будет установлен отбор по указанному полю. Например, в следующем примере открывается список приходных накладных с отбором по полю Номер , равному 333.

ЗначениеОтбора = Новый Структура(«Номер», «333»);
ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

2. Можно открыть форму списка без параметров:

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

Преимущества данного метода в том, что ВидСравнения у отбора можно задавать не только Равно , как в первом случае, а и Больше , Меньше и т.п.

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

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

Для этого в форме списка номенклатуры создадим команду и соответствующую ей кнопку Приходные накладные .

Обработчик выполнения этой команды заполним следующим образом:

ФормаСписка = ПолучитьФорму(«Документ.ПриходнаяНакладная.ФормаСписка»);
ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;
ФормаСписка.Открыть();

В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.

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

В поле Запрос введем следующий текст запроса:

ВЫБРАТЬ ДокументПриходнаяНакладная.Номер, ДокументПриходнаяНакладная.ДатаИЗ Документ.ПриходнаяНакладная КАК ДокументПриходнаяНакладнаяГДЕ ДокументПриходнаяНакладная.Товары.Товар = &Товар

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

Здесь Список.Параметры — это список параметров запроса динамического списка для реквизита Список . Значение параметра Товар устанавливается равным значению параметра формы ФильтрПоТовару .

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

Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.

Как открыть управляемую форму с отбором?

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

&НаКлиенте
Процедура ДокументОснованиеНачалоВыбора ( Элемент , ДанныеВыбора , СтандартнаяОбработка )

ПараметрыФормы = Новый Структура ;
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных ;

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

ПараметрыФормы . Вставить ( «ФиксированныеНастройки» , НастройкиКомпоновки );

ОткрытьФорму ( «Документ.ЗаказПокупателя.ФормаВыбора» , ПараметрыФормы , Элемент );

&НаСервере
Функция ПолучитьСписокДокументовДляОтбора ()

ВыхСписок = Новый СписокЗначений ;

ВыхСписок . ЗагрузитьЗначения ( Запрос . Выполнить (). Выгрузить (). ВыгрузитьКолонку ( «Ссылка» ));

Как открыть форму выбора с определенным отбором в 1C 8.2 и в 1С 8.3 ?

Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:

Форма выбора с установленным отбором 1с 8.2

Отбор на форме в поле ввода 1С 8.2 с несколькими значениями

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

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

Для начала получаем форму выбора, в параметрах передаем «Элемент» (владельца), устанавливаем флаг режима выбора. Потом создаем список значений и массив, отмечаем что в качестве отбора когда устанавливается вид сравнения в списке, может присутствовать объект только с типом СписокЗначений. Добавляем элементы в массив, затем этот массив загружаем в СписокЗначений который в следствии мы устанавливаем в отборе. Также не забываем включить флаг использования данного отбора, и установить ВидСравнения.

Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора

Теперь рассмотрим отбор в поле ввода на управляемой форме в 1С 8.3. Найдем на форме интересующий нас элемент, в котором мы будем устанавливать отбор, в нашем случае это поле «Организация». Находим событие «НачалоВыбора», щелкаем на лупу и оказываемся в процедуре. Мы видим параметр ДанныеВыбора, этот параметр имеет тип СписокЗначений. Для того чтобы ограничить выбор необходимыми элементами , нам необходимо заполнить СписокЗначений. Элементы выбрать можем только на сервере, поэтому создаем процедуру с директивой компиляции &НаСервере. В данной процедуре заполняем ДанныеВыбора.

Настраиваем отбор на форме выбора в 1С 8.3

Как альтернатива можно воспользоваться вариантом как описано открытие формы выбора с отбором для 1С 8.2, конечно код возможно чуть-чуть придется модифицировать, но суть остается та же.

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

Открытие формы выбора с отбором

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

    Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий — также ОткрытьФормуМодально). Применение альтернативного способа, с получением формы и ее последующим открытием с помощью метода ПолучитьФорму, не рекомендуется.
    Подробности

    Пример 1 (Управляемые формы). Открыть форму выбора документов корректировок реализаций с отбором по полю формы «Контрагент» типа «СправочникСсылка.Контрагенты» и по полю формы «Период» типа «СтандартныйПериод».

    Элементы.СписокДокументов — Табличная часть формы, в которой будет отрабатывать событие «ОбработкаВыбора» после того как будут выбраны документы из формы выбора.

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

    Пример 2 (Обычные формы). Открыть форму выбора документов корректировок реализаций с отбором по полю формы «Контрагент» типа «СправочникСсылка.Контрагенты» и по полю формы «Период» типа «СтандартныйПериод».

    ЭлементыФормы.СписокДокументов — Табличная часть формы, в которой будет отрабатывать событие «ОбработкаВыбора» после того как будут выбраны документы из формы выбора.

    Процедура Подбор(Команда) ФормаВыбора = ПолучитьФорму("Документ.КорректировкаРеализации.ФормаВыбора", , ЭтаФорма.КлючУникальности); ФормаВыбора.РежимВыбора = Истина; ФормаВыбора.МножественныйВыбор = Истина; ФормаВыбора.ЗакрыватьПриВыборе = Истина; ФормаВыбора.ВладелецФормы = ЭлементыФормы.СписокДокументов; Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) И НЕ ЭтотОбъект.Контрагент.Пустая() Тогда СтрокаОтбора = ФормаВыбора.Отбор.Контрагент; СтрокаОтбора.Значение = ЭтотОбъект.Контрагент; СтрокаОтбора.Использование = Истина; КонецЕсли; Если ЗначениеЗаполнено(ЭтотОбъект.Период) Тогда СтрокаОтбора = ФормаВыбора.Отбор.Дата; СтрокаОтбора.ЗначениеС = ЭтотОбъект.Период.ДатаНачала; СтрокаОтбора.ЗначениеПо = ЭтотОбъект.Период.ДатаОкончания; СтрокаОтбора.ВидСравнения = ВидСравнения.Интервал; СтрокаОтбора.Использование = Истина; КонецЕсли; ФормаВыбора.Открыть(); КонецПроцедуры 

    6 6 0 0 0 Скопировано.
    ред. 3 года назад

    Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *