Обход элементов справочника
В ходе написания алгоритмов может возникнуть потребность перебрать все элементы справочника Например, может понадобиться получить реестр какого-либо справочника (товаров, контрагентов и т.д.), содержащий перечень всех элементов этого справочника
Для формирования такого реестра создайте отчет с помощью Конструктора Отчетов и Конструктора Макета Отчетов (Конструктору Макета Отчетов следует указать, что отчет будет содержать циклы по строкам, количество циклов по строкам -1, количество колонок - 3).
Конструктор Макета Отчета сгенерирует процедуру формирования отчета:
Процедура Сформировать() Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица(«Сформировать"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0,0,Таб.ВысотаТаблицы(),0); Пока "Условие" Цикл Таб.ВыБестиСекцию("Строка_1"); КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать",""); КонецПроцедуры
Эта процедура пока содержит только строки вывода печатной формы, но не содержит строк получения и вывода необходимых данных.
Рассмотрим пример формирования реестра товаров (элементов справочника "Номенклатура").
Наша задача - обойти все элементы справочника "Номенклатура" и вывести необходимую информацию - код, наименование и цену товара - на печать.
Изменения, которые нам предстоит внести в исходный текст, затронут только конструкцию "Пока . . . Цикл . . . КонецЦикла", остальные строки останутся прежними. Поэтому далее мы будем показывать преобразование только этих строк алгоритма.
Для выполнения необходимых действий над справочником "Номенклатура" мы должны создать специальную переменную с помощью функции "СоздатьОбъект":
Спр=СоздатьОбъект("Справочник.Номенклатура"); Пока "Условие" Цикл Таб.ВывестиСекцию("Строка_1"); КонецЦикла
Эта переменная будет использоваться для перебора элементов справочника Далее выберем элементы справочника с помощью метода "ВыбратьЭлементы":
Спр=СоздатьОбъект("Справочник.Номенклатура"); Спр.Выбрать Элементы(); Пока «Условие» Цикл Таб.ВывестиСекцию("Строка_1"); КонецЦикла;
Метод "ВыбратьЭлементы" открывает (начинает) перебор элементов справочника. В данном случае, мы выбираем все элементы справочника "Номенклатура". Обрабатывать элементы справочника мы будем в цикле, который у нас уже в каком-то виде есть, он содержит оператор вывода строки в печатную форму, но не содержит условия.
Очевидно, цикл нам нужен, чтобы перебрать все элементы справочника. Для получения очередного элемента справочника, мы воспользуемся методом "ПолучитьЭлемент".
Чтобы получить очередной элемент справочника, следует записать:
Спр.ПолучитьЭлемент()
Если элемент справочника выбран, метод возвращает значение "1", в противном случае - "0" Поэтому, прежде чем выполнять над элементом справочника какие-либо действия, необходимо проверить, результат работы метода (то есть, мы проверяем, имеется ли у нас элемент справочника для обработки)
Запишем выражение для проверки результата выборки элементов справочника в условие цикла:
Спр=СоздатьОбъект("Справочник.Номенклатура"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Таб.ВывестиСекцию(«Строка_1»); КонецЦикла;
Таким образом, для перебора всех элементов справочника мы использовали конструкции организации цикла и методы "ВыбратьЭлементы" - "ПолучитьЭлемент". После выполнения метода "ПолучитьЭлемент" переменная "Спр" позиционирована (установлена) на очередной элемент справочника. При этом все реквизиты этого элемента можно получить обращаясь через точку ("Спр.Код, Спр.Наименование и т.д.). При следующем выполнении метода "ПолучитьЭлемент" переменная позиционируется на следующий элемент и обращение "через точку" к реквизитам уже будет выдавать информацию о следующем элементе.
Итак, мы перебрали все элементы справочника и для каждого элемента вывели в печатную форму строку Но в сформированном Конструктором шаблоне печатной формы отчета секция «Строка_1» состоит из пустой строки:
Кроме того, в шапке формируемого отчета стоят условные названия колонок отчета Колонка_1, Колонка_2, Колонка_3. Заменим их названиями "Код", "Наименование" и "Цена".
А в секции Строка_1 в колонках таблицы 2, 3 и 4 запишем соответственно Спр.Код, Спр.Наименование и Спр.Цена:
Доработка алгоритма, в целом, завершена. В справочнике "Номенклатура" мы перебрали все элементы и вывели в отчет их реквизиты: "Код", "Наименование" и "Цена".
Начать дискуссию