Часто вижу вопросы на форумах как организовать автоматическое проведение документов загруженных с помощью правил обмена конфигурации «Конвертация данных 2.0».
в частности для варианта обмена 7.7 -> 8.1
ПКО документа, перед загрузкой:
РежимЗаписи = "Проведение";
В данном решение есть минус, при ошибке проведения документа при загрузке объект не будет загружен вообще.
Делюсь решением:
1. В свойствах конвертации создаем параметр "ТаблицаДокументов" устанавливаем галочку "При загрузке"
2. В обработчике «Перед загрузкой данных» пишем код:
ТаблицаДокументов = Новый ТаблицаЗначений;
ТаблицаДокументов.Колонки.Добавить("Документ");
ТаблицаДокументов.Колонки.Добавить("ДатаВремя");
Параметры.ТаблицаДокументов = ТаблицаДокументов;
3. В обработчике «После загрузки объекта» пишем код:
Если ИмяТипаОбъекта = "Документ" Тогда
Объект.Записать();
НоваяСтрока = Параметры.ТаблицаДокументов.Добавить();
НоваяСтрока.Документ = Объект.Ссылка;
НоваяСтрока.ДатаВремя = Объект.Дата;
КонецЕсли;
4. В обработчике «После загрузки данных» пишем код:
Если Параметры.ТаблицаДокументов.Количество() > 0 Тогда
Параметры.ТаблицаДокументов.Сортировать("ДатаВремя Возр");
Ин = 0;
Для каждого Строка из Параметры.ТаблицаДокументов Цикл
Объект = Строка.Документ.ПолучитьОбъект();
Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ проведен : "+ СокрЛП(Объект));
Ин = Ин + 1;
Исключение
Сообщить("ДОКУМЕНТ НЕ ПРОВЕДЕН : "+ ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Сообщить(" "+СокрЛП(Объект));
КонецПопытки;
КонецЦикла;
Сообщить("Из "+СокрЛП(Параметры.ТаблицаДокументов.Количество())+" документов проведено " + СокрЛП(Ин) +" объектов");
Иначе
Сообщить("Из "+СокрЛП(Параметры.ТаблицаДокументов.Количество())+" документов проведено 0 объектов");
КонецЕсли;
Собственно и всё.