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

11.03.20

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Результат:

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

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

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

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

6000 руб.

16.01.2015    61698    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

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

5000 руб.

14.01.2016    54313    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    16623    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10563    745    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    9484    150    acces969    31    

115

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3577    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12010    1    5    

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

В моей задаче было не поле ввода, а поле надписи, и заполняется оно при изменении другого реквизита формы, что в корне меняет дело.
Swamt; Патриот; +2 Ответить
7. Swamt 34 06.07.23 13:14 Сейчас в теме
Спасибо за решение! Очень вовремя и помогло!
8. 1Cynep4eJIoBek 18.10.23 17:48 Сейчас в теме
про Модифицированность не забудьте
9. AndreyCh75 20.02.24 09:22 Сейчас в теме
Спасибо, решал аналогичную задачу, только форма выбора еще и с отбором. Жаль, увидел поздно, т.к. тоже сделал сам, без гугла, но немного не так)
Оставьте свое сообщение