Почему сумма документа поступления лишается НДС при обмене из УТ 11 в БП 3.0?

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

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

Суть проблемы: визуальное и фактическое расхождение сумм

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

Выясним причину: это происходит из-за рассинхронизации состояния флага Цена включает НДС и фактических значений в табличной части Товары. Если флаг установлен программно без вызова соответствующих процедур пересчета, система считает, что цена уже содержит налог, но сама цифра в колонке Цена остается «чистой» (без НДС). При обмене через формат Enterprise Data передаются конкретные значения сумм, которые БП интерпретирует согласно пришедшим признакам.

Анализ механизма программной ошибки

Чаще всего корень проблемы кроется в расширениях или доработках конфигурации УТ. Разберем типичный сценарий «неудачной» автоматизации, упомянутый в практике внедрения:

  1. Бизнес-задача: во всех новых документах поступления флаг Цена включает НДС должен быть всегда включен (Истина).
  2. Реализация: программист создает расширение, где в процедуре ПередЗаписью или через обработку заполнения принудительно устанавливает Объект.ЦенаВключаетНДС = Истина;.
  3. Результат: реквизит в базе меняется, но суммы в строках табличной части не пересчитываются. Если документ создается на основании (например, на основании «Заказа поставщику»), где цены были указаны «без НДС», то в новое «Поступление» перекочуют старые цены.

В итоге мы получаем документ-мутант: визуально галочка стоит, но итоговая сумма (Всего) в УТ может отображаться правильно только за счет динамических экранных пересчетов, в то время как в базе хранятся «сырые» данные без налога.

Почему БП «теряет» НДС при загрузке?

Когда данные попадают в 1С:Бухгалтерию, вступает в силу механизм ОбменДанными.Загрузка = Истина. Рассмотрим подробнее, к чему это приводит:

Процедуры и функции, которые обычно срабатывают при ручном изменении флага в форме (событие ПриИзменении), не вызываются при загрузке данных через синхронизацию. БП доверяет входящему XML-файлу (или JSON-пакету). Если в пакете указано:

Бухгалтерия просто записывает эти значения. В результате итоговое поле Всего в БП становится равным 100 000, хотя пользователь в УТ ожидал увидеть 120 000. Проблема усугубляется, если в УТ суммы НДС в строках не были пересчитаны программно — тогда в БП может прийти пустая сумма налога или сумма, рассчитанная по неверному алгоритму.

Как правильно программно устанавливать флаг НДС

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

Проанализируем пример правильного пересчета документа при изменении флага Цена включает НДС:


// Пример корректного изменения флага в коде
Объект.ЦенаВключаетНДС = Истина;

// Структура параметров для пересчета (зависит от версии УТ)
ПараметрыПересчета = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммНДС();
ПараметрыПересчета.ОчищатьСуммуНДС = Ложь;

// Вызов штатного механизма пересчета всей табличной части "Товары"
ОбработкаТабличнойЧастиКлиентСервер.РассчитатьСтавкиИСуммыНДСВТабличнойЧасти(Объект, "Товары", ПараметрыПересчета);

// Также необходимо обновить общие итоги документа
ОбработкаТабличнойЧастиКлиентСервер.РассчитатьИтоговыеПоказателиДокумента(Объект);

Только после выполнения этих действий данные в табличной части придут в соответствие с установленным флагом, и при выгрузке в БП суммы совпадут до копейки.

Пошаговая инструкция по исправлению ситуации

Если вы обнаружили, что документы уже выгружены некорректно, выполним следующие шаги для исправления:

  1. Проверка в УТ: Откройте проблемный документ. Снимите флаг Цена включает НДС и установите его заново вручную. Если сумма документа изменилась — значит, в базе хранились неверные данные.
  2. Исправление данных в источнике (УТ): Напишите обработку, которая для документов за выбранный период выполнит штатный пересчет. Важно вызвать именно те процедуры, которые имитируют изменение флага в форме.
  3. Сброс кэша синхронизации: После исправления документов в УТ их необходимо повторно зарегистрировать для выгрузки в БП. Это можно сделать через Состав отправляемых данных в настройках синхронизации.
  4. Проверка настроек БП: Убедитесь, что в Договоре с контрагентом или в Соглашении не установлены жесткие настройки, противоречащие логике документа. Иногда БП пытается переопределить флаг НДС при открытии формы документа на основании настроек договора.

Рекомендации для разработчиков и аналитиков

Разберем важные моменты, которые помогут предотвратить проблему «потери» НДС в будущем:

Во-первых, при реализации требований типа «сделать флаг установленным по умолчанию» никогда не ограничивайтесь простым присвоением значения реквизиту. Всегда ищите в конфигурации обработчик события ЦенаВключаетНДСПриИзменении и анализируйте, какие процедуры он вызывает. Обычно это цепочка вызовов, заканчивающаяся в модуле ОбработкаТабличнойЧастиКлиентСервер.

Во-вторых, обратите внимание на Вид цены. В настройках вида цены в УТ также есть признак Цена включает НДС. Если вы используете заполнение цен по виду цены, система может автоматически менять флаг в документе. Проверьте, чтобы в используемых видах цен настройки соответствовали ожиданиям бухгалтерии.

В-третьих, проанализируйте использование Заказов поставщикам. Если поступление создается на основании заказа, оно наследует настройки налогообложения из него. Если ваша доработка затрагивает только поступления, но игнорирует заказы — ждите конфликтов при заполнении цен.

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

← На главную