Что делать, если конфигуратор 1С вылетает при проверке модулей с ошибкой "Имя реквизита ... не уникально"?

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

Нередко разработчики сталкиваются с ситуацией, когда стандартная процедура проверки конфигурации превращается в проблему. Вы запускаете "Конфигурация" -> "Проверка модулей", и на середине процесса конфигуратор аварийно завершает работу с сообщением вроде "Имя реквизита или поля ЕдиницаИзмерения не уникально". Самое неприятное в этой ситуации — полное отсутствие информации о том, в каком именно объекте (форме, отчете, обработке) произошла ошибка. Проверять всю конфигурацию вручную — задача почти невыполнимая, в таких случаях может помочь Analyzer 1C — веб-инструмент для анализа зависимостей конфигураций 1C.

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

Анализ причин ошибки

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

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

Также не стоит исключать вероятность ошибки в самой платформе 1С, особенно если проблема появилась после обновления.

Способы поиска проблемного объекта

Поскольку конфигуратор не указывает на источник, нам предстоит провести собственное расследование. Рассмотрим несколько эффективных методов, от простого к сложному.

Способ 1: Глобальный поиск в конфигураторе

Это самый быстрый первый шаг для сужения круга подозреваемых. Нам нужно найти все места, где используется имя реквизита из сообщения об ошибке.

  1. Откройте конфигуратор.
  2. Перейдите в меню "Правка" -> "Глобальный поиск" (или используйте сочетание клавиш Ctrl+Shift+F).
  3. В поле "Искать" введите имя, на которое ругается система (в нашем примере — ЕдиницаИзмерения).
  4. В области поиска убедитесь, что выбраны объекты, где наиболее вероятны дубли, — в первую очередь "Формы".
  5. Запустите поиск.

Результат поиска покажет список всех объектов конфигурации, где встречается это имя. Этот список не укажет на дубликат напрямую, но он даст вам перечень форм, которые нужно проверить в первую очередь. Открывайте каждую форму из списка и внимательно просматривайте дерево элементов и список реквизитов на предмет одинаковых имен. Как показывает практика, после исправления одной формы ошибка может "переехать" на другую с другим именем реквизита, поэтому будьте готовы повторить процедуру.

Способ 2: Выгрузка конфигурации в файлы

Это более мощный и надежный метод, который позволяет анализировать внутреннюю структуру объектов конфигурации. Каждая форма, отчет или обработка выгружается в виде XML-файлов, в которых найти дубли гораздо проще.

Порядок действий:

  1. В конфигураторе выберите меню "Конфигурация" -> "Выгрузить конфигурацию в файлы...".
  2. Укажите пустую папку, куда будут сохранены файлы.
  3. Дождитесь окончания процесса выгрузки.
  4. Воспользуйтесь любым текстовым редактором с функцией поиска по файлам (например, VS Code, Notepad++, Sublime Text) или файловым менеджером (Total Commander).
  5. Запустите поиск по содержимому всех файлов в папке выгрузки. Искать нужно имя реквизита из ошибки, например, "ЕдиницаИзмерения".

Поиск, скорее всего, приведет вас к нескольким XML-файлам, описывающим формы. Откройте такой файл и поищите в нем искомое имя. Если в файле вы найдете несколько вхождений этого имени в качестве имени реквизита или элемента, вы нашли виновника. Анализ XML-структуры позволяет увидеть то, что скрыто в визуальном редакторе форм.

Способ 3: Программный анализ метаданных

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

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


Процедура ПроверитьДублиВИменахРегистров()
    
    // Проверяем регистры сведений
    Для Каждого РегистрСведений Из Метаданные.РегистрыСведений Цикл
        ИменаИзмерений = Новый Массив;
        Для Каждого Измерение Из РегистрСведений.Измерения Цикл
            ИменаИзмерений.Добавить(НРег(Измерение.Имя));
        КонецЦикла;
        
        Для Каждого Реквизит Из РегистрСведений.Реквизиты Цикл
            Если ИменаИзмерений.Найти(НРег(Реквизит.Имя)) <> Неопределено Тогда
                Сообщить("Обнаружен дубль имени '" + Реквизит.Имя + "' в регистре сведений: " + РегистрСведений.Имя);
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    // Проверяем регистры накопления
    Для Каждого РегистрНакопления Из Метаданные.РегистрыНакопления Цикл
        ИменаИзмерений = Новый Массив;
        Для Каждого Измерение Из РегистрНакопления.Измерения Цикл
            ИменаИзмерений.Добавить(НРег(Измерение.Имя));
        КонецЦикла;
        
        Для Каждого Реквизит Из РегистрНакопления.Реквизиты Цикл
            Если ИменаИзмерений.Найти(НРег(Реквизит.Имя)) <> Неопределено Тогда
                Сообщить("Обнаружен дубль имени '" + Реквизит.Имя + "' в регистре накопления: " + РегистрНакопления.Имя);
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    Сообщить("Проверка завершена.");
    
КонецПроцедуры

Этот код можно вставить в обработку и запустить. Он не найдет проблему в формах, но поможет исключить или обнаружить дубли в структуре самих регистров, что также является одной из возможных причин.

Способ 4: Проверка на наличие ошибки платформы

Иногда проблема кроется не в конфигурации, а в самой платформе 1С. В обсуждении на форуме была приведена ссылка на баг-трекер 1С, где зарегистрирована подобная ошибка. Это означает, что на некоторых версиях платформы проверка модулей может работать некорректно.

Что можно сделать:

  1. Проверить на другом релизе. Попробуйте выполнить проверку модулей на другой версии платформы — более новой или, наоборот, более старой. Иногда это помогает обойти ошибку.
  2. Посетить баг-трекер 1С. Зайдите на сайт bugboard.v8.1c.ru и выполните поиск по тексту ошибки. Если ошибка зарегистрирована, вы сможете узнать ее статус и в какой версии планируется или уже выпущено исправление.
  3. Обновить платформу. Если известно, что ошибка исправлена в более свежем релизе, самым надежным решением будет обновление платформы 1С:Предприятие.

Общие рекомендации

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

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

← На главную