После обновления конфигурации "1С:Управление производственным предприятием" (УПП) до релиза 1.3.234.1 многие пользователи столкнулись с проблемой: документ "Отражение зарплаты в регл. учете" перестал проводиться. Система выдает ошибку в обработчике "ОбработкаПроведения" с текстом: "{ОбщийМодуль.УправлениеЗатратамиДвиженияПоРегистрам.Модуль(1383)}: Поле объекта не обнаружено (ВидДокумента)".
Эта ситуация вызывает затруднения в конце расчетного периода, так как блокирует один из ключевых этапов закрытия месяца. Давайте вместе разберемся, почему возникла эта ошибка, и рассмотрим все возможные способы ее исправления, от быстрых "заплаток" до официального решения от фирмы "1С".
Проблема не в самом документе "Отражение зарплаты в регл. учете", а в изменениях, которые разработчики внесли в общий механизм учета затрат. Проанализируем ситуацию по шагам.
УправлениеЗатратамиДвиженияПоРегистрам. Этот модуль используется многими документами для формирования движений по регистрам затрат. Документ отражения зарплаты — один из них."Поступление товаров и услуг". Этот блок кода проверяет ряд условий, одно из которых — обращение к свойству ВидДокумента из структуры шапки документа.СтруктураШапкиДокумента) вызывают общие функции (например, ОбщегоНазначения.СформироватьСтруктуруШапкиДокумента), документ "Отражение зарплаты в регл. учете" (а также его "брат" "Отражение зарплаты в упр. учете") формирует эту структуру "вручную" внутри своей обработки проведения. При этом разработчики этого документа не предусмотрели добавление в структуру свойства "ВидДокумента".Таким образом, получается следующая цепочка: документ отражения зарплаты вызывает общий модуль, общий модуль пытается проанализировать свойство ВидДокумента, которого в переданной структуре нет, и система генерирует исключение "Поле объекта не обнаружено".
Теперь, когда причина ясна, рассмотрим несколько путей решения.
Фирма "1С" признала наличие этой проблемы и зарегистрировала ее под кодом ошибки 00-00667550. Для оперативного исправления был предложен официальный патч, который заключается в модификации общего модуля УправлениеЗатратамиДвиженияПоРегистрам. Это самый безопасный и правильный способ, если вы пока не готовы обновляться на следующий релиз.
Порядок действий:
УправлениеЗатратамиДвиженияПоРегистрам.ДвиженияПоРегистрамОтражениеЗатрат.Изменение №1.
Находим строку:
И СтруктураШапкиДокумента.ВидДокумента = "ПоступлениеТоваровУслуг" И Выборка.Услуга
И заменяем ее на строку с дополнительной проверкой на существование свойства:
И СтруктураШапкиДокумента.Свойство("ВидДокумента") И СтруктураШапкиДокумента.ВидДокумента = "ПоступлениеТоваровУслуг"
Эта правка гарантирует, что система будет обращаться к свойству ВидДокумента только в том случае, если оно в принципе существует в структуре.
Изменение №2.
Находим строку:
Если ЗначениеЗаполнено(СчетЗатратБУПоСчетуНУ) Тогда
И заменяем ее на более сложное условие:
Если Структура.Свойство("Услуга") И Структура.Услуга И ЗначениеЗаполнено(СчетЗатратБУПоСчетуНУ) Тогда
Эта правка добавляет проверку, что дальнейшая логика, связанная с услугами, выполняется только для тех данных, где признак услуги действительно присутствует.
После внесения этих изменений сохраните конфигурацию и обновите базу данных. Ошибка должна исчезнуть.
Важно: Самым надежным решением в долгосрочной перспективе является обновление конфигурации УПП до следующего релиза (например, 1.3.235.1 и выше), в котором эта ошибка уже исправлена разработчиками.
Этот подход нацелен на устранение первопричины — отсутствия нужного реквизита в структуре шапки документа. Раз уж общий модуль ожидает получить ВидДокумента, давайте добавим его там, где формируется структура.
Порядок действий:
"ОтражениеЗарплатыВРеглУчете".ОбработкаПроведения(Отказ, Режим).ВремСтруктураШапкиДокумента = Новый Структура;.
// Устранение ошибки релиза 1.3.234.1
ВремСтруктураШапкиДокумента.Вставить("ВидДокумента", Метаданные().Имя);
Этот код программно добавляет в структуру ключ "ВидДокумента" и присваивает ему имя текущего документа (т.е. "ОтражениеЗарплатыВРеглУчете"). Таким образом, когда управление будет передано в общий модуль, он получит все ожидаемые им данные, и ошибка не возникнет.
Не забудьте: Аналогичную проблему имеет документ "ОтражениеЗарплатыВУпрУчете", поэтому для него следует проделать ту же самую операцию в его модуле объекта.
Это еще один вариант исправления в общем модуле УправлениеЗатратамиДвиженияПоРегистрам, который был предложен сообществом до появления официального патча. Он также полностью рабочий.
Суть в том, чтобы вместо проверки свойства ВидДокумента проверять непосредственно тип документа-регистратора.
Порядок действий:
УправлениеЗатратамиДвиженияПоРегистрам и процедуру ДвиженияПоРегистрамОтражениеЗатрат.
И СтруктураШапкиДокумента.ВидДокумента = "ПоступлениеТоваровУслуг" И Выборка.Услуга
И замените ее на проверку типа ссылки документа:
И ТипЗнч(СтруктураШапкиДокумента.Ссылка) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") И Выборка.Услуга
Этот код выполняет ту же логическую задачу — убедиться, что специальная обработка услуг запускается только для документа "Поступление товаров и услуг", — но делает это через анализ типа объекта, что обходит проблему отсутствующего свойства ВидДокумента для других документов.
Подведем итог. Мы рассмотрели три эффективных способа исправления ошибки проведения документа отражения зарплаты. Официальный патч (Решение 1) является наиболее предпочтительным. "Методически правильное" исправление в документе (Решение 2) также является отличным вариантом, так как исправляет саму причину несоответствия данных. Быстрое исправление (Решение 3) — это рабочая альтернатива. Выбирайте тот способ, который лучше всего подходит под ваши рабочие процессы и политику внесения изменений в конфигурацию.