Форма выбора

  • автор:

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

Открытие формы с отбором в обычном приложении

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

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

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

Открытие формы с отбором в управляемом приложении

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

Проблема в том, что нельзя выбрать вид сравнения (только «равно») и нет доступа к некоторым другим параметрам.

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

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

Не забывайте отключать стандартную обработку, если это требуется, а также указывать/не указывать владельца при получении/открытии формы.

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

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

В ячейку элемента формы «ПолеТабличногоДокумента» добавить флажок, кнопку, поле ввода

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

Добавление поля ввода в палитре свойств

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

Результат добавления элемента управления в ячейку

Программное добавление элементов

Программно можно задать для ячейки любой элемент управления.
Процедура ДобавлениеЭлементовУправления(Кнопка)
ПолеТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
//Установить флажок
Массив = Новый Массив;
Массив.Добавить(Тип(«Булево»));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
ПолеТабДок.Область(«R1C1»).СодержитЗначение = Истина;
ПолеТабДок.Область(«R1C1»).ТипЗначения = ОписаниеТипов;
ПолеТабДок.Область(«R1C1»).Значение = Ложь;
ПолеТабДок.Область(«R1C1»).УстановитьЭлементУправления(Тип(«Флажок»));
//Установить поле ввода
Массив = Новый Массив;
Массив.Добавить(Тип(«СправочникСсылка.Справочник1»));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
ПолеТабДок.Область(«R1C2»).СодержитЗначение = Истина;
ПолеТабДок.Область(«R1C2»).ТипЗначения = ОписаниеТипов;
ПолеТабДок.Область(«R1C2»).УстановитьЭлементУправления(Тип(«ПолеВвода»));
Поле = ПолеТабДок.Область(«R1C2»).ЭлементУправления;
Поле.КнопкаВыбора = Истина;
//Установить кнопку
ПолеТабДок.Область(«R1C3»).СодержитЗначение = Истина;
ПолеТабДок.Область(«R1C3»).УстановитьЭлементУправления(Тип(«Кнопка»));
Кнопка = ПолеТабДок.Область(«R1C3»).ЭлементУправления;
Кнопка.Заголовок = «Выполнить»;
Кнопка.УстановитьДействие(«Нажатие», Новый Действие(«ВыполнитьНажатие»));
КонецПроцедуры
Процедура ВыполнитьНажатие(Кнопка)
Сообщить(«нажатие кнопки»);
КонецПроцедуры

Можно ли использовать форму списка в качестве формы выбора?

Теги: 1С:Предприятие • ОткрытьФорму • ПолучитьФорму • РежимВыбора • Список • УправляемаяФорма

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

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

Нужно заметить, что у таблицы управляемой формы имеется свойство РежимВыбора. Изменение этого свойства в конфигураторе, в палитре свойств, позволяет превратить форму списка в форму выбора, и наоборот. Однако попытка изменить это свойство программно приведёт к ошибке:

Форма = ПолучитьФорму(«Справочник.Товары.ФормаСписка»); Форма.Элементы.Список.РежимВыбора = Истина; // Ошибка: Изменение свойства недоступно Форма.Открыть();

Открыть основную форму списка или выбора можно следующим образом:

ОткрытьФорму(«Справочник.Товары.ФормаСписка»); ОткрытьФорму(«Справочник.Товары.ФормаВыбора»); ОткрытьФорму(«Справочник.Товары.ФормаВыбораГруппы»);

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

ОткрытьФорму(«Справочник.Товары.Форма.СписокСОстатками»); ОткрытьФорму(«Справочник.Товары.Форма.ФормаУниверсальногоПодбора»);

Поиск: 1С:Предприятие • Открыть форму • Получить форму • Режим выбора • Список • Управляемая форма

1С 8.x : Как установить отбор в форме списка справочника?

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

1С отборы в форме выбора

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

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

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

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

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

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

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