Работа со структурами
6 мин
Конструкторы
Создать структуру можно 2 способами
1. По ключам и значениям.
Новый Структура (<Ключи>, <Значения>)
- <Ключи> (необязательный) - строка, содержащая ключи через запятую, каждый ключ образуется по правилам наименований переменных.
- <Значения> (необязательный) - произволные значения элементов структуры.
Если не указывать ключи и значения, будет создана пустая структура
Параметры = Новый Структура;
Ключей может быть как несколько, так и один
Параметры = Новый Структура("НомерДокумента");
Адрес = Новый Структура("Страна, Город, Улица, Дом");
Количество значений приведенных через запятую должно совпадать с количеством ключей, иначе значение будет пропущено.
Параметры = Новый Структура("НомерДокумента", 123);
Адрес = Новый Структура("Страна, Город, Улица, Дом, Литера", "Англия", "Лондон", "Бейкер-стрит", 221, "б");
2. На основании фиксированной структуры
Фиксированная структура - неизменяемая структура.
Пусть имеется фиксированная структура ЗначенияПараметровСеанса, тогда на ее основании можно создать структуру Настройки.
Настройки = Новый Структура(ЗначенияПараметровСеанса);
Чтобы обратиться к элементу структуры указывается ее ключ через оператор [<Ключ>], или через точку Структура.Ключ.
Параметры = Новый Структура("НомерДокумента", 123);
Номер = Параметры.НомерДокумента;
Сообщить(Номер); // 123
Параметры = Новый Структура("НомерДокумента", 123);
Номер = Параметры["НомерДокумента"];
Сообщить(Номер); // 123
Методы
1. Вставить(<Ключ>, <Значение>)
- <Ключ> (обязательный) - ключ устанавливаемого элемента.
- <Значение> (необязательный) - значение устанавливаемого элемента.
Устанавливает значение элемента структуры по ключу. Если ключ существует, то значение заменяется, иначе добавляется новый элемент.
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Сообщить(Адрес.Улица); // Бейкер-стрит
Сообщить(Адрес.Дом); // 221
2. Количество()
Возвращает количество элементов
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Количество = Адрес.Количество();
Сообщить(Количество); // 2
3. Очистить()
Удаляет все элементы
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Адрес.Очистить();
Количество = Адрес.Количество();
Сообщить(Количество); // 0
4. Свойство(<Ключ>, <НайденноеЗначение>)
- <Ключ> (обязательный) - ключ для поиска свойства.
- <НайденноеЗначение> (необязательный) - произвольное значение, в него возвращается найденное значение по ключу. Если ключ не найден, то Неопределено.
Проверяет есть ли свойство <Ключ> у структуры. Вовращает Истина если ключ найден, Ложь в противном случае.
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
ЕстьСвойствоУлица = Адрес.Свойство("Улица");
Сообщить(ЕстьСвойствоУлица); // Да
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Значение = Неопределено;
Если Адрес.Свойство("Дом", Значение) Тогда
Сообщить("Дом " + Значение);
Иначе
Сообщить("Дом не найден");
КонецЕсли;
// Дом 221
5. Удалить(<Ключ>)
- <Ключ> (обязательный) - ключ удаляемого элемента
Удаляет элемент с указанным ключом.
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Адрес.Удалить("Улица");
Если Адрес.Свойство("Улица") Тогда
Сообщить("Указана улица");
Иначе
Сообщить("Не указана улица");
КонецЕсли;
// Не указана улица
Фиксированная структура
У фиксированной структуры 2 метода Количество(), Свойство(<Ключ>, <НайденноеЗначение>) работают аналогично. Приемы работы со структурой аналогичные, за исключением того, что ее нельзя изменить после создания. Может быть создана 3 способами:
1. По умолчанию
Новый ФиксированнаяСтруктура().
Параметры = Новый ФиксированнаяСтруктура;
2. Из структуры
Новый ФиксированнаяСтруктура(<Структура>)
- <Структура> (обязательный) - исходная структура, все ее свойства и значения будут скопированы.
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
ТекущийАдрес = Новый ФиксированнаяСтруктура(Адрес);
Для Каждого Элемент Из ТекущийАдрес Цикл
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла;
// Улица: Бейкер-стрит
// Дом: 221
3. По ключам и значениям
Аналогично структуре
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
ТекущийАдрес = Новый ФиксированнаяСтруктура("Улица, Дом", "Бейкер-стрит", 221);
Для Каждого Элемент Из ТекущийАдрес Цикл
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла;
// Улица: Бейкер-стрит
// Дом: 221
Примеры
1. Переопределить значение элемента
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Адрес.Дом = "221 б";
Сообщить(Адрес.Дом); // 221 б
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Адрес.Вставить("Дом", "221 б");
Сообщить(Адрес.Дом); // 221 б
2. Обойти все элементы и вывести ключи и значения структуры
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
Для Каждого Элемент Из Адрес Цикл
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла;
// Улица: Бейкер-стрит
// Дом: 221
3. Скопировать структуру
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
ТекущийАдрес = Новый Структура;
Для Каждого Элемент Из Адрес Цикл
ТекущийАдрес.Вставить(Элемент.Ключ, Элемент.Значение);
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла;
// Улица: Бейкер-стрит
// Дом: 221
4. Найти значение структуры
Адрес = Новый Структура;
Адрес.Вставить("Улица", "Бейкер-стрит");
Адрес.Вставить("Дом", 221);
ЗначениеНайдено = Ложь;
Для Каждого Элемент Из Адрес Цикл
Если Элемент.Значение = 221 Тогда
ЗначениеНайдено = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЗначениеНайдено Тогда
Сообщить("Значение найдено");
Иначе
Сообщить("Нет искомого значения");
КонецЕсли;
// Значение найдено
5. Пусть имеется строка таблицы значений, с колонками Наименование, Сумма, Цена, Количество, СуммаНДС. Нужно заполнить структуру значениями колонок Наименование, Сумма, СуммаНДС.
ОписаниеСтрока = Новый ОписаниеТипов("Строка");
ОписаниеЧисло = Новый ОписаниеТипов("Число");
Товары = Новый ТаблицаЗначений();
Товары.Колонки.Добавить("Наименование", ОписаниеСтрока);
Товары.Колонки.Добавить("Сумма", ОписаниеЧисло);
Товары.Колонки.Добавить("Цена", ОписаниеЧисло);
Товары.Колонки.Добавить("Количество", ОписаниеЧисло);
Товары.Колонки.Добавить("СуммаНДС", ОписаниеЧисло);
СтрокаТовары = Товары.Добавить();
СтрокаТовары.Наименование = "Книга";
СтрокаТовары.Сумма = 100;
СтрокаТовары.Количество = 1;
СтрокаТовары.СуммаНДС = 20;
ДанныеСтроки = Новый Структура;
ДанныеСтроки.Вставить("Наименование", "");
ДанныеСтроки.Вставить("Сумма", 0);
ДанныеСтроки.Вставить("СуммаНДС", 20);
ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаТовары);
Для Каждого Элемент Из ДанныеСтроки Цикл
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла