Типы встроенного языка, порождаемые элементом проекта вида «Справочник»
После того как вы добавили в проект справочник и дали ему имя, создаст несколько типов встроенного языка. Например, если в проекте есть справочник Сотрудники, то будут созданы следующие типы:
- Сотрудники
- Сотрудники.Ссылка
- Сотрудники.Объект
- Сотрудники.Данные
В общем случае имена этих типов выглядят следующим образом:
- имя-справочника
- имя-справочника.Ссылка
- имя-справочника.Объект
- имя-справочника.Данные
Тип «имя-справочника»
Это тип-одиночка.
Тип имя-справочника содержит методы для работы с элементами справочника и ссылками на них. Например, НайтиПоКоду(), ПолучитьСсылку().
Также он позволяет пересчитать разрешения доступа: ПересчитатьРазрешенияДоступа(), ПересчитатьРазрешенияДоступаДляОбъектов() (подробнее).
Этот тип не имеет конструктора и имеет единственный экземпляр, обращение к которому выполняется по имени типа:
// Получить менеджера справочника «Сотрудники»
пер МенеджерСправочника = Сотрудники
// Пересчитать разрешения доступа справочника «Сотрудники»
Сотрудники.ПересчитатьРазрешенияДоступа()
Модуль справочника
В проекте модуль, расширяющий тип имя-справочника, называется модулем справочника.
В этом модуле вы можете обработать событие ПолучитьЗначенияВыбора для того, чтобы изменить стандартный алгоритм подбора элементов справочника при вводе по строке.
Также в модуле справочника можно обработать события вычисления разрешений доступа: ВычислитьРазрешенияДоступа, ВычислитьРазрешенияДоступаДляОбъектов (подробнее).
Вы можете расширить тип имя-справочника, добавив в модуль справочника собственные публичные методы. Например, метод, создающий элементы определенного вида:
// Создает сотрудников-кандидатов в справочнике «Сотрудники»
@ВПроекте
метод СоздатьКандидата(ФИО: Строка): Сотрудники.Ссылка
пер Сотрудник = новый Сотрудники.Объект()
Сотрудник.ФИО = ФИО
Сотрудник.Статус = СтатусыСотрудников.Кандидат
Сотрудник.Записать()
возврат Сотрудник.Ссылка
;
Этот метод будет доступен в других модулях:
// Вызов метода разработчика у менеджера справочника «Сотрудники»
пер НовыйКандидат = Сотрудники.СоздатьКандидата("Гаврилов Сергей")
Тип «имя-справочника.Ссылка»
Тип имя-справочника.Ссылка доступен в окружении КлиентИСервер.
Он предназначен для описания ссылки на один элемент справочника.
Он имеет конструктор новый имя-справочника.Ссылка(), который позволяет создать новую ссылку по Ууид и метод ЗагрузитьОбъект(), который есть только на сервере и который позволяет получить экземпляр (имя-справочника.Объект) из ссылки (имя-справочника.Ссылка).
Тип «имя-справочника.Объект»
Тип имя-справочника.Объект доступен в окружении Сервер.
Экземпляр этого типа содержит данные одного элемента справочника и предназначен для создания, изменения или удаления элемента справочника.
Этот тип имеет конструктор новый имя-справочника.Объект(), который позволяет создать новый элемент справочника. Заполнив этот экземпляр данными вы можете затем сохранить его в базе данных.
Модуль объекта справочника
В проекте модуль, расширяющий тип имя-справочника.Объект, называется модулем объекта справочника. Он доступен в окружении Сервер.
В нем вы можете обработать такие события как:
- ПриСоздании
- ПриПроверкеДанных
- ПередЗаписью
- ПослеЗаписи
- ПередУдалением
Во время записи элемента справочника открывает в базе данных транзакцию записи и события вызываются следующим образом:
Вы можете расширить тип имя-справочника.Объект, добавив в модуль объекта собственные публичные методы. Например, метод, пересчитывающий данные элемента справочника, которые зависят от каких-то внешних данных, которые хранятся вне справочника:
@ВПроекте
метод ПересчитатьДанные()
// Алгоритм пересчета данных
....
;
Этот метод будет доступен в других модулях:
// Вызов собственного метода объекта справочника «Сотрудники»
// В переменной Сотрудник находится значение типа Сотрудники.Объект
Сотрудник.ПересчитатьДанные()
Сотрудник.Записать()
Тип «имя-справочника.Данные»
Тип имя-справочника.Данные доступен в окружении Сервер.
Он используется только в обработчиках событий имя-справочника.Объект.ПередЗаписью() и имя-справочника.Объект.ПослеЗаписи().
Он не имеет конструктора. сам создает экземпляр этого типа при наступлении упомянутого события. Он передает в обработчик события экземпляр этого типа, наполненный «старыми» значениями.
Тип Справочники
Тип Справочники доступен в окружении КлиентИСервер.
Независимо от того, есть в проекте справочники или нет, во встроенном языке существует тип Справочники. Он предназначен для того, чтобы определить, является ли значение ссылкой на какой-либо справочник (свойство ТипыСсылок) или элементом какого-либо справочника (свойство ТипыЭлементов). Также этот тип позволяет обойти все справочники и пересчитать разрешения доступа.
Тип Справочники не имеет конструктора и имеет единственный экземпляр, обращение к которому выполняется по имени типа:
// Получить менеджера всех справочников
пер МенеджерВсехСправочников = Справочники
Экземпляр типа Справочники является коллекцией элементов типа имя-справочника. Поэтому, чтобы пересчитать разрешения доступа, достаточно просто обойти эту коллекцию и у каждого менеджера вызвать пересчет разрешений (подробнее):
для Справочник из Справочники
Справочник.ПересчитатьРазрешенияДоступа()
;
Однако при этом нужно учитывать, что состав коллекции элементов экземпляра типа Справочник зависит от того, какой подсистеме принадлежит модуль, в котором был получен этот экземпляр. В его составе будут только те справочники, которые принадлежат данной подсистеме и тем подсистемам, которые импортирует данная подсистема.