Форма выбора для реквизита с составным типом данных

11.03.20

Разработка - Работа с интерфейсом

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

У документа есть реквизит ДокументОснование, который имеет составной тип данных. Этот реквизит заполняется автоматически при вводе на основании и вручную. Все было хорошо, пока данный реквизит отображался на форме в виде поля ввода, однако, начальство поставило задачу: должна быть галка рядом, а реквизит должен быть в виде надписи-гиперссылки (ну, как в документе реализации в УТ 11.4, см. скриншот).

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

Естественно, рисовать форму выбора самостоятельно очень не хотелось, да и погуглив, сразу получить ответа на данный вопрос не вышло. Вот и пришлось придумывать собственное решение.

Для наглядности, создал внешнюю обработку, добавил ей форму. Добавил реквизиты ВводНаОсновании с типом Булево и ДокументОснование с составным типом данных: ДокументСсылка.РеализацияТоваровУслуг, ДокументСсылка.ЗаказКлиента. Драг-дроп их на форму. ДокументОснование должен быть надписью-гиперссылкой, соответственно, внеся корректировки, получилось следующее:

Добавляем обработчик события ПриИзменении для нашей галочки:

&НаКлиенте
Процедура ВводНаОснованииПриИзменении(Элемент)
	
	Если ВводНаОсновании Тогда
		
		// собственно, выбор типа данных будет осуществляться с помощью метода списка значений
		СписокТипов = Новый СписокЗначений;
		
		// данный список можно менять. Он должен совпадать со списком типов реквизита
		СписокТипов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
		СписокТипов.Добавить(Тип("ДокументСсылка.ЗаказКлиента"));
		
		// для обработки выбора типа используется описание оповещения
		Оповещение = Новый ОписаниеОповещения("ОбработкаВыбораТипаДанных", ЭтотОбъект);
		
		
		СписокТипов.ПоказатьВыборЭлемента(Оповещение, "Выбор типа данных");

	// если пользователь снимает галочку, то очищаем поле	
	Иначе
		ДокументОснование = Неопределено;
	КонецЕсли;
КонецПроцедуры

Как можно заметить, используется метод ПоказатьВыборЭлемента (доступен с версии платформы 8.3.3). Данный метод необходимо использовать вместо метода ВыбратьЭлемент, если РежимИспользованияМодальности для конфигурации установлен в НеИспользуется. Добавляем обработчик (обязательно должен быть экспортный):

&НаКлиенте
Процедура ОбработкаВыбораТипаДанных(ВыбранныйЭлемент, СписокПараметров) Экспорт
	
	Если ВыбранныйЭлемент <> Неопределено Тогда
		
		ИмяОткрываемойФормы = "";
		
		Если ВыбранныйЭлемент.Значение = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
			ИмяОткрываемойФормы = "Документ.РеализацияТоваровУслуг.ФормаВыбора";
		ИначеЕсли ВыбранныйЭлемент.Значение = Тип("ДокументСсылка.ЗаказКлиента") Тогда
			ИмяОткрываемойФормы = "Документ.ЗаказКлиента.ФормаВыбора";
		КонецЕсли;
		
		// тут можно установить различные отборы и открывать форму с отбором
		
		// опять-таки оповещение, однако, используется оповещение о закрытии, а не выборе, окна
		Оповещение = Новый ОписаниеОповещения("ОписаниеЗакрытияФормыВыбора", ЭтотОбъект);
		
		ОткрытьФорму(ИмяОткрываемойФормы, , ЭтаФорма, , , , Оповещение);
		
	// если пользователь просто закрыл форму, не выбрав тип
	Иначе
		
		ВводНаОсновании = Ложь;
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОписаниеЗакрытияФормыВыбора(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
	
	// если пользователь просто закрыл форму, ничего не выбрав
	Если РезультатЗакрытия = Неопределено Тогда
		ВводНаОсновании = Ложь;
	КонецЕсли;	
	
	ДокументОснование = РезультатЗакрытия;
	
	// а тут может начаться алгоритм заполнения документа на основании
КонецПроцедуры

В итоге получилось следующее:

Выбор типа документа

Выбор самого документа с типовой формой выбора:

Результат:

Ни на что не претендую, т.к. делюсь лишь тем, как решил такую задачу сам, не найдя помощи у гугла. Надеюсь, статья поможет ещё кому-нибудь, да и мне пригодится в качестве шпаргалки на будущее.

форма выбора составной тип данных программирование шпаргалка

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55436    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63824    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    19716    28    6    

44

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    21821    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    10932    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17954    1225    elcoan    53    

125

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    12654    167    acces969    31    

126
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user623969_dusa 11.03.20 13:23 Сейчас в теме
по стандартам надо отделять символы // и текст пробелом
2. rule_2 51 12.03.20 04:53 Сейчас в теме
(1) внес изменения, спасибо.
3. improg 715 09.04.21 15:25 Сейчас в теме
(0) спасибо за выбор типов, помогло.
4. Matveev_VS 166 25.11.21 14:33 Сейчас в теме
5. Патриот 458 10.08.22 20:08 Сейчас в теме
Спасибо, интресно, но нашёл в инете решение, позволяющее не открывать свой список выбора типов, что требует меньших доработок и более универсально при возможном изменении списка типов http://forum.infostart.ru/forum9/topic195060/message2005835/#message2005835
6. rule_2 51 13.09.22 11:19 Сейчас в теме
(5) В той ветке расписано про таблицу на форме, у которой заполняется поле ввода. В таком случае, естественно, нет необходимости в программном перечислении списка типов, он генерируется платформой самостоятельно.

В моей задаче было не поле ввода, а поле надписи, и заполняется оно при изменении другого реквизита формы, что в корне меняет дело.
Swamt; Патриот; +2 Ответить
7. Swamt 39 06.07.23 13:14 Сейчас в теме
Спасибо за решение! Очень вовремя и помогло!
8. 1Cynep4eJIoBek 18.10.23 17:48 Сейчас в теме
про Модифицированность не забудьте
9. AndreyCh75 20.02.24 09:22 Сейчас в теме
Спасибо, решал аналогичную задачу, только форма выбора еще и с отбором. Жаль, увидел поздно, т.к. тоже сделал сам, без гугла, но немного не так)
10. rwf96 27.03.24 08:40 Сейчас в теме
Спасибо! Хороша статья. А можно ли сделать, чтобы не окно Выбора типа данных появлялось, а выпадающий список из двух пунктов - Реализация товаров и услуг и Заказ клиента?
11. rule_2 51 15.04.24 12:14 Сейчас в теме
(10)
Спасибо! Хороша статья. А можно ли сделать, чтобы не окно Выбора типа данных появлялось, а выпадающий список из двух пунктов - Реализация товаров и услуг и Заказ клиента?


Можно, только не в рамках моей задачи, т.к. если нужен выпадающий список, то это уже поле ввода. А если это поле ввода - то там вообще ничего делать не нужно. Там появится кнопка выбора, после нее платформа сама сгенерирует список выбора типа, а потом сама откроет нужную форму выбора документа.

Другими словами, в вашем случае это будет лишь усложнение уже готового платформенного решения.
Оставьте свое сообщение