Почему после обмена Розница — УТ отчет о розничных продажах не проводится автоматически?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Типичная ситуация при интеграции между конфигурациями 1С:Розница и 1С:Управление торговлей: обмен завершается успешно, все сопутствующие документы (поступления, перемещения, кассовые чеки) проводятся в базе-приемнике без замечаний, однако документ Отчет о розничных продажах остается записанным, но не проведенным. При этом вручную пользователь может открыть документ и провести его без каких-либо ошибок. Разберем детально, почему так происходит и как исправить поведение системы.

Причина 1. Механизм отложенного проведения документов

В современных типовых решениях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), при обмене данными через типовые планы обмена документы розничных продаж часто не проводятся в момент физического приема XML-сообщения. Вместо этого они регистрируются в специальной очереди.

Проанализируем работу этого механизма:

  1. При загрузке документа в базу-приемник он записывается без проведения, а ссылка на него помещается в служебный регистр сведений (например, Очередь отложенного проведения или Документы к отложенному проведению).
  2. Непосредственное проведение возложено на регламентное задание Отложенное проведение документов, которое выполняется в фоне по заданному расписанию.
  3. Если регламентное задание отключено, не настроено его расписание, завершилось с аварийной ошибкой или зависло, загруженные отчеты о розничных продажах так и останутся непроведенными.

Для исправления ситуации проверим состояние регламентных и фоновых заданий в 1С:Управление торговлей. Убедимся, что задание отложенного проведения активно, выполняется по расписанию и в его журнале отсутствуют критические ошибки.

Причина 2. Настройка параметров проведения в правилах обмена

Если обмен настраивается через правила конвертации данных (КД 2.0), автоматическое проведение определяется свойствами загрузки документа. В правилах конвертации объектов (ПКО) документа ОтчетОРозничныхПродажах поведение регулируется в обработчике ПередЗагрузкой.

В этом обработчике доступны следующие служебные переменные:

  1. РежимЗаписи — определяет статус записи объекта при загрузке. Возможные строковые значения: "Запись", "Проведение", "ОтменаПроведения".
  2. РежимПроведения — определяет оперативность проведения. Возможные значения: "Неоперативный", "Оперативный".

Посмотрим на пример установки явного проведения в обработчике ПередЗагрузкой ПКО:


РежимЗаписи = "Проведение";
РежимПроведения = "Неоперативный";

Важное предупреждение: установка РежимЗаписи = "Проведение" непосредственно в ПКО приводит к тому, что документ пытается провестись в той же транзакции, в которой он считывается из файла обмена. Если на этот момент в базу еще не успели загрузиться связанные данные (например, серии, партии или документы перемещения), транзакция упадет с ошибкой и прервет загрузку всего пакета данных.

Чтобы избежать ошибок блокировок и нарушения ссылочной целостности, применим более надежный подход: отложим проведение документов на этап после полной загрузки всех объектов пакета.

Разберем по шагам, как это реализовать в правилах конвертации:

  1. В глобальном обработчике ПередЗагрузкойДанных инициализируем таблицу для сбора документов:

Параметры.Вставить("ТаблицаДокументовКПроведению", Новый ТаблицаЗначений);
Параметры.ТаблицаДокументовКПроведению.Колонки.Добавить("Ссылка");
Параметры.ТаблицаДокументовКПроведению.Колонки.Добавить("Дата");
  1. В ПКО ОтчетОРозничныхПродажах в обработчике ПослеЗагрузки сохраняем ссылку загруженного документа в созданную таблицу:

СтрокаТаблицы = Параметры.ТаблицаДокументовКПроведению.Добавить();
СтрокаТаблицы.Ссылка = Ссылка;
СтрокаТаблицы.Дата = Объект.Дата;
  1. В глобальном обработчике ПослеЗагрузкиДанных сортируем документы по хронологии и программно проводим их внутри блока перехвата исключений:

Если Параметры.Свойство("ТаблицаДокументовКПроведению") И Параметры.ТаблицаДокументовКПроведению.Количество() > 0 Тогда
    Параметры.ТаблицаДокументовКПроведению.Сортировать("Дата Возр");
    
    Для Каждого Стр Из Параметры.ТаблицаДокументовКПроведению Цикл
        Попытка
            ДокументОбъект = Стр.Ссылка.ПолучитьОбъект();
            Если ДокументОбъект <> Неопределено И Не ДокументОбъект.Проведен Тогда
                ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
            КонецЕсли;
        Исключение
            ЗаписьЖурналаРегистрации("Синхронизация данных. Проведение отчетов",
                УровеньЖурналаРегистрации.Ошибка,,,
                "Не удалось провести документ " + СокрЛП(Стр.Ссылка) + ": " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
КонецЕсли;

Причина 3. Разница контекста: почему интерактивно документ проводится, а фоново — нет

Если в Журнале регистрации отсутствуют записи об ошибках, выясним причину разницы между ручным и программным проведением:

  1. Заполнение видов запасов (в УТ 11): проведение Отчета о розничных продажах требует корректно заполненной табличной части ВидыЗапасов. При открытии документа в интерактивном режиме код формы может автоматически запускать процедуру подбора видов запасов или распределения по организациям. При фоновом обмене форма не открывается, и если табличная часть пуста, документ программно провестись не может.
  2. Контроль остатков по времени суток: документ при выгрузке из Розницы может получить время закрытия смены (например, 23:59:59) или начало дня. Если в течение этого дня в УТ еще не были проведены документы перемещения товара на розничный склад, проведение не выполнится из-за отрицательного остатка. При ручной проверке через некоторое время необходимые документы уже оказываются в базе, и проведение срабатывает.
  3. Права учетной записи синхронизации: регламентное задание обмена запускается под системным пользователем, для которого могут действовать ограничения на уровне записей (RLS) по складам или организациям. Ручное проведение администратором выполняется с полными правами, что маскирует проблему нехватки прав у фонового процесса.
  4. Состояние кассовой смены: в ряде релизов конфигураций отчет не может быть проведен, если связанный с ним документ Кассовая смена в базе-приемнике не перешел в статус Закрыта.

Для гарантированного устранения проблемы рекомендуется сначала проверить работу фонового задания Отложенное проведение документов в 1С:Управление торговлей, а при использовании нестандартных правил — перенести вызов проведения в обработчик ПослеЗагрузкиДанных.

← На главную