Многие спрашивают: Как вывести структуру на печать?
Путем простого перебора и вывода в табличный документ, вот пример:
ТабДок = Новый ТабличныйДокумент; Макет = Справочники.Контрагенты.ПолучитьМакет("ПечатьСтруктуры"); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ТабДок.Очистить(); ТабДок.Вывести(ОбластьЗаголовок); //Перебор СТРУКТУРЫ и вывод в Табличный документ. РК - Структура с данными Для Каждого Элемент из РК Цикл //Сообщить(Элемент.Ключ + ": " + Элемент.Значение); Если ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда Для Каждого ЭлементВ из Элемент.Значение Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ЭлементВ); ТабДок.Вывести(ОбластьДетальныхЗаписей); КонецЦикла; Иначе ОбластьДетальныхЗаписей.Параметры.Заполнить(Элемент); ТабДок.Вывести(ОбластьДетальныхЗаписей); КонецЕсли; КонецЦикла; ТабДок.Вывести(ОбластьПодвал); УниверсальныеМеханизмы.НапечататьДокумент(ТабДок); // или ТабДок.Показать();
Табличный документ
// Параметры: // ВидСправочника - Строка, указывающая вид справочника, как он задан в конфигураторе // ДобавлятьЭлементыСправочника - 1- добавить колонку с наименованием "Элемент", содержащую элементы справочников, 0 - не добавлять колонку // ИмяРеквизита - Имя реквизита, как он задан в конфигураторе. Используется при заполнении таблицы из выборки по значению реквизита. // ЗначениеРеквизита - Значение реквизита, по которому надо построить выборку. Используется при заполнении таблицы из выборки по значению реквизита. // ЭлементВладелец - Владелец, указывается для подчиненных справочников // ЭлементРодитель - Родитель, используется в случае, если надо ограничить выборку условием принадлежности элементов одной группе // ВключатьПодчиненные - Установить флаг выборки всех подчиненных элементов. // Иерархия - Флаг указывающий на то как выбирать элементы (1 - выбирать элементы с учетом иерархии, 0 - выбирать элементы без учета иерархии) // ВОбратномПорядке - Число: 1 - выбирать элементы справочника в обратном порядке; 0 - выбирать элементы справочника в прямом порядке // ВключатьГруппы - 1 - выбирать среди групп справочника, 0 - выбирать только среди элементов // // Возвращает: Таблица значений, колонками которой, являются реквизиты справочника Функция СправочникВТЗ(ВидСправочника, ДобавлятьЭлементыСправочника = 0,ИмяРеквизита = 0, ЗначениеРеквизита = 0, ЭлементВладелец = 0, ЭлементРодитель = 0, ВключатьПодчиненные = 1, Иерархия = 1, ВОбратномПорядке = 0, ВключатьГруппы = 0) Экспорт ТаблицаСпр = СоздатьОбъект("ТаблицаЗначений"); мдСпр = Метаданные.Справочник(ВидСправочника); ВсегоРеквизитовСпр = мдСпр.Реквизит(); Для индРекв = 1 по ВсегоРеквизитовСпр Цикл Вид = мдСпр.Реквизит(индРекв).Вид; ТаблицаСпр.НоваяКолонка(мдСпр.Реквизит(индРекв).Идентификатор, мдСпр.Реквизит(индРекв).Тип + ?(ПустоеЗначение(Вид) = 0, "." + Вид, ""), мдСпр.Реквизит(индРекв).Длина, мдСпр.Реквизит(индРекв).Точность); КонецЦикла; ТаблицаСпр.НоваяКолонка("Код", ?(мдСпр.ТипКода = "Текстовый", "Строка", "Число"), мдСпр.ДлинаКода); ТаблицаСпр.НоваяКолонка("Наименование", "Строка", мдСпр.ДлинаНаименования); Если ДобавлятьЭлементыСправочника = 1 тогда ТаблицаСпр.НоваяКолонка("Элемент", "Справочник." + ВидСправочника); КонецЕсли; Спр = СоздатьОбъект("Справочник." + ВидСправочника); Если ЭлементВладелец <> 0 тогда Спр.ИспользоватьВладельца(ЭлементВладелец); КонецЕсли; Если ЭлементРодитель <> 0 тогда Спр.ИспользоватьРодителя(ЭлементРодитель); КонецЕсли; Спр.ОбратныйПорядок(ВОбратномПорядке); Спр.ВключатьПодчиненные(ВключатьПодчиненные); Если ИмяРеквизита = 0 тогда Спр.ВыбратьЭлементы(Иерархия); Иначе Спр.ВыбратьЭлементыПоРеквизиту(ИмяРеквизита, ЗначениеРеквизита, Иерархия, ВключатьГруппы); КонецЕсли; Пока Спр.ПолучитьЭлемент() = 1 Цикл ТаблицаСпр.НоваяСтрока(); ТекущаяСтрока = ТаблицаСпр.НомерСтроки; Для НомерКолонки= 1 по ВсегоРеквизитовСпр Цикл ТаблицаСпр.УстановитьЗначение(ТекущаяСтрока, НомерКолонки, Спр.ПолучитьАтрибут(мдСпр.Реквизит(НомерКолонки))); КонецЦикла; ТаблицаСпр.Код = Спр.Код; ТаблицаСпр.Наименование = Спр.Наименование; Если ДобавлятьЭлементыСправочника = 1 тогда ТаблицаСпр.УстановитьЗначение(ТекущаяСтрока, "Элемент", Спр.ТекущийЭлемент()); КонецЕсли; КонецЦикла; Возврат ТаблицаСпр; КонецФункции