Top.Mail.Ru

Структура в языке 1С

Структура в 1с — это широко используемый объект языка. Она представляет собой коллекцию пар «Ключ-Значение», предназначенную для хранения и передачи связанных друг с другом данных.

Проще говоря, это контейнер, где у каждого значения есть свое уникальное имя (ключ). Например, для описания товара:

  • Ключ: АртикулЗначение: НФ-001245

  • Ключ: "Наименование"Значение: "Стол офисный "Комфорт""

  • Ключ: "Цена"Значение: 12500.00

  • Ключ: "ВНаличии"Значение: Истина

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

Как создать структуру в 1С?

Существует два варианта создания структуры, их еще называют "конструкторами". Это конструктор по ключам и значениям, и конструктор из фиксированной структуры. Рассмотрим несколько примеров работы с созданием структуры в 1С

Создание пустой структуры и добавление элементов

Здесь мы используем метод структуры "Вставить" для добавления новых значений в структуру. Метод "Вставить" принимает в качестве первого параметра ключ, а вторым параметром - значение. Этот прием полезно использовать, когда состав структуры может меняться или заранее неизвестен.

ФильтрОтчета = Новый Структура;
ФильтрОтчета.Вставить("ДатаНачала", НачалоГода(ТекущаяДата()));
ФильтрОтчета.Вставить("Контрагент", ВыбранныйКонтрагент);

Создание структуры в 1С по ключам и значениям

Здесь мы сразу в конструкторе указываем и ключи, и значения. 

// Ключи и значения передаются парами
ДанныеПользователя = Новый Структура("Логин, КодДоступа, Активен", 
                                    "admin", "fG12#$a", Истина);

Создание структуры по ключам и последующее добавление значений

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

// Объявляем структуру с нужными ключами
ПараметрыДокумента = Новый Структура("Номер, Дата, Сумма");

// Заполняем значения, обращаясь к ключам как к свойствам
ПараметрыДокумента.Номер = "РН-001";
ПараметрыДокумента.Дата = ТекущаяДата();
ПараметрыДокумента.Сумма = 9990.50;

Требования к ключам в Структуре

Ключ в структуре — это всегда строка, но не просто строка, а соответствующая правилам именования идентификаторов. Если проще - нужно использовать те же правила, как при создании имен переменных и реквизитов.

"Правильные" ключи

Чтобы иметь возможность обращаться к значению через точку (МояСтруктура.ИмяКлюча), ключ должен быть идентификатором 1С. Это значит, что он:

 

  • Начинается с буквы или знака подчеркивания (_)
  • Содержит только буквы, цифры и знаки подчеркивания
  • Не имеет пробелов, дефисов и других спецсимволов

Примеры: "ИмяСотрудника", "СуммаНДС", "_СтатусОбработки".

Важно помнить, что ключи не чувствительны к регистру: Структура.Цена и структура.цена — это одно и то же.

"Неправильные" ключи:
"Имя-сотрудника", "Сумма НДС", "2НДФЛ"
Попытка записать такой ключ в структуру приведет к ошибке "Задано неправильное имя атрибута структуры".

Примеры работы со структурой в 1С

Как получить из структуры значение:

Как правило, структура используется для того, чтобы можно было обращаться к ее содержимому "через точку", например, как к свойствам объектов, реквизитам, и т.п.
Например:

СтруктураВидыДней = Новый Структура("Рабочий,Выходной,Предпраздничный,Праздник",
"Рабочий","Выходной","Предпраздничный","Праздник");

Сообщить(СтруктураВидыДней.Рабочий);

Но иногда мы можем захотеть собрать ключ "на лету", или получить его из параметров, или еще как-то динамически. В этом случае можно использовать оператор квадратных скобок. Далее приведены примеры, как получить значение из структуры в 1С, они дадут одинаковый результат:

Сообщить(СтруктураВидыДней.Рабочий);
Сообщить(СтруктураВидыДней["Рабочий"]);
ИмяДня = "Ра" + "бочий";
Сообщить(СтруктураВидыДней[ИмяДня]);

Также можно перебрать все элементы структуры в цикле Для каждого:

Для Каждого КлючИЗначение Из СтруктураВидыДней Цикл
    Сообщить(КлючИЗначение.Ключ + " = " + КлючИЗначение.Значение);
КонецЦикла;

Проверка наличия ключа: Свойство()

Чтобы избежать ошибок при обращении к несуществующему ключу, используйте метод Свойство().

// Простой вызов: возвращает Истина или Ложь
Если ФильтрОтчета.Свойство("Контрагент") Тогда
    Сообщить("Отбор по контрагенту установлен.");
КонецЕсли;

// Вызов со вторым параметром: если ключ найден, значение помещается в переменную
ПеременнаяЗначение = Неопределено;
Если ФильтрОтчета.Свойство("Контрагент", ПеременнаяЗначение) Тогда
    Сообщить("Найден контрагент: " + ПеременнаяЗначение);
КонецЕсли;

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

Если известен ключ, можно удалить элемент из структуры методом Удалить():

ДанныеПользователя.Удалить("КодДоступа");

Либо можно очистить структуру полностью при помощи метода Очистить():

СоответствиеПраздников.Очистить()

Структура vs. Соответствие: что выбрать?

Это два похожих, но разных по назначению объекта. Вот ключевые отличия в таблице:

Характеристика Структура Соответствие
Тип Ключа Только Строка Любой (ссылка, дата, число и т.д.)
Доступ к данным Через точку: Структура.Ключ или квадратные скобки: Структура["Ключ"] Через [] или .Получить()Соотв[Ключ]
Основное назначение Описание свойств одного объекта, передача параметров. Сопоставление одних данных другим, создание словарей.
  • Используйте Структуру, когда ключи — это имена свойств (ФИОАртикулЦена).

  • Используйте Соответствие, когда ключи — это сами данные (сопоставить СсылкуНаНоменклатуру ее Остатку).

Чувствуете, что застряли в основах 1С?

Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *