Структуры и таблицы значений в качестве параметров процедур и функций

#std641

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

Основная статья: Параметры процедур и функций

Для процедур и функций (далее по тексту: функций) с параметрами типа Структура, ТаблицаЗначений, а также ДеревоЗначений (далее по тексту рекомендации для таблицы значений также относятся к дереву значений) рекомендуется придерживаться следующего подхода к разработке.

1.1 Помимо функции, которая собственно реализует прикладную функциональность (далее по тексту: вызываемая функция), необходимо определить функцию-конструктор параметров возвращающую:

• структуру-заготовку со свойствами,
• или пустую таблицу значений (дерево значений) с типизированными колонками,

которую вызывающий код должен проинициализировать конкретными значениями и передать в вызываемую функцию.

Пример вызывающего кода:

Процедура ПриИзмененииНоменклатурыСервер(ИдентификаторТекущейСтроки)

 // Получаем новую структуру параметров.
 ПараметрыЗаполненияЦен = ЦенообразованиеКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ();
 // Заполняем параметры.
 ПараметрыЗаполненияЦен.Дата   = Объект.Дата;
 ПараметрыЗаполненияЦен.Валюта = Объект.Валюта;
 
 ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);

 // Передаем структуру параметров в прикладную функцию.
 ЦенообразованиеСервер.ЗаполнитьЦеныВСтрокеТЧ(ТекущаяСтрока, ПараметрыЗаполненияЦен);

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

Пример функции-конструктора параметров в модуле ЦенообразованиеКлиентСервер:

// Функция-конструктор параметров процедуры ЦенообразованиеСервер.ЗаполнитьЦеныВСтрокеТЧ
// Возвращаемое значение:
//  Cтруктура:
//        * Дата – Дата
//        * Валюта - СправочникСсылка.Валюты - ссылка пересчитываемой валюты
//        * ПересчитыватьСумму - Булево
//
Функция ПараметрыЗаполненияЦеныВСтрокеТЧ() Экспорт
 
 ПараметрыЗаполненияЦен = Новый Структура;
 ПараметрыЗаполненияЦен.Вставить("Дата");
 ПараметрыЗаполненияЦен.Вставить("Валюта");
 ПараметрыЗаполненияЦен.Вставить("ПересчитыватьСумму", Истина);
 Возврат ПараметрыЗаполненияЦен;
 
КонецФункции

1.2. Имена свойств структуры соответствуют параметрам вызываемой функции. При этом параметры со значениями по умолчанию должны быть явно проинициализированы в этой структуре.
1.3. Для создания параметра с типом ТаблицаЗначений допускается не создавать отдельную функцию-конструктор, если таблица значений является результатом каких-либо расчетов в прикладном коде. Например, есть функция, которая делает запрос к информационной базе и передает результат в другую функцию в виде таблицы значений.
1.4. При разработке программного интерфейса библиотек все функции, возвращающие значения в виде структур и таблиц значений, в том числе и функции-конструкторы, обязательно должны иметь описание типа возвращаемого значения. При этом необходимо описывать свойства структур и колонки таблиц значений, начиная с новой строки и предваряя символом *.

Например:

// Возвращаемое значение:
//   ТаблицаЗначений:
//     * Серия - СправочникСсылка.СерииНоменклатуры - если серия указана и она может
//               использоваться с новым значением номенклатуры на указанном складе,
//               то возвращается переданное значение; если нет - пустая ссылка
//     * СтатусУказанияСерий - Число - если серии указываются в ТЧ "Товары", то
//               возвращается рассчитанный статус, если для переданной
//               номенклатуры/склада серии не используется - возвращается 0
//               иначе возвращается переданный статус.

1.5. В описании структур и таблиц значений могут быть вложенные описания, при этом перед именами вложенных свойств число звездочек увеличивается: для первого уровня вложенности 2 звездочки, для второго 3 и т.д.

Например:

// Параметры:
//  СведенияОбОбновлении - Структура:
//     * КодАдресногоОбъекта - Структура:
//        ** КодРегиона             - Число - код региона (длина - 2).
//        ** КодНаселенногоПункта   - Число - код населенного пункта (длина - 3).
//        ** КодУлицы               - Число - код улицы (длина - 4).
//     * Наименование        - Строка
//     * ОбновлениеДоступно  - Булево

2. В вызывающем коде не следует инициализировать структуру параметров или добавлять в нее какие-либо другие свойства, а также изменять состав и тип колонок таблицы значений. Во избежание неоднозначности и скрытых ошибок все допустимые параметры вызываемой функции должны быть определены явно в функции-конструкторе параметров.

См. также