Почему в 1С:Бухгалтерии создаются лишние счета на оплату при обмене с 1С:Управление торговлей и как это отключить?

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

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

Выясним причину: механизм «Объекты по ссылке»

Проанализируем ситуацию с технической стороны. Основная причина кроется в архитектуре платформы 1С и механизме обмена данными через формат Enterprise Data. В системе существует понятие ссылочной целостности. Когда мы выгружаем документ Реализация товаров и услуг, в его структуре есть обязательное поле Документ-основание. Если в «1С:Управление торговлей» эта реализация была создана на основании документа Заказ клиента, то при выгрузке реализации система «тянет» за собой и объект-основание.

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

  1. Система видит ссылку на Заказ клиента в документе реализации.
  2. В БП Заказ клиента из УТ чаще всего конвертируется в Счет на оплату (согласно типовым правилам).
  3. Так как полная выгрузка счета запрещена настройками, система передает только Уникальный Идентификатор (GUID) этого объекта, чтобы «заполнить» поле в реализации.
  4. В результате в «1С:Бухгалтерии» создается пустая карточка счета, где заполнен только внутренний номер, но отсутствуют реквизиты вроде контрагента или состава товаров.

Вариант 1. Изменение подхода к ведению учета

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

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

Вариант 2. Использование расширения конфигурации в «1С:Бухгалтерии»

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

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


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

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

Вариант 3. Очистка документа-основания в исходной базе (УТ)

Посмотрим на ситуацию со стороны «1С:Управление торговлей». Если мы не хотим, чтобы счета улетали в БП, мы можем программно «отвязать» их от реализаций перед отправкой. Это можно сделать с помощью обработки Групповое изменение реквизитов или через специализированные подписки на события.

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

Вариант 4. Настройка функциональных опций в БП

Иногда проблема кроется в том, как 1С:Бухгалтерия интерпретирует входящие данные. Проанализируем настройки интерфейса:

  1. Перейдем в раздел Администрирование — Функциональность.
  2. На закладке Торговля найдем флаг Выставление счетов покупателям.

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

Вариант 5. Обновление формата обмена Enterprise Data

Выясним еще одну важную техническую деталь. Фирма 1С постоянно дорабатывает формат Enterprise Data. В старых версиях формата (например, 1.3 или 1.5) зависимости объектов прописаны жестко. В более современных версиях (1.10 и выше) механизмы сопоставления работают корректнее.

Попробуйте выполнить следующие действия:

Резюме по решению задачи

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

← На главную