Структуры и таблицы значений в качестве параметров процедур и функций
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
Основная статья: Параметры процедур и функций
Для процедур и функций (далее по тексту: функций) с параметрами типа Структура, ТаблицаЗначений, а также ДеревоЗначений (далее по тексту рекомендации для таблицы значений также относятся к дереву значений) рекомендуется придерживаться следующего подхода к разработке.
1.1 Помимо функции, которая собственно реализует прикладную функциональность (далее по тексту: вызываемая функция), необходимо определить функцию-конструктор параметров возвращающую:
• структуру-заготовку со свойствами,
• или пустую таблицу значений (дерево значений) с типизированными колонками,
которую вызывающий код должен проинициализировать конкретными значениями и передать в вызываемую функцию.
Пример вызывающего кода:
Процедура ПриИзмененииНоменклатурыСервер(ИдентификаторТекущейСтроки)
// Получаем новую структуру параметров.
ПараметрыЗаполненияЦен = ЦенообразованиеКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ();
// Заполняем параметры.
ПараметрыЗаполненияЦен.Дата = Объект.Дата;
ПараметрыЗаполненияЦен.Валюта = Объект.Валюта;
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);
// Передаем структуру параметров в прикладную функцию.
ЦенообразованиеСервер.ЗаполнитьЦеныВСтрокеТЧ(ТекущаяСтрока, ПараметрыЗаполненияЦен);
КонецПроцедуры
Пример функции-конструктора параметров в модуле ЦенообразованиеКлиентСервер:
// Функция-конструктор параметров процедуры ЦенообразованиеСервер.ЗаполнитьЦеныВСтрокеТЧ.
//
// Возвращаемое значение:
// Cтруктура:
// * Дата – Дата
// * Валюта - СправочникСсылка.Валюты
// * ПересчитыватьСумму - Булево
//
Функция ПараметрыЗаполненияЦеныВСтрокеТЧ() Экспорт
ПараметрыЗаполненияЦен = Новый Структура;
ПараметрыЗаполненияЦен.Вставить("Дата", ТекущаяДатаСеанса());
ПараметрыЗаполненияЦен.Вставить("Валюта", ОсновнаяВалюта());
ПараметрыЗаполненияЦен.Вставить("ПересчитыватьСумму", Истина);
Возврат ПараметрыЗаполненияЦен;
КонецФункции
1.2. Имена свойств структуры соответствуют параметрам вызываемой функции. При этом параметры со значениями по умолчанию должны быть явно проинициализированы в этой структуре.
1.3. Для создания параметра с типом ТаблицаЗначений допускается не создавать отдельную функцию-конструктор, если таблица значений является результатом каких-либо расчетов в прикладном коде. Например, есть функция, которая делает запрос к информационной базе и передает результат в другую функцию в виде таблицы значений.
1.4. При разработке программного интерфейса библиотек все функции, возвращающие значения в виде структур и таблиц значений, в том числе и функции-конструкторы, обязательно должны иметь описание типа возвращаемого значения. При этом необходимо описывать свойства структур и колонки таблиц значений, начиная с новой строки и предваряя символом *.
Например:
// Возвращаемое значение:
// ТаблицаЗначений:
// * Серия - СправочникСсылка.СерииНоменклатуры - если серия указана и она может
// использоваться с новым значением номенклатуры на указанном складе,
// то возвращается переданное значение; если нет - пустая ссылка.
// * СтатусУказанияСерий - Число - если серии указываются в ТЧ "Товары", то
// возвращается рассчитанный статус; если для переданной
// номенклатуры/склада серии не используется - возвращается 0,
// иначе возвращается переданный статус.
1.5. В описании структур и таблиц значений могут быть вложенные описания, при этом перед именами вложенных свойств число звездочек увеличивается: для первого уровня вложенности 2 звездочки, для второго 3 и т.д.
Например:
// Параметры:
// СведенияОбОбновлении - Структура:
// * КодАдресногоОбъекта - Структура:
// ** КодРегиона - Число - код региона (длина - 2).
// ** КодНаселенногоПункта - Число - код населенного пункта (длина - 3).
// ** КодУлицы - Число - код улицы (длина - 4).
// * Наименование - Строка
// * ОбновлениеДоступно - Булево
2. В вызывающем коде не следует инициализировать структуру параметров или добавлять в нее какие-либо другие свойства, а также изменять состав и тип колонок таблицы значений. Во избежание неоднозначности и скрытых ошибок все допустимые параметры вызываемой функции должны быть определены явно в функции-конструкторе параметров.