При работе в конфигурации «1С:Управление нашей фирмой» (УНФ) пользователи часто сталкиваются с внезапной ошибкой при попытке открыть форму документа или изменить настройки: Поле объекта не обнаружено (УСНПроизводствоПоУмолчанию). Эта проблема локализуется в общем модуле УправлениеНебольшойФирмойПовтИсп и блокирует выполнение привычных операций, таких как перемещение запасов или производство.
В этой статье мы подробно разберем, почему возникает данная ошибка, как проанализировать стек вызовов и какие шаги необходимо предпринять для восстановления работоспособности базы данных.
Рассмотрим фрагмент кода, на котором происходит аварийная остановка системы. Ошибка возникает в функции ПолучитьЗначениеНастройки, которая предназначена для извлечения параметров пользователя из регистра сведений. Проблема заключается в следующей строке:
Запрос.УстановитьПараметр("Настройка" , ПланыВидовХарактеристик.НастройкиПользователей[Настройка]);
Разберем ситуацию: в переменную Настройка передается строковое значение "УСНПроизводствоПоУмолчанию". Программа пытается обратиться к коллекции предопределенных элементов плана видов характеристик (ПВХ) НастройкиПользователей по этому имени. Если в метаданных текущей версии конфигурации такой предопределенный элемент отсутствует, платформа 1С генерирует исключение «Поле объекта не обнаружено».
Выясним причину исчезновения этого поля. В старых редакциях УНФ (например, 1.4 или ранних 1.6) настройка УСНПроизводствоПоУмолчанию активно использовалась для автоматизации заполнения признака учета расходов при УСН. Однако в процессе масштабного обновления подсистемы налогового учета (начиная с версий 1.6.20 и выше), разработчики 1С пересмотрели архитектуру хранения настроек. Данный параметр был признан устаревшим и удален из типовой конфигурации (в современных версиях 3.0 лучше использовать Производство (лайт)).
Проанализируем основные сценарии, при которых «призрачный» код продолжает обращаться к удаленному объекту:
Документ.ПеремещениеЗапасов.Форма.ФормаДокумента), где в процедуре ПриСозданииНаСервере или ОпределитьВидимостьНастроек жестко прописан вызов этой настройки.Первым делом нам необходимо выяснить, какой именно объект инициирует обращение к несуществующей настройке. Для этого выполним следующие действия (также может быть полезен анализ состава расширений):
"УСНПроизводствоПоУмолчанию" (обязательно в кавычках, так как мы ищем строковую передачу параметра).Если нам нужно оперативно восстановить работу пользователей, а времени на глубокий рефакторинг кода в расширениях нет, рассмотрим самый быстрый способ решения — создание предопределенного элемента-заглушки.
Посмотрим на алгоритм действий:
Планы видов характеристик -> НастройкиПользователей.УСНПроизводствоПоУмолчаниюПосле этого обращение ПланыВидовХарактеристик.НастройкиПользователей[Настройка] перестанет вызывать ошибку, так как поле объекта снова будет физически существовать в метаданных. Система просто вернет пустое значение или значение по умолчанию, и выполнение кода продолжится.
Более правильным с точки зрения архитектуры решением будет изменение кода, вызывающего функцию. Посмотрим на пример безопасного получения настройки, который можно внедрить в код, вызывающий ошибку:
// Вместо прямого вызова:
// Значение = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеНастройки("УСНПроизводствоПоУмолчанию");
// Используем безопасную проверку наличия метаданных
НастройкаИмя = "УСНПроизводствоПоУмолчанию";
Если Метаданные.ПланыВидовХарактеристик.НастройкиПользователей.ЗначенияПоУмолчанию.Найти(НастройкаИмя) <> Неопределено Тогда
УчитыватьВНУ = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеНастройки(НастройкаИмя);
Иначе
// Если настройки нет в этой версии, задаем логику по умолчанию
УчитыватьВНУ = Ложь;
КонецЕсли;
Этот подход позволяет избежать падения системы даже при отсутствии объекта в метаданных.
Если после внесения правок или удаления расширения ошибка продолжает возникать, проанализируем состояние кэша. Часто платформа «кеширует» структуру метаданных, и обращение к старому общему модулю происходит по инерции. Рекомендуется выполнить очистку серверного кэша (если база клиент-серверная) или удалить базу из списка и добавить её снова (для очистки локального кэша пользователя).
Также важно проверить, не включена ли функциональная опция «Налоговый учет (УСН)» при отсутствии заполненной учетной политики. В новых версиях УНФ параметры налогового учета берутся из карточки организации (Учетная политика), а не из персональных настроек пользователя. Убедимся, что в документе, где возникает ошибка, корректно выбрана организация и для неё создана актуальная запись учетной политики.
Таким образом, мы выяснили, что ошибка Поле объекта не обнаружено (УСНПроизводствоПоУмолчанию) является следствием технического долга в конфигурации или расширениях после обновления. Самым надежным решением является поиск и удаление устаревшего вызова в расширениях, а самым быстрым — временное добавление предопределенного элемента в ПВХ.