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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Например:

@Обработчик
метод ПередУдалением(ПараметрыУдаления: МойПланОбмена.ПараметрыУдаления)
// Действия, которые выполняются перед удалением плана обмена
;

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

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

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

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

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

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

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

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

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

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

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

метод ЯвляетсяСсылкойНаПланОбмена(Элемент: Объект): Булево
возврат Элемент это ПланОбмена.Ссылка
;

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

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

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

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

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

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

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

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

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

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

для ПланОбмена из ПланыОбмена
ПланОбмена.ПересчитатьРазрешенияДоступа()
;

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

Типы, порождаемые механизмом обмена данными

Для каждого элемента проекта, входящего в состав плана обмена, «1С:Шина» формирует типы встроенного языка. Состав и структура типов зависит от вида внешней системы.

Так, если выполняется обмен данными между приложениями «1С:Шины», имя типа формируется по следующему шаблону: <ИмяПланаОбмена>.СхемаДанных.<ИмяЭлементаПроектаВСоставеПланаОбмена><ИндексПриКонфликтеИмен>.(<ИмяТипа>|<ИмяТабличнойЧасти>).

Здесь:

  • ИмяПланаОбмена — имя плана обмена, в котором описываются правила конвертации данных.
  • ИмяЭлементаПроектаВСоставеПланаОбмена — имя элемента проекта, входящего в состав плана обмена. Если выполнена настройка правил конвертации и в свойстве Справа указано другое имя, то используется оно.
  • ИндексПриКонфликтеИмен — число, добавляемое к конфликтующим именам. Так как при формировании имени типа пространство имен не используется, это может привести к конфликту имен. Например, если состав плана обмена включает два элемента — Учет::Заказы и Продажи::Заказы, то будут сгенерированы одинаковые имена Заказы и возникнет конфликт. Чтобы этого не произошло, «1С:Шина» сформирует два имени — Заказы1 и Заказы2.
  • ИмяТипа — имя типа, порожденного по элементу проекта, который передается при обмене данными.
  • ИмяТабличнойЧасти — имя табличной части, данные которой передаются при обмене данными.

Типы порождаются для элементов проекта, которые можно включить в состав плана обмена: справочника, документа и регистра сведений. Для объектных типов Справочник и Документ порождаются типы Объект, Ссылка и ИмяТабличнойЧасти (при наличии). Для типа РегистрСведений порождаются объекты Запись, НаборЗаписей, КлючЗаписи и КлючОсновногоФильтра.

Например, для справочника Заказы, включенного в состав плана обмена УдаленныеСклады, будут сформированы три типа:

  • УдаленныеСклады.СхемаДанных.Заказы.Объект — передает данные элемента справочника;
  • УдаленныеСклады.СхемаДанных.Заказы.Ссылка — передает ссылку на элемент справочника;
  • УдаленныеСклады.СхемаДанных.Заказы.ПозицииЗаказа — передает данные табличной части ПозицииЗаказа.

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

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