При переходе на релиз 1.3.234.3 конфигурации «Управление производственным предприятием» (УПП) многие пользователи столкнулись с критической проблемой. При попытке проведения документа Амортизация НМА система выдает программную ошибку, которая блокирует закрытие месяца. В этом материале мы подробно разберем, почему возникает эта ситуация, проанализируем код и внедрим исправление, рекомендованное технической поддержкой 1С.
Проблема проявляется в момент проведения регламентного документа. Система выдает сообщение следующего содержания: {ОбщийМодуль.УправлениеВнеоборотнымиАктивами.Модуль(3217)}: Поле объекта не обнаружено (КорректировкаОбесценения). Примечательно, что если в документе снять флаг «Бухгалтерский учет» (БУ), документ проводится без ошибок. Это сразу наводит на мысль, что проблема кроется в алгоритмах распределения затрат именно для бухгалтерского учета.
Давайте проанализируем контекст возникновения ошибки. В последних релизах УПП разработчики активно внедряли механизмы учета обесценения активов в соответствии с новыми федеральными стандартами бухгалтерского учета (ФСБУ). Поле КорректировкаОбесценения было добавлено в логику распределения амортизации основных средств (ОС), однако программный код, отвечающий за нематериальные активы (НМА) и НИОКР, не был должным образом синхронизирован с этими изменениями.
Выясним причину на уровне кода. В общем модуле УправлениеВнеоборотнымиАктивами функция РасчетАмортизацииБухРегл для основных средств корректно инициализирует колонку в таблице амортизации:
ТаблицаАмортизации.Колонки.Добавить("КорректировкаОбесценения", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
Однако в аналогичной функции РасчетАмортизацииНМА_НИОКР_БухРегл, которая отвечает за нематериальные активы, добавление этой колонки было пропущено. В результате, когда общая функция распределения пытается обратиться к этому полю для строки таблицы амортизации НМА, происходит аварийное завершение работы программы.
Рассмотрим официальное локальное исправление, которое позволяет восстановить работоспособность конфигурации без ожидания полного обновления системы до версии 1.3.234.4. Нам потребуется внести изменения в общий модуль УправлениеВнеоборотнымиАктивами. Если ваша конфигурация находится «на замке», её придется временно снять с поддержки с сохранением возможности обновления.
Шаг 1. Определение наличия колонки в таблице.
Найдем в модуле функцию ПолучитьРаспределениеАмортизацииПоНаправлениямРегл. Нам необходимо добавить флаг, который будет проверять, существует ли в переданной таблице колонка для обесценения. После строки МассивСтрокОбесценения = Новый Массив; добавим следующий блок кода:
Если ТабАмортизации.Колонки.Найти("КорректировкаОбесценения") = Неопределено Тогда
КорректировкаОбесценения = Ложь;
Иначе
КорректировкаОбесценения = Истина;
КонецЕсли;
Шаг 2. Корректировка условий распределения сумм.
Проанализируем дальнейший код функции. Нам нужно найти строку, где происходит распределение сумм: МассивСумм = ОбщегоНазначения.РаспределитьПропорционально( СтрокаТЗ.Сумма, МассивКоэф, 2, Ложь);. Сразу после неё найдем условие проверки типа учета. Заменим строку:
Если ТипУчета = "Бух" Тогда
на более безопасный вариант, учитывающий наш новый флаг:
Если ТипУчета = "Бух" И КорректировкаОбесценения Тогда
Шаг 3. Финализация логики распределения корректировок.
В этой же функции найдем проверку массива сумм корректировки обесценения. Заменим строку Если МассивСуммКО <> Неопределено Тогда на условие, которое исключит обращение к отсутствующему полю:
Если КорректировкаОбесценения И МассивСуммКО <> Неопределено Тогда
Эти изменения позволяют функции универсально работать как с таблицами ОС (где колонка есть), так и с таблицами НМА (где колонки временно нет), предотвращая ошибку Поле объекта не обнаружено.
После внесения правок в код модуля, рекомендуем выполнить следующие действия для корректного завершения операций закрытия месяца:
Амортизация НМА, очистите его табличную часть и нажмите кнопку «Заполнить». Это гарантирует, что структура временных таблиц в оперативной памяти обновится согласно внесенным изменениям.УчетЗатратРегл сформировались корректно. Ошибка часто возникала именно в связке с этим механизмом.Рассмотренный метод позволяет быстро решить проблему «малой кровью», не дожидаясь регламентных окон для масштабного обновления системы, что особенно важно в период сдачи отчетности и закрытия периодов.