При обновлении конфигурации 1С:Управление производственным предприятием (УПП) до релиза 1.3.162.1 многие специалисты столкнулись с рядом критических ошибок в работе механизмов закрытия месяца, распределения НДС и проведения складских документов. Проанализируем ситуацию подробнее и разберем причины возникновения этих сбоев, а также рассмотрим варианты их оперативного устранения.
Глобальной причиной нестабильности данного релиза стали масштабные законодательные изменения — введение в России национальной системы прослеживаемости импортных товаров (Федеральный закон от 09.11.2020 № 371-ФЗ). В связи с этим фирма 1С добавила новые формы счетов-фактур, универсальных передаточных документов (УПД) и новые алгоритмы обработки реквизита РНПТ. К сожалению, код был обновлен неравномерно, что привело к несостыковкам вызовов процедур в общих модулях и документах.
Рассмотрим первую и самую частую проблему. При попытке выполнить закрытие месяца бухгалтеры получают сообщение об ошибке следующего вида:
{Обработка.ПроведениеДокументовПоРегистрамНДС.МодульОбъекта(1091)}: Недостаточно фактических параметров
ДокументОбъект.ПодготовитьТаблицыДокумента(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоУслугам, Неопределено);
Выясним причину. Если мы заглянем в модуль документа РеализацияТоваровУслуг, то увидим, что сигнатура процедуры ПодготовитьТаблицыДокумента изменилась. Разработчики конфигурации добавили в нее еще один обязательный параметр, отвечающий за новые требования к учету:
Процедура ПодготовитьТаблицыДокумента(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоУслугам, ТаблицаПоТаре, ТаблицаПоПрослеживаемымТоварам) Экспорт
Однако в обработке ПроведениеДокументовПоРегистрамНДС вызов этой процедуры остался старым (с четырьмя параметрами вместо пяти). Чтобы база могла корректно завершить закрытие месяца до официального обновления, внесем небольшую правку в код обработки.
Разберем по шагам решение проблемы:
ПроведениеДокументовПоРегистрамНДС.ПодготовитьТаблицыДокумента добавьте пятым параметром Неопределено.Исправленный код вызова должен выглядеть так:
ДокументОбъект.ПодготовитьТаблицыДокумента(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоУслугам, Неопределено, Неопределено);
Посмотрим на второй неприятный баг, который проявляется при проведении документа списания. Если в вашей информационной базе в настройках параметров учета отключен флаг Ведется учет прослеживаемых товаров, программа все равно попытается обратиться к параметрам прослеживаемости, что спровоцирует аварийное завершение:
Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {Документ.СписаниеТоваров.МодульОбъекта(1339)}: Поле объекта не обнаружено (ПрослеживаемыеТовары)
Проблема кроется в процедуре ДвиженияПоРегистрамПрослеживаемыхТоваров. Так как учет отключен, внутренний запрос возвращает пустой результат, структура ПараметрыПроведения не заполняется ключом ПрослеживаемыеТовары, а алгоритм пытается передать несуществующее свойство в общий модуль.
Решим эту задачу внедрением защитного условия в самом начале процедуры. Если учет прослеживаемых товаров отключен, мы просто прервем выполнение кода, вернув управление.
Внесите следующие изменения в модуль объекта документа СписаниеТоваров:
Процедура ДвиженияПоРегистрамПрослеживаемыхТоваров(УсловияПрослеживаемости, СтруктураШапкиДокумента)
// Вставляем проверку активности учета прослеживаемых товаров
Если НЕ УсловияПрослеживаемости.ВедетсяУчетПрослеживаемыхТоваров Тогда
Возврат;
КонецЕсли;
// Ниже идет типовой код 1С
УчетнаяПолитикаРегл = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиРегл(Дата, Организация);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
// ... остальной код процедуры
КонецПроцедуры
Проанализируем еще один спорный момент релиза, на который стоит обратить внимание. В документе РеализацияТоваровУслуг, в модуле формы, разработчики внесли изменения в обработчик изменения номенклатуры (ТоварыНоменклатураПриИзменении). Логика заполнения страны происхождения выглядит следующим образом:
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.ПрослеживаемыйТовар = СтрокаТабличнойЧасти.Номенклатура.КодТНВЭД.ПрослеживаемыйТовар;
Если Не ЗначениеЗаполнено(СтрокаТабличнойЧасти.СтранаПроисхождения) И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура.СтранаПроисхождения) Тогда
СтрокаТабличнойЧасти.СтранаПроисхождения = СтрокаТабличнойЧасти.Номенклатура.СтранаПроисхождения;
КонецЕсли;
Обратите внимание на этот код: если пользователь случайно выберет другую номенклатуру в уже заполненной строке, а реквизит страны происхождения ранее был указан вручную, система не обновит страну происхождения на новую из карточки товара (из-за условия Не ЗначениеЗаполнено). Если в вашей компании часто меняют номенклатуру прямо в заполненных строках, это может привести к отправке УПД с некорректными странами происхождения. Обязательно предупредите пользователей или скорректируйте логику обновления этого поля.
Рассмотренные нами костыли и исправления кода помогают экстренно восстановить работу бухгалтерии, чтобы вовремя сдать отчетность по НДС и закрыть период. Однако фирма 1С признала данные ошибки и довольно оперативно выпустила корректирующий релиз конфигурации.
Вместо длительного ручного "латания" модулей, настоятельно рекомендуем обновить вашу базу до релиза 1.3.162.2 (или более новых версий), в котором большая часть проблем с объектами ТаблицаПоПрослеживаемымТоварам, новыми УПД и списанием товаров по методу ФИФО была исправлена централизованно.