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