параметры отбора в управляемой форме
Как открыть форму списка с некоторым отбором?
Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:
ЗначениеОтбора = Новый Структура(«Номер», «333»);
ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);
2. Можно открыть форму списка без параметров:
И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Номер»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = «000000001»;
3. И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка. Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.
Обработчик выполнения этой команды заполним следующим образом:
ФормаСписка = ПолучитьФорму(«Документ.ПриходнаяНакладная.ФормаСписка»);
ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;
ФормаСписка.Открыть();
В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.
В поле Запрос введем следующий текст запроса:
В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.
Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.
Бодаемся с отображением отборов на управляемых формах
Как известно многим, дьявол всегда кроется в мелочах. Одной из таких мелочей всплыло замечание пользователей о том, что при добавлении отборов при настройке списка не всегда отображается вид сравнения.
Казалось бы, дело за малым, перехватить момент, когда отборы попадают на форму, да пройтись по всем элементам группы пользовательских настроек и проставить видимость.
Итак, первым делом нужно усвоить, что те отборы, которые мы используем через стандартную команду настройки списка, имеют отношение не к самой форме, а к динамическому списку, расположенному на ней, и являются ни чем иным, как пользовательскими настройками.
Если смотреть свойства динамического списка через палитру, можно найти две зацепки для решения нашей задачи:
1) Во-первых, это свойство «Группа пользовательских настроек». В данном свойстве указывается группа формы, которая выступит родителем для всех добавляемых элементов с отображением отборов.
2) Во-вторых, это событие списка «ПриОбновленииСоставаПользовательскихНастроекНаСервере».
Рассмотрим программное создание полей на примере рабочего кода:
В итоге мы имеем стройный ряд настроек, который можно поменять в любой момент:
Форма выбора (подбор) в управляемых формах
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 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), Спасибо за внимание, возможно, кому-то поможет)
Установка отбора для поля ввода управляемой формы через ПараметрыВыбора (без переопределения событий «НачалоВыбора», «Автоподбор»)
Для ограничения вывода элементов какого-нибудь справочника или перечисления при редактировании поля ввода можно воспользоваться программной установкой свойства элемента формы «ПараметрыВыбора», которое доступно, начиная с версии платформы 8.2.
Данное свойство представляет собой фиксированный массив элементов типа «ПараметрВыбора», позволяет организовать простую фильтрацию доступных для выбора элементов в поле ввода. При этом фильтрация будет работать как при автоподборе, так и при открытии формы выбора.
Рассмотрим пару типовых случаев применения этого свойства для установки отбора:
Отфильтруем ввод сотрудника по значению реквизита «Организация» на форме документа.
Фильтрация будет установлена у поля ввода «СписокСотрудниковСотрудник», в таблице документа.
Для выбора будут доступны только те сотрудники, у которых значения реквизита «Организация» совпадает со значением, установленным в реквизите «Организация» документа.
Вот так будет выглядеть процедура установки фильтра:
Данная процедура вызывается в событии формы «ПриОткрытии» и в событии «ПриИзменении» поля ввода «Организация».
Не всегда достаточно одного значения сравнения, следующий случай продемонстрирует, как накладывать отбор по списку ссылок.
Фильтрация будет установлена у поля ввода «Статус».
Если у сохранённого документа установлен статус «Черновик», то список доступных элементов перечисления «Статусы» будет ограничен значениями «Черновик» и «НаРассмотрении».
Данная процедура вызывается в событиях формы «ПриСозданииНаСервере» и «ПослеЗаписиНаСервере»
Кроме этого в параметрах выбора можно устанавливать свои нетиповые свойства:
Данный параметр потом можно будет извлечь из параметров формы выбора справочника «Сотрудники» (в событии «ПриСозданииНаСервере»), а также из параметров в обработчике «ОбработкаПолученияДанныхВыбора» в модуле менеджера справочника «Сотрудники».
Расширение управляемой формы для отчета. Несколько действий с параметром «Отбор».
Начинающие разработчики иногда не совсем верно понимают предназначения параметров управляемых форм. В данной статье я предприму попытку наглядно показать и объяснить для чего нужно данное свойство.
Если мы откроем синтакс-помощник и введём на закладке «Индекс» слово «УправляемаяФорма», то увидим в разделе её свойств свойство «Параметры». Если перейти по гиперссылке к описанию свойства получим следующий текст:
Тип: ДанныеФормыСтруктура.
Содержит коллекцию параметров формы.
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Конструктором движений сформируем движения по регистру «ОстаткиНоменклатуры» для документа «ПриходнаяНакладная», создадим обычный отчет с использованием данного регистра накопления, назовём его «ОстаткиНоменклатуры». В пользовательском режиме отчеты по умолчанию помещаются в панель «Сервис», поэтому от регистра накопления мы его отличим всегда. В конструкторе запроса будем использовать виртуальную таблицу «ОстаткиНоменклатуры.Остатки» и выберем все 2 поля данного регистра: //infostart.ru/upload/iblock/9f8/2.JPG. На закладке условия наложем фильтр по ссылке на текущий документ.
Не забудем в командном интерфейсе рабочего стола конфигурации указать видимость для регистра «Остатки номенклатуры».
В пользовательском режиме из номенклатуры мы будем использовать «Холодильники», введём 2 документа «приходная накладная»//infostart.ru/upload/iblock/c63/3.JPG
Теперь создаём форму для документа «приходная накладная» и в контейнеры «Командный интерфес» в разделе «Перейти» укажем галочку «видимость» у регистра «остатки номенклатуры».
Далее создадим команду и назовём её «ОткрытьОтчет» //infostart.ru/upload/iblock/5d9/1.JPG и установим действие для данной команды.
После этого сгенерируем событие «УстановитьДействие» команды и получим в модуле формы процедуру:
В клиентской процедуре мы попробуем открыть данный отчет без параметра №2:
Теперь давайте поработаем с параметром «Параметры».
&НаКлиенте
Процедура ОткрытьОтчет(Команда)
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);
КонецПроцедуры
Ну давайте попробуем сформировать отчет по активному товару. Код процедуры примет вид:
&НаКлиенте
Процедура ОткрытьОтчет(Команда)
ТекДанные= Элементы.СписокНоменклатуры.ТекущиеДанные; //Получаем текущую позицию
Отбор = Новый Структура(); //Создаём отбор
Отбор.Вставить(«Номенклатура», ТекДанные.Номенклатура); //По полю «Номенклатура» в отчете, а в значение отбора передаём текущую номенклатуру
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ПараметрыФормы.Вставить(«Отбор», Отбор); //Вставляем наш параметр
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);
КонецПроцедуры
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«Отбор», Отбор);
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);
Теперь давайте попробуем сформировать отчет по всем товарам в документе, то есть отбор должен накладываться на все товары.
Можно конечно обходить элементы формы, но, я считаю, это не очень оптимально, мы создадим функцию и обратимся запросом к базе данных, выгрузим результат запроса в Таблицу значений и загрузим колонку «Номенклатура» в массив.
В итоге получился код:
Отбор = Новый Структура();
Отбор.Вставить(«Номенклатура», СписокНоменклатуры);
Отбор.Вставить(«Период», Объект.Дата);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить(«Отбор», Отбор);
ПараметрыФормы.Вставить(«СформироватьПриОткрытии», Истина);
ОткрытьФорму(«Отчет.ОстаткиНоменклатуры.Форма», ПараметрыФормы);
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура
|ИЗ
| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка»;
Передадим полученный список в структуру «ПараметрыФормы». И если мы обратимся к синтакс-помощнику (расширение отчета), то увидим Параметр Формы «Отбор» фразу внизу: «..Если значение является массивом или списком значений с не одним элементом, то отбор будет применяться с видом сравнения ВСписке».
В итоге мы немного поработали с параметром формы отчета «Отбор». Увидели несколько приемов по его использованию. На самом деле аналогичные отборы можно накладывать не только на форму отчета и пользователь не будет видеть данную настройку отбора, иногда это является плюсом.