Как подключить новые типы объектов в интегрируемых системах
Интегрируемые системы объединяют данные из разных источников. Для работы с новыми типами объектов разработчикам нужно выполнить определённые действия. Мы рассмотрим основные шаги подключения новых типов объектов, которые надо сделать на примере МЕДЕРП и Дополнения КБФИТ для БГУ.
Содержание
- 1. Подготовительные работы
- 2. Внесение изменений на стороне МЕДЕРП
- 3. Внесение изменений на стороне Дополнение КБФИТ для БГУ
- Добавить подразделение в расширение
- Расширить состав определяемых типов
- Расширить состав источников подписок
- Добавить константу и разместить ее в панели администрирования
- Расширить операции web-сервиса
- Расширить права роли «КБФИТ. Обмен»
- Внести изменения в общий модуль «КБФИТ. Общего назначения вызов сервера»
- 4. Тестирование обмена
- Заключение
В этой статье мы поговорим о том, как можно подключить новые типы объектов в интегрируемых системах. На примере добавления нового типа объекта — подразделения — при интеграции МЕДЕРП с 1С: БГУ мы покажем наше закулисье.
1. Подготовительные работы
Любой новый механизм или функциональность обязательно регистрируются на информационном портале КБФИТ:
- Присваивается тег — механизму присваивается свой персональный тег, который в дальнейшем обрастет информацией, включая:
- Имя - в нашем случае это «nsi-bgu-pdrz».
- Группа — фиксируется принадлежность механизма к подсистеме, в нашем случае это — «Механизмы "Централизованное управление нормативно-справочной информацией"».
- Название — в нашем случае это «МП. НСИ. Формирование подразделения на стороне 1С: БГУ».
- Ответственный — фиксируется аналитик, который в дальнейшем будет описывать работу механизма.
- Фиксируются связанные теги — так как механизм является составляющей функциональности, то фиксируем к чему относится:
- Ф. НСИ. Учет подразделений.
- Ф. УРУ. Интеграция с 1С: БГУ.
- Создается статья — для аналитика формируется статья, с описанием общего скелета и демонстрации работы.
Мы создаём тег для заполнения реестра ошибок. Каждая запись реестра будет связана с этим тегом, что позволит легко находить статьи, где описан данный механизм.
2. Внесение изменений на стороне МЕДЕРП
Рассмотрим какие изменения необходимо сделать на стороне основной программы (МЕДЕРП, СИСРП и так далее), на примере МЕДЕРП, а именно — включаем интеграцию справочником «Подразделения».
Расширить перечисления

Необходимо добавить новое значение в перечисление «Типы интегрируемых объектов» (МЕДЕРП_ТипыИнтегрируемыхОбъектов).
В нашем случае добавляется новое значение:
- Подразделения
Расширить состав определяемых типов

Необходимо внести изменения в состав определяемого типа «Справочники интегрируемых систем» (МЕДЕРП_СправочникиИнтегрируемыхСистем).
В нашем случае добавляется новое значение:
- СправочникСсылка.МЕДЕРП_ПодразделенияОрганизаций
Внести изменения в форму элемента справочника

Необходимо внести изменения на форму элемента интегрируемого объекта, в нашем случае это основная форма элемента справочника Подразделения. При этом необходимо:
- Добавить реквизиты на форме.
- Добавить команды на форме.
- Добавить обработчики формы и внести изменения в код.
- Добавить новый раздел и разместить там реквизиты и команды.
Для начала необходимо добавить реквизиты:
- Идентификатор_1С_БГУ — Идентификатор (1С: БГУ), строка 36 символов.
- ПредставлениеОбъекта_1С_БГУ — Представление объекта (1С: БГУ), строка 150 символов.
Далее необходимо добавить команды:
- Выгрузить_1С_БГУ — если предполагается что из МЕДЕРП данные будут выгружаться и создаваться на стороне БГУ
- Заголовок: Выгрузить.
- Картинка: ВнешнийИсточникДанных.
- Подсказка: Выгрузить в 1С: БГУ.
- Действие: Выгрузить_1С_БГУ.
- Отвязать_1С_БГУ — для обеспечения возможности разорвать связь с объектом БГУ
- Заголовок: Отвязать.
- Картинка: Удалить.
- Подсказка: Разрывает связь с объектом 1С: БГУ.
- Действие: Отвязать_1С_БГУ.
- Привязать_1С_БГУ — для обеспечения возможности связать с объектом БГУ
- Заголовок: Привязать.
- Картинка: ПолучитьНавигационнуюСсылку.
- Подсказка: Привязать к объекту 1С: БГУ.
- Действие: Привязать_1С_БГУ.
- Актуализировать_1С_БГУ — для обеспечения возможности актуализировать объект БГУ
- Заголовок: Актуализировать.
- Картинка: Изменить.
- Подсказка: Актуализировать в 1С: БГУ.
- Действие: Актуализировать_1С_БГУ.
Команду «Актуализировать» нужно добавлять, если после создания нового объекта предполагается однократная выгрузка. После этого объект на стороне БГУ живёт своей жизнью и может отличаться от МЕДЕРП. Если в этом нет нужды, достаточно команды «Выгрузить». Для подразделения это избыточно, поэтому ее не будем добавлять. Для анализа работы подобной команды можно обратиться к справочнику «МЕДЕРП_Договора».
Следующим шагом является добавление обработчиков на форме, а именно:
Если на форме нет элемента «Разделы», то его необходимо добавить
Далее необходимо внести изменения в код модуля формы.
- Отредактировать обработчик ОбработкаОповещения
Внести изменения в код обработчика, начало и конец кода отмечены словами "ИнтегрируемыеСистемы".
// Обработчик оповещения // // Параметры: // Отказ - Булево // СтандартнаяОбработка - Булево // &НаКлиенте Процедура ОбработкаОповещения (ИмяСобытия, Параметр, Источник) // ИнтегрируемыеСистемы Если ИмяСобытия = "МЕДЕРП_ЗаполнитьДанныеИнтегрируемыхСистем" И Источник = ЭтаФорма Тогда УстановитьВидимостьИДоступность(); КонецЕсли; // ИнтегрируемыеСистемы Конец КонецПроцедуры - Отредактировать обработчик команд формы
Внести изменения в код обработчика, начало и конец кода отмечены словами "ИнтегрируемыеСистемы".
//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ #Область ОбработчикиКомандФормы // ИнтегрируемыеСистемы //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ИНТЕГРИРУЕМЫЕ СИСТЕМЫ #Область Обработчики_ИнтегрируемыхСистем // Производит привязку к 1С:БГУ. // &НаКлиенте Процедура Привязать_1С_БГУ (Команда) МЕДЕРП_ИнтегрируемыеСистемыКлиент.ПривязатьКСправочнику(ЭтаФорма ,ПредопределенноеЗначение("Перечисление.МЕДЕРП_ИнтегрируемыеСистемы.БГУ_1С") ,ПредопределенноеЗначение("Перечисление.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения") ,Объект.Ссылка); КонецПроцедуры // Производит очистку привязки к 1С: БГУ. // &НаКлиенте Процедура Отвязать_1С_БГУ (Команда) // 1. Инициализация параметров КодОшибки = ""; ОписаниеОшибки = ""; // 2. Очищение связи МЕДЕРП_ИнтегрируемыеСистемыВызовСервера.ОтвязатьОтСправочника(ПредопределенноеЗначение("Перечисление.МЕДЕРП_ИнтегрируемыеСистемы.БГУ_1С") ,ПредопределенноеЗначение("Перечисление.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения") ,Объект.Ссылка ,КодОшибки ,ОписаниеОшибки); // 3. Оповещение о наличии ошибки Если Не КодОшибки = "" Тогда МЕДЕРП_ПоказатьПредупрежденияОбОшибке(КодОшибки, ОписаниеОшибки); // 4. Оповешение о том, что связь очищена Иначе МЕДЕРП_ПроинформироватьПользователя(НСтр("ru = 'Связь с объектом 1С: БГУ очищена'")); УстановитьВидимостьИДоступность(); КонецЕсли; КонецПроцедуры // Производит выгрузку в 1С: БГУ. // &НаКлиенте Процедура Выгрузить_1С_БГУ (Команда) // 1. Инициализация параметров КодОшибки = ""; ОписаниеОшибки = ""; // 2. Выгрузка данных МЕДЕРП_ИнтегрируемыеСистемыВызовСервера.БГУ_ВыгрузитьПодразделение(Объект.Ссылка, КодОшибки, ОписаниеОшибки); // 3. Информирование о том, что данные выгружены Если КодОшибки = "" Тогда МЕДЕРП_ПроинформироватьПользователя(НСтр("ru = 'Подразделение выгружено'")); УстановитьВидимостьИДоступность(); // 4. Информирование о наличии ошибки Иначе МЕДЕРП_ПоказатьПредупрежденияОбОшибке(КодОшибки, ОписаниеОшибки) КонецЕсли; КонецПроцедуры #КонецОбласти // ИнтегрируемыеСистемы Конец #КонецОбласти - Отредактировать обработчик УстановитьВидимостьИДоступность
Внести изменения в код обработчика, начало и конец кода отмечены словами "ИнтегрируемыеСистемы".
// Производит настройку видимости и доступности элементов формы // // &НаСервере Процедура УстановитьВидимостьИДоступность () // Инициализация раздела "Интеграция" // #Область Обработчики_раздела_Интеграция Элементы.Раздел_Интеграция.Видимость = ЗначениеЗаполнено(Объект.Ссылка); Если Элементы.Разделы.ТекущаяСтраница = Элементы.Раздел_Интеграция Тогда // ИнтегрируемыеСистемы ДанныеИВС = МЕДЕРП_ИнтегрируемыеСистемыВызовСервера.СвязанныеЭлементыСправочников(ПредопределенноеЗначение("Перечисление.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения"), Объект.Ссылка); ЗаполнитьЗначенияСвойств(ЭтаФорма,ДанныеИВС); ИнтегрируемыеСистемы = МЕДЕРП_ИнтегрируемыеСистемыВызовСервера.ПолучитьПереченьИнтегрируемыхСистем(); Если ИнтегрируемыеСистемы.Свойство("БГУ") И ИнтегрируемыеСистемы.БГУ = Истина Тогда Элементы.Интеграция_1С_БГУ.Видимость = Истина; Иначе Элементы.Интеграция_1С_БГУ.Видимость = Ложь; КонецЕсли; // Конец ИнтегрируемыеСистемы КонецЕсли; #КонецОбласти КонецПроцедуры
Как правило, код стандартен и достаточно заменить "Подразделения" на нужный справочник.
Процедура УстановитьВидимостьИДоступность применяется во всех справочниках и документах, она, как правило, есть.

В завершении необходимо добавить раздел "Раздел_Интеграция" и разместить на нем созданные реквизиты и команды.
- Добавить группу Интеграция (1С:БГУ) (1), разместить:
- Идентификатор_1С_БГУ.
- Команды.
- Добавить группу Интеграция (1С:БГУ) (2), разместить:
- ПредставлениеОбъекта_1С_БГУ.
Проще всего делать данные процедуры копированием на основе существующих объектов.
Внести изменения в общий модуль «Интегрируемые системы (вызов сервера)»
Необходимо отредактировать общий модуль — «Интегрируемые системы (вызов сервера)» (МЕДЕРП_ИнтегрируемыеСистемыВызовСервера), и внести изменения в тело области — «Экспортные_процедуры_и_функции_1С_БГУ».
Создать процедуру «БГУ_ВыгрузитьПодразделение».
////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ИНТЕГРАЦИИ С 1С:БГУ
#Область Экспортные_процедуры_и_функции_1С_БГУ
// Производит выгрузку подразделения в 1С:БГУ.
//
// Параметры:
// Подразделение - СправочникСсылка.МЕДЕРП_ПодразделенияОрганизаций - Содержит ссылку на подразделение
// КодОшибки - Строка - Содержит код ошибки
// ОписаниеОшибки - Строка - Содержит код ошибки
//
Процедура БГУ_ВыгрузитьПодразделение (Подразделение, КодОшибки, ОписаниеОшибки) Экспорт
// 1. Проверка использования интеграции с 1С: БГУ
Если Константы.МЕДЕРП_ИспользуетсяИнтеграция_1С_БГУ.Получить() = Ложь Тогда
Возврат
КонецЕсли;
// 2. Инициализация параметров
// 2.1. Получение данных из подразделения
ЗапрашиваемыеДанные = Новый Структура();
ЗапрашиваемыеДанные.Вставить("Наименование", "Наименование");
ЗапрашиваемыеДанные = МЕДЕРП_ОбщегоНазначенияВызовСервера.ЗначенияРеквизитовОбъекта(Подразделение,ЗапрашиваемыеДанные);
// 2.3. Получение данных по идентификатору
ЗапрашиваемыеДанные.Вставить("Идентификатор", Строка(Подразделение.УникальныйИдентификатор()));
// 2.4. Получение данных по связанному идентификатору
Запрос = Новый Запрос();
// Инициализация текста запроса
//
#Область Инициализация_текса_запроса
Запрос.Текст = "ВЫБРАТЬ
| МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем.Идентификатор КАК Идентификатор
|ИЗ
| РегистрСведений.МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем КАК МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем
|ГДЕ
| МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем.ОбъектМЕДЕРП = &Подразделение
| И МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем.ИнтегрируемаяСистема = &ИнтегрируемаяСистема
| И МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем.ТипСправочника = &ТипСправочника";
#КонецОбласти
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Запрос.УстановитьПараметр("ТипСправочника", ПредопределенноеЗначение("Перечисление.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения"));
Запрос.УстановитьПараметр("ИнтегрируемаяСистема", ПредопределенноеЗначение("Перечисление.МЕДЕРП_ИнтегрируемыеСистемы.БГУ_1С"));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() И Не Выборка.Идентификатор = "" Тогда
ЗапрашиваемыеДанные.Вставить("Идентификатор", Выборка.Идентификатор);
КонецЕсли;
// 3. Подключение к 1С: БГУ
Прокси = Инициализация_Прокси(Перечисления.МЕДЕРП_ИнтегрируемыеСистемы.БГУ_1С, КодОшибки, ОписаниеОшибки);
Если Не КодОшибки = "" Тогда
Возврат
КонецЕсли;
// 4. Выгрузка данных в 1С: БГУ
Попытка
Результат = Прокси.ЗагрузитьПодразделение(ЗапрашиваемыеДанные.Идентификатор
, ЗапрашиваемыеДанные.Наименование);
Результат = ЗначениеИзСтрокиВнутр(Результат).Получить();
Если Не Результат.КодОшибки = "" Тогда
КодОшибки = Результат.КодОшибки;
ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Возникла ошибка при выгрузке подразделения: %1'"), Результат.ОписаниеОшибки);
Возврат
КонецЕсли;
Исключение
КодОшибки = "МРП_н0448";
ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Возникла ошибка при выгрузке подразделения: %1'"), ОписаниеОшибки());
Возврат
КонецПопытки;
// 5. Фиксация связки в регистре "МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем"
МенеджерЗаписи = РегистрыСведений.МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ОбъектМЕДЕРП = Подразделение;
МенеджерЗаписи.ИнтегрируемаяСистема = Перечисления.МЕДЕРП_ИнтегрируемыеСистемы.БГУ_1С;
МенеджерЗаписи.ТипСправочника = Перечисления.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения;
МенеджерЗаписи.Идентификатор = Результат.Результат.Идентификатор;
МенеджерЗаписи.Записать();
// 6. Получение изменений из 1С: БГУ
ПолучитьЭлементыСправочника(Перечисления.МЕДЕРП_ИнтегрируемыеСистемы.БГУ_1С, Перечисления.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения, КодОшибки, ОписаниеОшибки, Ложь);
КонецПроцедуры// ()
#КонецОбласти
Также следует отметить, что в реестре ошибок необходимо добавить новую запись, для идентификации проблем с интеграцией. В нашем случае это — МРП_н0448.
Внести изменения в процедуру «ПолучитьЭлементыСправочника» — отредактировать пункт «3.1. Интеграция с 1С: БГУ».
ИначеЕсли ТипСправочника = Перечисления.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения Тогда
ТипСправочника_Стр = "Подразделения";
Внести изменения в регистр сведений
Для возможности связывания с объектами 1С:БГУ необходимо внести правки в код модуля формы «Форма связи со справочником интегрируемой системы» (ФормаСвязиСоСправочникомИнтегрируемойСистемы) регистра сведений «МЕДЕРП_СвязанныеЭлементыСправочниковИнтегрируемыхСистем».
Необходимо поправить код процедуры ПриСозданииНаСервере, в пункте «5. Инициализация дополнительных колонок» добавить обработчик:
// 5.4. Обработка подразделений
ИначеЕсли ТипСправочника = ПредопределенноеЗначение("Перечисление.МЕДЕРП_ТипыИнтегрируемыхОбъектов.Подразделения") Тогда
Элементы.Реквизит_1.Заголовок = НСтр("ru = 'Наименование (полное)'"); Элементы.Реквизит_1.Видимость = Истина;
Элементы.Реквизит_2.Видимость = Ложь;
Элементы.Реквизит_3.Видимость = Ложь;
КонецЕсли;
3. Внесение изменений на стороне Дополнение КБФИТ для БГУ
Дальнейшие действия осуществляются на стороне 1С:БГУ, при этом все правки делаются в расширении «Дополнение КБФИТ для БГУ» (в нашем случае — «редакция 1»).
Добавить подразделение в расширение

Для начала необходимо добавить интегрируемый справочник — Подразделение в расширение.
Расширить состав определяемых типов

Необходимо дополнить состав определяемых типов в расширении:
- КБФИТ. Интегрируемые справочники (ссылка):
- СправочникСсылка.Подразделения
- КБФИТ. Интегрируемые справочники (объект):
- СправочникОбъект.Подразделения
Расширить состав источников подписок

Необходимо внести изменение в состав источников подписок расширения:
- «КБФИТ. Зафиксировать идентификатор справочника:
- СправочникОбъект.Подразделения
Добавить константу и разместить ее в панели администрирования

Необходимо создать новую константу «КБФИТ. Формировать подразделения».
- Тип — булево.
- Имя — «КБФИТ_ФормироватьПодразделения».

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

Необходимо добавить новую операцию в web-сервис «KBFIT - exchange (1.0)». Операция должна соответствовать в части названия и параметров, указанных коде общего модуля.
- Название операции — ЗагрузитьПодразделение. Параметры:
- Идентификатор — строка, идентификатор подразделения.
- Наименование — строка, название подразделение.
В общем модуле web-сервиса необходимо добавить обработчик операции:
Функция ЗагрузитьПодразделение (Идентификатор, Наименование)
Попытка
КодОшибки = "";
ОписаниеОшибки = "";
Данные = Новый Структура("Результат",КБФИТ_ОбщегоНазначенияВызовСервера.ЗагрузитьПодразделение(Идентификатор, Наименование, КодОшибки, ОписаниеОшибки));
Данные.Вставить("КодОшибки",КодОшибки);
Данные.Вставить("ОписаниеОшибки",ОписаниеОшибки);
Возврат ЗначениеВСтрокуВнутр(Новый ХранилищеЗначения(Данные,Новый СжатиеДанных(6)));
Исключение
Данные = Новый Структура("Результат", "");
Данные.Вставить("КодОшибки", "МРП_н0447");
Данные.Вставить("ОписаниеОшибки",СтрШаблон(НСтр("ru = 'Возникла критическая ошибка: %1'"),ОписаниеОшибки()));
Возврат ЗначениеВСтрокуВнутр(Новый ХранилищеЗначения(Данные,Новый СжатиеДанных(6)));
КонецПопытки;
КонецФункции
Также следует отметить, что в реестре ошибок необходимо добавить новую запись, для идентификации проблем с интеграцией. В нашем случае это — МРП_н0447.
Расширить права роли «КБФИТ. Обмен»

Необходимо включить возможность использования созданной операции для обмена, который осуществляется под пользователем со специальными правами. Для этого требуется сделать:
- Открыть роль «КБФИТ_Обмен»;
- Выбрать операцию «ЗагрузитьПодразделение»;
- Установить галочку «Использование» в разделе Права.
Внести изменения в общий модуль «КБФИТ. Общего назначения вызов сервера»
Необходимо изменить тело процедуры ПолучитьЭлементыСправочника в области Экспортные_процедуры_и_функции_Интеграция. Расширить обработку типа справочника в пункте «2.3. Изменение текста запроса в зависимости от типа документ».
// 2.3. Изменение текста запроса в зависимости от типа документа
Если ТипСправочника = "ИсточникиФинансированияДетализированные" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КБФИТ_ИсточникиФинансированияДетализированные", "КБФИТ_ИсточникиФинансированияДетализированные");
ИначеЕсли ТипСправочника = "Контрагенты" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КБФИТ_ИсточникиФинансированияДетализированные", "Контрагенты");
ИначеЕсли ТипСправочника = "Подразделения" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КБФИТ_ИсточникиФинансированияДетализированные", "Подразделения");
ИначеЕсли ТипСправочника = "Договора" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КБФИТ_ИсточникиФинансированияДетализированные", "Договоры");
Иначе
КодОшибки = "МРП_н0413";
ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Не определен обработчик. Справочник: %1'"), ТипСправочника);
Возврат Неопределено;
КонецЕсли;
Необходимо добавить процедуру ПолучитьЭлементыСправочника в области Экспортные_процедуры_и_функции_Интеграция. Расширить обработку типа справочника в пункте «2.3. Изменение текста запроса в зависимости от типа документ».
// Возвращает идентификатор, на сформированное подразделение, либо существующее.
//
// Параметры:
// Идентификатор - Строка - идентификатор
// Наименование - Строка - наименование
// КодОшибки - Строка - код ошибки
// ОписаниеОшибки - Строка - описание ошибки
//
// Возвращаемое значение:
// Структура - содержит идентификатор
//
Функция ЗагрузитьПодразделение (Идентификатор, Наименование, КодОшибки, ОписаниеОшибки) Экспорт
// 1. Инициализация параметров
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
Подразделение = Неопределено;
// 2. Инициализация по существующим идентификаторам
// Инициализация текста запроса
//
#Область Инициализация_текста_запроса
Запрос.Текст = "ВЫБРАТЬ
| Подразделения.Ссылка КАК Ссылка
|ИЗ
| Справочник.Подразделения КАК Подразделения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КБФИТ_ИдентификаторыСправочников КАК КБФИТ_ИдентификаторыСправочников
| ПО Подразделения.Ссылка = КБФИТ_ИдентификаторыСправочников.ОбъектСистемы
|ГДЕ
| КБФИТ_ИдентификаторыСправочников.Идентификатор = &Идентификатор";
#КонецОбласти
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Подразделение = Выборка.Ссылка;
КонецЕсли;
// 3. Инициализация по существующему идентификатору
Если Подразделение = Неопределено Тогда
мПодразделение = Справочники.Подразделения.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор));
Если Не мПодразделение.ПолучитьОбъект() = Неопределено Тогда
Подразделение = мПодразделение;
КонецЕсли;
КонецЕсли;
// 4. Инициализация подразделения по наименованию
Если Подразделение = Неопределено Тогда
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Наименование", Наименование);
// Инициализация текста запроса
//
#Область Инициализация_текста_запроса
Запрос.Текст = "ВЫБРАТЬ
| Подразделения.Ссылка КАК Ссылка
|ИЗ
| Справочник.Подразделения КАК Подразделения
|ГДЕ
| Подразделения.Наименование = &Наименование";
#КонецОбласти
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Подразделение = Выборка.Ссылка
КонецЕсли;
КонецЕсли;
// 5. Формирование подразделения
Если Подразделение = Неопределено И Константы.КБФИТ_ФормироватьПодразделения.Получить() = Истина Тогда
// Обработчики формирования подразделения
//
#Область Формирование_подразделения
// 1. Начало транзакции
НачатьТранзакцию();
Попытка
// 2. Заполнение подразделения
Подразделение = Справочники.Подразделения.СоздатьЭлемент();
Подразделение.УстановитьСсылкуНового(Справочники.Подразделения.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор)));
Подразделение.Владелец = Справочники.Организации.ОрганизацияПоУмолчанию();
Подразделение.Наименование = Наименование;
// 3. Фиксация транзакции
Если КодОшибки = "" Тогда
Подразделение.Записать();
ЗафиксироватьТранзакцию();
Возврат Новый Структура("Идентификатор",Строка(Подразделение.Ссылка.УникальныйИдентификатор()))
// 4. Обработка ошибки
Иначе
ОтменитьТранзакцию();
Возврат Новый Структура("Идентификатор","");
КонецЕсли;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ОтменитьТранзакцию();
КодОшибки = "МРП_н0449";
ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Возникла критическая ошибка. Ошибка: %1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат Новый Структура("Идентификатор","");
КонецПопытки;
#КонецОбласти
КонецЕсли;
// 6. Контроли
// 6.1. Подразделение не идентифицировано
Если Подразделение = Неопределено Тогда
КодОшибки = "МРП_н0450";
ОписаниеОшибки = НСтр("ru = 'Не идентифицировано подразделение'");
Возврат Новый Структура("Идентификатор","");
КонецЕсли;
// 7. Возврат идендификатора подразделения
Возврат Новый Структура("Идентификатор",Строка(Подразделение.Ссылка.УникальныйИдентификатор()));
КонецФункции
Необходимо зафиксировать записи в реестре ошибок. В нашем случае это МРП_н0449 «Обработка технической ошибки при записи подразделения» и МРП_н0450 «Обработка ситуации, когда подразделение не идентифицировано».
Необходимо изменить тело процедуры ЗафиксироватьИдентификаторСправочника в области СлужебныеПроцедурыИФункции. Расширить обработку типа справочника в пункте «// 1. Инициализация данных — переопределеяемый».
// 4. Инициализация представления объекта системы - Подразделения
ИначеЕсли ТипЗнч(ОбъектСистемы) = Тип("СправочникСсылка.Подразделения") Тогда
ЗапрашиваемыеДанные.Вставить("Код");
ЗапрашиваемыеДанные.Вставить("ПометкаУдаления");
ЗапрашиваемыеДанные.Вставить("ПредставлениеОбъектаСистемы", "Наименование");
ЗапрашиваемыеДанные.Вставить("Реквизит_1", "НаименованиеПолное");
4. Тестирование обмена
Мы проведём тестирование перед передачей данных аналитику:
- Привяжем подразделение к объекту 1С: БГУ вручную.
- Разорвём связь подразделения с объектом 1С: БГУ.
- Отработаем автоматический поиск подразделения по наименованию.
- Отработаем процесс с взведенной галочкой «Формировать подразделения».
- Отработаем процесс со снятой галочкой «Формировать подразделения».
Заключение
После тестирования мы передадим механизм аналитикам. Работа над ним продолжится, и впереди нас ждёт несколько этапов:
- Описание механизма:
- Cоздание статьи или цикла статей.
- Запись видеороликов.
- Подготовка тестов;
- Написание справки.
- Оформление механизма:
- Включение в курсы.
- Включение в руководства.
- Включение в очередной релиз программы.
- Формализация интеллектуальной собственности:
- Регистрация релиза в Федеральной службе по интеллектуальной собственности.
- Выпуск релиза в продуктивную среду.
В процессе работы мы будем вносить правки в механизм, выявлять ошибки и расширять его функциональные возможности
