Почему не проводятся документы при загрузке из УТ в БП 3.0 и как это исправить?

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

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

Причины «молчаливого» непроведения документов

Рассмотрим основные факторы, которые мешают документам проводиться автоматически в процессе синхронизации. Выясним причину, исходя из архитектуры БП 3.0:

  1. Механизм отложенного проведения (БСП): В современных версиях программ 1С, использующих Библиотеку стандартных подсистем, проведение документов вынесено в отдельный фоновый процесс. Программа записывает документ, но не формирует движения сразу, чтобы не блокировать работу пользователей и ускорить процесс загрузки данных.
  2. Режим загрузки данных в коде: При обмене устанавливается специальный признак ОбменДанными.Загрузка = Истина. В этом режиме стандартные проверки в модулях документов (например, проверка остатков или заполнение счетов учета) могут игнорироваться или работать иначе.
  3. Незаполненные счета учета: В БП 3.0 счета учета (41, 60, 62 и др.) часто не передаются из УТ, а должны подставляться автоматически на стороне бухгалтерии. Если в регистрах сведений СчетаУчетаНоменклатуры или СчетаУчетаРасчетовСКонтрагентами нет соответствующих настроек, документ при фоновой загрузке не сможет определить счета и не проведется.
  4. Отрицательные остатки: Если в настройках БП включен контроль остатков, а документы поступили в неправильной последовательности (реализация загрузилась раньше поступления), документ останется только записанным.

Рассмотрим способы решения этой проблемы — от простых настроек до внесения изменений в правила обмена.

Решение 1: Настройка регламентного задания «Отложенное проведение»

Проанализируем работу штатного механизма. В БП 3.0 существует регистр сведений ОтложенноеПроведениеДокументов. Если документы в него попадают, значит, система ожидает запуска специального задания.

Посмотрим на шаги для проверки:

  1. Перейдем в раздел Администрирование — Обслуживание — Регламентные операции.
  2. Найдем в списке задание Выполнение отложенных движений по планам обмена.
  3. Убедимся, что оно включено и для него настроено расписание (например, каждые 10 минут).

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

Решение 2: Использование прямого подключения (COM-соединение)

Как показывает практика, проведение документов гораздо стабильнее работает при использовании прямого подключения между базами вместо обмена через файлы. Выясним, почему это происходит: при прямом соединении база-источник может инициировать проведение в базе-приемнике в рамках одной сессии.

Чтобы переключиться на этот режим, в настройках синхронизации данных выберем вариант «Прямое подключение к информационной базе на этом же компьютере или по локальной сети». Введем параметры авторизации пользователя с правами Администратор или ПолныеПрава.

Решение 3: Доработка правил обмена (Data Conversion)

Если штатные средства не помогают, разберем более радикальный метод — внесение правок в правила обмена (файл .xml). Этот метод подходит, если вы используете «Универсальный обмен данными в формате XML».

Посмотрим на алгоритм реализации массового проведения после завершения загрузки. Нам потребуется создать таблицу документов, которые нужно провести, и обработать её в самом конце.

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


ТаблицаПроведения = Новый ТаблицаЗначений;
ТаблицаПроведения.Колонки.Добавить("Документ");
ТаблицаПроведения.Колонки.Добавить("ДатаДок");
Параметры.Вставить("ТаблицаПроведения", ТаблицаПроведения);

Шаг 2. В обработчике ПослеЗагрузкиОбъекта (или в алгоритме, который вызывается после загрузки каждого документа) добавим условие. Если документ пришел из источника со статусом «Проведен», добавим его в нашу таблицу:


Если Объект.Проведен Тогда
    ТаблицаПроведения = Параметры.ТаблицаПроведения;
    НоваяСтрока = ТаблицаПроведения.Добавить();
    НоваяСтрока.Документ = Объект.Ссылка;
    НоваяСтрока.ДатаДок = Объект.Дата;
КонецЕсли;

Шаг 3. В глобальном обработчике ПослеЗагрузкиДанных пропишем цикл проведения. Важно предварительно отсортировать таблицу по дате, чтобы соблюсти последовательность (сначала поступления, потом реализации):


Сообщить("Начинается проведение загруженных документов...");
ТаблицаПроведения = Параметры.ТаблицаПроведения;
ТаблицаПроведения.Сортировать("ДатаДок");

Для Каждого СтрокаТаблицы Из ТаблицаПроведения Цикл
    ДокОбъект = СтрокаТаблицы.Документ.ПолучитьОбъект();
    Если ДокОбъект = Неопределено Тогда Продолжить; КонецЕсли;
    
    Попытка
        // Пытаемся провести документ в режиме неоперативного проведения
        ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        // Если проведение не удалось, важно отменить статус проведения,
        // чтобы не возникло ситуации 'Проведен, но без движений'
        ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
        Сообщить("Ошибка проведения [" + ДокОбъект + "]: " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

Проанализируем этот код: использование РежимЗаписиДокумента.Проведение явно указывает платформе на необходимость формирования движений по регистрам. Обратите внимание на РежимЗаписиДокумента.ОтменаПроведения в блоке исключения — это критически важный момент. Если документ не смог провестись (например, из-за нехватки товара), он должен остаться непроведенным, иначе в учете возникнет путаница.

Решение 4: Проверка прав доступа

Иногда причина кроется в правах пользователя, под которым выполняется интеграция. В БП 3.0 за это отвечает роль ВыполнениеСинхронизацииДанных. Однако для корректного проведения документов (особенно счетов-фактур) пользователю могут потребоваться дополнительные права на чтение и запись связанных регистров.

Рассмотрим типичную ошибку: «В данной транзакции уже происходили ошибки». Она возникает, если один из документов в пачке вызвал исключение, которое не было корректно обработано. В этом случае транзакция помечается как битая, и все последующие вызовы Записать() будут завершаться неудачей. Именно поэтому важно использовать блоки Попытка...Исключение внутри цикла проведения.

Дополнительные рекомендации

Выясним, на что еще стоит обратить внимание:

Мы подробно разобрали ситуацию с непроведением документов при обмене. Выбор конкретного метода зависит от ваших технических навыков и доступности настроек конфигурации. Оптимальным решением для долгосрочной работы является настройка штатного регламентного задания отложенного проведения и корректное заполнение счетов учета в базе Бухгалтерии.

← На главную