В практике администратора и программиста 1С часто встречается ситуация, когда пользователи или другие разработчики переименовывают элементы справочников. Если речь идет об обычных элементах, это может быть не критично, но если изменен предопределенный элемент, это может привести к путанице в логике работы программы. Предопределенные элементы жестко зашиты в программный код, и их подмена (даже визуальная) создает иллюзию неправильной работы алгоритмов.
Разберем ситуацию на примере: в справочнике СпособыОтраженияЗарплатыВРегламентированномУчете элемент, который изначально назывался "Отражение больничных за счет предприятия", теперь называется иначе. Как нам выяснить, какой именно элемент перед нами, и какова была его изначальная суть? Рассмотрим несколько эффективных способов решения этой задачи.
Прежде всего, проанализируем, как устроены предопределенные данные в платформе 1С. У любого такого элемента есть три важных идентификатора:
ОтражениеБольничныхЗаСчетРаботодателя). Он уникален и обычно не меняется. Именно к нему обращаются программисты через код: Справочники.СпособыОтражения.ИмяЭлемента.Наша задача — "докопаться" до технического Имени, которое остается неизменным в метаданных.
Проанализируем самый надежный метод, если ваша база находится на поддержке. Конфигурация поставщика хранит эталонные настройки метаданных, включая список предопределенных элементов.
Рассмотрим пошагово, как это сделать:
СпособыОтраженияЗарплатыВРегламентированномУчете).Этот метод позволяет увидеть исходные значения даже в том случае, если в Конфигураторе были изменены сами метаданные предопределенных элементов.
Выясним причину переименования, не заходя в Конфигуратор глубоко. Для этого нам понадобится консоль запросов. В платформе 1С 8.2 и 8.3 у предопределенных элементов есть скрытое поле ИмяПредопределенныхДанных, которое хранит тот самый технический идентификатор из метаданных.
Посмотрим на пример запроса:
ВЫБРАТЬ
Способы.Ссылка КАК Ссылка,
Способы.Наименование КАК ТекущееНаименование,
Способы.ИмяПредопределенныхДанных КАК СистемноеИмя
ИЗ
Справочник.СпособыОтраженияЗарплатыВРегламентированномУчете КАК Способы
ГДЕ
Способы.Предопределенный = ИСТИНА
Результат запроса выведет таблицу, где в колонке СистемноеИмя вы увидите "настоящее" название элемента, заложенное программистом (например, ОтражениеБольничныхЗаСчетРаботодателя), а в колонке ТекущееНаименование — то, что ввел пользователь (например, ПАО Газпром). Сразу станет ясно, какой элемент подвергся правке.
Если вам нужно быстро проверить конкретный объект в коде или через внешнюю обработку, воспользуйтесь объектной моделью. Начиная с версии платформы 8.2, доступно свойство, которое позволяет вытянуть внутреннее имя.
Рассмотрим программный код для получения информации:
// Предположим, ВыбранаяСсылка — это подозрительный элемент справочника
Если ВыбранаяСсылка.Предопределенный Тогда
ИмяВМетаданных = ВыбранаяСсылка.Метаданные().Имя; // Имя самого справочника
СистемноеИмяЭлемента = ВыбранаяСсылка.ИмяПредопределенныхДанных;
Сообщить("Элемент в базе называется: " + ВыбранаяСсылка.Наименование);
Сообщить("А в конфигураторе он: " + СистемноеИмяЭлемента);
Иначе
Сообщить("Этот элемент не является предопределенным.");
КонецЕсли;
Важное примечание: Если свойство ИмяПредопределенныхДанных возвращает пустую строку для элемента, у которого стоит пометка "предопределенный" (картинка с точкой в списке), это может означать нарушение связи между данными в таблице БД и метаданными (так называемые "битые" предопределенные). В этом случае поможет только Тистирование и Исправление.
Проанализируем ситуацию: если переименование произошло недавно, мы можем узнать не только старое название, но и кто именно совершил это действие. Журнал регистрации фиксирует старые и новые значения полей при записи объекта.
Наименование: Было "..." Стало "...".Если сравнение с конфигурацией поставщика невозможно (например, конфигурация полностью самописная и ЦФ-ника под рукой нет), мы можем исследовать структуру предопределенных данных через выгрузку в файлы.
Выполним следующие шаги:
Catalogs, а в ней — папку вашего справочника.Ext/Predefined.xml.В этом XML-файле будет четко прописана структура всех предопределенных элементов с их Name (Имя в конфигураторе) и Description (Наименование по умолчанию). Это "паспорт" справочника, который покажет, что планировал создать разработчик изначально.
Мы разобрали пять способов идентификации переименованных предопределенных данных. Наиболее быстрым является запрос к полю ИмяПредопределенныхДанных, а наиболее информативным — сравнение с конфигурацией поставщика. Помните, что переименование предопределенных элементов в режиме Предприятия — плохая практика, так как это вводит в заблуждение как пользователей, так и специалистов по поддержке. Рекомендуется возвращать наименования к их исходному виду или фиксировать изменения в документации к системе.