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