Является ли СправочникМенеджер ссылочным типом и какова его архитектурная роль в 1С?

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

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

Различие между ссылочным типом, объектом и менеджером

Для понимания архитектуры 1С проанализируем три ключевых типа данных, связанных с каждым справочником в конфигурации:

  1. СправочникСсылка.<ИмяСправочника> — именно это является ссылочным типом данных платформы. Ссылка представляет собой неизменяемый идентификатор (содержащий внутри уникальный идентификатор GUID), который указывает на конкретную запись в таблице базы данных. Ссылка не хранит состояние объекта целиком, но обеспечивает доступ к его реквизитам по мере необходимости.
  2. СправочникОбъект.<ИмяСправочника> — объектный тип, представляющий собой экземпляр конкретного элемента или группы справочника, загруженный в оперативную память. Он предназначен для модификации данных, записи в базу, выполнения проверок и обработки событий перед/при записи.
  3. СправочникМенеджер.<ИмяСправочника> — сервисный объект (служба), предназначенный для управления справочником как сущностью метаданных в целом. Он не является ссылочным типом и не хранит внутри себя элементы справочника.

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

Архитектурная роль СправочникМенеджер в паттернах проектирования

Если сопоставлять платформу 1С:Предприятие с классическими корпоративными шаблонами проектирования (Enterprise Patterns), то связка объектов справочника реализует следующие роли:

  1. СправочникМенеджер выступает в роли комбинации паттернов Table Data Gateway (Шлюз к таблице данных), Repository (Репозиторий) и Factory (Фабрика). Это слой сервисов, который принимает высокоуровневые вызовы прикладного кода и преобразует их в запросы к СУБД или создание новых экземпляров объектов.
  2. СправочникОбъект реализует паттерн Row Data Gateway / Active Record, инкапсулируя данные одной строки таблицы и бизнес-логику работы с ней.
  3. СправочникСсылка представляет собой Identity Map / Value Object / Proxy, предоставляющий неизменяемый идентификатор сущности с возможностью ленивого чтения реквизитов.
  4. СправочникВыборка реализует паттерн Iterator / Cursor, позволяющий последовательно обходить записи выборки порциями без одновременной загрузки всей таблицы в память.

Методы и возможности объекта СправочникМенеджер

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

  1. Создание новых данных: методы СоздатьЭлемент() и СоздатьГруппу(), возвращающие новый экземпляр типа СправочникОбъект.
  2. Поиск данных: методы НайтиПоКоду(), НайтиПоНаименованию(), НайтиПоРеквизиту(), которые выполняют поиск в базе и возвращают СправочникСсылка.
  3. Формирование выборок: методы Выбрать() и ВыбратьИерархически(), возвращающие объект типа СправочникВыборка.
  4. Работа с интерфейсом и метаданными: методы получения форм (ПолучитьФорму(), ПолучитьФормуСписка(), ПолучитьФормуВыбора()), макетов (ПолучитьМакет()) и проверка пустых значений (ПустаяСсылка()).
  5. Предопределенные элементы: доступ к предопределенным элементам конфигурации через свойства менеджера по их имени.

Посмотрим на практический пример использования методов менеджера на стороне сервера:


// Получение ссылки на предопределенный или найденный элемент через менеджер
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоКоду("00-000001");

Если СсылкаНаТовар = Справочники.Номенклатура.ПустаяСсылка() Тогда
    // Создание нового элемента через фабричный метод менеджера
    НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйОбъект.Код = "00-000001";
    НовыйОбъект.Наименование = "Новый товар";
    НовыйОбъект.Записать();
КонецЕсли;

Поведение в памяти и контексты исполнения

Выясним особенности передачи параметров и ограничения вызовов менеджера в среде 1С:

  1. Создание экземпляра: разработчик не может создать объект СправочникМенеджер вручную с помощью оператора Новый. Доступ к нему осуществляется через глобальное свойство Справочники.<ИмяСправочника>.
  2. Передача в процедуры и функции: в пределах одного серверного контекста менеджер передается как указатель на объект в оперативной памяти. Однако при передаче между контекстами (например, с клиента на сервер) данный объект не передается и не сериализуется.
  3. Ограничения клиентского контекста: на тонком клиенте объект СправочникМенеджер имеет урезанный состав методов. Платформенные методы выборки, создания и прямого поиска элементов доступны исключительно на стороне сервера, так как требуют прямого обращения к СУБД.
  4. Модуль менеджера: разработчик может расширять функционал менеджера собственными экспортными процедурами и функциями в модуле менеджера. Эти методы компилируются на сервере и могут использоваться для реализации специфической бизнес-логики (например, печати документов или сложных алгоритмов поиска).
← На главную