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

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

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

Изменение ставки НДС в табличной части документа (некорректный подход)

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

Рассмотрим пример кода, который часто встречается при попытке решить проблему "в лоб":


ПростаяПеременная = ЭтотОбъект.ТабличнаяЧасть1;
Для Каждого СтрокаТЧ Из ПростаяПеременная Цикл
    СтрокаТЧ.СтавкаНДС = ПолеВвода1;
КонецЦикла;
ЭтотОбъект.Записать();

В этом примере мы видим, что переменная ПростаяПеременная получает ссылку на табличную часть текущего объекта (документа). Затем в цикле по каждой строке этой табличной части реквизит СтавкаНДС устанавливается в значение, полученное из ПолеВвода1. После цикла документ записывается методом ЭтотОбъект.Записать().

Почему этот подход некорректен для глобального изменения?

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

Корректное программное изменение ставки НДС в справочнике "Номенклатура"

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

Рассмотрим пример кода, который эффективно решает эту задачу:


Для Каждого СтрокаТЧ Из ПростаяПеременная Цикл
    ОбъектНоменклатуры = СтрокаТЧ.Номенклатура.ПолучитьОбъект();
    ОбъектНоменклатуры.СтавкаНДС = СтавкаНДС;
    ОбъектНоменклатуры.Записать();
КонецЦикла;

Давайте подробно объясним каждую строку этого кода:

  1. Для Каждого СтрокаТЧ Из ПростаяПеременная Цикл: Как и в предыдущем примере, мы обходим строки некой табличной части. Предположим, что ПростаяПеременная — это табличная часть, содержащая список номенклатуры, для которой мы хотим изменить ставку НДС. Это может быть табличная часть документа, обработки или любой другой объект, где есть ссылки на элементы справочника Номенклатура.

  2. ОбъектНоменклатуры = СтрокаТЧ.Номенклатура.ПолучитьОбъект();: Это ключевая строка.

    • СтрокаТЧ.Номенклатура: В текущей строке табличной части мы получаем ссылку на элемент справочника Номенклатура. Это просто ссылка, указатель на элемент базы данных.
    • .ПолучитьОбъект(): Для того чтобы программно изменить реквизиты элемента справочника, нам нужно получить не просто ссылку, а сам объект справочника. Метод ПолучитьОбъект() возвращает объект СправочникОбъект.Номенклатура, который мы можем изменять.
  3. ОбъектНоменклатуры.СтавкаНДС = СтавкаНДС;: Здесь мы присваиваем новое значение реквизиту СтавкаНДС у полученного объекта Номенклатура. Переменная СтавкаНДС должна содержать желаемое значение, например, Перечисления.СтавкиНДС.НДС20.

  4. ОбъектНоменклатуры.Записать();: После изменения реквизита необходимо записать объект обратно в базу данных. Только после вызова метода Записать() изменения станут постоянными.

Преимущества этого подхода:

Дополнительные важные аспекты при работе со ставками НДС

Периодичность и история ставок НДС

Мы выясним важную особенность: в современных конфигурациях 1С:Бухгалтерии (начиная с версии 3.0.89) и других типовых решениях реквизит Процент НДС (или СтавкаНДС) в карточке номенклатуры является периодическим и имеет "Историю ставки НДС". Это означает, что система фиксирует все изменения ставки НДС с указанием даты начала действия. При переходе на новые версии учетных систем часто требуется обработка для заполнения истории ставок НДС из карточки товара. Если же необходимо пакетно обновить данные в регистрах, можно применить инструмент для изменения ставки НДС с указанной даты в регистре сведений.

Влияние на документы и перепроведение

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

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

Типовые механизмы массового изменения ставок НДС

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

  1. Обработка "Групповое изменение реквизитов": Это универсальный инструмент. Чтобы сделать работу с ним еще эффективнее, можно использовать специальное расширение, добавляющее возможность изменять ставку НДС в типовой обработке.

  2. Специализированные помощники и обработки: При глобальных изменениях законодательства (например, переход на 22%) могут быть полезны готовые решения. Так, для пользователей актуальных версий торговых систем разработана обработка для групповой замены ставок НДС 18% и 20% на 22% в УТ 11.

  3. Рабочее место "Ставки НДС номенклатуры": В некоторых конфигурациях предусмотрены специализированные рабочие места для групповой установки ставок.

Особенности нетиповых ставок

В случае использования нестандартных ставок НДС нам, возможно, потребуется дополнительная настройка. Если в вашей конфигурации не хватает стандартных значений, можно воспользоваться готовым решением и добавить ставки НДС 22%, 5%, 7% в 1С:УТ 11.5, КА 2.5 или ERP 2.5.

Контроль и тестирование

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

Транзакционность при программных изменениях

При программной модификации большого количества объектов мы настоятельно рекомендуем использовать транзакции. Это позволяет гарантировать целостность данных. Используйте методы НачатьТранзакцию(), ЗафиксироватьТранзакцию() и ОтменитьТранзакцию() для управления процессом записи.

← На главную