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