Как открыть форму списка с некоторым отбором?
Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:
ЗначениеОтбора = Новый Структура(«Номер», «333»);
ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);
2. Можно открыть форму списка без параметров:
И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Номер»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = «000000001»;
3. И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка. Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.
Обработчик выполнения этой команды заполним следующим образом:
ФормаСписка = ПолучитьФорму(«Документ.ПриходнаяНакладная.ФормаСписка»);
ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;
ФормаСписка.Открыть();
В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.
В поле Запрос введем следующий текст запроса:
В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.
Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.
Форма выбора для реквизита с составным типом данных
У документа есть реквизит ДокументОснование, который имеет составной тип данных. Этот реквизит заполняется автоматически при вводе на основании и вручную. Все было хорошо, пока данный реквизит отображался на форме в виде поля ввода, однако, начальство поставило задачу: должна быть галка рядом, а реквизит должен быть в виде надписи-гиперссылки (ну, как в документе реализации в УТ 11.4, см. скриншот).
В итоге хочется получить следующее: если пользователь ставит галочку, то открывается окно выбора типа данных, затем в зависимости от того, какой тип документа был выбран, открывается форма выбора соответствующего документа.
Естественно, рисовать форму выбора самостоятельно очень не хотелось, да и погуглив, сразу получить ответа на данный вопрос не вышло. Вот и пришлось придумывать собственное решение.
Для наглядности, создал внешнюю обработку, добавил ей форму. Добавил реквизиты ВводНаОсновании с типом Булево и ДокументОснование с составным типом данных: ДокументСсылка.РеализацияТоваровУслуг, ДокументСсылка.ЗаказКлиента. Драг-дроп их на форму. ДокументОснование должен быть надписью-гиперссылкой, соответственно, внеся корректировки, получилось следующее:
Добавляем обработчик события ПриИзменении для нашей галочки:
Как можно заметить, используется метод ПоказатьВыборЭлемента (доступен с версии платформы 8.3.3). Данный метод необходимо использовать вместо метода ВыбратьЭлемент, если РежимИспользованияМодальности для конфигурации установлен в НеИспользуется. Добавляем обработчик (обязательно должен быть экспортный):
Я использовал обработчик оповещения о закрытии окна, а не о выборе, т.к. мне нужно не только знать, что выбрал пользователь, но и знать, выбрал ли он вообще что-то или просто закрыл окно. В случае, если пользователь просто закрыл форму выбора, необходимо галочку снять. Добавляем обработчик (обязательно должен быть экспортный):
В итоге получилось следующее:
Выбор типа документа
Выбор самого документа с типовой формой выбора:
Ни на что не претендую, т.к. делюсь лишь тем, как решил такую задачу сам, не найдя помощи у гугла. Надеюсь, статья поможет ещё кому-нибудь, да и мне пригодится в качестве шпаргалки на будущее.
Форма выбора (подбор) в управляемых формах
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 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), Спасибо за внимание, возможно, кому-то поможет)
Как программно открыть форму выбора с отбором?
Для открытия формы выбора (справочника, документа и т.п.) необходимо воспользоваться параметрами открываемой формы.
Обязательным условием является наличие в открываемой форме динамического списка, который назначен основным реквизитом формы. В качестве полей отбора можно воспользоваться любым полем, настроенным в динамическом списке.
Давайте рассмотрим работу механизма на примере: в документе «Поступление товаров» при выборе контрагента необходимо выбирать только поставщиков (отбор будем производить по реквизиту Поставщик типа Булево справочника «Контрагенты»).
Для начала, проверим наличие поля отбора «Поставщик» в настройках отбора динамического списка. Для этого откроем форму выбора справочника «Контрагенты» и перейдем к настройкам динамического списка:
Мы видим, что поле Поставщик есть среди полей отбора. Значит, наш отбор работать будет (на самом деле, мы можем добавить дополнительные поля в динамический список и использовать их для отбора):
Теперь нам осталось написать только код процедуры, который будет вызывать форму выбора:
Как видите, ничего сложного нет: мы создаем структуру, имитирующую отбор (ключ структуры — имя поля отбора, а значение — значение отбора), и включаем его в параметры открываемой формы.
Своя форма выбора типа, метаданных (Infostart Toolkit)
Зачем?
В конфигураторе форма выбора типа удобная с поиском, вопросов к ней нет. В режиме
1С:Предприятие с самой первой версии 8.0 и до сих пор это просто список с которым удобно работать только когда элементов мало. Пользователь с этой проблемой сталкивается очень редко, а вот разработчик намного чаще в разных инструментах. Например «Поиск ссылок на объект» нужно выбрать тип искомой ссылки из всех доступных вариантов, современные конфигурации большие в них много объектов и бывает достаточно затруднительно найти нужный.
Проблема уже достаточно старая и имеет множество решений в различных консолях и инструментах:
Стандартная форма. Нам такого родео не нужно!
Своя форма. Возможности
В Infostart Toolkit используется своя более удобная форма. Одна форма используется при выборе типа, при редактировании описания типов и отметке объектов метаданных. Форма практически повторяет форму из конфигуратора не нужно привыкать к новому
Возможности:
Где используется в наборе инструментов?
Форма в наборе инструментов используется повсеместно. Приведу еще несколько примеров:
Отбор метаданных в инструменте «Подписки на события»
Работа формы «вживую» (ERP Управление предприятием 2.5.6.124)
См. также (другие статьи по Toolkit):
Специальные предложения
Хотелось бы иметь следующую функциональность.
* При двойном клике ЛКМ на строке дерева метаданных завершать выбор типа и закрывать диалог, считая результатом выбора несоставной тип.
* При установке очередного (не первого) флажка в дереве метаданных автоматически устанавливать флаг «Составной» в шапке диалог. Соответственно сбрасывать его при снятии флажков в дереве метаданных.
* Иметь возможность фильтровать дерево метаданных, оставляя только те объекты, что отмечены флажком.
Кажется, это бы добавило удобства.
Писал в начале что проблема уже решалась. Добавлю вашу в список
7000 если считывать сразу при открытии это создание 7000 строк в дереве если постепенно
30. Посмотри сколько займет запуск? У меня 0.2сек
В конфигураторе форма выбора типа удобная с поиском, вопросов к ней нет. В режиме
1С:Предприятие с самой первой версии 8.0 и до сих пор это просто список с которым удобно работать только когда элементов мало.
Обновление 26.07.21 11:00
См. также
Infostart Toolkit Промо
Простые и удобные инструменты: Консоль запросов, СКД, Редактор объекта, Поиск ссылок и другие. Редактор запросов и кода с раскраской и контекстной подсказкой. Улучшенный конструктор тонкого клиента и др.
02.09.2020 38098 124 194
Чтение метаданных 1С в SQL Server
Описание файла DBNames таблицы Params и файлов объектов метаданных таблицы Config.
16.02.2021 3972 zhichkin 63
Метаданные и их идентификаторы
Идентификаторы (GUID’ы) метаданных конфигурации. Немного о том, как их получить.
05.12.2020 12171 YPermitin 27
Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия
Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов. При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.
24.05.2020 11309 DataReducer 22
Управляемая консоль запросов, отчетов 3.8.9 (расширение, внешняя обработка) Промо
Работа с запросом и СКД, Полная поддержка пакетных запросов, временных таблиц, Сравнение результатов, текстов, Разбор структуры запроса в виде дерева, Анализ плана запроса, Групповая обработка
14.08.2018 123919 2982 Evg-Lylyk 747
Об общих реквизитах
Общие реквизиты. Что за ними скрывается?
28.10.2019 18725 YPermitin 31
Редактор объектов информационной базы 8.3
Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.57 от 09.10.2021
23.01.2019 42669 475 ROL32 50
Консоль запросов для управляемых форм 8.3
Универсальная внешняя обработка для создания, редактирования и отладки запросов, с возможностью обработки таблицы результатов произвольными алгоритмами на языке 1С. Выгрузка результатов запроса в таблицу или дерево значений, включая временные таблицы и запросы пакета. Формирование запроса для консоли в отладчике, включая временные таблицы и параметры. Версия 1.1.0.73 от 09.10.2021
08.11.2018 34202 439 ROL32 35
Подсистема «Инструменты разработчика» v6.14.2 Промо
23.09.2007 612954 36272 tormozit 2805
Диалоговое окно ввода описания типов
В «Предприятии» 8.3 диалоговое окно выбора значений для описания типов выглядит бедненько и скудненько. Многих типов, в т.ч. существующих на клиенте, нет. Предлагаю свой, более управляемый, аналог.
31.08.2015 14847 7 Yashazz 3
Форма выбора типа данных (альтернатива)
Замена формы выбора типа данных от 1С
28.05.2009 24820 233 Evg-Lylyk 15