Диалог выбора ТИПА
Здравствуйте! Платформа 8.3.4
Подскажите, можно ли программно открыть форму выбора ТИПА данных? Есть реквизит составного типа, при нажатии на кнопку выбора необходимо получить тип этого элемента и открыть форму выбора типа. Стандартная обработка отключена, рассматривается условие, когда ей воспользоваться не представляется возможным ввиду сложностей с окружающим кодом и отказом от модальности.
Насколько понимаю, интерфейс управляемый.
Штатными средствами никак.
Если попытаться выполнить метод
для реквизита составного типа, то возникнет ошибка «Отсутствует способ ввести значение требуемого типа»
Если, например, попытаться сделать нечто вроде
Судя по-всему, для управляемого интерфейса это сделать нелегко, поскольку нельзя для произвольного элемента получить тип значения, можно только ограничить его:
ПолеФормы (FormField)
ОграничениеТипа (TypeRestriction)
Использование:
Чтение и запись.
Описание:
Тип: ОписаниеТипов.
Ограничивает состав типов вводимых значений. Может использоваться, когда данные, с которыми связан элемент управления, имеют более широкий состав типов, чем необходимо предоставить пользователю для ввода в конкретной ситуации.
Расширение поля формы для поля ввода (Form field extension for a text box)
ДоступныеТипы (AvailableTypes)
Использование:
Чтение и запись.
Описание:
Тип: ОписаниеТипов.
Позволяет задать набор типов, доступных для выбора. Так же задается ограничение для квалификаторов примитивных типов Число, Строка, Дата.
Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
То есть только программно задавать перечень типов и писать какую-то отдельную форму
[Шпаргалка] Предустановка типа для составного реквизита
Добрый день, Коллеги!
Задача
Смоделируем задачу: необходимо ограничить список выбора типов поля формы до необходимого количества и определить тип по умолчанию.
Пример
Есть реквизит «Водитель», составной тип: СправочникСсылка.Пользователи, СправочникСсылка.ФизическиеЛица, СправочникСсылка.Сотрудники и Строка. Необходимо реализовать диалог выбора из списка типов с ограничением до двух: СправочникСсылка.Сотрудники и Строка.
Тестовый стенд
Конфигурация 1C:ERP 2.4.6.230
Конфигурация 1C:ERP 2.4.11.56
Решение
Реквизит формы «ВыборТипа» (тип: Булево) – хранит состояние вызова диалога выбора типа.
Реквизит формы «Водитель» содержит составной типа, описанный в примере, для его элемента формы «Водитель» необходимо установить свойство «КнопкаОчистки» в состояние «Истина» и определим события: НачалоВыбора и Очистка.
Результат
Резюме
Использовать данный вариант диалога выбора типов можно не только при ограничении списка, но также при задании своего порядка. Пример:
Специальные предложения
Но даже такую примитивную задачу автор решил кривовато. Можно было проще и изящнее.
(2) Одна тыща рублей и оно ваше)
Хотя если чисто теоретически. Во-первых, не забывайте в явном виде делать Поле=ОписТипа.ПривестиЗначение(), потому что Элементы.Поле.ОграничениеТипа это далеко не всё, у вас там может быть нетипизированная или неверно типизированная пустота, или мусор от предыдущего типа, и в работе формы выйдет лажа. Во-вторых, в значения списка выбора проще сразу пихать сами типы, а не числовые коды.
Могу ещё накидать замечаний, но недосуг.
Обновление 30.09.21 03:37
См. также
Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо
В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.
12.12.2020 4314 Eugen-S 23
Полезные примеры СКД, ч.2
Еще несколько примеров решения задач в СКД.
06.04.2021 10477 Neti 8
Обзор полезных методов БСП 3.1.4
25.03.2021 39406 rayastar 51
Звуковое управление в 1С 8.3
В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.
16.03.2021 7083 velemir 33
Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)
27.01.2016 85513 Serginio 115
Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions
28.12.2020 8786 comol 31
Форма выбора (подбор) в управляемых формах
Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.
08.05.2020 76280 user5300 19
Программная работа с настройками СКД
Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.
27.01.2020 64715 ids79 26
Использование программных перечислений, ч.1: строковые константы Промо
Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?
10.12.2016 41046 unichkin 74
[СКД] Программное создание схемы компоновки данных
Сделаем отчет на СКД полностью программно, без использования макета «схема компоновки данных».
15.01.2020 43199 John_d 22
Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения
Собрал информацию о событиях/подписках/расширениях в одном месте.
30.12.2019 34881 kuzyara 38
Полезные процедуры и функции для программиста
Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.
07.10.2019 39477 HostHost 41
Вспомогательные инструкции в коде 1С Промо
Помогаем редактору кода 1С помогать нам писать и анализировать код.
15.10.2018 36033 tormozit 106
Таблица значений. Нюансы
Обзор некоторых аспектов использования общеизвестного инструмента 1С.
01.10.2019 52574 Yashazz 56
[Шпаргалка] Программное создание элементов формы
Программное создание практически всех популярных элементов формы.
06.09.2019 100776 rpgshnik 75
Агрегатные функции СКД, о которых мало кто знает
Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.
05.09.2019 76945 ids79 56
Оформление и рефакторинг сложных логических выражений Промо
В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.
20.09.2012 82767 tormozit 131
Регистры бухгалтерии. Общая информация
Общая информация о внутреннем устройстве регистров бухгалтерии.
05.09.2019 46172 YPermitin 25
Три костыля. Сказ про фокусы в коде
Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.
03.09.2019 30122 YPermitin 81
Отслеживание выполнения фонового задания
Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.
17.08.2019 44940 ids79 22
Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо
Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.
11.07.2007 54287 tormozit 51
Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.
08.08.2019 150258 ids79 75
Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.
02.08.2019 60115 avalakh 26
Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.
26.07.2019 104503 ids79 17
Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо
Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки
10.09.2017 51071 tormozit 74
Обработчики событий при записи объектов. Зачем и что за чем?
Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.
25.07.2019 110392 AlbinaAAA 48
Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «<…>», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.
Форма выбора для реквизита с составным типом данных
У документа есть реквизит ДокументОснование, который имеет составной тип данных. Этот реквизит заполняется автоматически при вводе на основании и вручную. Все было хорошо, пока данный реквизит отображался на форме в виде поля ввода, однако, начальство поставило задачу: должна быть галка рядом, а реквизит должен быть в виде надписи-гиперссылки (ну, как в документе реализации в УТ 11.4, см. скриншот).
В итоге хочется получить следующее: если пользователь ставит галочку, то открывается окно выбора типа данных, затем в зависимости от того, какой тип документа был выбран, открывается форма выбора соответствующего документа.
Естественно, рисовать форму выбора самостоятельно очень не хотелось, да и погуглив, сразу получить ответа на данный вопрос не вышло. Вот и пришлось придумывать собственное решение.
Для наглядности, создал внешнюю обработку, добавил ей форму. Добавил реквизиты ВводНаОсновании с типом Булево и ДокументОснование с составным типом данных: ДокументСсылка.РеализацияТоваровУслуг, ДокументСсылка.ЗаказКлиента. Драг-дроп их на форму. ДокументОснование должен быть надписью-гиперссылкой, соответственно, внеся корректировки, получилось следующее:
Добавляем обработчик события ПриИзменении для нашей галочки:
Как можно заметить, используется метод ПоказатьВыборЭлемента (доступен с версии платформы 8.3.3). Данный метод необходимо использовать вместо метода ВыбратьЭлемент, если РежимИспользованияМодальности для конфигурации установлен в НеИспользуется. Добавляем обработчик (обязательно должен быть экспортный):
Я использовал обработчик оповещения о закрытии окна, а не о выборе, т.к. мне нужно не только знать, что выбрал пользователь, но и знать, выбрал ли он вообще что-то или просто закрыл окно. В случае, если пользователь просто закрыл форму выбора, необходимо галочку снять. Добавляем обработчик (обязательно должен быть экспортный):
В итоге получилось следующее:
Выбор типа документа
Выбор самого документа с типовой формой выбора:
Ни на что не претендую, т.к. делюсь лишь тем, как решил такую задачу сам, не найдя помощи у гугла. Надеюсь, статья поможет ещё кому-нибудь, да и мне пригодится в качестве шпаргалки на будущее.
Своя форма выбора типа, метаданных (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 38088 124 194
Чтение метаданных 1С в SQL Server
Описание файла DBNames таблицы Params и файлов объектов метаданных таблицы Config.
16.02.2021 3971 zhichkin 63
Метаданные и их идентификаторы
Идентификаторы (GUID’ы) метаданных конфигурации. Немного о том, как их получить.
05.12.2020 12170 YPermitin 27
Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия
Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов. При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.
24.05.2020 11308 DataReducer 22
Управляемая консоль запросов, отчетов 3.8.9 (расширение, внешняя обработка) Промо
Работа с запросом и СКД, Полная поддержка пакетных запросов, временных таблиц, Сравнение результатов, текстов, Разбор структуры запроса в виде дерева, Анализ плана запроса, Групповая обработка
14.08.2018 123908 2982 Evg-Lylyk 747
Об общих реквизитах
Общие реквизиты. Что за ними скрывается?
28.10.2019 18724 YPermitin 31
Редактор объектов информационной базы 8.3
Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.57 от 09.10.2021
23.01.2019 42668 475 ROL32 50
Консоль запросов для управляемых форм 8.3
Универсальная внешняя обработка для создания, редактирования и отладки запросов, с возможностью обработки таблицы результатов произвольными алгоритмами на языке 1С. Выгрузка результатов запроса в таблицу или дерево значений, включая временные таблицы и запросы пакета. Формирование запроса для консоли в отладчике, включая временные таблицы и параметры. Версия 1.1.0.73 от 09.10.2021
08.11.2018 34199 439 ROL32 35
Подсистема «Инструменты разработчика» v6.14.2 Промо
23.09.2007 612944 36272 tormozit 2805
Диалоговое окно ввода описания типов
В «Предприятии» 8.3 диалоговое окно выбора значений для описания типов выглядит бедненько и скудненько. Многих типов, в т.ч. существующих на клиенте, нет. Предлагаю свой, более управляемый, аналог.
31.08.2015 14846 7 Yashazz 3
Форма выбора типа данных (альтернатива)
Замена формы выбора типа данных от 1С
28.05.2009 24814 233 Evg-Lylyk 15
Программное приведение типа значения поля ввода и колонки табличного поля формы 1С8
При создании формы возникает вопрос настройки типа значения поля ввода. Не всегда заранее точно известен используемый тип, поскольку это может зависеть от метаданных конфигурации и условий использования.
Если, как минимум, известно, что в поле потребуется вводить и использовать элемент Справочника или Документ, то можно настроить тип на общий вид значения, например СправочникСсылка или ДокументСсылка. Далее решить вопрос программно при открытии формы, для уточнения используемого типа.
Если требуется использовать элемент справочника Номенклатура, но в разных конфигурациях этот объект метаданных может называться по-разному, например Товары или же Номенклатура, то программное определение наименования типа при открытии формы упростит жизнь пользователю.
Следовательно, настроим автоматический выбор и первичное преобразование полей на форме к типу значения Справочник.Номенклатура, если такой есть в метаданных конфигурации. В противном случае, выбираем в качестве начального значения первый в списке имён справочников.
Для примера разработана управляемая форма и форма в обычном режиме (см. скриншоты публикации).
Обычный режим
Ниже приведен алгоритм на языке 1С8 для формы в обычном режиме. На форме есть поле список ВыбранныйТип, для которого настроено событие ПриИзменении. В поле ВыбранныйТип пользователь выбирает тип, который желает использовать для преобразования полей. При открытии формы считываем список справочников из метаданных конфигурации. Ищем справочник Номенклатура в списке, далее инициализируем на форме поле ВыбранныйТип полученным списком имён и найденным значением. Запускаем событие ВыбранныйТипПриИзменении, для преобразования типа полей ввода. В переменную модуля формы СтрокаТипЗнч сохраним полное имя выбранного типа для использования в других процедурах.
Далее необходимо выполнить преобразование типа значения колонки табличного поля. Для этого воспользуемся событием НачалоВыбора.
Код преобразования приведен ниже. В нём используется ранее инициализированная переменная СтрокаТипЗнч для получения имени выбранного типа. Алгоритм можно найти в справке по ключевому слову ПривестиЗначение.
Новый тип назначается полям динамически после каждого выбора значения в списке ВыбранныйТип.
Управляемые формы
Для управляемых форм алгоритм изменяется незначительно. Для преобразования используется свойство ОграничениеТипа. Работа с метаданными только на сервере. Для быстрого доступа к колонке табличного поля при срабатывании события НачалоВыбора сохраним в переменной на клиенте СсылкаЭлементКолонкаТП ссылку с адресом элемента.
Рассмотренный пример алгоритма можно протестировать, скачав обработку по ссылке из публикации. Работа выполнялась на 1С:Предприятие 8.3 (8.3.15.1747), с использованием конфигураций «Управление торговлей», редакция 10.3 (10.3.46.3), Управление торговлей, редакция 11 (11.4.7.150). В составе обработки одновременно присутствует управляемая форма и форма обычного режима.
Спасибо за внимание! Критика приветствуется.