Часто в процессе эксплуатации 1С возникает необходимость автоматизации рутинных операций, таких как массовое перепроведение документов. Однако при попытке реализации подобной задачи через программный код разработчики нередко сталкиваются с ситуацией, когда документы просто «не проводятся», а система не выдает явных сообщений об ошибках. Давайте разберем, почему это происходит и как правильно организовать процесс программного перепроведения.
Первым делом при работе с программным проведением важно понимать: метод Записать с параметром РежимЗаписиДокумента.Проведение может не срабатывать по множеству причин. Основные из них:
В коде автора темы использовалась конструкция Попытка...Исключение, однако в блоке Исключение не выводилось описание ошибки. Чтобы понять, почему именно документ не проводится, необходимо использовать функцию ОписаниеОшибки(). Это позволит увидеть системное сообщение, например, о нарушении даты запрета изменения.
Рассмотрим, как правильно доработать блок обработки исключений:
Процедура ПерепровестиНаСервере()
Для Каждого Строка Из Объект.Документы Цикл
ДокСсылка = Строка.Документ.ПолучитьОбъект();
Если ДокСсылка = Неопределено Тогда Продолжить; КонецЕсли;
Попытка
ДокСсылка.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Сообщить ("Документ " + ДокСсылка + " успешно перепроведен!");
Исключение
Сообщить ("Не удалось провести " + ДокСсылка + ". Причина: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Если программных сообщений недостаточно, всегда обращайтесь к Журналу регистрации. В нем фиксируются все события, происходящие в базе данных. Если проведение документа блокируется платформой, запись об этом с указанием конкретной причины будет добавлена в журнал. Это самый надежный способ отладки в случае, если ошибка происходит на уровне платформы, а не логики конфигурации.
Важно помнить, что перепроведение документов в закрытом периоде — это серьезное вмешательство в учетные данные. Когда вы перепроводите документы за прошлые периоды, система пересчитывает движения по регистрам (партии, НДС, взаиморасчеты). Это может привести к следующим последствиям:
Поэтому, если возникла задача перепровести данные за год, обязательно проанализируйте последствия. Если изменение данных в прошлом необходимо, всегда делайте резервную копию базы данных перед выполнением операции. В идеале, любые корректировки прошлых периодов стоит выполнять не перепроведением старых документов, а созданием корректирующих записей в текущем периоде.
Для массовых операций рекомендуем использовать типовые инструменты платформы, такие как групповая обработка документов. Они учитывают механизмы последовательностей и позволяют избежать множества ошибок, возникающих при «самописных» циклах. Если же вы пишете собственную обработку:
Попытка...Исключение с выводом ОписаниеОшибки().