Разработка и Конфигурация · 10 мин
Как узнать имя таблицы в 1С: подробное руководство
Как узнать имя таблицы в 1С: через конфигуратор, запросы, структуру СУБД и отладчик. Практические методы для разработчиков и администраторов 1С.
Задача узнать имя таблицы в 1С возникает в двух разных контекстах. Первый — когда разработчик хочет понять, как называется таблица объекта конфигурации при обращении к ней из запроса или кода встроенного языка. Второй — когда нужно определить физическое имя таблицы в базе данных SQL Server или PostgreSQL, чтобы выполнить прямой SQL-запрос, проанализировать индексы или диагностировать проблемы производительности.
Это принципиально разные задачи. На уровне платформы имена таблиц формируются по понятным правилам: Справочник.Номенклатура, Документ.РеализацияТоваровУслуг, РегистрСведений.КурсыВалют. А вот на уровне СУБД платформа генерирует технические имена вида _Reference123 или _Document456, которые без специальных инструментов сопоставить с объектами конфигурации непросто.
Ниже разобраны все рабочие способы: от просмотра структуры в конфигураторе до получения соответствия логических и физических имён через функцию ПолучитьСтруктуруХраненияБазыДанных. Каждый метод сопровождается указанием, когда он применим и каких ошибок следует избегать.
Как устроены имена таблиц в 1С
Платформа 1С работает с двумя уровнями имён. Логический уровень — это имена объектов метаданных, которые видит разработчик в конфигураторе и использует в запросах. Физический уровень — это реальные таблицы в базе данных, имена которым платформа присваивает автоматически при создании или реструктуризации.
На логическом уровне имя таблицы строится по шаблону: ТипОбъекта.ИмяОбъекта. Для табличных частей добавляется третий компонент: Документ.РеализацияТоваровУслуг.Товары. Для виртуальных таблиц регистров используются конструкции вида РегистрНакопления.ТоварыНаСкладах.Остатки или РегистрСведений.КурсыВалют.СрезПоследних.
На физическом уровне платформа генерирует имена по внутренним шаблонам: _Reference для справочников, _Document для документов, _InfoRg для регистров сведений, _AccumRg для регистров накопления, за которыми следует числовой идентификатор. Этот идентификатор никак не связан с именем объекта в конфигурации, поэтому угадать его невозможно — только получить через специальные средства.
Просмотр имени таблицы в конфигураторе
Самый простой способ узнать логическое имя таблицы — открыть конфигуратор и найти нужный объект в дереве метаданных. Имя объекта указано в свойстве «Имя» палитры свойств. Полное имя таблицы для запроса формируется из типа объекта и этого имени.
Если нужно посмотреть состав полей таблицы, откройте объект и перейдите на закладку «Данные». Там перечислены реквизиты, которые станут полями таблицы, а также стандартные реквизиты (Ссылка, Код, Наименование, ПометкаУдаления и другие в зависимости от типа объекта).
Для табличных частей имя строится через точку: сначала тип и имя документа, затем имя табличной части. Например, если в документе «ПоступлениеТоваров» есть табличная часть «Товары», то обращение к ней в запросе будет Документ.ПоступлениеТоваров.Товары.
- 1Откройте конфигуратор и разверните ветку нужного типа объектов (Справочники, Документы, Регистры)
- 2Найдите объект и откройте палитру свойств — смотрите свойство «Имя»
- 3Составьте полное имя: ТипОбъекта.ИмяОбъекта
- 4Для табличной части добавьте третий компонент: ТипОбъекта.ИмяОбъекта.ИмяТабличнойЧасти
- 5Проверьте имя, выполнив простой запрос в консоли запросов
Получение физического имени таблицы в СУБД
Для клиент-серверных баз на SQL Server или PostgreSQL часто требуется знать реальное имя таблицы — например, чтобы посмотреть план запроса средствами СУБД, проверить фрагментацию индексов или оценить размер таблицы. Основной инструмент для этого — функция встроенного языка ПолучитьСтруктуруХраненияБазыДанных.
Функция возвращает таблицу значений с колонками: ИмяТаблицыХранения (физическое имя), ИмяТаблицы (логическое имя), Метаданные, Назначение и другие. Выполнить её можно в любой обработке или через внешнюю консоль кода. Для поиска конкретного объекта достаточно отфильтровать результат по логическому имени.
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из СтруктураХранения Цикл
Если Строка.ИмяТаблицы = "Справочник.Номенклатура" Тогда
Сообщить(Строка.ИмяТаблицыХранения); // например, _Reference123
КонецЕсли;
КонецЦикла;Альтернативный вариант — пункт меню «Администрирование» в конфигураторе, но прямого просмотра структуры хранения в типовом интерфейсе конфигуратора нет, поэтому программный способ остаётся основным. Многие разработчики сохраняют результат функции в файл и используют его как справочник при работе с СУБД.
Как узнать имя таблицы через запрос и отладчик
Консоль запросов — быстрый способ проверить правильность имени таблицы. Если в тексте запроса указать несуществующую таблицу, конструктор запроса или проверка синтаксиса сразу сообщит об ошибке. Обратный приём тоже работает: откройте конструктор запроса, и в левом списке будут перечислены все доступные таблицы с полными именами — это удобный навигатор по структуре данных.
В отладчике можно узнать, к какой таблице относится конкретный объект. Для ссылочного значения вызов метода Метаданные() вернёт объект описания метаданных, у которого свойство ПолноеИмя() даст точное имя таблицы. Это полезно, когда код работает с произвольными ссылками и нужно определить их тип в runtime.
ПолноеИмяТаблицы = ЗначениеСсылки.Метаданные().ПолноеИмя();
// Вернёт, например: "Документ.РеализацияТоваровУслуг"Для перебора всех таблиц конфигурации программно используйте коллекции глобального контекста Метаданные: Метаданные.Справочники, Метаданные.Документы, Метаданные.РегистрыСведений и так далее. Перебрав их, можно сформировать полный список логических имён таблиц базы.
Имена виртуальных таблиц и служебных таблиц
Помимо основных таблиц, у регистров есть виртуальные таблицы: Остатки, Обороты, СрезПервых, СрезПоследних, ОстаткиИОбороты. Их имена строятся добавлением суффикса к имени регистра: РегистрНакопления.ПартииТоваров.Остатки. Важно понимать, что физически таких таблиц в СУБД нет — платформа вычисляет их на основе таблиц движений и итогов.
У регистров накопления существуют физические таблицы итогов (имена вида _AccumRgTotals), у регистров сведений — таблицы срезов. Их физические имена также видны через ПолучитьСтруктуруХраненияБазыДанных с указанием назначения таблицы в соответствующей колонке.
Отдельная категория — служебные таблицы платформы: таблица конфигурации, таблица версий, таблицы механизма блокировок. Их имена и структура не документированы и могут меняться между версиями платформы, поэтому опираться на них в решениях не следует.
Типичные ошибки при поиске имён таблиц
Ещё одна распространённая ситуация: после обновления конфигурации физические имена таблиц могут измениться, если выполнялась реструктуризация с пересозданием таблиц. Поэтому сохранённые когда-то соответствия логических и физических имён нужно периодически обновлять, а не считать постоянными.
Также учитывайте, что в файловом варианте базы нет SQL-таблиц в привычном смысле — данные хранятся в едином файле 1Cv8.1CD. Функция ПолучитьСтруктуруХраненияБазыДанных работает и там, но практический смысл физических имён для файловой базы ограничен.
Как проверить результат
Запрос выполняется без ошибки «Таблица не найдена»
Ошибка синтаксиса или сообщение о несуществующей таблице
Таблица с таким именем существует в списке таблиц СУБД
Таблица не найдена — вероятно, данные устарели после реструктуризации
Префикс физического имени соответствует типу объекта (_Reference — справочник, _Document — документ)
Префикс не совпадает с ожидаемым типом — проверьте логическое имя
Часто задаваемые вопросы
Как узнать имя таблицы по ссылке на объект в коде?
Вызовите у ссылки метод Метаданные(), а затем у полученного объекта — ПолноеИмя(). Результат будет строкой вида «Справочник.Номенклатура» или «Документ.ЗаказКлиента», то есть полным логическим именем таблицы, пригодным для использования в запросах.
Можно ли переименовать физическую таблицу в СУБД?
Нет, физические имена генерирует и контролирует платформа. Ручное переименование таблицы в SQL Server или PostgreSQL приведёт к тому, что платформа перестанет находить данные объекта. Изменить логическое имя можно только через переименование объекта в конфигураторе.
Почему запрос к таблице выдаёт ошибку, хотя объект есть в конфигураторе?
Чаще всего используется синоним вместо имени, либо пропущен тип объекта. Проверьте, что имя начинается с типа (Справочник., Документ., РегистрСведений.) и точно совпадает со свойством «Имя» в палитре свойств, включая регистр букв и отсутствие пробелов.
Как получить список всех таблиц базы одним списком?
Выполните ПолучитьСтруктуруХраненияБазыДанных() без параметров — функция вернёт таблицу значений со всеми логическими и физическими именами, включая табличные части, регистры и служебные таблицы. Результат удобно выгрузить в табличный документ или файл для дальнейшего анализа.
Меняются ли физические имена таблиц при обновлении конфигурации?
Могут меняться, если при обновлении выполняется реструктуризация с пересозданием таблиц. Поэтому сохранённое ранее соответствие имён стоит считать временным и обновлять его после значимых обновлений конфигурации.
Как узнать имя таблицы табличной части документа?
Логическое имя строится из трёх частей: Документ.ИмяДокумента.ИмяТабличнойЧасти. Физическое имя ищите в структуре хранения по этому логическому имени — табличные части хранятся в отдельных физических таблицах с префиксом вида _Document…_VT.
Что важно запомнить
Логическое имя таблицы — это ТипОбъекта.ИмяОбъекта, видимое в конфигураторе. Физическое имя в СУБД получают только через ПолучитьСтруктуруХраненияБазыДанных: угадать его нельзя. Виртуальные таблицы физически не существуют, а прямая правка данных в SQL в обход платформы недопустима.