СКД в управляемых формах
Который день бъюсь с программным выводом СКД в управляемых формах.
Есть документ ПутевойЛист, в нем создан макет типа СКД ПечатьПутевки.
В СКД добавлен набор данных типа объект. Источником является таблица значений Заправка
В настройках СКД, определены группировки и поля
В форме документа создана команда ПоказатьЗаправку с процедурой
&НаКлиенте
Процедура ПоказатьЗаправку(Команда)
ПечатьЗаправки();
КонецПроцедуры
В процедуре ПечатьЗаправки(); получаем данные в тз Заправка и програмно выводим в СКД
&НаСервере
Процедура ПечатьЗаправки()
Заправка=ЧтениеРегистраСведений.ЗапросЗаправки(Объект.Ссылка);
ВнНбДн = Новый Структура;КомпМак=Новый КомпоновщикМакетаКомпоновкиДанных;
ПроцКД=Новый ПроцессорКомпоновкиДанных;Рез=Новый ТабличныйДокумент;
ПроцВД=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ВнНбДн.Вставить(“Заправка”,Заправка);
СхКпДн=Документы.ПутевойЛист.ПолучитьМакет(“ПечатьПутевки”);
Нст=СхКпДн.НастройкиПоУмолчанию;
МакКомп=КомпМак.Выполнить(СхКпДн,Нст);
ПроцКД.Инициализировать(МакКомп,ВнНбДн);
ПроцВД.УстановитьДокумент(Рез);
ПроцВД.Вывести(ПроцКД);
Рез.Показать();
КонецПроцедуры
Функция получения данных в тз Заправка выглядит следующим образом
&НаСервере
Функция ЗапросЗаправки(Док) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
| ДвижениеТопливаОбороты.КарточкаЗаравки КАК КарточкаЗаправки,
| ДвижениеТопливаОбороты.ТопливоПриход КАК Заправка,
| ДвижениеТопливаОбороты.СтоимостьЗаправкиПриход КАК СтоимостьЗаправки
|ИЗ
| РегистрНакопления.ДвижениеТоплива.Обороты КАК ДвижениеТопливаОбороты”;
Результат = Запрос.Выполнить();
тз=Результат.Выгрузить();
Возврат тз;
КонецФункции
На первый взгляд я не нахожу ошибок, но отчет при нажатии кнопки ПоказатьЗаправку не выводится.
Перерыл почти весь инет ничего вразумительного не нашел.
Когда я реализовывал отчет с внешним набором данных, то пользовался процедурой в модуле отчета ПриКомпоновкеРезультата
в ней выполняется такой код:
СтандартнаяОбработка = Ложь;
ВнешниеДанные = ПолучитьДанныеВнешнихНаборов(ДатаОтчета, СписокРегионов);
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, Новый Структура(“ОтветственныеАптеки”,ВнешниеДанные));
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
_______
ПолучитьДанныеВнешнихНаборов – функция возвращает таблицу значений
А из документа что не возможно сделать программно отчет?
Извините, невнимательно прочитал первый
Возможно, что проблема кроется в этой строчке:
СхКпДн=Документы.ПутевойЛист.ПолучитьМакет(«ПечатьПутевки»);
Попробуйте ее заменить на:
СхКпДн=ЭтотОбъект.ПолучитьМакет(«ПечатьПутевки»); //если печать вызывается из документа
ИЛИ
СхКпДн=ДокументСсылка.ПолучитьМакет(«ПечатьПутевки»); //где ДокументСсылка – это ссылка на документ ПутевойЛист
К сожалению, в управляемых формах это называется просто Объект, но опять же при запуске ошибка Метод объекта не обнаружен (Получитьмакет) и это логично так как форма ничего не знает о макете.
Под понятием “отчет не выводится” вы имете ввиду:
1. Показывается пустой Табличный документ;
2. Показывается Табличный документ с оформлением СКД, но без данных;
3. Другое.
?
3. Другое – ничего не показывается ни пустого ни оформленного. Полное игнорирование команды.
А…. вот в чем дело. В общем тогда подход такой:
В управляемой форме вы определяете реквизит типа ТабличныйДокумент. Ему определяете элемент управления, в котором он будет выводится.
Теперь ваша процедура формирования на сервере табличного документа должна не вызывать Показать(), а присваивать вашему реквизиту это значение. Управляемая форма при изменении значения реквизита сама должна его обновить и показать.
А вот это уже интересно!
Счас буду пробовать. Не уходите далеко
Получилось. Большое спасибо. Вы меня выручили!
Только вопрос остался а как это все в печатную форму вывести?
Посмотрите на примере конфигурации “Управление небольшой фирмой”. Там есть общая форма, в которую табличные документы выводятся на печать. Во время получения форму в качестве параметров (тип структура) передается сам таб док. А уже эта общая форма его показывает. По-моему так, если ничего не путаю.
конфигурация «Управление небольшой фирмой». – извините сразу не соображу – это где взять?
Она была по-моему на диске ИТС, так же в ранних версиях платформы 8.2 вместе с платформой шла демонстрационная база.
Когда книг не было по этой версии платформы, демо-базы были очень хорошим подспорьем в изучении.
Когда я реализовывал отчет с внешним набором данных, то пользовался процедурой в модуле отчета ПриКомпоновкеРезультата –
1. это в модуле формы или модуле объекта
2. ПриКомпоновкеРезультата – это предопределенная процедура, что-то в модуле формы такой не нашел.
Это в модуле отчета. В модуле формы такого нет.
По отчету:
получается, что система сама подставляет значения в ДокументРезультат и СхемаКомпоновкиДанных.
А вот ДанныеРасшифровки как туда запихнуть?
Советую прочитать книгу Хрусталевой по разработке отчетов в СКД.