Конфигурирование платформы 1С:Предприятие 8 » Конструкторы в 1С:Предприятие 8 » 
0

Конструктор ввода на основании

Конструктор ввода на основании предназначен для визуальной настройки правил заполнения реквизитов одного объекта на основе данных других объектов (возможно, даже другого типа). Результатом работы конструктора является создание предопределенной процедуры ОбработкаЗаполнения() в модуле заполняемого объекта. Конструктор ввода на основании работает только для объектов метаданных ссылочного типа (т.е. тех, что генерируют ссылки: справочники, документы, планы видов характеристик и т.п.).

Конструктор можно вызвать двумя способами:

  1. Из контекстного меню дерева метаданных для объекта метаданных: Конструктор ввода на основании
  2. Из окна объекта метаданных на закладке «Ввод на основании»:Конструктор ввода на основании
Внимание! Конструктор доступен только для тех объектов метаданных, для которых указаны объекты-основания

Описание конструктора

Сам конструктор состоит из одной единственной формы с тремя табличными полями и набором кнопок:Конструктор ввода на основании

Поле А — список объектов, которые являются основаниями для текущего объекта;
Поле Б — список реквизитов выделенного объекта основания, доступных для выбора;
Поле В — список реквизитов шапки и табличных частей текущего объекта, доступных для заполнения;

Кнопки «Назад» и «Далее» руководят переходом по реквизитам текущего объекта (поле В).

При выделении объекта-основания в поле А происходит изменение списка реквизитов в поле Б. Поля Б и В также взаимосвязаны: в списке реквизитов (поле Б) отображаются только те реквизиты, которые подходят для выбора в качестве заполнителя для выделенного реквизита в поле В (по имени, типу или являются ссылкой). Галочкой в поле Б помечаются те реквизиты объекта-основания, которые имеют тот же тип, что и реквизит, выделенный в поле В.

Кнопка «Заполнить выражения» производит автоматическое заполнение реквизитов текущего объекта по совпадению типа. Для тех реквизитов в поле В, где конструктор не увидел совпадений, поля останутся пустыми.

Кнопка «Очистить выражения» — очищает любые изменения.

Кнопка «ОК» завершает работу конструктора с сохранением изменений.

Кнопка «Отмена» завершает работу конструктора без сохранения изменений.

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

Внимание! Проверяйте соответствие реквизитов не только по типу, но и по имени. Может получиться так, что конструктор для поля Сумма укажет Количество и наоборот.

Результатом работы конструктора будет процедура ОбработкаЗаполнения() в модуле текущего объекта. Обратите внимание, что в процедуре присутствуют служебные комментарии конструктора. Таким образом конструктор отделяет свои изменения от кода, введенного вручную:

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

Смотреть на Youtube

Добавить комментарий

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