СКД в управляемых формах

Который день бъюсь с программным выводом СКД в управляемых формах.

Есть документ ПутевойЛист, в нем создан макет типа СКД ПечатьПутевки.

В СКД добавлен  набор данных типа объект. Источником является таблица значений Заправка

В настройках СКД, определены группировки и поля

В форме документа создана команда ПоказатьЗаправку с процедурой

&НаКлиенте

Процедура ПоказатьЗаправку(Команда)

ПечатьЗаправки();

КонецПроцедуры

В процедуре ПечатьЗаправки(); получаем данные в тз Заправка и програмно выводим в СКД

&НаСервере

Процедура ПечатьЗаправки()

Заправка=ЧтениеРегистраСведений.ЗапросЗаправки(Объект.Ссылка);

ВнНбДн = Новый Структура;КомпМак=Новый КомпоновщикМакетаКомпоновкиДанных;

ПроцКД=Новый ПроцессорКомпоновкиДанных;Рез=Новый ТабличныйДокумент;

ПроцВД=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ВнНбДн.Вставить(“Заправка”,Заправка);

СхКпДн=Документы.ПутевойЛист.ПолучитьМакет(“ПечатьПутевки”);

Нст=СхКпДн.НастройкиПоУмолчанию;

МакКомп=КомпМак.Выполнить(СхКпДн,Нст);

ПроцКД.Инициализировать(МакКомп,ВнНбДн);

ПроцВД.УстановитьДокумент(Рез);

ПроцВД.Вывести(ПроцКД);

Рез.Показать();

КонецПроцедуры

Функция получения данных в тз Заправка выглядит следующим образом

&НаСервере

Функция ЗапросЗаправки(Док)   Экспорт

Запрос = Новый Запрос;

Запрос.Текст =  “ВЫБРАТЬ

| ДвижениеТопливаОбороты.КарточкаЗаравки КАК КарточкаЗаправки,

| ДвижениеТопливаОбороты.ТопливоПриход КАК Заправка,

| ДвижениеТопливаОбороты.СтоимостьЗаправкиПриход КАК СтоимостьЗаправки

|ИЗ

| РегистрНакопления.ДвижениеТоплива.Обороты КАК ДвижениеТопливаОбороты”;

Результат = Запрос.Выполнить();

тз=Результат.Выгрузить();

Возврат тз;

КонецФункции

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

Перерыл почти весь инет ничего вразумительного не нашел.

 

 

 

Подписаться
Уведомить о
guest
17 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Данилюк Андрей
Данилюк Андрей
12 лет назад

Когда я реализовывал отчет с внешним набором данных, то пользовался процедурой в модуле отчета ПриКомпоновкеРезультата
в ней выполняется такой код:
СтандартнаяОбработка = Ложь;
ВнешниеДанные = ПолучитьДанныеВнешнихНаборов(ДатаОтчета, СписокРегионов);
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, Новый Структура(“ОтветственныеАптеки”,ВнешниеДанные));
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
_______
ПолучитьДанныеВнешнихНаборов – функция возвращает таблицу значений

R1A1
R1A1
12 лет назад

А из документа что не возможно сделать программно отчет?

Данилюк Андрей
Данилюк Андрей
12 лет назад

Извините, невнимательно прочитал первый

Головаченко Дима
Головаченко Дима
12 лет назад

Возможно, что проблема кроется в этой строчке:
СхКпДн=Документы.ПутевойЛист.ПолучитьМакет(«ПечатьПутевки»);
Попробуйте ее заменить на:
СхКпДн=ЭтотОбъект.ПолучитьМакет(«ПечатьПутевки»); //если печать вызывается из документа
ИЛИ
СхКпДн=ДокументСсылка.ПолучитьМакет(«ПечатьПутевки»); //где ДокументСсылка – это ссылка на документ ПутевойЛист

R1A1
R1A1
12 лет назад

К сожалению, в управляемых формах это называется просто Объект, но опять же при запуске ошибка Метод объекта не обнаружен (Получитьмакет) и это логично так как форма ничего не знает о макете.

Головаченко Дима
Головаченко Дима
12 лет назад

Под понятием “отчет не выводится” вы имете ввиду:
1. Показывается пустой Табличный документ;
2. Показывается Табличный документ с оформлением СКД, но без данных;
3. Другое.
?

R1A1
R1A1
12 лет назад

3. Другое – ничего не показывается ни пустого ни оформленного. Полное игнорирование команды.

Данилюк Андрей
Данилюк Андрей
12 лет назад

А…. вот в чем дело. В общем тогда подход такой:
В управляемой форме вы определяете реквизит типа ТабличныйДокумент. Ему определяете элемент управления, в котором он будет выводится.
Теперь ваша процедура формирования на сервере табличного документа должна не вызывать Показать(), а присваивать вашему реквизиту это значение. Управляемая форма при изменении значения реквизита сама должна его обновить и показать.

R1A1
R1A1
12 лет назад

А вот это уже интересно!
Счас буду пробовать. Не уходите далеко

R1A1
R1A1
12 лет назад

Получилось. Большое спасибо. Вы меня выручили!
Только вопрос остался а как это все в печатную форму вывести?

Данилюк Андрей
Данилюк Андрей
12 лет назад

Посмотрите на примере конфигурации “Управление небольшой фирмой”. Там есть общая форма, в которую табличные документы выводятся на печать. Во время получения форму в качестве параметров (тип структура) передается сам таб док. А уже эта общая форма его показывает. По-моему так, если ничего не путаю.

R1A1
R1A1
12 лет назад

конфигурация «Управление небольшой фирмой». – извините сразу не соображу – это где взять?

Данилюк Андрей
Данилюк Андрей
12 лет назад

Она была по-моему на диске ИТС, так же в ранних версиях платформы 8.2 вместе с платформой шла демонстрационная база.
Когда книг не было по этой версии платформы, демо-базы были очень хорошим подспорьем в изучении.

R1A1
R1A1
12 лет назад

Когда я реализовывал отчет с внешним набором данных, то пользовался процедурой в модуле отчета ПриКомпоновкеРезультата –
1. это в модуле формы или модуле объекта
2. ПриКомпоновкеРезультата – это предопределенная процедура, что-то в модуле формы такой не нашел.

Данилюк Андрей
Данилюк Андрей
12 лет назад

Это в модуле отчета. В модуле формы такого нет.

R1A1
R1A1
12 лет назад

По отчету:
получается, что система сама подставляет значения в ДокументРезультат и СхемаКомпоновкиДанных.
А вот ДанныеРасшифровки как туда запихнуть?

Данилюк Андрей
Данилюк Андрей
12 лет назад

Советую прочитать книгу Хрусталевой по разработке отчетов в СКД.