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