К статьям

Работа со структурами

6 мин


Конструкторы

Создать структуру можно 2 способами

1. По ключам и значениям.

Новый Структура (<Ключи>, <Значения>)

  • <Ключи> (необязательный) - строка, содержащая ключи через запятую, каждый ключ образуется по правилам наименований переменных.
  • <Значения> (необязательный) - произволные значения элементов структуры.

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

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

Ключей может быть как несколько, так и один

Параметры = Новый Структура("НомерДокумента");

Адрес = Новый Структура("Страна, Город, Улица, Дом");

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

Параметры = Новый Структура("НомерДокумента", 123);

Адрес = Новый Структура("Страна, Город, Улица, Дом, Литера", "Англия", "Лондон", "Бейкер-стрит", 221, "б");

2. На основании фиксированной структуры

Фиксированная структура - неизменяемая структура.

Пусть имеется фиксированная структура ЗначенияПараметровСеанса, тогда на ее основании можно создать структуру Настройки.

Настройки = Новый Структура(ЗначенияПараметровСеанса);

Чтобы обратиться к элементу структуры указывается ее ключ через оператор [<Ключ>], или через точку Структура.Ключ.

Параметры = Новый Структура("НомерДокумента", 123);

Номер = Параметры.НомерДокумента;

Сообщить(Номер); // 123

Параметры = Новый Структура("НомерДокумента", 123);

Номер = Параметры["НомерДокумента"];

Сообщить(Номер); // 123

Методы

1. Вставить(<Ключ>, <Значение>)

  • <Ключ> (обязательный) - ключ устанавливаемого элемента.
  • <Значение> (необязательный) - значение устанавливаемого элемента.

Устанавливает значение элемента структуры по ключу. Если ключ существует, то значение заменяется, иначе добавляется новый элемент.

Адрес = Новый Структура;

Адрес.Вставить("Улица", "Бейкер-стрит");

Адрес.Вставить("Дом", 221);

 

Сообщить(Адрес.Улица); // Бейкер-стрит

Сообщить(Адрес.Дом); // 221

При создании структуры не рекомендуется передавать в конструктор более 3-х значений свойств. При создании структуры более чем 3 элементами, следует использовать метод Вставить(). 
Рекомендуется добавляя элементы структуры сразу заполнять их значениями по умолчанию

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);

 

ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаТовары);

 

Для Каждого Элемент Из ДанныеСтроки Цикл

    Сообщить(Элемент.Ключ + ": " + Элемент.Значение);

КонецЦикла

Задачи на эту тему:

Рейтинг 0

Комментарии