Как настроить однократное заполнение расшифровки платежа при обмене УТ 11 — БП 3, чтобы не затирать ручные правки бухгалтера

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

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

Метод 1. Использование признака «Новый объект» в менеджере обмена

Наиболее корректным и технологичным способом решения задачи в современных конфигурациях является вмешательство в логику работы Менеджера обмена через универсальный формат. Поскольку обмен сейчас чаще всего строится на базе технологии Enterprise Data, мы можем использовать правила конвертации и обработчики событий при приеме данных в информационной базе «Бухгалтерия предприятия».

Проанализируем ситуацию: нам нужно, чтобы табличная часть РасшифровкаПлатежа заполнялась только в тот момент, когда документ ПоступлениеНаРасчетныйСчет создается в базе впервые. Разберем по шагам, как это реализовать через расширение конфигурации в БП 3.0:

  1. Создадим расширение для БП 3.0.
  2. Найдем общий модуль МенеджерОбменаЧерезУниверсальныйФормат (или соответствующий модуль, отвечающий за загрузку).
  3. В обработчике ПриПриемеОбъекта (или в процедурах обработки загрузки конкретных типов объектов) добавим проверку свойства ЭтоНовый.

Рассмотрим пример кода, который иллюстрирует эту логику:


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

Метод 2. Добавление контрольного реквизита (Флаг заполнения)

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

Алгоритм реализации:

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

Посмотрим на пример реализации логики в модуле менеджера объекта документа при загрузке:


Процедура ПриЗагрузкеОбъектаИзДругойПрограммы(Объект, ДанныеXDTO)
    // Проверяем существующее значение флага в базе
    Запрос = Новый Запрос("ВЫБРАТЬ ЗаполненоПрограммноИзУТ ИЗ Документ.ПоступлениеНаРасчетныйСчет ГДЕ Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() И Выборка.ЗаполненоПрограммноИзУТ Тогда
        // Бухгалтер уже видел этот документ, или он был загружен ранее.
        // Блокируем перезаполнение расшифровки.
        Объект.ОбменДанными.Загрузка = Истина;
        // Код для пропуска обновления ТЧ
    Иначе
        // Первичная загрузка
        ВыполнитьСтандартноеЗаполнение(Объект);
        Объект.ЗаполненоПрограммноИзУТ = Истина;
    КонецЕсли;
КонецПроцедуры

Метод 3. Анализ стандартного реквизита «Ручная корректировка»

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

Хотя этот способ менее надежен (бухгалтер может поправить расшифровку платежа, но не включать ручную корректировку проводок), он не требует создания новых реквизитов. В коде обмена достаточно добавить условие:

Если Объект.РучнаяКорректировка Тогда Продолжить; КонецЕсли;

Особенности синхронизации счетов на оплату

Для того чтобы расшифровка платежа по счетам в БП 3.0 заполнялась корректно, необходимо обеспечить наличие самих объектов Счет на оплату покупателю в базе бухгалтерии. Рассмотрим важные моменты:

Архитектурный совет: переход на DirectBank

Многие специалисты рекомендуют рассмотреть отказ от перегрузки банковских документов из УТ в БП. Вместо этого разберем альтернативную схему:

  1. Раздельная загрузка: Настройте прямой обмен с банком (DirectBank) в обеих программах.
  2. УТ: Менеджер загружает выписку, чтобы оперативно видеть оплаты и отгружать товар. Здесь используется своя аналитика.
  3. БП: Бухгалтер загружает ту же выписку напрямую из банка. Поскольку документы создаются независимо, проблема «затирания» данных исчезает в принципе.
  4. Синхронизация НСИ: Через обмен между УТ и БП передаются только справочники (Контрагенты, Договоры, Номенклатура).

Такой подход полностью исключает риск порчи регламентированных данных и избавляет от необходимости писать сложный код по контролю перезаписи табличных частей. Помните, что банковские выписки в БП содержат множество специфических данных (налоги, зарплатные проекты, КБК), которых нет и не должно быть в УТ 11, поэтому полная замена банковского учета в БП выгрузкой из УТ часто ведет к потере важной бухгалтерской информации.

← На главную