При переходе на новую ставку НДС 20% многие пользователи столкнулись с проблемой: при синхронизации данных между 1С:Управление торговлей 11.4 и 1С:Бухгалтерия предприятия 3.0 документы поступления и реализации за 2019 год и более поздние периоды выгружаются некорректно. В информационной базе-приемнике (БП) колонка с процентом НДС оказывается пустой, что вызывает ошибки при проведении документов и формировании налоговой отчетности. Рассмотрим подробно причины возникновения этой ситуации и разберем по шагам способы ее решения.
Проанализируем ситуацию: обмен между конфигурациями УТ 11 и БП 3.0 в современных версиях чаще всего строится на базе технологии EnterpriseData (синхронизация через универсальный формат). В начале 2019 года, когда ставка НДС изменилась с 18% на 20%, типовые правила обмена в некоторых релизах УТ 11.4 еще не содержали явного описания того, как обрабатывать новое значение перечисления СтавкиНДС.НДС20.
Когда система выполняет выгрузку, специальный программный модуль (Менеджер обмена) перебирает строки табличной части документа. Если он встречает ставку НДС 20%, для которой в коде не прописано соответствие строковому идентификатору формата (например, "НДС20"), поле просто остается незаполненным. В результате в файл обмена (XML) данные о ставке не попадают, и Бухгалтерия при загрузке выдает предупреждение: "Не заполнена колонка '% НДС' в строке списка 'Товары'".
Прежде чем приступать к программным правкам, проверим версию нашей конфигурации. Разработчики 1С оперативно выпустили исправление этой ошибки. Официально проблема с выгрузкой ставки 20% была решена в релизе УТ 11.4.6.200.
Если ваша версия ниже указанной (например, 11.4.6.188), самым правильным и безопасным решением будет обновление конфигурации. После обновления необходимо будет перерегистрировать документы к обмену, чтобы они выгрузились повторно с уже исправленными правилами.
Если по каким-то причинам оперативное обновление конфигурации невозможно (например, база сильно кастомизирована), мы можем внести изменения в код самостоятельно. Нам потребуется внести правки в общий модуль, отвечающий за логику синхронизации. Проанализируем процедуру ОпределитьСтавкуНДС_Отправка в модуле МенеджерОбменаЧерезУниверсальныйФормат.
Рассмотрим пример кода, который исправляет некорректное сопоставление. Нам нужно добавить условия для обработки Перечисления.СтавкиНДС.НДС20 и Перечисления.СтавкиНДС.НДС20_120. Вставим следующий фрагмент кода:
Процедура ОпределитьСтавкуНДС_Отправка(ТабличнаяЧасть, НДСПоСтавкам2и4)
ТабличнаяЧасть.Колонки.Добавить("СтавкаНДССтрокой");
Для Каждого Строка Из ТабличнаяЧасть Цикл
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
Строка.СтавкаНДССтрокой = "НДС0";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
Строка.СтавкаНДССтрокой = "БезНДС";
Иначе
Если НДСПоСтавкам2и4 Тогда
// Логика для работы со старыми версиями формата
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18
Или Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
Строка.СтавкаНДССтрокой = "НДС4";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118
ИЛИ Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
Строка.СтавкаНДССтрокой = "НДС4_104";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
Строка.СтавкаНДССтрокой = "НДС2";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
Строка.СтавкаНДССтрокой = "НДС2_102";
КонецЕсли;
Иначе
// Логика для современных версий формата EnterpriseData
Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
Строка.СтавкаНДССтрокой = "НДС18";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
Строка.СтавкаНДССтрокой = "НДС18_118";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
Строка.СтавкаНДССтрокой = "НДС20";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
Строка.СтавкаНДССтрокой = "НДС20_120";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
Строка.СтавкаНДССтрокой = "НДС10";
ИначеЕсли Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
Строка.СтавкаНДССтрокой = "НДС10_110";
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТабличнаяЧасть.Колонки.Удалить("СтавкаНДС");
ТабличнаяЧасть.Колонки.СтавкаНДССтрокой.Имя = "СтавкаНДС";
КонецПроцедуры
В этом коде мы проверяем флаг НДСПоСтавкам2и4. Это технический параметр формата обмена. Если он активен, ставки кодируются упрощенно. Если же используется стандартный формат, мы напрямую присваиваем строковое значение "НДС20" или "НДС20_120". После внесения этих изменений система начнет корректно идентифицировать новую ставку при выгрузке.
Иногда причина кроется не в коде, а в настройках самой синхронизации. Рассмотрим, как это проверить без программирования:
1.6. Если у вас установлена версия 1.5 или ниже, попробуйте переключить ее на более актуальную (если обе конфигурации это поддерживают).Проблема со ставкой НДС часто затрагивает не только документы, но и справочник Номенклатура. При первичной выгрузке новых товаров в БП ставка НДС в карточке товара может остаться пустой. Это критично, так как при создании новых документов непосредственно в Бухгалтерии ставка не будет подставляться автоматически.
Чтобы это исправить, выполните следующие действия:
Номенклатура к полной выгрузке или выберите только те позиции, которые были созданы в период сбоя.Если вы уже выгрузили большое количество документов с пустым НДС, простое исправление правил не изменит уже загруженные данные в Бухгалтерии автоматически. Посмотрим, как восстановить учет:
НДС предъявленный), иначе записи не попадут в Книгу покупок и Книгу продаж, даже если в самой форме документа цифры отображаются правильно.Соблюдение этих шагов позволит полностью устранить проблему с отображением НДС 20% и восстановить корректный документооборот между торговой и бухгалтерской базами.