Выбор между табличной частью, справочником и регистром сведений: что лучше для хранения данных документа?

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

При разработке расширений или модификации типовых конфигураций (например, ЗаказКлиента) часто возникает вопрос: где именно хранить дополнительные структурированные данные? На первый взгляд, создание табличной части в самом документе кажется самым логичным и простым решением. Однако опытные архитекторы 1С часто смотрят в сторону справочников или регистров сведений. Давайте вместе разберем эту ситуацию, проанализируем плюсы и минусы каждого подхода и выясним, в каких случаях стоит отказаться от привычной табличной части.

Вариант 1: Использование табличной части документа

Рассмотрим ситуацию, когда мы создаем табличную часть (ТЧ) непосредственно в документе через расширение. Это стандартный путь, который выбирает большинство разработчиков для хранения данных, жестко связанных с конкретным экземпляром документа.

Преимущества этого подхода:

  1. Целостность данных и транзакционность. Данные табличной части записываются в базу данных в той же транзакции, что и сам документ. Мы можем быть уверены: если документ записан, то и строки таблицы сохранены. Если произошла ошибка — откатится всё целиком.
  2. Простота реализации. Нам не нужно писать сложный код для связи объектов. Платформа 1С берет на себя отображение, редактирование и хранение строк ТЧ.
  3. Экономия ресурсов базы данных. Нам не нужно создавать дополнительные ссылочные типы (UUID для элементов справочника) и дополнительные таблицы индексов, которые требуются для отдельных объектов.

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

Вариант 2: Вынос данных в отдельный справочник

Иногда предлагается схема, при которой в документе есть только ссылка на элемент справочника, а в этом справочнике уже хранится вся необходимая табличная информация (или сам справочник выступает как набор данных).

Когда это действительно оправдано?

Выясним причину, по которой это может быть полезно. Основной аргумент — повторное использование. Если наборы дополнительных данных в разных заказах начинают совпадать на 100%, использование справочника позволяет избежать дублирования информации. Вместо того чтобы хранить 10 строк в каждом из 1000 документов, мы храним их один раз в элементе справочника, а в документах просто указываем ссылку.

Технические нюансы:

  1. Независимость метаданных. Если мы разрабатываем тиражное решение, использование отдельного справочника вместо изменения структуры типового документа (даже через расширение) делает систему более гибкой при обновлениях.
  2. Ленивая загрузка. При открытии формы документа 1С считывает объект целиком, включая все ТЧ. Если в вашей таблице тысячи строк, форма будет «тормозить». Справочник можно подгружать только тогда, когда пользователь реально перейдет на нужную закладку.

Вариант 3: Использование регистра сведений

Проанализируем ситуацию, когда данные лучше хранить в регистре сведений. Этот вариант часто оказывается самым сбалансированным для сложных систем.

Основные плюсы работы с регистром:

Сравнительный анализ производительности и памяти

Рассмотрим подробнее, как платформа 1С работает с памятью. Когда мы вызываем ЭтотОбъект = СсылкаНаДокумент.ПолучитьОбъект();, в оперативную память сервера (а затем и клиента) передаются абсолютно все данные всех табличных частей.

Если ваша таблица содержит сотни строк с тяжелыми реквизитами, это существенно нагружает сеть и память. В случае со справочником или регистром мы можем использовать динамический список для отображения данных на форме. Разберем по шагам, как это работает: динамический список запрашивает из базы только те строки, которые видны пользователю в данный момент («порционность»), что делает интерфейс отзывчивым даже при огромных объемах информации.

Как реализовать связь программно?

Если вы выбрали вариант со сторонним объектом (справочником или регистром), важно правильно организовать запись данных. Посмотрим на пример логики в модуле формы документа:


&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    // Пример записи связанных данных в регистр сведений
    НаборЗаписей = РегистрыСведений.ДополнительныеДанныеЗаказов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Заказ.Установить(ТекущийОбъект.Ссылка);
    
    // Заполняем набор из временной таблицы формы или коллекции
    Для Каждого СтрокаДанных Из Объект.ДополнительнаяТаблица Цикл
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Заказ = ТекущийОбъект.Ссылка;
        ЗаполнитьЗначенияСвойств(НоваяЗапись, СтрокаДанных);
    КонецЦикла;
    
    НаборЗаписей.Записать();
КонецПроцедуры

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

Использование типового механизма «Дополнительные сведения»

Прежде чем создавать новые объекты, давайте выясним, нельзя ли обойтись штатным механизмом БСП (Библиотеки Стандартных Подсистем). В современных конфигурациях (ERP, УТ 11, КА) реализован механизм Дополнительных сведений.

Они хранятся в общем регистре ДополнительныеСведения. Это идеальный вариант, если вам нужно добавить несколько простых реквизитов, не меняя структуру метаданных. Однако для полноценных таблиц этот механизм не подходит — он предназначен для «плоских» данных (одно свойство — одно значение).

Итоговые рекомендации по выбору

Подведем итог нашему анализу и выделим критерии выбора:

  1. Выбирайте табличную часть, если:
    • Данные уникальны для каждого документа и никогда не повторяются.
    • Объем данных невелик (до 100-200 строк).
    • Требуется максимальная простота разработки и гарантированная транзакционность «из коробки».
  2. Выбирайте справочник, если:
    • Один и тот же набор данных может использоваться в разных документах (шаблоны, спецификации).
    • Данные имеют самостоятельную ценность и должны существовать даже после удаления документа.
  3. Выбирайте регистр сведений, если:
    • По этим данным нужно строить сложные отчеты и выполнять быстрый поиск.
    • Документ очень «тяжелый», и вы хотите оптимизировать скорость его открытия.
    • Вам нужно независимое редактирование данных разными пользователями.

Проанализировав все варианты, мы видим, что решение "в лоб" через табличную часть не всегда является оптимальным. Для профессиональной разработки в системе 1С важно учитывать не только текущее удобство написания кода, но и будущую производительность, удобство поддержки и объемы базы данных.

← На главную