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