В языке программирования 1С, есть несколько коллекций (множеств) значений. Каждые из них имеют свои возможности и предназначение, хотя иногда имеют одинаковые методы (например Количество()).

Структура – один из основных видов коллекций, по сути, это массив именованных значений.

Какие особенности имеет структура

  • Имя (Ключ) значения всегда строка, которое не может начинаться на цифру и содержать некоторые символы (пробел,%,?,>,< и другие);
  • ключ не может быть пустым;
  • значение может быть произвольного типа, в том числе “Неопределенно” или же Структура(вложенная);
  • ключ уникален во всей структуре;
  • регистр ключа имеет значение (“Ключ” не равно “ключ”);
  • структура может быть пустой(не содержать значений);
  • значения могут быть инициализированы при создании, либо заполнены поочередно;
  • является универсальным транспортным значением для всех платформ 1с и видов исполнения (не мутабельное);
  • возможно использование в системной процедуре ЗаполнитьЗначения();
  • тип “Структура” не хранится в базе данных (это рабочее, промежуточное значение или свойство объекта);
  • ключ нельзя изменить (переименовать);
  • скоростью обращения к значению обычно пренебрегают при небольших коллекциях, но структура не является индексированной таблицей (скорость опредяеляется скоростью памяти, перебора значений до искомого).

Приемы работы со структурой

//Создание структуры:
Структура = Новый Структура;
Структура = Новый Структура("Ключ1,Ключ2","Значение1",2);

//Обращение к значению структуры
Значение1 = Структура.Ключ1;
Значение2 = Структура["Ключ2"];

//Добавление значения
Структура.Вставить("Ключ3", Дата(1,1,1));

//Замена значения - если "Ключ3" существует, значение заменяется, иначе добавляется
Структура.Вставить("Ключ3", Дата(2020,11,1));

//Удаление одного значения
Структура.Удалить("Ключ2");

//Удаление всех значений
Структура.Очистить();

//Перебор значений
Для каждого ЭлементСтруктуры из Структура Цикл
Сообщить(ЭлементСтруктуры.Ключ);
Сообщить(ЭлементСтруктуры.Значение);
КонецЦикла;

//Копирование значений структуры
Структура = Новый Структура("Ключ1,Ключ2","Значение1",2);
СтруктураПриемник = Новый Структура("Ключ1,Ключ2");

ЗаполнитьЗначенияСвойств(СтруктураПриемник,Структура);

//Проверка наличия значения с определенным ключом в структуре

Если Структура.Свойство(“Ключ”) = Ложь Тогда //Используется как функция

       Структура.Вставить(“Ключ”,”Теперь ключ есть”);

       Значение = Неопределено;

      Структура.Свойство(“Ключ”,Значение); //Используется как процедура

      Сообщить(Значение); //Значение стало “Теперь ключ есть”

КонецЕсли;

 

//У объекта есть служебное свойство: ДополнительныеСвойства
Документ = Документы.РеализацияТоваровИУслуг.СоздатьОбъект();
Документ.ДополнительныеСвойства.Вставить("Ключ1",2);

 

У структуры есть объект-потомок  – “ФиксированнаяСтруктура”, ее значения нельзя поменять: вставить, удалить, остальные методы у них одинаковы, поэтому она и называется фиксированной.

Фиксированную структуру можно инициализировать при создании на основании структуры.

Структура = Новый Структура("ИмяЗначения",0);
Фикс = Новый ФиксированнаяСтруктура(Структура);
Сообщить(Фикс.ИмяЗначения);

Легче сочинить десять правильных сонетов, чем хорошее рекламное объявление.

— Олдос Леонард Хаксли