При настройке синхронизации данных между конфигурациями «1С:Управление торговлей 11» и «1С:Бухгалтерия предприятия 3.0» специалисты часто сталкиваются с ситуацией, когда итоговая сумма документа в принимающей базе не совпадает с суммой в источнике. Наиболее критичный случай — когда сумма документа в БП оказывается «очищенной» от НДС, хотя в УТ она отображается корректно. Проанализируем причины этой проблемы, разберем механизм работы флагов налогообложения и выясним, как избежать подобных ошибок при программной доработке системы.
Рассмотрим ситуацию: в УТ документ поступления имеет итоговую сумму (например, 120 000 руб., включая НДС 20 000 руб.). После выполнения синхронизации в БП этот же документ отображается с итоговой суммой 100 000 руб. При этом в самой форме документа БП может быть установлен флаг Сумма включает НДС, но математически налог просто «выделяется» из пришедшей меньшей суммы.
Выясним причину: это происходит из-за рассинхронизации состояния флага Цена включает НДС и фактических значений в табличной части Товары. Если флаг установлен программно без вызова соответствующих процедур пересчета, система считает, что цена уже содержит налог, но сама цифра в колонке Цена остается «чистой» (без НДС). При обмене через формат Enterprise Data передаются конкретные значения сумм, которые БП интерпретирует согласно пришедшим признакам.
Чаще всего корень проблемы кроется в расширениях или доработках конфигурации УТ. Разберем типичный сценарий «неудачной» автоматизации, упомянутый в практике внедрения:
Цена включает НДС должен быть всегда включен (Истина).ПередЗаписью или через обработку заполнения принудительно устанавливает Объект.ЦенаВключаетНДС = Истина;.В итоге мы получаем документ-мутант: визуально галочка стоит, но итоговая сумма (Всего) в УТ может отображаться правильно только за счет динамических экранных пересчетов, в то время как в базе хранятся «сырые» данные без налога.
Когда данные попадают в 1С:Бухгалтерию, вступает в силу механизм ОбменДанными.Загрузка = Истина. Рассмотрим подробнее, к чему это приводит:
Процедуры и функции, которые обычно срабатывают при ручном изменении флага в форме (событие ПриИзменении), не вызываются при загрузке данных через синхронизацию. БП доверяет входящему XML-файлу (или JSON-пакету). Если в пакете указано:
ЦенаВключаетНДС = trueБухгалтерия просто записывает эти значения. В результате итоговое поле Всего в БП становится равным 100 000, хотя пользователь в УТ ожидал увидеть 120 000. Проблема усугубляется, если в УТ суммы НДС в строках не были пересчитаны программно — тогда в БП может прийти пустая сумма налога или сумма, рассчитанная по неверному алгоритму.
Для того чтобы избежать расхождений, при любом программном изменении настроек налогообложения в документе необходимо вызывать штатные процедуры пересчета табличных частей. В типовой конфигурации «Управление торговлей 11» для этого следует использовать экспортные методы общих модулей.
Проанализируем пример правильного пересчета документа при изменении флага Цена включает НДС:
// Пример корректного изменения флага в коде
Объект.ЦенаВключаетНДС = Истина;
// Структура параметров для пересчета (зависит от версии УТ)
ПараметрыПересчета = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммНДС();
ПараметрыПересчета.ОчищатьСуммуНДС = Ложь;
// Вызов штатного механизма пересчета всей табличной части "Товары"
ОбработкаТабличнойЧастиКлиентСервер.РассчитатьСтавкиИСуммыНДСВТабличнойЧасти(Объект, "Товары", ПараметрыПересчета);
// Также необходимо обновить общие итоги документа
ОбработкаТабличнойЧастиКлиентСервер.РассчитатьИтоговыеПоказателиДокумента(Объект);
Только после выполнения этих действий данные в табличной части придут в соответствие с установленным флагом, и при выгрузке в БП суммы совпадут до копейки.
Если вы обнаружили, что документы уже выгружены некорректно, выполним следующие шаги для исправления:
Цена включает НДС и установите его заново вручную. Если сумма документа изменилась — значит, в базе хранились неверные данные.Состав отправляемых данных в настройках синхронизации.Договоре с контрагентом или в Соглашении не установлены жесткие настройки, противоречащие логике документа. Иногда БП пытается переопределить флаг НДС при открытии формы документа на основании настроек договора.Разберем важные моменты, которые помогут предотвратить проблему «потери» НДС в будущем:
Во-первых, при реализации требований типа «сделать флаг установленным по умолчанию» никогда не ограничивайтесь простым присвоением значения реквизиту. Всегда ищите в конфигурации обработчик события ЦенаВключаетНДСПриИзменении и анализируйте, какие процедуры он вызывает. Обычно это цепочка вызовов, заканчивающаяся в модуле ОбработкаТабличнойЧастиКлиентСервер.
Во-вторых, обратите внимание на Вид цены. В настройках вида цены в УТ также есть признак Цена включает НДС. Если вы используете заполнение цен по виду цены, система может автоматически менять флаг в документе. Проверьте, чтобы в используемых видах цен настройки соответствовали ожиданиям бухгалтерии.
В-третьих, проанализируйте использование Заказов поставщикам. Если поступление создается на основании заказа, оно наследует настройки налогообложения из него. Если ваша доработка затрагивает только поступления, но игнорирует заказы — ждите конфликтов при заполнении цен.
Резюме: проблема «лишения НДС» — это не баг платформы 1С, а следствие нарушения целостности данных в базе-источнике (УТ). Для решения достаточно привести программный код в соответствие с бизнес-логикой типовой конфигурации, обеспечив обязательный пересчет сумм при изменении параметров налогообложения.