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

Использование объектов типа Структура

Требования направлены на читаемость кода и удобство сопровождения. Читабельный код снижает риск ошибок и упрощает работу команды.

1.

Не передавайте в конструктор структуры более 3 значений. Для остальных значений используйте Вставить или присваивание свойствам.

Неправильно

ПараметрыФормыКомпоновки = Новый Структура(
    "НеПомещатьНастройкиВСхемуКомпоновкиДанных,
    |НеРедактироватьСхемуКомпоновкиДанных,
    |НеНастраиватьУсловноеОформление,
    |НеНастраиватьВыбор,
    |НеНастраиватьПорядок,
    |АдресСхемыКомпоновкиДанных,
    |АдресНастроекКомпоновкиДанных,
    |УникальныйИдентификатор,
    |Заголовок",
    Истина,
    Истина,
    Истина,
    Истина,
    Истина,
    ТекущиеДанные.АдресСхемыКомпоновкиДанных,
    ?(АдресНастроекСхемыКомпоновкиДанных <> Неопределено,
        АдресНастроекСхемыКомпоновкиДанных,
        ТекущиеДанные.АдресНастроекСхемыКомпоновкиДанных),
    УникальныйИдентификатор,
    ЗаголовокФормыНастройкиСхемыКомпоновкиДанных);

Правильно

ПараметрыФормыКомпоновки = Новый Структура;
ПараметрыФормыКомпоновки.Вставить("НеПомещатьНастройкиВСхемуКомпоновкиДанных", Истина);
ПараметрыФормыКомпоновки.Вставить("НеРедактироватьСхемуКомпоновкиДанных", Истина);
ПараметрыФормыКомпоновки.Вставить("НеНастраиватьУсловноеОформление", Истина);
ПараметрыФормыКомпоновки.Вставить("НеНастраиватьВыбор", Истина);
ПараметрыФормыКомпоновки.Вставить("НеНастраиватьПорядок", Истина);
ПараметрыФормыКомпоновки.Вставить("АдресСхемыКомпоновкиДанных", ТекущиеДанные.АдресСхемыКомпоновкиДанных);
ПараметрыФормыКомпоновки.Вставить("АдресНастроекКомпоновкиДанных",
    ?(АдресНастроекСхемыКомпоновкиДанных <> Неопределено,
        АдресНастроекСхемыКомпоновкиДанных,
        ТекущиеДанные.АдресНастроекСхемыКомпоновкиДанных));
ПараметрыФормыКомпоновки.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыФормыКомпоновки.Вставить("Заголовок", ЗаголовокФормыНастройкиСхемыКомпоновкиДанных);
2.

Не используйте в конструкторе структуры конструкторы других объектов, если они принимают параметры. Особенно избегайте вложенных структур с заполнением свойств.

Неправильно

НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
    Объект.Товары,
    Новый Структура(
        "ЗаполнитьПризнакХарактеристикиИспользуются,
        |ЗаполнитьПризнакТипНоменклатуры,
        |ЗаполнитьПризнакВариантОформленияПродажи",
        Новый Структура("Номенклатура", "ХарактеристикиИспользуются"),
        Новый Структура("Номенклатура", "ТипНоменклатуры"),
        Новый Структура("Номенклатура", "ВариантОформленияПродажи")
    )
);

Правильно

ПараметрыЗаполненияРеквизитов = Новый Структура;
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
    Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры",
    Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
    Новый Структура("Номенклатура", "ВариантОформленияПродажи"));

НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
    Объект.Товары,
    ПараметрыЗаполненияРеквизитов);
3.

Не вызывайте в конструкторе структуры функции с большим числом параметров (более 3).

Неправильно

СведенияОТоваре = Новый Структура("ПараметрыТовара, ЦенаПродажиИОстаткиТовара, ЦенаЗакупкиИОстаткиТовара",
    ПодборТоваровКлиентСервер.ПараметрыТовара(),
    ПодборТоваровВызовСервера.ЦенаПродажиИОстаткиТовара(
        Номенклатура,
        Характеристика,
        Соглашение,
        Валюта,
        ВидыЦен),
    ПодборТоваровВызовСервера.ЦенаЗакупкиИОстаткиТовара(
        Номенклатура,
        Характеристика,
        Соглашение,
        Валюта,
        ВидыЦен));

Правильно

СведенияОТоваре = Новый Структура("ПараметрыТовара, ЦенаПродажиИОстаткиТовара, ЦенаЗакупкиИОстаткиТовара");
СведенияОТоваре.ПараметрыТовара = ПодборТоваровКлиентСервер.ПараметрыТовара();
СведенияОТоваре.ЦенаПродажиИОстаткиТовара = ПодборТоваровВызовСервера.ЦенаПродажиИОстаткиТовара(
    Номенклатура,
    Характеристика,
    Соглашение,
    Валюта,
    ВидыЦен);
СведенияОТоваре.ЦенаЗакупкиИОстаткиТовара = ПодборТоваровВызовСервера.ЦенаЗакупкиИОстаткиТовара(
    Номенклатура,
    Характеристика,
    Соглашение,
    Валюта,
    ВидыЦен);
4.1.

Не добавляйте свойства структуры в разных местах кода с последующей проверкой их наличия. Создавайте структуру со значениями по умолчанию сразу.

Неправильно

ПараметрыВыполнения = Новый Структура;
...
УникальныйИдентификатор = ?(ПараметрыВыполнения.Свойство("УникальныйИдентификатор"),
    ПараметрыВыполнения.УникальныйИдентификатор,
    Неопределено);

Правильно

ПараметрыВыполнения = ПараметрыВыполнения();
УникальныйИдентификатор = ПараметрыВыполнения.УникальныйИдентификатор;
...

Функция ПараметрыВыполнения()
    Результат = Новый Структура;
    Результат.Вставить("УникальныйИдентификатор", Неопределено);
    Возврат Результат;
КонецФункции
4.2.

Исключение — структуры с нефиксированным форматом:

  • структуры из внешних источников (HTTP-ответ, данные сканера штрихкодов, терминала сбора данных);
  • системные параметры формы, параметры выбора в параметрах формы;

Пользовательские параметры формы, объявленные на закладке «Параметры» редактора формы.

См. также