В языке программирования 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);
Фикс = Новый ФиксированнаяСтруктура(Структура);
Сообщить(Фикс.ИмяЗначения);
Реклама — это искусство делать из полуправды целую ложь.