К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как узнать имя таблицы в 1С: подробное руководство

Как узнать имя таблицы в 1С: через конфигуратор, запросы, структуру СУБД и отладчик. Практические методы для разработчиков и администраторов 1С.

Задача узнать имя таблицы в 1С возникает в двух разных контекстах. Первый — когда разработчик хочет понять, как называется таблица объекта конфигурации при обращении к ней из запроса или кода встроенного языка. Второй — когда нужно определить физическое имя таблицы в базе данных SQL Server или PostgreSQL, чтобы выполнить прямой SQL-запрос, проанализировать индексы или диагностировать проблемы производительности.

Это принципиально разные задачи. На уровне платформы имена таблиц формируются по понятным правилам: Справочник.Номенклатура, Документ.РеализацияТоваровУслуг, РегистрСведений.КурсыВалют. А вот на уровне СУБД платформа генерирует технические имена вида _Reference123 или _Document456, которые без специальных инструментов сопоставить с объектами конфигурации непросто.

Ниже разобраны все рабочие способы: от просмотра структуры в конфигураторе до получения соответствия логических и физических имён через функцию ПолучитьСтруктуруХраненияБазыДанных. Каждый метод сопровождается указанием, когда он применим и каких ошибок следует избегать.

Как устроены имена таблиц в 1С

Платформа 1С работает с двумя уровнями имён. Логический уровень — это имена объектов метаданных, которые видит разработчик в конфигураторе и использует в запросах. Физический уровень — это реальные таблицы в базе данных, имена которым платформа присваивает автоматически при создании или реструктуризации.

На логическом уровне имя таблицы строится по шаблону: ТипОбъекта.ИмяОбъекта. Для табличных частей добавляется третий компонент: Документ.РеализацияТоваровУслуг.Товары. Для виртуальных таблиц регистров используются конструкции вида РегистрНакопления.ТоварыНаСкладах.Остатки или РегистрСведений.КурсыВалют.СрезПоследних.

На физическом уровне платформа генерирует имена по внутренним шаблонам: _Reference для справочников, _Document для документов, _InfoRg для регистров сведений, _AccumRg для регистров накопления, за которыми следует числовой идентификатор. Этот идентификатор никак не связан с именем объекта в конфигурации, поэтому угадать его невозможно — только получить через специальные средства.

Просмотр имени таблицы в конфигураторе

Самый простой способ узнать логическое имя таблицы — открыть конфигуратор и найти нужный объект в дереве метаданных. Имя объекта указано в свойстве «Имя» палитры свойств. Полное имя таблицы для запроса формируется из типа объекта и этого имени.

Если нужно посмотреть состав полей таблицы, откройте объект и перейдите на закладку «Данные». Там перечислены реквизиты, которые станут полями таблицы, а также стандартные реквизиты (Ссылка, Код, Наименование, ПометкаУдаления и другие в зависимости от типа объекта).

Для табличных частей имя строится через точку: сначала тип и имя документа, затем имя табличной части. Например, если в документе «ПоступлениеТоваров» есть табличная часть «Товары», то обращение к ней в запросе будет Документ.ПоступлениеТоваров.Товары.

Как найти имя таблицы в конфигураторе
  1. 1
    Откройте конфигуратор и разверните ветку нужного типа объектов (Справочники, Документы, Регистры)
  2. 2
    Найдите объект и откройте палитру свойств — смотрите свойство «Имя»
  3. 3
    Составьте полное имя: ТипОбъекта.ИмяОбъекта
  4. 4
    Для табличной части добавьте третий компонент: ТипОбъекта.ИмяОбъекта.ИмяТабличнойЧасти
  5. 5
    Проверьте имя, выполнив простой запрос в консоли запросов

Получение физического имени таблицы в СУБД

Для клиент-серверных баз на SQL Server или PostgreSQL часто требуется знать реальное имя таблицы — например, чтобы посмотреть план запроса средствами СУБД, проверить фрагментацию индексов или оценить размер таблицы. Основной инструмент для этого — функция встроенного языка ПолучитьСтруктуруХраненияБазыДанных.

Функция возвращает таблицу значений с колонками: ИмяТаблицыХранения (физическое имя), ИмяТаблицы (логическое имя), Метаданные, Назначение и другие. Выполнить её можно в любой обработке или через внешнюю консоль кода. Для поиска конкретного объекта достаточно отфильтровать результат по логическому имени.

bsl
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из СтруктураХранения Цикл
    Если Строка.ИмяТаблицы = "Справочник.Номенклатура" Тогда
        Сообщить(Строка.ИмяТаблицыХранения); // например, _Reference123
    КонецЕсли;
КонецЦикла;

Альтернативный вариант — пункт меню «Администрирование» в конфигураторе, но прямого просмотра структуры хранения в типовом интерфейсе конфигуратора нет, поэтому программный способ остаётся основным. Многие разработчики сохраняют результат функции в файл и используют его как справочник при работе с СУБД.

Как узнать имя таблицы через запрос и отладчик

Консоль запросов — быстрый способ проверить правильность имени таблицы. Если в тексте запроса указать несуществующую таблицу, конструктор запроса или проверка синтаксиса сразу сообщит об ошибке. Обратный приём тоже работает: откройте конструктор запроса, и в левом списке будут перечислены все доступные таблицы с полными именами — это удобный навигатор по структуре данных.

В отладчике можно узнать, к какой таблице относится конкретный объект. Для ссылочного значения вызов метода Метаданные() вернёт объект описания метаданных, у которого свойство ПолноеИмя() даст точное имя таблицы. Это полезно, когда код работает с произвольными ссылками и нужно определить их тип в runtime.

bsl
ПолноеИмяТаблицы = ЗначениеСсылки.Метаданные().ПолноеИмя();
// Вернёт, например: "Документ.РеализацияТоваровУслуг"

Для перебора всех таблиц конфигурации программно используйте коллекции глобального контекста Метаданные: Метаданные.Справочники, Метаданные.Документы, Метаданные.РегистрыСведений и так далее. Перебрав их, можно сформировать полный список логических имён таблиц базы.

Имена виртуальных таблиц и служебных таблиц

Помимо основных таблиц, у регистров есть виртуальные таблицы: Остатки, Обороты, СрезПервых, СрезПоследних, ОстаткиИОбороты. Их имена строятся добавлением суффикса к имени регистра: РегистрНакопления.ПартииТоваров.Остатки. Важно понимать, что физически таких таблиц в СУБД нет — платформа вычисляет их на основе таблиц движений и итогов.

У регистров накопления существуют физические таблицы итогов (имена вида _AccumRgTotals), у регистров сведений — таблицы срезов. Их физические имена также видны через ПолучитьСтруктуруХраненияБазыДанных с указанием назначения таблицы в соответствующей колонке.

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

Типичные ошибки при поиске имён таблиц

Типичные ошибки
01
Попытка угадать физическое имя таблицы по шаблону — числовой идентификатор не связан с именем объекта и меняется при реструктуризации
02
Использование синонима вместо имени — в запросах работает только свойство «Имя», а не представление объекта
03
Обращение к табличной части без указания родителя — правильно: Документ.Имя.ТабличнаяЧасть
04
Поиск виртуальных таблиц в структуре СУБД — их там нет, они вычисляются платформой
05
Прямая модификация данных в таблицах SQL — приводит к рассогласованию итогов и потере поддержки

Ещё одна распространённая ситуация: после обновления конфигурации физические имена таблиц могут измениться, если выполнялась реструктуризация с пересозданием таблиц. Поэтому сохранённые когда-то соответствия логических и физических имён нужно периодически обновлять, а не считать постоянными.

Также учитывайте, что в файловом варианте базы нет SQL-таблиц в привычном смысле — данные хранятся в едином файле 1Cv8.1CD. Функция ПолучитьСтруктуруХраненияБазыДанных работает и там, но практический смысл физических имён для файловой базы ограничен.

Контрольные точки

Как проверить результат

Имя таблицы в запросе
Норма

Запрос выполняется без ошибки «Таблица не найдена»

Тревожный признак

Ошибка синтаксиса или сообщение о несуществующей таблице

Физическое имя из структуры хранения
Норма

Таблица с таким именем существует в списке таблиц СУБД

Тревожный признак

Таблица не найдена — вероятно, данные устарели после реструктуризации

Тип таблицы
Норма

Префикс физического имени соответствует типу объекта (_Reference — справочник, _Document — документ)

Тревожный признак

Префикс не совпадает с ожидаемым типом — проверьте логическое имя

Часто задаваемые вопросы

Как узнать имя таблицы по ссылке на объект в коде?

Вызовите у ссылки метод Метаданные(), а затем у полученного объекта — ПолноеИмя(). Результат будет строкой вида «Справочник.Номенклатура» или «Документ.ЗаказКлиента», то есть полным логическим именем таблицы, пригодным для использования в запросах.

Можно ли переименовать физическую таблицу в СУБД?

Нет, физические имена генерирует и контролирует платформа. Ручное переименование таблицы в SQL Server или PostgreSQL приведёт к тому, что платформа перестанет находить данные объекта. Изменить логическое имя можно только через переименование объекта в конфигураторе.

Почему запрос к таблице выдаёт ошибку, хотя объект есть в конфигураторе?

Чаще всего используется синоним вместо имени, либо пропущен тип объекта. Проверьте, что имя начинается с типа (Справочник., Документ., РегистрСведений.) и точно совпадает со свойством «Имя» в палитре свойств, включая регистр букв и отсутствие пробелов.

Как получить список всех таблиц базы одним списком?

Выполните ПолучитьСтруктуруХраненияБазыДанных() без параметров — функция вернёт таблицу значений со всеми логическими и физическими именами, включая табличные части, регистры и служебные таблицы. Результат удобно выгрузить в табличный документ или файл для дальнейшего анализа.

Меняются ли физические имена таблиц при обновлении конфигурации?

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

Как узнать имя таблицы табличной части документа?

Логическое имя строится из трёх частей: Документ.ИмяДокумента.ИмяТабличнойЧасти. Физическое имя ищите в структуре хранения по этому логическому имени — табличные части хранятся в отдельных физических таблицах с префиксом вида _Document…_VT.

Итог

Что важно запомнить

Логическое имя таблицы — это ТипОбъекта.ИмяОбъекта, видимое в конфигураторе. Физическое имя в СУБД получают только через ПолучитьСтруктуруХраненияБазыДанных: угадать его нельзя. Виртуальные таблицы физически не существуют, а прямая правка данных в SQL в обход платформы недопустима.