Почему при обмене из УТ 11 в БП 3.0 создаются пустые документы "Поступление доп. расходов" и как это исправить?

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

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

Проанализируем механику появления ошибки

Для начала выясним причину такого поведения системы. Обмен между современными конфигурациями 1С осуществляется через Универсальный формат (EnterpriseData). За обработку и конвертацию данных отвечает специальный общий модуль МенеджерОбменаЧерезУниверсальныйФормат.

По правилам этого формата алгоритм работает следующим образом: если в УТ 11 существует документ ПриобретениеУслугИПрочихАктивов, в котором в качестве аналитики расходов указан документ поступления товаров, то при выгрузке данных в БП 3.0 система попытается интерпретировать это как поступление дополнительных расходов. Ошибка с генерацией именно пустых документов чаще всего возникает из-за "мусорных" данных в регистрах или наличия скрытых/помеченных на удаление ссылок. Даже если сами услуги в УТ были удалены, алгоритм обмена может вытянуть связанный узел и попытаться сформировать основание для счета-фактуры.

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

Рассмотрим способы решения проблемы

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

  1. Очистка "мусорных" данных в УТ 11

    Прежде чем вносить изменения в код, проанализируем состояние данных в базе-источнике. Часто проблема кроется в отмененных, непроведенных или помеченных на удаление документах приобретения услуг, которые по-прежнему ссылаются на злополучное поступление. При полной выгрузке система тянет за собой все связанные объекты. Рекомендуется выполнить полное удаление помеченных объектов в УТ 11 и проверить регистры на наличие "зависших" записей по аналитике расходов.

  2. Обновление правил конвертации

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

  3. Программная корректировка через расширение

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

Посмотрим на пример программного исправления

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

Примерный алгоритм, который мы можем реализовать в расширении (переопределяя процедуры модуля МенеджерОбменаЧерезУниверсальныйФормат):


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

Также обратите внимание на логику удаления. В некоторых случаях система сама пытается помечать на удаление такие "ошибочные" документы после загрузки (в обработчиках событий после загрузки), однако не всегда корректно переписывает табличную часть ДокументыОснования в самом счете-фактуре. Если вы отменяете создание пустого документа доп. расходов (как в коде выше), обязательно убедитесь, что при конвертации СчетФактураПолученный этот непринятый документ не будет добавлен в массив оснований, иначе счет-фактура запишется с "битой" ссылкой.

Подводя итог, проанализируем ваши действия при столкновении с этой ситуацией: сначала наведите порядок в базе УТ 11 (удалите старые черновики услуг), затем убедитесь, что правила EnterpriseData актуальны. Если это не спасает, смело добавляйте точечную проверку на пустые табличные части в модуль МенеджерОбменаЧерезУниверсальныйФормат с помощью расширения.

← На главную