Как программно заполнить и пересчитать НДС в 1С:УТ 11.4 на сервере?

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

При разработке механизмов интеграции, например, загрузки заказов с сайта или обмена с внешними системами, программисты часто сталкиваются с необходимостью корректного заполнения табличных частей документов. Одной из наиболее трудоемких задач является расчет НДС. В конфигурациях на базе 1С:Управление торговлей 11.4 (а также в ERP 2 и КА 2) механизмы расчета вынесены в специализированные модули, и простая запись значения в колонку СуммаНДС часто не приводит к нужному результату, так как при открытии формы или проведении документа срабатывают стандартные пересчеты, обнуляющие ваши данные.

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

Метод 1: Использование глобального механизма ОбработкаТабличнойЧастиСервер

Наиболее правильным и надежным способом в типовых конфигурациях является использование серверного модуля ОбработкаТабличнойЧастиСервер. Этот метод позволяет не просто рассчитать математическую сумму, а задействовать всю бизнес-логику документа, включая проверки на налогообложение и настройки учетной политики.

Рассмотрим пошагово, как реализовать этот процесс при создании документа ЗаказКлиента:

  1. Подготовка структуры действий. Нам необходимо указать системе, какие именно колонки и показатели должны быть пересчитаны.
  2. Вызов серверной процедуры. Передача табличной части в универсальный механизм обработки.

Проанализируем пример кода для серверного вызова:


// Создаем структуру, которая определит правила пересчета
СтруктураПересчета = Новый Структура;
СтруктураПересчета.Вставить("ЦенаВключаетНДС", ОбъектДокумента.ЦенаВключаетНДС);
СтруктураПересчета.Вставить("Налогообложение", ОбъектДокумента.Налогообложение);

СтруктураДействий = Новый Структура;
// Указываем, что требуется пересчитать НДС и суммы
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчета);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчета);
СтруктураДействий.Вставить("ПересчитатьСумму");

// Вызываем типовой серверный метод для всей табличной части
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ОбъектДокумента.Товары, СтруктураДействий, Неопределено);

Важный нюанс: Третий параметр функции — КэшированныеЗначения. Если вы обрабатываете большой массив данных (например, создаете сотни документов в цикле), рекомендуется инициализировать этот кэш. Это значительно ускорит работу, так как система не будет повторно запрашивать из базы данных параметры ставок НДС для каждой строки.

Метод 2: Легковесный расчет через УчетНДСКлиентСервер

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

Рассмотрим функцию РассчитатьСуммуНДС. Она удобна тем, что доступна в любом контексте и не требует формирования сложных структур:


// Пример простого расчета суммы НДС для строки
СтавкаНДСЧислом = 20; // Или получение из справочника
СуммаНДС = УчетНДСКлиентСервер.РассчитатьСуммуНДС(СтрокаТовара.Сумма, ОбъектДокумента.ЦенаВключаетНДС, СтрокаТовара.СтавкаНДС);

Однако помните, что этот метод только возвращает число. Вам все равно придется вручную присвоить его реквизиту СуммаНДС в строке табличной части.

Критически важные реквизиты «шапки» документа

Выясним причину, по которой расчет НДС может возвращать нулевое значение, даже если код написан верно. Все типовые функции пересчета ориентируются на настройки документа. Перед вызовом процедур пересчета убедитесь, что в объекте заполнены следующие поля:

Автоматическое заполнение ставок НДС

Перед тем как пересчитывать суммы, в строках табличной части должны быть проставлены сами ставки НДС (ссылки на справочник СтавкиНДС). Если вы загружаете данные с сайта, где ставка представлена строкой "20%", вам необходимо найти соответствующую ссылку в 1С. Для добавления актуальных ставок налога в устаревшие релизы конфигурации подойдёт расширение для добавления новых ставок НДС в УТ 11.4.

Для массового заполнения ставок по данным номенклатуры в УТ 11.4 удобно использовать модуль ПродажиСервер:


// Заполнение ставок НДС на основании данных о номенклатуре и настройках документа
ПараметрыЗаполнения = Новый Структура("Объект", ОбъектДокумента);
ПродажиСервер.ЗаполнитьСтавкиНДСВТЧ(ОбъектДокумента, ПараметрыЗаполнения);

Этот метод проанализирует каждую позицию номенклатуры в документе, учтет настройки налогообложения организации и корректно заполнит колонку СтавкаНДС. Только после этого шага рекомендуется выполнять пересчет сумм, описанный в первом методе. Для автоматической подстановки ставок в документах закупки можно использовать расширение для подстановки ставок НДС поставщиков.

Особенности работы в фоновых заданиях

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

Резюме: Алгоритм правильной программной загрузки

Для обеспечения стабильного результата при программном создании документа придерживайтесь следующей последовательности действий:

  1. Заполните основные реквизиты шапки (Организация, Склад, Партнер, Налогообложение).
  2. Сформируйте строки табличной части Товары, указав Номенклатура, Количество и Цена.
  3. Вызовите ПродажиСервер.ЗаполнитьСтавкиНДСВТЧ для расстановки правильных ставок.
  4. Используйте ОбработкаТабличнойЧастиСервер.ОбработатьТЧ для финального расчета сумм и НДС.
  5. Не забудьте вызвать метод Объект.Записать(), чтобы зафиксировать изменения в базе данных.

Соблюдение этого порядка гарантирует, что данные в 1С будут полностью соответствовать тем, что пришли с сайта, а бухгалтерские отчеты и печатные формы будут формироваться без ошибок. При настройке регулярного обмена с торговыми площадками заказы и остатки синхронизируются автоматически с помощью интеграции 1С с маркетплейсами Ozon, Wildberries, Яндекс.Маркет.

← На главную