Перебрать все элементы справочника довольно простая задача, которую можно реализовать в 1с-ке несколькими способами, самый простой использовать команду «Выборка», как показано во встроенном помощнике, я немного ужму код для наглядности
Номенклатура = Справочники.Номенклатура; Выборка = Номенклатура.Выбрать(,, ,); Пока Выборка.Следующий() Цикл Сообщить(Выборка.ПолучитьОбъект()); КонецЦикла;
На выходе мы получим перебор всех элементов отсортированных по основному представлению справочника, или можно указать другой порядок сортировки, по наименованию, по коду, или по любому другому реквизиту у которого признак индексирования установлен в значение "Индексировать" или в значение "Индексировать с доп. упорядоч.", казалось бы, что этого хватит на все случаи жизни. Сейчас, как видно из тематики моих статьей, я разбираюсь с мобильным приложением 1с для андроида, и возникла необходимость обмена данными с основной конфигурацией, для этого нужно как-то перекинуть справочники в мобильное приложение. Поскольку с планами обмена я еще не сталкивался (стыд мне и позор) решено было использовать обмен данными через электронную почту, и простой текстовый формат. Казалось бы, перебрал все элементы справочника, нужные реквизиты записал в виде строки «код;наименование;этогрупа;родитель;параметр1» и т.д. но возник один нюанс: припустим у меня структура справочника номенклатура следующая:
Если выгружать номенклатуру по кодам, а потом соответственно загружать то мы не сможем записать номенклатуру с кодом 110, поскольку один из реквизитов – «Родитель» будет ссылаться на несуществующую еще папку «Аксессуары» с кодом 147. Аналогичная ситуация может возникнуть если выгружать номенклатуру отсортированную по наименованию или любому другому реквизиту. Что же делать и как с этим бороться? Работают же как-то стандартные выгрузки-загрузки и даже не заикаются о подобной проблеме? На помощь придет язык запросов с соответствующим параметром сортировки данных. Просто в запрос нужно добавить поле со ссылкой на елемент, а потом указать что сортировка буде по иерархии.
Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Родитель, | Номенклатура.ЭтоГруппа, | Номенклатура.Наименование, | Номенклатура.Код, | Номенклатура.Ссылка КАК Номенклатура |ИЗ | Справочник.Номенклатура КАК Номенклатура | УПОРЯДОЧИТЬ ПО | Номенклатура ИЕРАРХИЯ | АВТОУПОРЯДОЧИВАНИЕ";
Результат выполнения запроса будет следующим:
Код |
Название |
Это Группа |
Код Родителья |
00000000046 |
!Серветки |
Да |
|
00000000077 |
!Бар-Сервіс |
Да |
00000000046 |
00000000076 |
Сер-ка "Бар-Сервіс" 24х24 (1 шар.) 500 шт барна |
Нет |
00000000077 |
00000000399 |
Сер-ка "Бар-Сервіс" 24х24 (1 шар.) 500 шт барна premium |
Нет |
00000000077 |
00000000537 |
Сер-ка "Бар-Сервіс" 400 шт |
Нет |
00000000077 |
Ми получили справочник номенклатура отсортированный по иерархии.
Лично мне он пригодился для правильного обмена с мобильным приложением.