При настройке обмена данными между конфигурациями на базе 1С:Предприятие 8.3 (особенно в Бухгалтерии предприятия 3.0) специалисты часто сталкиваются с ситуацией, когда документы после загрузки в базу-приемник остаются непроведенными. Вместо этого они попадают в специальный регистр сведений ОтложенныеДвиженияДокументов. Это поведение обусловлено стандартными механизмами Библиотеки стандартных подсистем (БСП). Рассмотрим подробно, почему это происходит и как настроить систему так, чтобы документы загружались сразу с движениями или проводились автоматически в момент загрузки.
Прежде чем переходить к правке кода, разберем логику работы платформы. Механизм отложенного проведения был внедрен для решения трех основных задач:
Однако в ситуациях, когда мы переносим документы вместе с движениями (регистрами) из базы-источника, перепроведение в приемнике часто не требуется и даже вредно (например, если в источнике были ручные корректировки). Проанализируем способы решения этой проблемы. При подготовке к переходу на другую конфигурацию стоит рассмотреть раздел с решениями для переноса данных БП, содержащий инструменты для миграции документов и остатков.
Прежде чем приступать к программированию, проверим базовые настройки. Выясним, установлены ли необходимые флаги в параметрах синхронизации данных.
В настройках правил обмена (в конфигурации "Конвертация данных" или непосредственно в узле плана обмена) существует параметр Выполнять отложенные движения. Если этот флаг снят, система просто фиксирует необходимость проведения в регистре и завершает загрузку. Попробуем установить этот флаг в настройках узла обмена в базе-приемнике. Также обратим внимание на поле Количество ошибок для завершения. Если при загрузке первые 5–10 документов не смогли провериться из-за нехватки остатков, система может остановить процесс автоматического проведения для всех остальных объектов в пакете.
Если штатные настройки не помогают, и система упорно игнорирует статус "Проведен" у документа, нам придется вмешаться в работу транспортного модуля обмена. В современных конфигурациях за это отвечает обработка КонвертацияОбъектовИнформационныхБаз (в более старых — ОбменДаннымиXML).
Проанализируем ситуацию: при загрузке объекта система вызывает процедуру ПрочитатьОбъект. Нам необходимо изменить логику установки РежимЗаписи. Рассмотрим пример модификации кода, который позволяет принудительно устанавливать режим записи в Запись, если это указано в правилах конвертации объектов (ПКО), тем самым избегая автоматического перепроведения.
В процедуре ПрочитатьОбъект найдем участок кода, отвечающий за документы, и внесем изменения:
Если ИмяТипаОбъекта = "Документ" Тогда
Если РежимЗаписи = "Проведение" Тогда
РежимЗаписи = РежимЗаписиДокумента.Проведение;
ИначеЕсли РежимЗаписи = "ОтменаПроведения" Тогда
РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
Иначе
// Проверяем, был ли передан специальный статус "Запись" из ПКО
Если РежимЗаписи = "Запись" Тогда
РежимЗаписи = РежимЗаписиДокумента.Запись;
ИначеЕсли Объект.Проведен Тогда
// Стандартная логика БСП обычно пытается перепроводить проведенные документы
// Если нам нужно сохранить движения источника, меняем на РежимЗаписиДокумента.Запись
РежимЗаписи = РежимЗаписиДокумента.Проведение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Важно помнить, что если вы изменяете этот код в типовой конфигурации, это сделает её "кастомной". В новых версиях БСП лучше использовать расширения для переопределения этой логики.
Это более "чистый" метод, так как он не требует изменения кода самой конфигурации, а правится только в файле правил (xml). Нам необходимо передать в приемник информацию о том, что документ нужно просто записать, не инициируя механизм отложенных движений. Если настроенный таким образом обмен требуется выполнять регулярно по расписанию, целесообразно автоматизировать регулярный обмен данными между базами 1С с помощью специализированного софта.
Разберем шаги настройки в Конвертации данных 2.1:
ПередВыгрузкой.РежимЗаписи = "Запись";. Это заставит выгрузить документ с этим флагом.ПередЗагрузкой, добавим аналогичную строку: РежимЗаписи = "Запись";.Проанализируем, что это дает: система увидит, что документ не требует проведения, запишет его и его движения (если вы их также выгружаете), но не создаст запись в регистре ОтложенныеДвиженияДокументов. Если в свежих версиях БСП заблокирована подгрузка кастомных правил в базу, для их использования подойдёт расширение для загрузки комплекта правил обмена XML.
Часто программисты сталкиваются с тем, что движения по регистрам (например, Хозрасчетный) не переносятся, если у документа стоит флаг РучнаяКорректировка. Выясним причину: при стандартном обмене через БСП система часто очищает наборы записей перед загрузкой или пытается их пересчитать по алгоритмам приемника.
Чтобы движения с ручной правкой переносились "один в один", необходимо:
ПриЗагрузке явно указать Объект.ДополнительныеСвойства.Вставить("Загрузка", Истина);.РежимЗаписи = "Запись", как было описано выше, чтобы не сработал типовой механизм пересчета движений при проведении.В некоторых обсуждениях предлагается радикальный метод: в обработчике ПослеЗагрузки написать Объект.Записать(РежимЗаписиДокумента.Запись); Отказ = Истина;. Никогда не используйте этот метод для решения проблемы отложенных движений!
Рассмотрим последствия: когда вы ставите Отказ = Истина, транспортный механизм считает, что объект не был загружен. В результате:
СоответствияОбъектовИнформационныхБаз, что приведет к дублированию данных при последующих синхронизациях.Для корректного решения проблемы отложенных движений в современных базах на платформе 8.3 рекомендуется следующий алгоритм действий:
Количество ошибок проведения до максимума (например, 999999).ПередЗагрузкой для установки РежимЗаписи = "Запись", но только в том случае, если вы уверены, что движения документа передаются вместе с ним в этом же пакете данных.Таким образом, мы выяснили, что механизм отложенных движений — это защитная функция 1С, которую можно и нужно настраивать под конкретные задачи интеграции, соблюдая баланс между скоростью загрузки и актуальностью данных в регистрах. Для поиска расхождений в проводках после завершения переноса или обмена применяется автоматическая сверка бухгалтерских и налоговых проводок между базами 1С.