Типы встроенного языка, порождаемые элементом проекта вида «Планы Обмена»

После того как вы добавили в проект план обмена и дали ему имя, создаст несколько типов встроенного языка. Например, если в проекте есть план обмена Склады, то будут созданы следующие типы:

  • Склады
  • Склады.Ссылка
  • Склады.Объект
  • Склады.Данные

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

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

Тип «имя-плана-обмена»

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

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

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

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

// Получить менеджера плана обмена «Склады»
пер МенеджерПланаОбмена = Склады

// Пересчитать разрешения доступа плана обмена «Склады»
Склады.ПересчитатьРазрешенияДоступа()

Модуль плана обмена

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

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

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

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

// Создает узел в плане обмена «Склады»
@ВПроекте
метод СоздатьСкладМосква(Наименование: Строка): Склады.Ссылка

    пер Склад = новый Склады.Объект()
    Склад.Наименование = Наименование
    Склад.Регион = Регионы.Москва
    Склад.Записать()

    возврат Склад.Ссылка
;

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

// Вызов метода разработчика у менеджера справочника «Сотрудники»
пер НовыйСкладМосква = Склады.СоздатьСкладМосква("Север")
Совет: В модуле плана обмена может находиться реализация контракта сервиса.

Тип «имя-плана-обмена.Объект»

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

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

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

Модуль объекта плана обмена

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

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

  • ПриСоздании
  • ПриПроверкеДанных
  • ПередЗаписью
  • ПослеЗаписи
  • ПередУдалением

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

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

@ВПроекте
метод ПересчитатьДанные()

    // Алгоритм пересчета данных
    ....

;

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

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

Тип «имя-плана-обмена.Ссылка»

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

Он предназначен для описания ссылки на один узел плана обмена.

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

Тип «имя-плана-обмена.Данные»

Тип структуры с реквизитами, соответствующими реквизитам плана обмена. Тип имя-плана-обмена.Данные доступен в окружении Сервер.

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

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

Тип «ПланыОбмена»

Тип ПланыОбмена доступен в окружении КлиентИСервер.

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

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

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

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

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

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