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