Перейти к основному содержимому

Типы, порождаемые элементом проекта вида «Справочник»

После того как вы добавили в проект справочник, «1С:Шина» создаст несколько типов,имена которых в общем случае выглядят следующим образом:

  • имя-справочника
  • имя-справочника.Ссылка
  • имя-справочника.Объект
  • имя-справочника.Данные

Например, если в проекте есть справочник ИнформационныеСистемы, то будут созданы следующие типы:

  • ИнформационныеСистемы
  • ИнформационныеСистемы.Ссылка
  • ИнформационныеСистемы.Объект
  • ИнформационныеСистемы.Данные

Тип «имя-справочника»​

Это тип-одиночка.

Тип имя-справочника содержит методы для работы с элементами справочника и ссылками на них. Например, НайтиПоКоду(), ПолучитьСсылку().

Также он позволяет пересчитать разрешения доступа: ПересчитатьРазрешенияДоступа(), ПересчитатьРазрешенияДоступаДляОбъектов() (подробнее).

Этот тип не имеет конструктора и имеет единственный экземпляр, обращение к которому выполняется по имени типа:

// Получить менеджера справочника ИнформационныеСистемы
пер МенеджерСправочника = ИнформационныеСистемы

// Пересчитать разрешения доступа справочника ИнформационныеСистемы
ИнформационныеСистемы.ПересчитатьРазрешенияДоступа()

Модуль справочника​

В проекте модуль, расширяющий тип имя-справочника, называется модулем справочника.

Модуль справочника

В этом модуле вы можете обработать событие ПолучитьЗначенияВыбора() для того, чтобы изменить стандартный алгоритм подбора элементов справочника при вводе по строке.

Также в модуле справочника можно обработать события вычисления разрешений доступа: ВычислитьРазрешенияДоступа(), ВычислитьРазрешенияДоступаДляОбъектов() (подробнее).

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

@ВПроекте
метод СоздатьОбъектСДоставкойFtp(): ИнформационныеСистемы.Ссылка
пер Система = новый ИнформационныеСистемы.Объект()
Система.СпособДоставки = СпособДоставки.FTP

возврат Система.Ссылка
;

Этот метод будет доступен в других модулях:

пер Объект = ИнформационныеСистемы.СоздатьОбъектСДоставкойFtp()
совет

В модуле справочника может находиться реализация контракта сервиса.

Тип «имя-справочника.Ссылка»​

Тип имя-справочника.Ссылка доступен в окружении КлиентИСервер и описывают ссылку на один элемент справочника. Он имеет конструктор новый имя-справочника.Ссылка(), который позволяет создать новую ссылку по Ууид, а также метод ЗагрузитьОбъект(), который доступен только на сервере и позволяет получить экземпляр (имя-справочника.Объект) из ссылки (имя-справочника.Ссылка).

Тип «имя-справочника.Объект»​

Тип имя-справочника.Объект доступен в окружении КлиентИСервер.

Экземпляр этого типа содержит данные одного элемента справочника и предназначен для создания, изменения или удаления элемента справочника.

Этот тип имеет конструктор новый имя-справочника.Объект(), который позволяет создать новый элемент справочника. Заполнив этот экземпляр данными, вы можете затем сохранить его в базе данных.

Модуль объекта справочника​

В проекте модуль, расширяющий тип имя-справочника.Объект, называется модулем объекта справочника. Он доступен в окружении Сервер.

Модуль объекта справочника

В нем вы можете обработать такие события, как:

  • ПриЗаполнении(),
  • ПередЗаписью(),
  • ПослеЗаписи(),
  • ПередУдалением().

Например:

@Обработчик
метод ПослеЗаписи(ПредыдущееЗначение: ИнформационныеСистемы.Данные,
ПараметрыЗаписи: ИнформационныеСистемы.ПараметрыЗаписи)
// Действия, которые выполняются после записи справочника
;

Во время записи элемента справочника «Шина» открывает в базе данных транзакцию записи и вызывает следующие события:

Транзакция записи

Вы можете расширить тип имя-справочника.Объект, добавив в модуль объекта собственные публичные методы. Например, метод, пересчитывающий данные элемента справочника, которые зависят от каких-то внешних данных, хранящихся вне справочника:

@ВПроекте
метод ПересчитатьДанные()
// Алгоритм пересчета данных
;

Этот метод будет доступен в других модулях:

// Вызов собственного метода объекта справочника «ИнформационныеСистемы»
// В переменной ИнформационныеСистемы находится значение типа ИнформационныеСистемы.Объект
ИнформационныеСистемы.ПересчитатьДанные()
ИнформационныеСистемы.Записать()
совет

В модуле объекта справочника может находиться реализация методов контракта типа и контракта сущности.

Тип «имя-справочника.Данные»​

Тип имя-справочника.Данные доступен в окружении Сервер и используется только в обработчиках событий имя-справочника.Объект.ПередЗаписью() и имя-справочника.Объект.ПослеЗаписи().

Он не имеет конструктора. «Шина» сам создает экземпляр этого типа при наступлении упомянутого события. Он передает в обработчик события экземпляр этого типа, наполненный «старыми» значениями.

Тип «Справочники»​

Тип Справочники доступен в окружении Сервер.

Данный тип существует независимо от того, есть в проекте справочники или нет. Он позволяет обойти все справочники и пересчитать разрешения доступа.

Тип Справочники не имеет конструктора и имеет единственный экземпляр, обращение к которому выполняется по имени типа:

// Получить менеджера всех справочников
пер МенеджерВсехСправочников = Справочники

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

для Справочник из Справочники
Справочник.ПересчитатьРазрешенияДоступа()
;

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