Делая обмен между семерочными конфигурациями на КД2, столкнулся с тем, что не отменяется проведение уже загруженных документов при повторной загрузке. Исследуя этот вопрос, обнаружил что в обработке загрузки v77imp.ert есть функция
Функция ОтменитьПроведение(Объект, СтатусВПравилах="Авто", СтатусВФайле="НеИзвестен")
которая выполняет отмену проведения документа, но нигде не используется в данной обработке.Также выяснилось, что при загрузке документа, в процедуре
Процедура ЗагрузитьДокументV8(Объект, Вид, ИмяПравила)
есть строчка кода, которая пытается получить флаг отмены проведения из файла обмена:
ОтменитьПроведение = Число(Объект.ПолучитьАтрибут("ОтменитьПроведение"));
Но переменная ОтменитьПроведение далее нигде не используется.
Итак, чтобы включить возможность отмены проведения документов, я сделал изменения в конфигурации Конвертация (2.1.3.1), в обработке ВыгрузкаКонвертации:
1. Макет "ПроцедурыИФункцииМодуляВыгрузки"
Добавил атрибут к узлу Объект в функции ВыгрузитьПоПравилу() (смотрите комментарии):
Функция ВыгрузитьПоПравилу(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО = "", УзелСсылки = "", ТолькоПолучитьУзелСсылки = 0,
...
Если Приемник = мПустоеЗначение Тогда //строка 2827 в типовой конфигурации 2.1.3.1
Приемник = СоздатьУзел("Объект");
УстановитьАтрибут(Приемник, "Нпп", Нпп);
УстановитьАтрибут(Приемник, "Тип", ПолучитьРеквизитПКО(НомерПКО, "Приемник"));
УстановитьАтрибут(Приемник, "ИмяПравила", ПолучитьРеквизитПКО(НомерПКО, "Код"));
//для отмены проведения документов
//в обработчике ПередВыгрузкой ПКО документа написать:
//ВходящиеДанные = СоздатьОбъект("СписокЗначений");
//ВходящиеДанные.ДобавитьЗначение(1, "ОтменитьПроведение");
Попытка
УстановитьАтрибут(Приемник, "ОтменитьПроведение", ВходящиеДанные.Получить("ОтменитьПроведение"));
Исключение
КонецПопытки;
//конец для отмены проведения документов
2. Макет "ПроцедурыИФункцииМодуляЗагрузки"
Добавил в процедуру ЗагрузитьДокументV8() одну строчку (см. комментарии)
Процедура ЗагрузитьДокументV8(Объект, Вид, ИмяПравила)
...
СтатусПроведения = гТабКэшПараметровЗагрузки.СтатусПроведения;
ОтменитьПроведение = Число(Объект.ПолучитьАтрибут("ОтменитьПроведение"));
ОбъектБД.НайтиДокумент(ТекущийОбъект);
//отмена проведения документов
ОтменитьПроведение(ОбъектБД,,ОтменитьПроведение);
//конец отмена проведения документов
3. И все - работает.
В файле данных появился новый атрибут:
который сигнализирует о необходимости отмены проведения документа.