Как исправить ошибку Поле объекта не обнаружено (УСНПроизводствоПоУмолчанию) в 1С:УНФ

Программист 1С v8.3 (Управляемые формы) Налоговый учет IT и автоматизация бизнеса
← На главную

При работе в конфигурации «1С:Управление нашей фирмой» (УНФ) пользователи часто сталкиваются с внезапной ошибкой при попытке открыть форму документа или изменить настройки: Поле объекта не обнаружено (УСНПроизводствоПоУмолчанию). Эта проблема локализуется в общем модуле УправлениеНебольшойФирмойПовтИсп и блокирует выполнение привычных операций, таких как перемещение запасов или производство.

В этой статье мы подробно разберем, почему возникает данная ошибка, как проанализировать стек вызовов и какие шаги необходимо предпринять для восстановления работоспособности базы данных.

Анализ программного кода и причины возникновения ошибки

Рассмотрим фрагмент кода, на котором происходит аварийная остановка системы. Ошибка возникает в функции ПолучитьЗначениеНастройки, которая предназначена для извлечения параметров пользователя из регистра сведений. Проблема заключается в следующей строке:


Запрос.УстановитьПараметр("Настройка" , ПланыВидовХарактеристик.НастройкиПользователей[Настройка]);

Разберем ситуацию: в переменную Настройка передается строковое значение "УСНПроизводствоПоУмолчанию". Программа пытается обратиться к коллекции предопределенных элементов плана видов характеристик (ПВХ) НастройкиПользователей по этому имени. Если в метаданных текущей версии конфигурации такой предопределенный элемент отсутствует, платформа 1С генерирует исключение «Поле объекта не обнаружено».

Выясним причину исчезновения этого поля. В старых редакциях УНФ (например, 1.4 или ранних 1.6) настройка УСНПроизводствоПоУмолчанию активно использовалась для автоматизации заполнения признака учета расходов при УСН. Однако в процессе масштабного обновления подсистемы налогового учета (начиная с версий 1.6.20 и выше), разработчики 1С пересмотрели архитектуру хранения настроек. Данный параметр был признан устаревшим и удален из типовой конфигурации (в современных версиях 3.0 лучше использовать Производство (лайт)).

Почему ошибка проявляется сейчас?

Проанализируем основные сценарии, при которых «призрачный» код продолжает обращаться к удаленному объекту:

  1. Использование устаревших расширений: Если в вашей базе установлено расширение, созданное для старой версии УНФ, оно может содержать заимствованные формы документов (например, Документ.ПеремещениеЗапасов.Форма.ФормаДокумента), где в процедуре ПриСозданииНаСервере или ОпределитьВидимостьНастроек жестко прописан вызов этой настройки.
  2. Некорректное обновление конфигурации: В редких случаях, если конфигурация находилась на поддержке с возможностью изменения, при автоматическом обновлении могли сохраниться фрагменты старого кода в общих модулях, которые ссылаются на удаленные метаданные.
  3. Внешние обработки и печатные формы: Использование старых внешних инструментов, логика которых копирует поведение типовых модулей прошлых лет.

Шаг 1: Поиск источника вызова через глобальный поиск

Первым делом нам необходимо выяснить, какой именно объект инициирует обращение к несуществующей настройке. Для этого выполним следующие действия (также может быть полезен анализ состава расширений):

  1. Откроем конфигуратор и вызовем окно глобального поиска (Ctrl + Shift + F).
  2. В строке поиска введем текст: "УСНПроизводствоПоУмолчанию" (обязательно в кавычках, так как мы ищем строковую передачу параметра).
  3. В области поиска выберем «Вся конфигурация», включая тексты модулей и свойства.
  4. Проанализируем результаты. Особое внимание уделим расширениям и их внешним обработкам. Если поиск выдает результаты в модулях форм, значит, проблема именно в них.

Шаг 2: Исправление через создание «заглушки» в ПВХ

Если нам нужно оперативно восстановить работу пользователей, а времени на глубокий рефакторинг кода в расширениях нет, рассмотрим самый быстрый способ решения — создание предопределенного элемента-заглушки.

Посмотрим на алгоритм действий:

  1. Перейдем в дерево метаданных: Планы видов характеристик -> НастройкиПользователей.
  2. Откроем вкладку «Предопределенные».
  3. Добавим новый элемент:
    • Имя: УСНПроизводствоПоУмолчанию
    • Наименование: Учитывать расходы УСН при производстве (устарело)
    • Тип значения: Булево
  4. Обновим конфигурацию базы данных (F7).

После этого обращение ПланыВидовХарактеристик.НастройкиПользователей[Настройка] перестанет вызывать ошибку, так как поле объекта снова будет физически существовать в метаданных. Система просто вернет пустое значение или значение по умолчанию, и выполнение кода продолжится.

Шаг 3: Программная корректировка вызова

Более правильным с точки зрения архитектуры решением будет изменение кода, вызывающего функцию. Посмотрим на пример безопасного получения настройки, который можно внедрить в код, вызывающий ошибку:


// Вместо прямого вызова:
// Значение = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеНастройки("УСНПроизводствоПоУмолчанию");

// Используем безопасную проверку наличия метаданных
НастройкаИмя = "УСНПроизводствоПоУмолчанию";
Если Метаданные.ПланыВидовХарактеристик.НастройкиПользователей.ЗначенияПоУмолчанию.Найти(НастройкаИмя) <> Неопределено Тогда
    УчитыватьВНУ = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеНастройки(НастройкаИмя);
Иначе
    // Если настройки нет в этой версии, задаем логику по умолчанию
    УчитыватьВНУ = Ложь; 
КонецЕсли;

Этот подход позволяет избежать падения системы даже при отсутствии объекта в метаданных.

Шаг 4: Очистка кэша и проверка расширений

Если после внесения правок или удаления расширения ошибка продолжает возникать, проанализируем состояние кэша. Часто платформа «кеширует» структуру метаданных, и обращение к старому общему модулю происходит по инерции. Рекомендуется выполнить очистку серверного кэша (если база клиент-серверная) или удалить базу из списка и добавить её снова (для очистки локального кэша пользователя).

Также важно проверить, не включена ли функциональная опция «Налоговый учет (УСН)» при отсутствии заполненной учетной политики. В новых версиях УНФ параметры налогового учета берутся из карточки организации (Учетная политика), а не из персональных настроек пользователя. Убедимся, что в документе, где возникает ошибка, корректно выбрана организация и для неё создана актуальная запись учетной политики.

Таким образом, мы выяснили, что ошибка Поле объекта не обнаружено (УСНПроизводствоПоУмолчанию) является следствием технического долга в конфигурации или расширениях после обновления. Самым надежным решением является поиск и удаление устаревшего вызова в расширениях, а самым быстрым — временное добавление предопределенного элемента в ПВХ.

← На главную