Top.Mail.Ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сэкономь часы на дебаге 1C!

Скачай PDF с топ-11 ошибок начинающих разработчиков + файл с примерами кода!

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

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