v8: Допроведение документа Ключевые слова: проведение,документ,регистр,набор записей
Однажды мне поставили задачу - нужно обработать стандартные проводки, сделанные документом и некоторые из них изменить. Также изменения должны коснуться некоторых регистров. Я вставлял свой код коррекции в конец процедуры ОбработкаПроведения.
Но дело в том, что при проведении документа движения могут быть сохранены в коллекции Движения или непосредственно записаны в регистр.
Я долго парился по этому поводу, пока не понял, что можно проверить свойство Модифицированность() у конкретного регистра в коллекции Движения, если оно истина - то движения находятся в коллекции и ждут автоматической записи в конце проведения, если ложь - то движения уже записаны в регистр или не записывались вообще.
Короче, набор движений для корректировки я получал функцией:
Функция НаборДвиженийДокументаПолучить(П, Регистр, ИзОбъекта=истина)
ИмяРегистра = Метаданные.НайтиПоТипу(ТипЗнч(Регистр)).Имя;
//Если модифицирован
Если НЕ П.Объект.Движения[ИмяРегистра].Модифицированность() Тогда
НЗ=П.Объект.Движения[ИмяРегистра];
НЗ.Отбор.Регистратор.Установить(П.Ссылка);
НЗ.Прочитать();
КонецЕсли;
Возврат П.Объект.Движения[ИмяРегистра];
КонецФункции
А записывать ничего не нужно. Изменения сами запишутся в конце работы процедуры ОбработкаПроведения.
|