1С:Предприятие 8 поддерживает готовую функциональность для организации выбора из форм списков объектных данных (справочников, документов и т.д.). В большинстве случаев выбираются именно такие значения. Однако, в некоторых случаях, необходимо организовать выбор и других значений. Механизм форм 1С:Предприятия 8 включает универсальный механизм выбора, позволяющий организовать выбор практически любых значений.
Для этого используется возможность открытия формы в режиме выбора и возможность обработки события выбора.
В качестве примера приведем реализацию выбора записи регистра сведений. Стандартные расширения форм не поддерживают механику выбора, однако ее несложно реализовать.
Вначале создадим новую форму списка регистра сведений и назовем ее "ФормаВыбора". В форме реализуем событие Выбор табличного поля отображающего список.
В этом событии мы отменяем стандартное действие, предусмотренное расширением табличного поля, и вместо него вызываем метод ОповеститьОВыборе() , передавая ему в качестве параметра текущую строку. Значением текущей строки будет являться значение типа РегистрСведенийКлючЗаписи. .
Теперь реализуем функциональность выбора в той форме, в которой это требуется. Например, в форме обработки, имеющей поля ввода "Валюта" и "Период".
Вначале мы сформируем ключ записи регистра сведений, который будет использоваться для установки в списке текущей строки в соответствии с текущими значениями полей ввода. Сама установка будет выполняться через стандартный параметр формы ПараметрТекущаяСтрока .
Заметим, что если для установки текущей строки расширение формы не предоставляет стандартного параметра, то можно создать свой реквизит у формы выбора, заполнить его аналогично заполнению стандартного параметра в этом примере, и при открытии формы обеспечить позиционирование в списке в соответствии со значением данного реквизита.
Далее мы создаем форму, устанавливаем ей режим выбора, владельца формы, и выполняем открытие формы.
Теперь нам нужно только реализовать обработчик выбора в форме и выполнить в нем необходимее действия с выбранным значением.
Заметим, что в качестве владельца формы может устанавливаться не только сама форма, в которой осуществляется выбор, но и ТабличноеПоле , ПолеВвода и ПолеВыбора . Соответственно и обработчик выбора нужно будет реализовывать у этих элементов управления.
Заметки по разработке и администрированию 1С.
10.11.2016
1с Отбор по периоду в списке управляемых форм
лНовыйПериод = Новый СтандартныйПериод ( НачалоДня ( ТекущаяДата ()), КонецДня ( ТекущаяДата ()+ 24 * 60 * 60 ));
ЗаполнитьЗначенияСвойств ( Элементы . Список . Период , лНовыйПериод );
Здесь мы через элементы формы обращаемся к установке периода, для примера период ставится текущая и завтрашняя даты. И все. Выбранный период будет виден через кнопку "Установить период".
рубрики: Фишки | Дата: 30 июля, 2017
Скачать обработку с примерами из статьи: professia1c_TableValueFilter.epf
Платформа: 8.3; Тип формы: управляемая.
Достаточно часто при работе с таблицами значений требуется выбрать строки по какому-либо условию. Когда условием отбора является равенство — тут нет никакой проблемы — достаточно воспользоваться методом НайтиСтроки() как это описано в статье про основные приемы работы с таблицами значений. Но когда нам нужно использовать более сложные условия отбора (В, В ИЕРАРХИИ и т.д.), то приходится прибегать к нестандартным способам. В этой статье рассмотрим два таких способа.
Для демонстрации создадим обработку с двумя таблицами значений: ИсходнаяТаблица и Результат.
И заполним исходную таблицу следующим образом:
Наименование | Количество |
---|---|
Ручка | 15 |
Лампа | 2 |
Карандаш | 10 |
Дырокол | 5 |
Допустим мы хотим оставить только строки с наименованиями «Ручка» и «Карандаш»
Отбор с использованием запроса
Идея заключается в следующем — загружаем таблицу значений во временную таблицу запроса. И теперь мы можем установить любой отбор, доступный в языке запросов 1С. Выполняем запрос, и при помощи метода Выгрузить() получаем результирующую таблицу:
Отбор с использованием построителя отчетов
Такого же результата можно достичь и с использованием построителя запросов. В этом случае создаем объект ПостроительЗапроса, указываем в качестве источника данных нашу таблицу значений, устанавливаем отбор для построителя, и выгружаем результат выполнения в новую таблицу значений:
Конечно в реальной ситуации список для отбора будет формироваться немного иначе. Никто не станет в коде прописывать конкретные наименования. Но так как целью было показать сам принцип установки отборов для таблицы значений, и чтобы не привязывать демонстрационную обработку (ссылка на нее в шапке статьи) к конкретной конфигурации — было сделано такое упрощение. Стоит также заметить, что данные методы могут применяться не только для таблиц значений. В частности и для табличных частей в толстом клиенте.