Примеры работы с справочником

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

Создание нового элемента справочника

// Создание нового элемента справочника "Номенклатура"
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Новый товар";
НовыйЭлемент.Артикул = "NT-001";
НовыйЭлемент.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоННаименованию("Товары");
НовыйЭлемент.Записать();

Поиск элемента справочника

// Поиск по наименованию
Элемент = Справочники.Номенклатура.НайтиПоНаименованию("Карандаш");

// Поиск по коду
Элемент = Справочники.Номенклатура.НайтиПоКоду("000001");

// Поиск по реквизиту
Элемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "KP-123");

Получение данных из справочника

// Получение значения реквизита
Наименование = Элемент.Наименование;
Артикул = Элемент.Артикул;

// Получение родителя
Родитель = Элемент.Родитель;

// Получение дополнительных реквизитов
ЗначениеДопРеквизита = Элемент.ПолучитьДополнительныеРеквизиты().Получить("Вес");

Изменение элемента справочника

// Изменение существующего элемента
Элемент = Справочники.Номенклатура.НайтиПоКоду("000001");
Элемент.Наименование = "Новое наименование";
Элемент.Артикул = "NEW-001";
Элемент.Записать();

Удаление элемента справочника

// Удаление элемента
Элемент = Справочники.Номенклатура.НайтиПоКоду("000001");
Элемент.Удалить();

Получение списка элементов справочника

// Простой перебор всех элементов
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование);
КонецЦикла;

// С отбором и сортировкой
Выборка = Справочники.Номенклатура.Выбрать(, "Наименование");
Выборка.УстановитьОтбор("ВидНоменклатуры", Справочники.ВидыНоменклатуры.НайтиПоННаименованию("Товары"));
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование + " - " + Выборка.Артикул);
КонецЦикла;

Работа с иерархией справочника

// Создание группы
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = "Офисные принадлежности";
НоваяГруппа.Записать();

// Добавление элемента в группу
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Ручка шариковая";
НовыйЭлемент.Родитель = НоваяГруппа;
НовыйЭлемент.Записать();

// Получение всех элементов группы
Выборка = Справочники.Номенклатура.Выбрать(НоваяГруппа);
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование);
КонецЦикла;

Использование запроса к справочнику

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    Номенклатура.Наименование КАК Наименование,
|    Номенклатура.Артикул КАК Артикул
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
|УПОРЯДОЧИТЬ ПО
|    Номенклатура.Наименование";

Запрос.УстановитьПараметр("ВидНоменклатуры", Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товары"));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование + " (" + Выборка.Артикул + ")");
КонецЦикла;

Работа с табличными частями справочника

// Если в справочнике есть табличная часть "ДополнительныеХарактеристики"
Элемент = Справочники.Номенклатура.НайтиПоКоду("000001");
Для Каждого СтрокаХарактеристики Из Элемент.ДополнительныеХарактеристики Цикл
    Сообщить(СтрокаХарактеристики.Характеристика + ": " + СтрокаХарактеристики.Значение);
КонецЦикла;

// Добавление новой строки в табличную часть
НоваяСтрока = Элемент.ДополнительныеХарактеристики.Добавить();
НоваяСтрока.Характеристика = "Цвет";
НоваяСтрока.Значение = "Красный";
Элемент.Записать();

Обход всех элементов справочника рекурсивно (с учетом иерархии)

Процедура ОбойтиГруппу(Группа, Уровень = 0)
    Выборка = Справочники.Номенклатура.Выбрать(Группа);
    Пока Выборка.Следующий() Цикл
        Отступ = Лев("    ", Уровень * 4);
        Если Выборка.ЭтоГруппа Тогда
            Сообщить(Отступ + "[Группа] " + Выборка.Наименование);
            ОбойтиГруппу(Выборка.Ссылка, Уровень + 1);
        Иначе
            Сообщить(Отступ + Выборка.Наименование);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

// Начало обхода с корня
ОбойтиГруппу(Неопределено);

Поделиться с друзьями
Smirnov code
Добавить комментарий