Структура в 1С 8.3

Apr 03, 2022 12:53

Структура представляет собой некий контейнер, который хранит пары ключ и значение. Ключ в структуре может быть только строкового типа и должен удовлетворять требованиям названия переменных в 1С. Для значения структуры нет ограничений. Структуру можно создать как на клиенте, так и на сервере. А также структуру можно передавать с клиента на сервер и обратно.

Создание структуры

Для создания структуры используется конструктор:

СтруктураПараметров = Новый Структура;


Можно сразу в конструкторе указать ключи и значения:

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

В этом случае будет создана структура с двумя ключами КлючСтруктуры1 и КлючСтруктуры2. При этом значение ключа КлючСтруктуры1 будет равно 25, а значение ключа КлючСтруктуры2 будет равно строке «значение». В дальнейшем можно изменять значения каждого ключа, можно добавлять новые ключи или удалять существующие. Если для какого-то ключа не указать значение, то оно будет равно Неопределено.

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

Добавление нового ключа в структуру

Чтобы добавить новый ключ в структуру после ее создания можно использовать метод Вставить. Если в структуре уже был такой ключ, то значение будет заменено.

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("НовыйКлюч", 2);

Если попытаться добавить в структуру ключ, который начинается с цифры, то будет вызвано исключение «Задано неправильное имя атрибута структуры»:

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("1", 2);
//при компиляции модуля будет ошибка:
//Задано неправильное имя атрибута структуры

Обращение к свойствам структуры

К свойствам (ключам) структуры можно обращаться через точку «.» после имени структуры:

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

Можно через оператор индексации []:

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

Перебор структуры

Перебрать элементы структуры можно с помощью цикла Для Каждого. На каждой итерации цикла будет переменная типа КлючИЗначение. Через свойства Ключ и Значение данной переменной можно только читать значения, изменить нельзя:

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

Как удалить ключ из структуры

Удалить ключ из структуры можно методом Удалить. Данный метод удалит только один ключ. Если нужно удалить все ключи из структуры, то нужно использовать метод Очистить:

СтруктураПараметров.Удалить("НовыйКлюч"); //удалит только один ключ
СтруктураПараметров.Очистить(); //удалит все ключи из структуры

Как проверить есть ли в структуре ключ

Метод Свойство позволяет проверить наличие в структуре указанного ключа. Если ключ присутствует в структуре, то метод вернет Истина. Если такого ключа нет, то метод вернет Ложь.

ЕстьКлюч = СтруктураПараметров.Свойство("НовыйКлюч");
Если ЕстьКлюч Тогда
Сообщить("Ключ найден!");
КонецЕсли;

Также с помощью данного метода можно получить значение по ключу:

Перем Значение;
//вторым параметром передаем переменную, в которую будет помещено значение
ЕстьКлюч = СтруктураПараметров.Свойство("НовыйКлюч", Значение);
Если ЕстьКлюч Тогда
Сообщить(Значение);
КонецЕсли;

Если в структуре нет такого ключа, то в переменной Значение будет Неопределено.

Поиск в структуре

Чтобы найти какой-то ключ в структуре можно использовать все тот же самый метод Свойство:

Перем НайденноеЗначение;
Если СтруктураПараметров.Свойство("НовыйКлюч", НайденноеЗначение) Тогда
Сообщить("Значение найдено: " + НайденноеЗначение);
Иначе
Сообщить("Значение не найдено");
КонецЕсли;

Но если поиск в структуре нужно выполнить по значению, то придется перебрать всю структуру:

//поищем в структуре значение "Поиск"
НашлиЗначение = Ложь;
Для Каждого КлИЗнач Из СтруктураПараметров Цикл
Если КлИЗнач.Значение = "Поиск" Тогда
//нашли
НашлиЗначение = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

Если Не НашлиЗначение Тогда
//не нашли
КонецЕсли;

Количество элементов структуры

Узнать количество элементов (ключей, свойств) структуры можно с помощью метода Количество:

Колво = СтруктураПараметров.Количество();

Как скопировать структуру

Стр = Новый Структура("Ключ1", 1);
ВложеннаяСтр = Новый Структура("Ключ2", 2);
Стр.Вставить("ВложеннаяСтр", ВложеннаяСтр);

Копия = Новый Структура;
Для Каждого КлючИЗначение Из Стр Цикл
Копия.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
//в этом случае в структуре Копия в ключе ВложеннаяСтр
//будет та же самая структура, что и в переменной
//ВложеннаяСтр и в структуре Стр

//для создания полной копии можно сделать так:
ПолнаяКопия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Стр));

Фиксированная Структура

Фиксированная структура - это та же самая структура, но после создания нельзя изменить состав ключей и значения. Можно создать на основании обычной структуры (будет создана полная копия), по ключам и значениям или пустую структуру:

//пустая структура
ФиксСтр = Новый ФиксированнаяСтруктура;

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

//на основании обычной структуры
ОбычнаяСтруктура = Новый Структура("Ключ1, Ключ2", 1, 2);
ФиксСтр = Новый ФиксированнаяСтруктура(ОбычнаяСтруктура);

У фиксированной структуры есть только 2 метода:

- Количество()
- Свойство(<Ключ>, <НайденноеЗначение>)

К ключам структуры можно обращаться как к свойству: ФиксСтр.Ключ1, но нельзя менять значение свойства.

На основании фиксированной структуры можно создать обычную структуру:

ФиксСтр = Новый ФиксированнаяСтруктура("Ключ1, Ключ2", 1, 2);

ОбычнаяСтруктура = Новый Структура(ФиксСтр);
ОбычнаяСтруктура.Ключ1 = 11; //теперь можно менять значения

Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up