Как расшифровываются названия физических таблиц регистра бухгалтерии _AccRg, _AccRgED и _AccRgAT в СУБД

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При оптимизации производительности запросов, чтении планов выполнения в MS SQL Server или PostgreSQL, а также при детальном анализе структуры базы данных разработчики часто сталкиваются с системными именами таблиц платформы 1С:Предприятие. В случае с регистрами бухгалтерии имена таблиц имеют характерные сокращения, которые вызывают вопросы. Разберем по шагам, как устроена физическая схема хранения данных бухгалтерского учета и что именно означают системные префиксы.

Расшифровка основных префиксов таблиц регистра бухгалтерии

В первую очередь выясним разницу между регистрами накопления и регистрами бухгалтерии на уровне физических таблиц СУБД. В регистрах накопления используется префикс _AccumRg (от английского Accumulation Register). Для регистров бухгалтерии платформа формирует совершенно другое семейство таблиц с префиксом _AccRg (от Accounting Register).

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

  1. _AccRg<n> (Accounting Register) — основная физическая таблица движений (проводок). Здесь хранятся ключевые реквизиты проводки: регистратор, период, номер строки, активность, счета дебета и кредита, балансовые ресурсы и реквизиты. Однако сами значения субконто в этой таблице отсутствуют.
  2. _AccRgED<n> (Extra Dimensions или Extended Dimensions) — физическая таблица значений субконто. В терминологии платформы аналитические разрезы бухгалтерского учета (субконто) исторически обозначаются как Extra Dimensions. Данная таблица создается, если у связанного плана счетов максимальное количество субконто больше нуля. В ней фиксируются ссылки на строки движений, виды субконто и конкретные ссылки на объекты аналитики. Такое разделение обусловлено тем, что у каждого счета может быть свой уникальный состав субконто.
  3. _AccRgAT0<n> (Account Totals level 0) — таблица итогов нулевого уровня. В ней хранятся рассчитанные остатки и обороты исключительно в разрезе счетов и общих измерений регистра бухгалтерии, без учета аналитики субконто.
  4. _AccRgAT<i><n> (Account Totals level i) — таблицы итогов по уровням субконто, где индекс i обозначает порядковый номер уровня (от 1 до максимального количества субконто, заданного в плане счетов). Например, при трех видах субконто платформа создаст таблицы _AccRgAT1, _AccRgAT2 и _AccRgAT3.
  5. _AccRgCT<n> (Correspondence Totals) — физическая таблица итогов оборотов между счетами корреспонденции. Платформа создает её только в том случае, если у регистра бухгалтерии включено свойство Корреспонденция.
  6. _AccRgOpt (Options) — глобальная служебная таблица настроек хранения итогов, существующая в единственном экземпляре на всю базу данных для всех регистров бухгалтерии.
  7. _AccRgChngR<n> (Change Records) — таблица регистрации изменений регистра бухгалтерии для механизмов планов обмена.

Таблицы видов субконто в плане счетов

Посмотрим на связанную архитектуру плана счетов. Для хранения перечня видов субконто, назначенных конкретному счету, платформа формирует отдельную служебную таблицу вида _Acc<n>_ExtDim<k>. Проанализируем состав её основных полей:

  1. Поле идентификатора счета (_Acc<n>_ID), к которому привязана строка настройки аналитики.
  2. Ключ характеристики и номер строки (_KeyField, _LineNo).
  3. Ссылка на вид субконто (_DimKind).
  4. Признак предопределенного субконто, заданного в конфигураторе (_DimIsMetadata).
  5. Признак только оборотов (_TurnoverOnly), если по данному субконто не требуется вести остаточный учет.
  6. Флаги признаков учета субконто, если в плане счетов задействованы соответствующие признаки аналитики.

Архитектурные особенности и производительность СУБД

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

  1. Нагрузка при записи проводок: Чем больше максимальное количество субконто задано в плане счетов, тем больше физических таблиц _AccRgAT<i> создается и поддерживается платформой. При проведении документа СУБД вынуждена обновлять данные и индексы одновременно в таблице движений _AccRg, в таблице субконто _AccRgED и во всех задействованных таблицах итогов. Это прямо влияет на длительность транзакции и увеличивает риск блокировок.
  2. Оптимизация чтения виртуальных таблиц: Когда в запросе 1С мы обращаемся к виртуальной таблице остатков без обращения к полям субконто, оптимизатор платформы транслирует запрос к легкой и компактной таблице _AccRgAT0. Как только в выборку или условия добавляются субконто, платформа подключает соответствующие таблицы _AccRgAT<i>.
  3. Периодичность хранения итогов: Регистры бухгалтерии хранят итоги с жестко фиксированной платформенной периодичностью — 1 месяц. Если регламентное задание по пересчету и смещению границы итогов не выполняется вовремя, платформа вынуждена вычислять остатки динамически, выполняя ресурсоемкое сканирование детальной таблицы движений _AccRg.
  4. Режим разделения итогов: Для устранения взаимных блокировок при параллельном проведении документов по одним и тем же счетам используется свойство Разрешить разделение итогов. В этом случае платформа добавляет разделители в таблицы итогов, снижая конкуренцию транзакций за одни и те же физические строки.

Как безопасно определить соответствие таблиц в базе данных

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


ПараметрыИмен = Новый Массив;
ПараметрыИмен.Добавить("РегистрБухгалтерии.Хозрасчетный");

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

Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
    Сообщить(СтрокаТаблицы.ИмяТаблицы + " -> " + СтрокаТаблицы.ИмяТаблицыХранения + " (" + СтрокаТаблицы.Назначение + ")");
КонецЦикла;

Важное ограничение: Прямая модификация таблиц _AccRg, _AccRgED и _AccRgAT средствами SQL-запросов (командами INSERT, UPDATE, DELETE) категорически запрещена. Платформа 1С использует сложные алгоритмы целостности между проводками и многоуровневыми таблицами итогов, нарушение которых приведет к логическому разрушению базы данных.

← На главную