В релизах конфигурации «1С:Управление нашей фирмой» (УНФ) версии 3.0.12.237 (и частично в 3.0.12.226) многие пользователи столкнулись с неприятной ошибкой в работе документов продаж. Суть проблемы заключается в том, что при добавлении товара вручную ставка НДС определяется корректно (например, 22% или другая специфическая ставка из карточки), а при использовании механизма «Подбор» программа игнорирует настройки и принудительно устанавливает 20%.
В этой статье мы подробно разберем, почему возникает эта ошибка, какие механизмы платформы задействованы, и рассмотрим способы решения — от установки официального патча до программного исправления ситуации через расширения конфигурации.
Прежде чем приступать к исправлению, давайте проанализируем симптомы. Ошибка проявляется следующим образом:
Это происходит из-за того, что механизм обработки выбранных товаров из формы подбора и механизм прямого редактирования строки используют разные алгоритмы заполнения данных. Проблема особенно критична, когда выполняется пакетное формирование реализаций, где ручная проверка каждой строки затруднительна.
Чтобы понять, как исправить ошибку программно (если патч недоступен), нам нужно углубиться в логику работы конфигурации. Рассмотрим ключевые отличия в обработке событий.
Когда вы выбираете товар в строке табличной части, срабатывает событие ПриИзменении поля «Номенклатура». В этот момент система обращается к серверному методу, который получает все данные о товаре (цену, единицу измерения, ставку НДС) непосредственно из базы данных, актуальные на текущий момент, и заполняет строку.
Механизм подбора работает иначе. Форма подбора накапливает данные во временной структуре (часто это таблица значений или массив структур). Чтобы лучше понять этот процесс, можно изучить, как работает кэш обработок подбора и как данные передаются из корзины в документ.
В версии 3.0.12.237 в процедуре обработки результатов подбора (обычно это ОбработатьДобавлениеСтрокиЗапасов или аналогичная в общем модуле или модуле формы) допущена логическая ошибка.
Параметр, отвечающий за пересчет НДС, либо не передается, либо установлен в значение Ложь. В результате система берет ставку НДС, которая была зафиксирована в форме подбора (а там она может определяться по умолчанию как 20% или не обновляться динамически), и просто копирует ее в документ без сверки с карточкой номенклатуры и настройками договора.
Разработчики 1С признали наличие данной ошибки и выпустили специальное исправление. Для решения проблемы необходимо установить патч EF_00_00812245.
Как установить патч:
EF_00_00812245.Этот патч корректирует общий модуль, отвечающий за обработку подбора, заставляя систему учитывать настройки налогообложения организации и индивидуальные ставки товаров при переносе из корзины.
Если по каким-то причинам вы не можете установить патч (например, у вас сильно доработанная конфигурация), проблему можно решить через расширение.
Нам необходимо перехватить момент добавления строки из подбора и принудительно вызвать пересчет НДС.
Мы будем использовать расширение для формы документа. Наша задача — после стандартного добавления строк пробежаться по ним и перезаполнить ставку НДС, если она отличается от эталонной.
&НаКлиенте
Процедура Расш_ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Вместо ОбработкаВыбора
// Сначала даем отработать типовому механизму
ПродолжитьВызов(ВыбранноеЗначение, ИсточникВыбора);
// Проверяем, что это результат подбора
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура")
ИЛИ ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
// Запускаем пересчет НДС для строк документа
ПересчитатьНДСВДокументе();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПересчитатьНДСВДокументе()
// Получаем объект документа для чтения настроек
ДокументОбъект = РеквизитФормыВЗначение("Объект");
Для Каждого СтрокаТЧ Из Объект.Запасы Цикл
// Получаем актуальную ставку из карточки номенклатуры
ДанныеНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаТЧ.Номенклатура, "СтавкаНДС");
РеальнаяСтавка = ДанныеНоменклатуры.СтавкаНДС;
Если СтрокаТЧ.СтавкаНДС <> РеальнаяСтавка Тогда
СтрокаТЧ.СтавкаНДС = РеальнаяСтавка;
// Здесь также может потребоваться вызов типовых процедур пересчета сумм
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Также вы можете реализовать дополнительный контроль, используя подходы из расширения для проверки заполнения накладных и заказов, чтобы система выдавала предупреждение, если ставка НДС в документе не соответствует основной ставке товара.
Если патч установлен, но проблема сохраняется, проверьте следующие настройки:
В карточке договора может быть явно указан вид цен или тип налогообложения, который диктует ставку НДС.
Для розничных складов тип цен и налогообложение могут быть заданы в карточке склада.
Проверьте элементы справочника в разделе Компания -> Налоги -> Ставки НДС. Убедитесь, что числовое значение ставки заполнено корректно.
Проблема с подстановкой 20% НДС вместо 22% при подборе в УНФ 3.0.12.237 является признанной ошибкой релиза.