Структура в 1с — это широко используемый объект языка. Она представляет собой коллекцию пар «Ключ-Значение», предназначенную для хранения и передачи связанных друг с другом данных.
Проще говоря, это контейнер, где у каждого значения есть свое уникальное имя (ключ). Например, для описания товара:
-
Ключ: Артикул, Значение: НФ-001245
-
Ключ: "Наименование", Значение: "Стол офисный "Комфорт""
-
Ключ: "Цена", Значение: 12500.00
-
Ключ: "ВНаличии", Значение: Истина
Структуры очень часто используются в коде 1С, и хороший разработчик должен уверенно их использовать, знать какие ошибки можно встретить, как их исправить.
Как создать структуру в 1С?
Существует два варианта создания структуры, их еще называют "конструкторами". Это конструктор по ключам и значениям, и конструктор из фиксированной структуры. Рассмотрим несколько примеров работы с созданием структуры в 1С
Создание пустой структуры и добавление элементов
Здесь мы используем метод структуры "Вставить" для добавления новых значений в структуру. Метод "Вставить" принимает в качестве первого параметра ключ, а вторым параметром - значение. Этот прием полезно использовать, когда состав структуры может меняться или заранее неизвестен.
ФильтрОтчета = Новый Структура; ФильтрОтчета.Вставить("ДатаНачала", НачалоГода(ТекущаяДата())); ФильтрОтчета.Вставить("Контрагент", ВыбранныйКонтрагент);
Создание структуры в 1С по ключам и значениям
Здесь мы сразу в конструкторе указываем и ключи, и значения.
// Ключи и значения передаются парами ДанныеПользователя = Новый Структура("Логин, КодДоступа, Активен", "admin", "fG12#$a", Истина);
Создание структуры по ключам и последующее добавление значений
Комбинированный вариант, удобно использовать, когда ключи известны нам заранее, а вот значения могут рассчитываться динамически.
// Объявляем структуру с нужными ключами ПараметрыДокумента = Новый Структура("Номер, Дата, Сумма"); // Заполняем значения, обращаясь к ключам как к свойствам ПараметрыДокумента.Номер = "РН-001"; ПараметрыДокумента.Дата = ТекущаяДата(); ПараметрыДокумента.Сумма = 9990.50;
Требования к ключам в Структуре
Ключ в структуре — это всегда строка, но не просто строка, а соответствующая правилам именования идентификаторов. Если проще - нужно использовать те же правила, как при создании имен переменных и реквизитов.
"Правильные" ключи
Чтобы иметь возможность обращаться к значению через точку (МояСтруктура.ИмяКлюча), ключ должен быть идентификатором 1С. Это значит, что он:
- Начинается с буквы или знака подчеркивания (_)
- Содержит только буквы, цифры и знаки подчеркивания
- Не имеет пробелов, дефисов и других спецсимволов
Примеры: "ИмяСотрудника", "СуммаНДС", "_СтатусОбработки".
Важно помнить, что ключи не чувствительны к регистру: Структура.Цена и структура.цена — это одно и то же.
"Неправильные" ключи:
"Имя-сотрудника", "Сумма НДС", "2НДФЛ"
Попытка записать такой ключ в структуру приведет к ошибке "Задано неправильное имя атрибута структуры".
Примеры работы со структурой в 1С
Как получить из структуры значение:
Как правило, структура используется для того, чтобы можно было обращаться к ее содержимому "через точку", например, как к свойствам объектов, реквизитам, и т.п.
Например:
СтруктураВидыДней = Новый Структура("Рабочий,Выходной,Предпраздничный,Праздник", "Рабочий","Выходной","Предпраздничный","Праздник"); Сообщить(СтруктураВидыДней.Рабочий);
Но иногда мы можем захотеть собрать ключ "на лету", или получить его из параметров, или еще как-то динамически. В этом случае можно использовать оператор квадратных скобок. Далее приведены примеры, как получить значение из структуры в 1С, они дадут одинаковый результат:
Сообщить(СтруктураВидыДней.Рабочий); Сообщить(СтруктураВидыДней["Рабочий"]); ИмяДня = "Ра" + "бочий"; Сообщить(СтруктураВидыДней[ИмяДня]);
Также можно перебрать все элементы структуры в цикле Для каждого:
Для Каждого КлючИЗначение Из СтруктураВидыДней Цикл Сообщить(КлючИЗначение.Ключ + " = " + КлючИЗначение.Значение); КонецЦикла;
Проверка наличия ключа: Свойство()
Чтобы избежать ошибок при обращении к несуществующему ключу, используйте метод Свойство().
// Простой вызов: возвращает Истина или Ложь Если ФильтрОтчета.Свойство("Контрагент") Тогда Сообщить("Отбор по контрагенту установлен."); КонецЕсли; // Вызов со вторым параметром: если ключ найден, значение помещается в переменную ПеременнаяЗначение = Неопределено; Если ФильтрОтчета.Свойство("Контрагент", ПеременнаяЗначение) Тогда Сообщить("Найден контрагент: " + ПеременнаяЗначение); КонецЕсли;
Удаление элементов из структуры
Если известен ключ, можно удалить элемент из структуры методом Удалить():
ДанныеПользователя.Удалить("КодДоступа");
Либо можно очистить структуру полностью при помощи метода Очистить():
СоответствиеПраздников.Очистить()
Структура vs. Соответствие: что выбрать?
Это два похожих, но разных по назначению объекта. Вот ключевые отличия в таблице:
| Характеристика | Структура | Соответствие |
| Тип Ключа | Только Строка | Любой (ссылка, дата, число и т.д.) |
| Доступ к данным | Через точку: Структура.Ключ или квадратные скобки: Структура["Ключ"] | Через [] или .Получить(): Соотв[Ключ] |
| Основное назначение | Описание свойств одного объекта, передача параметров. | Сопоставление одних данных другим, создание словарей. |
-
Используйте Структуру, когда ключи — это имена свойств (ФИО, Артикул, Цена).
-
Используйте Соответствие, когда ключи — это сами данные (сопоставить СсылкуНаНоменклатуру ее Остатку).
Чувствуете, что застряли в основах 1С?
Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.
