Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Собственная функция
Дальше: Прикладное использование данных из внешних источников

Функция внешней схемы

Теперь покажем, как использовать уже существующую во внешней схеме функцию в прикладном решении «1С:Предприятия».

Предположим, в схеме spa существует функция get_next_key_record(), которая возвращает ключ следующей записи из таблицы spa_treatments.

Нам нужно, так же как и в предыдущем примере, программно добавить косметическую процедуру во внешнюю таблицу и заполнить ее ключ с помощью функции get_next_key_record().

Сначала загрузим функции внешнего источника данных Спа, к которому относится таблица spa_treatments, с помощью конструктора. Для этого в окне редактирования свойств этого объекта на закладке Функции нажмем кнопку Добавить и выберем пункт Выбрать из списка функций внешнего источника данных. Ранее (при загрузке списка таблиц) мы уже настраивали в конфигураторе соединение с этим источником данных. Поэтому в открывшемся окне Подключение к источнику данных подтвердим те же параметры соединения и нажмем ОК.

После установки соединения в конструкторе функций внешнего источника данных будет открыт список функций внешней схемы spa. Отметим к переносу функцию spa.get_next_key_record() и нажмем Готово (рис. 2.37).

Рис. 2.37. Конструктор функций внешнего источника данных «Спа»

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

Свойство Выражение в источнике данных платформа определила правильно – spa.get_next_key_record(). Укажем также, что функция возвращает значение типа Число (10, 0) (рис. 2.38).

Рис. 2.38. Свойства функции «spa_get_next_key_record»

Теперь добавим в нашу конфигурацию еще одну общую команду ДобавитьКосметическуюПроцедуру. Обработчик команды заполним следующим образом (листинг 2.6).

Листинг 2.6. Обработчик команды «ДобавитьКосметическуюПроцедуру»

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

 

Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтотОбъект);

ПоказатьВводСтроки(Оповещение, "Введите имя процедуры");

 

КонецПроцедуры

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

Листинг 2.7. Процедура «ПослеВводаСтроки»

&НаКлиенте

Процедура ПослеВводаСтроки(Строка, Параметры) Экспорт

 

Если НЕ Строка = Неопределено Тогда

ДобавитьПроцедуруВоВнешнийИсточник(Строка);

КонецЕсли;

 

КонецПроцедуры

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

Листинг 2.8. Процедура «ДобавитьПроцедуруВоВнешнийИсточник»

&НаСервере

Процедура ДобавитьПроцедуруВоВнешнийИсточник(СтрокаПроцедуры)

 

// Получить значение ключа с помощью функции spa_get_next_key_record()

// внешнего источника данных Спа.

ЗначениеКлюча = ВнешниеИсточникиДанных.Спа.spa_get_next_key_record();

 

// Создать менеджер таблицы spa_treatments внешнего источника данных Спа.

Процедуры = ВнешниеИсточникиДанных.Спа.Таблицы.spa_treatments;

 

// Найти запись в таблице spa_treatments по наименованию добавляемой процедуры.

Ссылка = Процедуры.НайтиПоПолю("description", СтрокаПроцедуры);

 

// Добавить новую процедуру в таблицу spa_treatments, если ее там еще нет.

Если Ссылка = Процедуры.ПустаяСсылка() ИЛИ Ссылка = Неопределено Тогда

НоваяПроцедура = Процедуры.СоздатьОбъект();

 

// Получить и установить изменяемые поля таблицы.

ИзменяемыеПоля = НоваяПроцедура.ПолучитьИзменяемыеПоля();

Если ИзменяемыеПоля.Найти("id") = Неопределено Тогда

// Включить ключевое поле в состав изменяемых полей для новой записи.

ИзменяемыеПоля.Добавить("id");

НоваяПроцедура.УстановитьИзменяемыеПоля(ИзменяемыеПоля);

КонецЕсли;

 

// Записать значение ключа в ключевое поле.

НоваяПроцедура.id = ЗначениеКлюча;

НоваяПроцедура.description = СтрокаПроцедуры;

НоваяПроцедура.Записать();

КонецЕсли;

 

КонецПроцедуры

Прокомментируем только строку для получения значения ключа следующей записи внешней таблицы spa_treatments, которая выделена жирным шрифтом, так как все остальное объяснялось в предыдущем примере (см. листинг 2.5). Значение ключа получается с помощью функции spa_get_next_key_record() внешнего источника данных Спа.

Проверим, как это работает. Запустим «1С:Предприятие» и из меню Сервис выполним команду Добавить косметическую процедуру. В появившемся окне введем наименование новой процедуры и нажмем ОК. В результате введенная процедура со следующим по порядку значением ключевого поля появится в таблице spa_treatments внешнего источника данных (рис. 2.39).

Рис. 2.39. Добавление процедуры в таблицу внешнего источника данных

Назад: Собственная функция
Дальше: Прикладное использование данных из внешних источников