Как пересчитать сумму НДС в документах 1С:Бухгалтерия 3.0 после группового изменения ставки?

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

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

Разберем, как решить эту задачу без написания сложных внешних инструментов, когда требуется пересчет табличной части документов по выбранному типу, используя встроенные возможности платформы и типовые механизмы конфигурации «Бухгалтерия предприятия 3.0».

Использование произвольного алгоритма в групповой обработке

Самый эффективный и безопасный способ — воспользоваться возможностью выполнения произвольного кода в обработке «Групповое изменение реквизитов». Для этого необходимо зайти в «Дополнительные параметры» обработки и установить флаг «Выполнять в транзакции» и «Показывать служебные реквизиты». После этого в списке доступных действий появится пункт «Выполнить произвольный алгоритм».

Рассмотрим основной код, который необходимо вставить в окно алгоритма для корректного пересчета суммы НДС в табличной части Товары:


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

Проанализируем работу функции РассчитатьСуммуНДСТабЧасти. Она принимает три ключевых параметра:

  1. СтрокаТабличнойЧасти — текущая строка, которую мы обрабатываем в цикле.
  2. СуммаВключаетНДС — булево значение. Если в вашем документе цена включает налог, передаем Истина.
  3. СпособВыставления — уточняющий параметр для округления и специфики отражения налога.

Пересчет итогов документа

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

Разберем расширенный вариант алгоритма:


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

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

В данном примере мы вместо фиксированного значения Истина во втором параметре используем реквизит самого объекта Объект.СуммаВключаетНДС. Это делает код универсальным для разных настроек налогообложения внутри документов.

Нюансы при работе с возвратами и корректировками

Часто пользователи задаются вопросом: «Как пересчитать НДС на вкладке Возвраты?». Здесь важно понимать техническое устройство метаданных 1С. В типовых конфигурациях заголовок на форме (например, «Возвраты» или «Услуги») редко совпадает с программным именем табличной части. Если вам требуется изменение ставки НДС в документах реализации или приобретений, обязательно проверьте внутренние имена таблиц.

Выясним, как определить имя таблицы:

  1. В режиме 1С:Предприятие нажмите «Ещё» — «Изменить форму».
  2. Найдите нужную группу и посмотрите поле «Путь к данным». Если там написано Объект.ВозвратыТоваров, значит, в цикле нужно использовать именно это имя.
  3. В документе «Возврат товаров от покупателя» основная таблица чаще всего называется просто Товары.

Если вы столкнулись с документом, где есть и товары, и услуги, алгоритм следует продублировать для каждой коллекции:


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

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

Почему нельзя использовать простую формулу Сумма * 20 / 120?

Иногда возникает соблазн написать простой расчет: Строка.СуммаНДС = Строка.Сумма * 20 / 120. Посмотрим на риски такого подхода. Стандартная функция ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуНДСТабЧасти учитывает:

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

Критически важный этап: Перепроведение документов

Важно помнить: групповое изменение реквизитов меняет данные непосредственно в базе данных (в таблицах документов), но оно не обновляет движения по регистрам автоматически. Если вы просто пересчитаете НДС программно, то в печатной форме документа вы увидите новые цифры, но в Оборотно-сальдовой ведомости по счету 68.02 и в Книге продаж останутся старые значения.

После выполнения алгоритма пересчета необходимо:

  1. Выделить обработанные документы в списке.
  2. Нажать правую кнопку мыши и выбрать пункт «Провести».
  3. Если документов много (десятки тысяч), рекомендуется использовать стандартную обработку «Групповое перепроведение документов», чтобы восстановить последовательность и корректно сформировать записи в регистрах «НДС Продажи» и «НДС Предъявленный» — для этого есть обработка автоматического массового проведения документов.

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

← На главную