20 мар. 2013 г.

СКД: делаем свой вывод списка в форме

Все мы знаем про такую команду списка в форме, как "Вывести список". К сожалению она является встроенной и переопределить ее нельзя, а было бы неплохо внести какие либо изменения в выходной результат, либо дополнить его своими данными. Тем не менее, варианты есть.
Поделюсь своим рецептом создания в управляемом приложении собственного вывода списка, с заголовком и отбором, если таковой установлен через команду формы "Настроить список".

Процесс создания разберу на примере списка документов "Заявки контрагентов" моей тестовой конфигурации. Используя команду "Вывести список" меню "Все действия" списка


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


Начнем с того, что добавим макет компоновки данных "Список" в документ ЗаявкиКонтрагентов. Запрос для источника данных будет простой, ничего лишнего:

ВЫБРАТЬ
 ЗаявкиКонтрагентов.Ссылка,
 ЗаявкиКонтрагентов.ВерсияДанных,
 ЗаявкиКонтрагентов.ПометкаУдаления,
 ЗаявкиКонтрагентов.Номер,
 ЗаявкиКонтрагентов.Дата,
 ЗаявкиКонтрагентов.Проведен,
 ЗаявкиКонтрагентов.Контрагент
ИЗ
 Документ.ЗаявкиКонтрагентов КАК ЗаявкиКонтрагентов 

Теперь настраиваем наш список, оставляем поля Дата, Номер, Контрагент, аналогично полям в нашей форме списка документов. На вкладке "Другие настройки" прописываем заголовок отчета "Реестр заказов".


Теперь создадим форму списка для документа "Заказ покупателя". Добавим команду "ПечатьСписка" и разместим ее в командной панели формы.


Код модуля формы:

&НаСервере
Функция ПечатьСпискаСервер()

 //настройка компоновки вынесена в модуль менеджера документа
 //в функцию настройки компоновки передаем отбор динамического списка
 Возврат Документы.ЗаявкиКонтрагентов.ПечатьСпискаКомпоновка(Список.Отбор);

КонецФункции // ПечатьСпискаСервер()

&НаКлиенте
Процедура ПечатьСписка(Команда)
 
 ТабДок = ПечатьСпискаСервер();
 ТабДок.ТолькоПросмотр = Истина;
 ТабДок.ОтображатьСетку = Ложь;
 ТабДок.ОтображатьЗаголовки = Ложь;
 ТабДок.Показать();
 
КонецПроцедуры
 
Код модуля менеджера документа:

Функция ПечатьСпискаКомпоновка(ОтборКомпоновка) Экспорт
 
 Результат = Новый ТабличныйДокумент;
 
 СхемаКомпоновки  = ПолучитьМакет("Список");
 КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
 ОтборПоУмолчанию = СхемаКомпоновки.НастройкиПоУмолчанию.Отбор;
 
 Для Каждого Элемент Из ОтборКомпоновка.Элементы Цикл
  ЭлементОтбор = ОтборПоУмолчанию.Элементы.Добавить(Тип(Элемент));
  ЗаполнитьЗначенияСвойств(ЭлементОтбор, Элемент);
 КонецЦикла;
 
 МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, СхемаКомпоновки.НастройкиПоУмолчанию);
 
 ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
 ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
 
 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 ПроцессорВывода.УстановитьДокумент(Результат);
 
 ПроцессорВывода.Вывести(ПроцессорКомпоновки);  
 
 Возврат Результат;
 
КонецФункции 

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


Выгрузка конфигурации (cf)

1 комментарий: