Книга: Настольная книга 1С:Эксперта по технологическим вопросам
Назад: Реальные транзакции Чтение + Запись[33]
Дальше: 3.13.Сведения об индексах базы. Способ получения этих сведений. Кластерный и некластерные индексы

3.12.Сведения о размещении данных. Способ получения этих сведений

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

ТаблицаСоСтруктурой = ПолучитьСтруктуруХраненияБазыДанных();

ТаблицаСоСтруктурой.Сортировать("Метаданные, ИмяТаблицыХранения");

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

Создадим пустую базу. В ней создадим три прикладных объекта: Константа1, Константа2 и Справочник1. Сохраним изменения в базе и посмотрим на ее структуру описанным выше способом (в таблице 3.12.1 приведены только интересующие нас столбцы).

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

Имя таблицы хранения Имя таблицы Метаданные Назначение
"SystemSettings" "" "" "ХранилищеСистемныхНастроек"
"CommonSettings" "" "" "ХранилищеОбщихНастроек"
"RepSettings" "" "" "ХранилищеПользовательскихНастроекОтчетов"
"RepVarSettings" "" "" "ХранилищеВариантовОтчетов"
"FrmDtSettings" "" "" "ХранилищеНастроекДанныхФорм"
"UsersWorkHistory" "" "" "ИсторияРаботыПользователей"
"Const8" "" "Константа.Константа1" "Константа"
"Const10" "" "Константа.Константа2" "Константа"
"Reference7" "Справочник.Справочник1" "Справочник.Справочник1" "Основная"

Мы работаем с релизом 8.2.18, без использования режима совместимости, поэтому каждая константа хранится в своей таблице. Если переключить режим совместимости, останется одна таблица, отвечающая за все константы.

Как будут выглядеть эти таблицы, если на эту же базу в клиент-серверной версии «1С» посмотреть средствами SQL, показано на рис. 3.12.1.

Рис. 3.12.1. Имена таблиц, изначально созданных файловой версией при создании с нуля базы с двумя константами и справочником после загрузки в клиент-серверную версию и просмотре через SQL Server Management Studio

Из приведенных выше таблицы 3.12.1 и рисунка 3.12.1 делаем выводы:

  1. Функция глобального контекста ПолучитьСтруктуруХраненияБазыДанных() показывает не все таблицы (не показаны обязательные таблицы: Config, ConfigSafe и т. д.).
  2. Нам для решения практических задач по нашей теме и понимания структуры хранения данных вполне достаточно и того, что она показывает.
  3. Названия таблиц в колонке ИмяТаблицыХранения и имена таблиц в СУБД сопоставимы.
  4. Имя таблицы состоит из префикса и номера. По префиксу можно понять, что это за таблица (или посмотреть колонку Метаданные). Номер присваивается системой в сквозном порядке, но с пропусками.

В предыдущей главе обсуждалась выгрузка сообщений обмена как узкое место при параллельной работе. Создадим план обмена и включим в него Константу2 и Справочник1, а Константу1 включать не будем. В таблице 3.12.2 видно, какие таблицы для каких объектов метаданных добавились. При добавлении еще одного плана обмена и включении регистрации в нем Константы2 и Справочника1 новые таблицы для них не появятся. В дальнейшем новые объекты включать в план обмена не будем, чтобы не загромождать материал. Скажем только, что ровно по одной таблице с назначением «РегистрацияИзменений» и подстрокой «ChngR» в имени будет создано для каждого из объектов метаданных, зарегистрированных хотя бы в одном плане обмена.

Таблица 3.12.2. Имена таблиц, добавленных к таблицам объектом метаданных после включения их в план обмена

Имя таблицы хранения Имя таблицы Метаданные Назначение
"SystemSettings" "" "" "ХранилищеСистемныхНастроек"
"CommonSettings" "" "" "ХранилищеОбщихНастроек"
"RepSettings" "" "" "ХранилищеПользовательскихНастроекОтчетов"
"RepVarSettings" "" "" "ХранилищеВариантовОтчетов"
"FrmDtSettings" "" "" "ХранилищеНастроекДанныхФорм"
"UsersWorkHistory" "" "" "ИсторияРаботыПользователей"
"Const8" "" "Константа.Константа1" "Константа"
"Const10" "" "Константа.Константа2" "Константа"
"ConstChngR15" "" "Константа.Константа2" "РегистрацияИзмененийКонстанты"
"Node13" "ПланОбмена.ПланОбмена1" "ПланОбмена.ПланОбмена1" "Основная"
"Reference7" "Справочник.Справочник1" "Справочник.Справочник1" "Основная"
"ReferenceChngR14" "" "Справочник.Справочник1" "РегистрацияИзменений"

Создадим по одному объекту каждого вида.

Объектам, которые могут иметь табличные части, добавим их (одному из документов – две).

Обратим внимание на то, что, когда мы получаем информацию о структуре через останов на отладчике (см. рис. 3.12.2), элементами строки, отвечающей за таблицу, являются также вложенные таблицы значений: «Индексы» и «Поля». Через них можно получить сведения о структуре индексов и структуре полей, и в двух следующих главах мы эти средством воспользуемся.

Рис. 3.12.2. Просмотр структуры базы через останов на отладчике. Видны вложенные таблицы «Индексы» и «Поля»

В таблице 3.12.3 представлены созданные таблицы базы. В столбце «Назначение» для некоторых таблиц курсивом добавлено условие, при котором эта таблица добавляется, если такое условие требует пояснения.

Таблица 3.12.3. Пример имен таблиц, созданных в базе. В базу добавлены все возможные объекты

Имя таблицы хранения Имя таблицы Метаданные Назначение
Служебные
"CommonSettings" "" "" "ХранилищеОбщихНастроек"
"ExtDataSrcPrms" "" "" "Основная"
"FrmDtSettings" "" "" "ХранилищеНастроекДанныхФорм"
"RepSettings" "" "" "ХранилищеПользовательскихНастроекОтчетов"
"RepVarSettings" "" "" "ХранилищеВариантовОтчетов"
"SystemSettings" "" "" "ХранилищеСистемныхНастроек"
"UsersWorkHistory" "" "" "ИсторияРаботыПользователей"
Бизнес-процессы
"BPr23" "БизнесПроцесс.БизнесПроцесс1" "БизнесПроцесс.БизнесПроцесс1" "Основная"
"BPrPoints24" "" "БизнесПроцесс.БизнесПроцесс1" "ТочкиМаршрута"
"BPr23.VT60" "БизнесПроцесс.БизнесПроцесс1.ТабличнаяЧасть1" "БизнесПроцесс.БизнесПроцесс1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"
Документы
"Document16" "Документ.Документ1" "Документ.Документ1" "Основная"
"Document16.VT47" "Документ.Документ1.ТабличнаяЧасть1" "Документ.Документ1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"
"Document16.VT49" "Документ.Документ1.ТабличнаяЧасть2" "Документ.Документ1.ТабличнаяЧасть.ТабличнаяЧасть2" "ТабличнаяЧасть"
Журналы документов
"DocumentJournal37" "ЖурналДокументов.ЖурналДокументов1" "ЖурналДокументов.ЖурналДокументов1" "Основная"
Задачи
"Task25" "Задача.Задача1" "Задача.Задача1" "Основная"
"Task25.VT62" "Задача.Задача1.ТабличнаяЧасть1" "Задача.Задача1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"
Константы
"Const8" "" "Константа.Константа1" "Константа"
"Const10" "" "Константа.Константа2" "Константа"
"ConstChngR15" "" "Константа.Константа2" "РегистрацияИзмененийКонстанты"
Перечисления
"Enum26" "Перечисление.Перечисление1" "Перечисление.Перечисление1" "Основная"
Планы видов расчета
"CKinds21" "ПланВидовРасчета.ПланВидовРасчета1" "ПланВидовРасчета.ПланВидовРасчета1" "Основная"
"CKindsDN86" "" "ПланВидовРасчета.ПланВидовРасчета1" "ПорядокВытеснения" (создается, если у плана видов расчета установлен флажок ИспользуетПериодДействия)
"CKinds21.BaseCK" "ПланВидовРасчета.ПланВидовРасчета1.БазовыеВидыРасчета" "ПланВидовРасчета.ПланВидовРасчета1.ТабличнаяЧасть.БазовыеВидыРасчета" "БазовыеВидыРасчета" (создается, если у плана видов расчета свойство "Зависимость от базы" не "Не зависит")
"CKinds21.LeadingCK" "ПланВидовРасчета.ПланВидовРасчета1.ВедущиеВидыРасчета" "ПланВидовРасчета.ПланВидовРасчета1.ТабличнаяЧасть.ВедущиеВидыРасчета" "ВедущиеВидыРасчета"
"CKinds21.DisplacedCK" "ПланВидовРасчета.ПланВидовРасчета1.ВытесняющиеВидыРасчета" "ПланВидовРасчета.ПланВидовРасчета1.ТабличнаяЧасть.ВытесняющиеВидыРасчета" "ВытесняющиеВидыРасчета" (создается, если у плана видов расчета установлен флажок ИспользуетПериодДействия)
"CKinds21.VT58" "ПланВидовРасчета.ПланВидовРасчета1.ТабличнаяЧасть1" "ПланВидовРасчета.ПланВидовРасчета1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"
Планы видов характеристик
"Chrc27" "ПланВидовХарактеристик.ПланВидовХарактеристик1" "ПланВидовХарактеристик.ПланВидовХарактеристик1" "Основная"
"Chrc27.VT51" "ПланВидовХарактеристик.ПланВидовХарактеристик1.ТабличнаяЧасть1" "ПланВидовХарактеристик.ПланВидовХарактеристик1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"
Планы обмена
"Node13" "ПланОбмена.ПланОбмена1" "ПланОбмена.ПланОбмена1" "Основная"
"Node13.VT56" "ПланОбмена.ПланОбмена1.ТабличнаяЧасть1" "ПланОбмена.ПланОбмена1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"
Планы счетов
"Acc22" "ПланСчетов.ПланСчетов1" "ПланСчетов.ПланСчетов1" "Основная"
"Acc22.ExtDim72" "ПланСчетов.ПланСчетов1.ВидыСубконто"(создается, если максимальное количество субконто больше 0) "ПланСчетов.ПланСчетов1.ТабличнаяЧасть.ВидыСубконто" "ВидыСубконто"
"Acc22.VT53" "ПланСчетов.ПланСчетов1.ТабличнаяЧасть1" "ПланСчетов.ПланСчетов1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"
Последовательности
"Seq41" "Последовательность.Последовательность1" "Последовательность.Последовательность1" "Основная"
"SeqB42" "" "Последовательность.Последовательность1" "ГраницыПоследовательности"
Регистры бухгалтерии
"AccRg28" "РегистрБухгалтерии.РегистрБухгалтерии1" "РегистрБухгалтерии.РегистрБухгалтерии1" "Основная"
"AccRgAT030" "" "РегистрБухгалтерии.РегистрБухгалтерии1" "ИтогиПоСчетам"
"AccRgAT174" "" "РегистрБухгалтерии.РегистрБухгалтерии1" "ИтогиПоСчетамССубконто1" (создается, если максимальное количество субконто у плана счетов больше 0)
"AccRgAT275" "" "РегистрБухгалтерии.РегистрБухгалтерии1" "ИтогиПоСчетамССубконто2" (создается, если максимальное количество субконто у плана счетов больше 1)
"AccRgCT65" "" "РегистрБухгалтерии.РегистрБухгалтерии1" "ИтогиМеждуСчетами" " (создается, если регистр поддерживает корреспонденцию)
"AccRgED77" """ "РегистрБухгалтерии.РегистрБухгалтерии1" "ЗначенияСубконто" (создается, если максимальное количество субконто у плана счетов больше 0)
"AccRgOpt34" "" "РегистрБухгалтерии.РегистрБухгалтерии1" "НастройкиХраненияИтоговРегистраБухгалтерии"
Регистры накопления типа «Остатки»
"AccumRg17" "РегистрНакопления.РегистрНакопления1" "РегистрНакопления.РегистрНакопления1" "Основная"
"AccumRgAggGrid92" "" "РегистрНакопления.РегистрНакопления1" "СписокАгрегатовРегистровНакопления" (создалась после создания агрегатов для Регистра накопления2)
"AccumRgAggOpt94" "" "РегистрНакопления.РегистрНакопления1" "НастройкиРежимаАгрегатовРегистровНакопления" " (создалась после создания агрегатов для Регистра накопления2)
"AccumRgOpt20" "" "РегистрНакопления.РегистрНакопления1" "НастройкиХраненияИтоговРегистраНакопления"
"AccumRgT19" "" "РегистрНакопления.РегистрНакопления1" "Итоги"
Регистры накопления типа «Обороты»
"AccumRg78" "РегистрНакопления.РегистрНакопления2" "РегистрНакопления.РегистрНакопления2" "Основная"
"AccumRgAgg31h97" "" "РегистрНакопления.РегистрНакопления2" "АгрегатРегистраНакопления" (создалась после создания агрегатов)
"AccumRgAggGrid93" "" "РегистрНакопления.РегистрНакопления2" "СписокАгрегатовРегистровНакопления" (создалась после создания агрегатов)
"AccumRgAggOpt95" "" "РегистрНакопления.РегистрНакопления2" "НастройкиРежимаАгрегатовРегистровНакопления" (создалась после создания агрегатов)
"AccumRgBf99" "" "РегистрНакопления.РегистрНакопления2" "БуферОборотов" (создалась после создания агрегатов)
"AccumRgDl98" "" "РегистрНакопления.РегистрНакопления2" "НовыеОбороты" (создалась после создания агрегатов)
"AccumRgOpt79" "" "РегистрНакопления.РегистрНакопления2" "НастройкиХраненияИтоговРегистраНакопления"
"AccumRgSt100" "" "РегистрНакопления.РегистрНакопления2" "СтатистикаЗапросов" (создалась после создания агрегатов)
"AccumRgTn85" "" "РегистрНакопления.РегистрНакопления2" "Обороты" (создается, если есть хоть одно измерение)
Регистры расчета
"CRg36" "РегистрРасчета.РегистрРасчета1" "РегистрРасчета.РегистрРасчета1" "Основная"
"CRgActP88" "" "РегистрРасчета.РегистрРасчета1" "ПериодыДействия" (создается, если установлено свойство "Период действия" )
"CRgRecalc87" "РегистрРасчета.РегистрРасчета1.Перерасчет.Перерасчет1" "РегистрРасчета.РегистрРасчета1.Перерасчет.Перерасчет1" "Основная" (создается, если добавлен перерасчет )
Регистры сведений
"InfoRg38" "РегистрСведений.РегистрСведений1" "РегистрСведений.РегистрСведений1" "Основная"
Справочники
"Reference7" "Справочник.Справочник1" "Справочник.Справочник1" "Основная"
"ReferenceChngR14" "" "Справочник.Справочник1" "РегистрацияИзменений"
"Reference7.VT45" "Справочник.Справочник1.ТабличнаяЧасть1" "Справочник.Справочник1.ТабличнаяЧасть.ТабличнаяЧасть1" "ТабличнаяЧасть"

Несколько комментариев к таблице:

  1. Табличная часть объекта в первой части префикса содержит префикс объекта, см., напр., «Document16» и «Document16.VT47».
  2. К таблице точек маршрута бизнес-процесса и к некоторым другим таблицам это не относится.
  3. Понятно, что в условиях другой конкретной базы нумерация таблиц и их количество будут другими. После изменения релиза могут измениться и их имена, хотя бы и незначительно. Могут появляться новые виды таблиц, как появились отдельные таблицы под каждую константу и таблицы, связанные с агрегатами. Главное – понимать, как и откуда вы эти данные можете получить и как полученные из вашей базы особенности размещения данных влияют на параллельность работы.
Назад: Реальные транзакции Чтение + Запись[33]
Дальше: 3.13.Сведения об индексах базы. Способ получения этих сведений. Кластерный и некластерные индексы