Как сохранить ручные проводки в 1С:Бухгалтерии при повторной загрузке документов из 1С:Управление торговлей?

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

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

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

Почему очищаются проводки при синхронизации

Проанализируем логику работы типовых механизмов обмена данными (EnterpriseData / БСП):

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

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

Способ 1. Проверка признака ручной корректировки в модуле обмена (через расширение)

Рассмотрим решение, основанное на переопределении функции очистки движений в общем модуле ОбменДаннымиXDTOСервер. Метод заключается в том, чтобы запретить удаление движений, если у документа в базе уже установлен флаг ручной корректировки.

Для реализации подключим расширение конфигурации и добавим аннотацию &Вместо для функции ОтменитьПроведениеОбъектаВИБ:


&Вместо("ОтменитьПроведениеОбъектаВИБ")
Функция Расш_ОтменитьПроведениеОбъектаВИБ(Объект, Отправитель)
    
    // Проверяем наличие реквизита РучнаяКорректировка у объекта
    ЕстьРучнаяКорректировка = Ложь;
    Попытка
        Если Объект.Проведен И Объект.РучнаяКорректировка Тогда
            ЕстьРучнаяКорректировка = Истина;
        КонецЕсли;
    Исключение
        ЕстьРучнаяКорректировка = Ложь;
    КонецПопытки;
    
    // Если включена ручная корректировка, пропускаем очистку движений
    Если НЕ ЕстьРучнаяКорректировка Тогда
        ОбменДаннымиСервер.УдалитьДвиженияУДокумента(Объект);
    КонецЕсли;
    
    Возврат Неопределено;
    
КонецФункции

Данный подход позволяет сохранить существующие проводки, не изменяя саму конфигурацию, находящуюся на поддержке.

Способ 2. Отмена перезаписи документа в обработчиках EnterpriseData

Разберем более точечный механизм предотвращения перезаписи документов, использующий правила конвертации объектов (ПКО) формата EnterpriseData в расширении или правилах обмена.

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


Если ДанныеИБ <> Неопределено Тогда
    Попытка
        Если ДанныеИБ.РучнаяКорректировка Тогда
            // Отменяем запись объекта, чтобы сохранить версию БП
            ПолученныеДанные = Неопределено;
        КонецЕсли;
    Исключение
        // Реквизит отсутствует у данного типа метаданных
    КонецПопытки;
КонецЕсли;

При установке значения ПолученныеДанные = Неопределено менеджер обмена штатно пропускает запись текущего объекта без генерации системных ошибок и без прерывания общего пакета синхронизации.

Способ 3. Подписка на событие ПередЗаписью для блокировки изменений

Посмотрим на универсальный программный вариант через подписку на событие ПередЗаписью для документов, участвующих в обмене. В обработчике отслеживается режим загрузки обмена данными:


Процедура ДокументыПередЗаписьюБлокировкаРучных(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    // Проверяем, что запись происходит в процессе загрузки обмена
    Если Источник.ОбменДанными.Загрузка Тогда
        Если НЕ Источник.ЭтоНовый() Тогда
            // Считываем текущее значение признака из информационной базы
            ФлагКорректировки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "РучнаяКорректировка");
            Если ФлагКорректировки = Истина Тогда
                // Отменяем перезапись объекта
                Отказ = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Важно: При использовании Отказ = Истина во время синхронизации объект может быть помещен в журнал регистрации и протокол коллизий обмена как необработанный. Поэтому программная отмена на уровне обработчиков обмена (Способ 2) является более предпочтительной.

Способ 4. Методологические и организационные решения без доработки кода

Если внесение доработок в конфигурацию нежелательно, проанализируем типовые регламентные инструменты платформы 1С:

  1. Отказ от ручной корректировки в пользу документа «Операция, введенная вручную»: Методологически правильным решением при обмене является сохранение первичных документов в неизменном виде. Если необходимо изменить проводки документа из УТ, бухгалтер в БП формирует документ Операция (бухгалтерский и налоговый учет) со способом заполнения «Сторно движений документа». В этом случае первичный документ при обмене перезаписывается штатно, а ручные проводки остаются в отдельной операции.
  2. Настройка «Даты запрета загрузки данных»: В БП в разделе Администрирование → Синхронизация данных можно настроить независимую дату запрета загрузки. Даже если в УТ документ закрытого периода будет перепроведен, подсистема обмена БП отклонит его загрузку и сохранит исходные данные.
  3. Корректная настройка регистра «Счета учета номенклатуры»: Во многих случаях ручная корректировка проводок применяется бухгалтерами из-за некорректно заполненных счетов по умолчанию. Выверка и настройка регистра Счета учета номенклатуры в БП позволяет документу автоматически формировать правильные движения при каждой загрузке.
← На главную