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

Материал из largespace
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
 
Строка 5: Строка 5:
'''Ответ''':
'''Ответ''':


<nowiki><code>Исходный код</code></nowiki>
Для быстрого создания процедуры проведения и отмены проведения в модуле объекта нужно вставить следующий шаблонный код:
<pre>
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
 
#Область ОбработчикиСобытий
 
Процедура ОбработкаПроведения(Отказ, Режим)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Инициализация дополнительных свойств для проведения документа.
ПроведениеДокументовУНФ.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
ДополнительныеСвойства.Вставить("Отказ", Ложь);
// Инициализация данных документа.
Документы.МойДокумент.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
Если ДополнительныеСвойства.Отказ = Истина Тогда
Отказ = Истина;
КонецЕсли;
Если Отказ Тогда
Возврат;
КонецЕсли;
// Подготовка наборов записей.
ПроведениеДокументовУНФ.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
// Отражение в разделах учета.
ТаблицыДляДвижений = ДополнительныеСвойства.ТаблицыДляДвижений;
ПроведениеДокументовУНФ.ОтразитьДвижения("МояТаблицаДляДвижений", ТаблицыДляДвижений, Движения, Отказ);
// Запись наборов записей.
ПроведениеДокументовУНФ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы.МенеджерВременныхТаблиц.Закрыть();
 
КонецПроцедуры
 
// Процедура - обработчик события ОбработкаУдаленияПроведения объекта.
//
Процедура ОбработкаУдаленияПроведения(Отказ)
// Инициализация дополнительных свойств для проведения документа
ПроведениеДокументовУНФ.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);
// Подготовка наборов записей
ПроведениеДокументовУНФ.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
// Запись наборов записей
ПроведениеДокументовУНФ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
КонецПроцедуры // ОбработкаУдаленияПроведения()
 
#КонецОбласти
 
 
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
</pre>
 
Заменить "МойДокумент" и "МояТаблицаДляДвижений" на собственные названия документов и регистров.
 
В модуле менеджера добавить следующий шаблон:
<pre>
#Область ИнициализацияДанных
 
// Инициализирует таблицы значений, содержащие данные табличных частей документа.
// Таблицы значений сохраняет в свойствах структуры "ДополнительныеСвойства".
//
Процедура ИнициализироватьДанныеДокумента(ДокументСсылкаМойДокумент, СтруктураДополнительныеСвойства) Экспорт
Запрос = Новый Запрос(ТекстЗапросаИнициализироватьДанныеДокумента());
Запрос.МенеджерВременныхТаблиц = СтруктураДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылкаМойДокумент);
СтруктураДополнительныеСвойства.ТаблицыДляДвижений.Вставить("ТаблицаМояТаблицаДляДвижений", Запрос.Выполнить().Выгрузить() );
КонецПроцедуры // ИнициализироватьДанныеДокумента()
 
Функция ТекстЗапросаИнициализироватьДанныеДокумента()
Возврат
"ВЫБРАТЬ
| МойДокумент.Ссылка КАК Регистратор,
    .... // список полей для формирования таблицы с последующим заполнением в регистр
    |  МойДокумент.Дата КАК Период
|ИЗ
| Документ.МойДокумент КАК МойДокумент
|ГДЕ
| МойДокумент.Ссылка = &Ссылка";
КонецФункции
 
#КонецОбласти
</pre>

Текущая версия от 19:34, 2 марта 2023

Вопрос:

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

Ответ:

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

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

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

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

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

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

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


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

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

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

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

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

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

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