Как исправить автоматическую подстановку ставки НДС в документе «Заказ покупателя» в 1С:Управление торговлей 10.3

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

При работе в программе 1С:Управление торговлей редакции 10.3 пользователи часто сталкиваются с ситуацией, когда при добавлении товара или услуги в табличную часть документа «Заказ покупателя» автоматически устанавливается некорректная ставка НДС (например, 0% вместо 18% или 20%). При этом в персональных настройках пользователя и в самой карточке номенклатуры могут быть указаны верные значения.

В данной статье мы подробно разберем, по каким алгоритмам система заполняет ставку НДС в документах продажи, как выявить скрытые программные изменения (доработки), выполненные ранее, и как вернуть стандартное поведение системы. Проанализируем ситуацию по шагам — от простых пользовательских настроек до анализа исходного кода конфигурации.

Шаг 1. Проверка стандартных настроек системы и данных номенклатуры

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

  1. Настройки пользователя. Важно понимать, что значение «Ставка НДС» в настройках конкретного пользователя используется исключительно при создании нового элемента в справочнике Номенклатура. На заполнение ставки непосредственно в самом документе эта настройка прямого влияния не оказывает.
  2. Ставка НДС в карточке товара. Проверим значение реквизита «Ставка НДС» внутри карточки выбранной номенклатуры (вкладка «По умолчанию»). По умолчанию система должна подтягивать значение именно оттуда.
  3. Параметры договора контрагента. Откроем договор с покупателем, выбранный в документе. Если в договоре установлен флаг «Реализация на экспорт», система принудительно переопределит ставку НДС на 0% для всех позиций в табличной части, игнорируя настройки в карточках товаров.
  4. Налоговый режим организации (Учетная политика). Если организация, от имени которой оформляется заказ, применяет упрощенную систему налогообложения (УСН) или ЕНВД, программа автоматически подставит значение «Без НДС».
  5. Настройки цен и валюты в документе. Перейдем в меню «Цены и валюта» (кнопка в шапке документа) и проверим, установлен ли флаг «Учитывать НДС». Если данный флаг снят, колонки со ставкой и суммой НДС могут быть недоступны для заполнения или очищаться.

Шаг 2. Где в коде происходит автозаполнение ставки НДС

Если все стандартные настройки проверены, но при выборе номенклатуры в документе «Заказ покупателя» все равно упорно проставляется ставка 0%, значит, мы имеем дело с программным изменением конфигурации. Разберем по шагам, как устроен этот механизм в коде 1С:Управление торговлей 10.3.

При изменении номенклатуры в табличной части «Товары» или «Услуги» на форме документа вызывается обработчик события изменения реквизита. Рассмотрим типичную цепочку вызовов:

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

Типовой фрагмент кода, отвечающий за заполнение ставки, выглядит следующим образом:


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

    // Если это реализация на экспорт, принудительно ставим 0%
    Если ДокументОбъект.ДоговорКонтрагента.РеализацияНаЭкспорт Тогда
        СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС0;
    Иначе
        // В обычном случае берем ставку из карточки номенклатуры
        СтрокаТабличнойЧасти.СтавкаНДС = СтрокаТабличнойЧасти.Номенклатура.СтавкаНДС;
    КонецЕсли;

КонецПроцедуры

Шаг 3. Почему сравнение конфигураций не показывает изменения в коде

Часто разработчики сталкиваются со следующей проблемой: они точно знают, что когда-то меняли код (например, временно прописывали жесткое условие замены ставки НДС на 0% для тестирования или под конкретную сделку), но стандартная процедура сравнения основной конфигурации с конфигурацией базы данных не выявляет никаких отличий. Проанализируем, почему так происходит.

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

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

  1. Откройте базу данных в режиме Конфигуратор.
  2. В главном меню перейдите в раздел Конфигурация -> Поддержка -> Настройка поддержки...
  3. В открывшемся окне нажмите кнопку Сравнить/объединить (это запустит процесс сопоставления вашей текущей рабочей конфигурации с эталонной конфигурацией поставщика).
  4. Дождитесь окончания анализа. В появившемся дереве метаданных будут наглядно показаны все модули и объекты, содержащие отличия от типового программного кода.

Шаг 4. Поиск скрытой доработки с помощью глобального поиска

Если сравнение с конфигурацией поставщика показывает слишком много изменений и вам трудно сориентироваться, воспользуемся вторым надежным методом — Глобальным поиском по конфигурации. Разберем, как быстро найти строки, в которых принудительно присваивается ставка НДС 0%.

  1. В Конфигураторе нажмите сочетание клавиш Ctrl + Shift + F (или меню Текст -> Найти в конфигурации...).
  2. В поле «Искать» введите поисковый запрос, соответствующий системному имени ставки НДС 0% в перечислении. В типовых конфигурациях это выглядит как Перечисления.СтавкиНДС.НДС0 или просто НДС0 (также проверьте варианты НДС_0, если конфигурация сильно изменена).
  3. В области поиска укажите «Во всей конфигурации» (или выберите только «Общие модули» и «Документы» для ускорения процесса).
  4. Нажмите кнопку Найти.

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


// Пример некорректной жесткой доработки, ломающей стандартную логику
СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС0; // Было изменено вручную

Если вы обнаружили подобное условие, его необходимо закомментировать или вернуть к типовому виду, обеспечив получение ставки из реквизитов номенклатуры:


// Возвращаем типовое заполнение ставки НДС из карточки номенклатуры
СтрокаТабличнойЧасти.СтавкаНДС = СтрокаТабличнойЧасти.Номенклатура.СтавкаНДС;

Шаг 5. Проверка внешних обработок заполнения

Если поиск по конфигурации и сравнение с конфигурацией поставщика не принесли результатов, существует еще одна вероятность: в системе настроена и используется внешняя обработка заполнения табличной части или внешняя печатная форма, которая переопределяет значения при записи документа.

Для проверки этого предположения перейдите в режим «1С:Предприятие» и откройте справочник «Дополнительные внешние обработки» (раздел Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние обработки заполнения табличных частей). Проверьте, нет ли там активных обработок, привязанных к документу «Заказ покупателя». Если такие обработки присутствуют, временно отключите их и проверьте, исправилась ли ситуация с заполнением НДС.

Применяя данные методы последовательно — от простых настроек договора до детального анализа кода и сравнения конфигураций — вы гарантированно найдете причину некорректного заполнения ставки НДС в документах и сможете оперативно ее устранить.

← На главную