Теперь покажем, как использовать уже существующую во внешней схеме функцию в прикладном решении «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. Добавление процедуры в таблицу внешнего источника данных