При работе в современных конфигурациях 1С пользователи и администраторы могут столкнуться с неприятной ситуацией: при попытке зайти в раздел Настройки программы (обычно через меню «Сервис» или «Администрирование») система выдает критическую ошибку и закрывает форму. Ошибка инициализации модуля общей формы НастройкаПрограммы делает невозможным изменение любых параметров системы. Разберем подробно, почему это происходит и как устранить проблему с помощью Конфигуратора.
Прежде всего, проанализируем текст ошибки, который видит пользователь:
{ОбщаяФорма.НастройкаПрограммы.Форма(308)}: Поле объекта не обнаружено (ПолучениеНовыхЭД)
Эта формулировка в контексте 1С означает, что программный код пытается обратиться к некоторому объекту через точку (например, Метаданные.РегламентныеЗадания.ИмяОбъекта), но объект с таким именем в системе отсутствует. В данном случае проблема локализована в строке 308 модуля формы НастройкаПрограммы.
Выясним причину такого поведения. Рассмотрим строку кода, которая вызывает исключение:
мРегламентноеЗаданиеПолучениеНовыхЭД = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ПолучениеНовыхЭД);
Здесь система пытается найти ссылку на предопределенное регламентное задание ПолучениеНовыхЭД. Если в дереве метаданных конфигурации имя этого задания отличается (например, оно называется ЗаданиеПолучениеНовыхЭД или вовсе удалено), платформа 1С не находит соответствия и выбрасывает ошибку «Поле объекта не обнаружено».
Проанализируем ситуацию: почему так происходит? Чаще всего это следствие некорректного обновления конфигурации. Например, если конфигурация была сильно доработана и при очередном обновлении на новый релиз типовой код обновился (стал искать ПолучениеНовыхЭД), а сами объекты метаданных остались старыми или были переименованы вручную разработчиком ранее.
Для исправления ситуации нам потребуется доступ в Конфигуратор с правами на изменение конфигурации. Рассмотрим по шагам, что необходимо сделать:
Общие -> Регламентные задания. Посмотрим внимательно на список имен. Нам нужно найти задание, которое отвечает за получение новых электронных документов (ЭДО). Скорее всего, оно будет называться ЗаданиеПолучениеНовыхЭД или как-то похоже.Общие -> Общие формы -> НастройкаПрограммы.Ctrl + G и введем номер строки 308 (или воспользуемся поиском Ctrl + F по тексту "ПолучениеНовыхЭД").Теперь приведем код в соответствие с реальностью. Если наше регламентное задание в метаданных называется ЗаданиеПолучениеНовыхЭД, то изменим строку кода следующим образом:
// Было:
// мРегламентноеЗаданиеПолучениеНовыхЭД = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ПолучениеНовыхЭД);
// Стало:
мРегламентноеЗаданиеПолучениеНовыхЭД = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаданиеПолучениеНовыхЭД);
Важный нюанс: Обратите внимание на использование метода НайтиПредопределенное. Он работает только с теми заданиями, у которых в свойствах стоит галочка Предопределенное. Если ваше задание не является предопределенным, данный код в принципе не сможет его найти этим методом, и логику инициализации формы придется пересматривать более глубоко.
Разберем ситуацию, когда в основной конфигурации имя совпадает, но ошибка всё равно возникает. Такое случается, если в базе используются расширения конфигурации. Одно из расширений может «перекрывать» форму настроек или изменять состав метаданных, к которым обращается основная программа.
Проанализируем список установленных расширений:
Функционал ПолучениеНовыхЭД отвечает за автоматический обмен данными с оператором электронного документооборота. Когда форма НастройкаПрограммы не открывается, вы теряете возможность не только настроить обмен документами, но и изменить любые другие системные константы, параметры учета или интерфейсные настройки, которые выведены на эту форму.
Рассмотрим еще один технический момент: иногда ошибка может возникать из-за кэша метаданных. Если вы только что обновили конфигурацию и уверены, что имена совпадают, попробуйте запустить базу с параметром /ClearCache. Это заставит платформу заново пересчитать дерево метаданных и исключит вероятность обращения к «призрачным» объектам, которых уже нет в текущей версии кода.
Подводя итог, можно сказать, что решение данной проблемы всегда кроется в синхронизации имен объектов метаданных и обращений к ним в коде встроенного языка. Будьте внимательны при объединении конфигураций и всегда проверяйте ссылки на регламентные задания, так как они часто подвергаются рефакторингу со стороны разработчиков типовых решений (БСП и БЭД).