УНФ. Как быстро создать процедуру обработки проведения

Материал из largespace
Перейти к навигации Перейти к поиску

Вопрос:

Как быстро создать в УНФ процедуру обработки проведения документа и обработку удаления проведения при отмене?

Ответ:

Для быстрого создания процедуры проведения и отмены проведения в модуле объекта нужно вставить следующий шаблонный код:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

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

КонецПроцедуры

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

#КонецОбласти


#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

Заменить "МойДокумент" и "МояТаблицаДляДвижений" на собственные названия документов и регистров.

В модуле менеджера добавить следующий шаблон:

#Область ИнициализацияДанных

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

Функция ТекстЗапросаИнициализироватьДанныеДокумента()
	
	Возврат
	"ВЫБРАТЬ
	|	МойДокумент.Ссылка КАК Регистратор,
     .... // список полей для формирования таблицы с последующим заполнением в регистр
    |   МойДокумент.Дата КАК Период
	|ИЗ
	|	Документ.МойДокумент КАК МойДокумент
	|ГДЕ
	|	МойДокумент.Ссылка = &Ссылка";
	
КонецФункции

#КонецОбласти