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

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

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

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

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

Тип «ИмяПланаОбмена»​

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

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

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

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

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

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

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

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

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

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

Вы можете расширить тип {ИмяПланаОбмена}, добавив в модуль плана обмена собственные публичные методы. Например, метод для создания элементов определенного вида:

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

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

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

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

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

Тип «ИмяПланаОбмена.Объект»​

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

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

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

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

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

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

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

Например:

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

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

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

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

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

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

Тип «ИмяПланаОбмена.Ссылка»​

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

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

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

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

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

Тип «ИмяПланаОбмена.Данные»​

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

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

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

Тип «ИмяПланаОбмена.НастройкиПередачиДанных»​

Тип {ИмяПланаОбмена}.НастройкиПередачиДанных описывает настройки передачи данных узла плана обмена и доступен в окружении КлиентИСервер. Позволяет организовать обмен данными текущего приложения с внешним приложением. Тип порождается для каждого плана обмена, в котором значение свойства ПередачаДанных.Использовать равно Истина.

При установке Активность = Истина создается запланированное задание, выполняющее обмен данными, а в свойстве КлючЗапланированногоЗадания сохраняется его ключ.

Если передача данных активирована, соответствующее интегрируемое приложение нельзя удалить — проверка выполняется при записи узла плана обмена.

метод АктивироватьПередачуДанных(Узел: Склады.Ссылка, Приложение: ПриложениеСклад.Ссылка): Строка?
пер Настройки = Узел.ЗагрузитьОбъект().ПередачаДанных
Настройки.Активность = Истина
Настройки.ИнтегрируемоеПриложение = Приложение
возврат Настройки.КлючЗапланированногоЗадания
;

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

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

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

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

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

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

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

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

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

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

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

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

Здесь:

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

Типы порождаются для элементов проекта, которые можно включить в состав плана обмена:

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

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

  • УдаленныеСклады.СхемаДанных.Заказы.Запись — передает данные записи регистра сведений,
  • УдаленныеСклады.СхемаДанных.Заказы.НаборЗаписей — передает набор записей регистра сведений,
  • УдаленныеСклады.СхемаДанных.Заказы.КлючЗаписи — передает ключ записи регистра сведений,
  • УдаленныеСклады.СхемаДанных.Заказы.КлючОсновногоФильтра — передает ключ основного фильтра регистра сведений.

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