При работе с базами данных 1С:Предприятия часто возникает необходимость сопоставить технические имена полей, которые мы видим при прямом анализе SQL-таблиц (вида _Fld...), с понятными именами реквизитов, заданными в Конфигураторе. Разберемся, где искать эту информацию и как правильно работать со структурой хранения данных.
Важно понимать, что в базе данных 1С:Предприятия не существует единой системной таблицы, где было бы жестко прописано: «поле _Fld12345 соответствует реквизиту ДатаОтгрузки». Соответствие между объектами метаданных и физическими полями в СУБД хранится внутри самой конфигурации и интерпретируется платформой «на лету».
При изменении структуры метаданных (добавлении реквизитов, смене типов данных) платформа сама выполняет реструктуризацию, создавая или удаляя поля в SQL-таблицах. Поэтому единственный надежный способ получить актуальную карту соответствий — это обращение к самой платформе 1С через встроенный язык.
Для получения информации о том, как объекты метаданных представлены в базе данных, разработчики используют специальный метод встроенного языка ПолучитьСтруктуруХраненияБазыДанных(). Этот метод возвращает соответствие объектов метаданных их физическому представлению.
Рассмотрим, как можно программно извлечь эту информацию. Мы можем обходить коллекцию метаданных и анализировать их структуру. Примерный алгоритм действий выглядит следующим образом:
// Пример получения структуры для справочника
МетаданныеОбъекта = Метаданные.Справочники.Номенклатура;
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных(МетаданныеОбъекта);
Для Каждого ЭлементСтруктуры Из СтруктураХранения Цикл
// Вывод имени реквизита и соответствующего ему поля в БД
Сообщить("Реквизит: " + ЭлементСтруктуры.Ключ + " -> Поле БД: " + ЭлементСтруктуры.Значение.ИмяПоля);
КонецЦикла;
Часто разработчики пользуются готовыми обработками, такими как СтруктураИБ_УФ. Если вы видите пустые колонки с именами полей, не спешите искать секретные системные таблицы. Разберем типичные причины такого поведения:
ПолучитьСтруктуруХраненияБазыДанных().Если вам нужно быстро найти поле, не полагайтесь на сторонние утилиты, а попробуйте написать простой скрипт в консоли кода. Это даст вам 100% уверенность в результате. Разберем шаги:
Шаг 1: Определите объект метаданных, который вас интересует (например, документ РеализацияТоваровУслуг).
Шаг 2: Используйте метод ПолучитьСтруктуруХраненияБазыДанных() для получения полного соответствия реквизитов и таблиц.
Шаг 3: Сравните результат с тем, что вы видите в SQL. Помните, что технические имена вида _Fld... являются внутренними идентификаторами, которые могут меняться при глобальных изменениях конфигурации. Никогда не «зашивайте» их в SQL-запросы напрямую, так как после обновления конфигурации (обновления реструктуризации) ваш код может перестать работать.
Если вы столкнулись с тем, что нужная колонка не отображается, первым делом загляните в код обработки, которой вы пользуетесь. Чаще всего ответ на ваш вопрос скрыт прямо там — в одной или двух строках кода, которые получают структуру. Будьте внимательны к результатам выполнения функций платформы, и вы легко решите задачу поиска соответствий.