Структура в 1С 8.3 — работа на примерах

Структура в 1С 8.3 это динамический набор данных (коллекция значений), каждый элемент которой состоит из пары «Ключ» и «Значение». Ключи структуры уникальны, поэтому ими можно идентифицировать значения. Ключ структуры должен иметь строковый тип данных и отвечать требованиям к именам переменных. К значениям структуры можно обращаться как к свойствам объекта, при этом ключ используется как имя свойства.

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

Автомобиль = Новый Структура("Марка,ДатаВыпуска,ПробегКМ","BMW",Дата('20190101'),25000);

Результат:

Добавление элементов, установка значений

Метод Вставить() устанавливает значение элемента структуры по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.

Автомобиль.Вставить("Цвет","Белый");//Добавили ключ и значение.
Автомобиль.Вставить("Цвет","Чёрный");// Т.к. ключ "Цвет" уже существует, произошла замена значения.

//Другие способы для установки значений
Автомобиль.Цвет = "Белый";//Для ключа "Цвет" установили значение "Белый"
Автомобиль["Цвет"] = "Чёрный";//Для ключа "Цвет" установили значение "Чёрный"

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

КоличествоЭлементов = Автомобиль.Количество();

Обход элементов структуры

Для Каждого Элемент Из Автомобиль Цикл
Ключ = Элемент.Ключ;
Значение = Элемент.Значение;
Сообщить(Ключ + " - " + Значение);
КонецЦикла;

Проверить ключ структуры на существование

// Если ключ существует, выражение вернёт "ИСТИНА" иначе вернёт "ЛОЖЬ"
Автомобиль.Свойство("Марка");

Получить значение элемента структуры по ключу

ЗначениеЭлемента = Неопределено;
Автомобиль.Свойство("Марка ",ЗначениеЭлемента);

Удалить элемент структуры

Автомобиль.Удалить("Цвет ");

Удалить все элементы структуры

Автомобиль.Очистить();

Пример преобразования структуры в таблицу значений

&НаКлиенте
Процедура СтруктураВТЗ(Команда)
РасписаниеДня = Новый Структура();
РасписаниеДня.Вставить("Начало","08:00");
РасписаниеДня.Вставить("Обед","12:00");
РасписаниеДня.Вставить("Конец","17:00");
ТаблицаЗнач = СтруктураВТЗНаСервере(РасписаниеДня);
КонецПроцедуры

&НаСервере
Функция СтруктураВТЗНаСервере(РасписаниеДня)

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Период");
ТЗ.Колонки.Добавить("Время");

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

КонецФункции

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!

Результат:

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

Пример №1

&НаКлиенте
Процедура СкопироватьСтруктуру(Команда)

Структура = Новый Структура();
Структура.Вставить("Фамилия","Петров");
Структура.Вставить("Имя","Пётр");
Структура.Вставить("Отчество","Петрович");

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

КонецПроцедуры

 Пример №2

Способ работает в рамках одной информационной базы.

&НаКлиенте
Процедура СкопироватьСтруктуру2(Команда)
Структура = Новый Структура();
Структура.Вставить("Фамилия","Петров");
Структура.Вставить("Имя","Пётр");
Структура.Вставить("Отчество","Петрович");
КопияСтруктуры = СкопироватьСтруктуруНаСервере(Структура);
КонецПроцедуры

&НаСервере
Функция СкопироватьСтруктуруНаСервере(Структура)
КопияСтруктуры = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Структура));
Возврат КопияСтруктуры;
КонецФункции

 Пример №3

&НаКлиенте
Процедура СкопироватьСтруктуру3(Команда)
Структура = Новый Структура();
Структура.Вставить("Фамилия","Петров");
Структура.Вставить("Имя","Пётр");
Структура.Вставить("Отчество","Петрович");
КопияСтруктуры = Новый ФиксированнаяСтруктура(Структура);
КонецПроцедуры

В примере №3 структура будет скопирована в неизменную (фиксированную) структуру.  Для такого вида структур не доступны методы Вставить(), Удалить(), Очистить().  Если требуется изменить фиксированную структуру, её необходимо скопировать в обычную.

ОбычнаяСтруктура = Новый Структура(ФиксированнаяСтруктура);