Перейти к содержанию
#std641

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

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

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

1.1.

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

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

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

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

Пример

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

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

    ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);

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

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

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

Пример

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

    ПараметрыЗаполненияЦен = Новый Структура;
    ПараметрыЗаполненияЦен.Вставить("Дата", ТекущаяДатаСеанса());
    ПараметрыЗаполненияЦен.Вставить("Валюта", ОсновнаяВалюта());
    ПараметрыЗаполненияЦен.Вставить("ПересчитыватьСумму", Истина);
    Возврат ПараметрыЗаполненияЦен;

КонецФункции
1.2.

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

1.3.

Для параметра с типом ТаблицаЗначений допустимо не создавать отдельную функцию-конструктор, если таблица значений — результат расчетов в прикладном коде. Например, есть функция, которая делает запрос к информационной базе и передает результат в другую функцию в виде таблицы значений.

1.4.

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

Например:

Пример

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

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

Например:

Пример

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

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

См. также
Источник

https://its.1c.ru/db/v8std#content:641