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

#std693

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

Требования, предъявляемые данным стандартом к Структурам, направлены на повышение читаемости кода и упрощение внесения изменений в код разными авторами (разработчиками) как при коллективной разработке, так и при доработке прикладных решений на конкретных внедрениях. Повышение читаемости кода в свою очередь ведет к уменьшению допускаемых при разработке ошибок и повышает качество прикладного решения.

1. При создании объекта типа Структура не рекомендуется передавать в конструктор более 3-х значений свойств. Вместо этого рекомендуется использовать метод Вставить или присваивать значения свойствам явным образом

Неправильно

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

Правильно

ПараметрыФормыКомпоновки  = Новый Структура;

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

2. Не рекомендуется в конструкторе структуры использовать конструкторы других объектов, если эти конструкторы принимают параметры. В частности в конструкторе одной структуры не рекомендуется создавать другие структуры с объявлением значений свойств.

Неправильно

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

Правильно


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

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

Неправильно

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

Правильно

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

4.1. Не рекомендуется в разных частях программного кода добавлять в структуру свойства и затем проверять их наличие в структуре. Следует сразу создавать структуру со значением свойств по умолчанию. Помимо повышения читаемости, это позволяет эффективнее применять различные средства автоматической проверки и обработки кода.

Пример:

Неправильно

ПараметрыВыполнения = Новый Структура;

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

Правильно

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

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

4.2. Исключением можно считать структуры, формат которых не фиксирован:

* примечание: пользовательские параметры формы необходимо объявлять явно на закладке Параметры редактора формы.

См. также