В обработке настроить макет отчета на СКД, по нажатию кнопки вывести отчет в табличный документ 08.01.22 08.01.22

Информация

Программный запуск отчета на скд https://wiki.programstore.ru/1s-skd-programmnyj-zapusk-otcheta-s-otkrytiem-i-nastrojkoj/

в тч программная установка параметров

 

Вот поиск "1С отчет СКД в обработке" google

Вот два решения

Вывод результата СКД в обработке http://disk1c.ru

 

СКД программно для обработки (не отчета) + программное восстановление значений полей из настроек для управляемых форм

Публикация № 255063, Александр Медведев (anig99) , Рейтинг: 2795 https://infostart.ru/1c/articles/255063/

 

 Делал по образцу, как в варианте 1, ничего не работало

http://disk1c.ru

Выводит ошибки

{Обработка.Обработка1.Форма.Форма.Форма(17,29)}: Ожидается выражение

Об = РеквизитФормыВЗначение(<<?>>«Объект»); (Проверка: Сервер)   // РСА Потому что нужны нормальные кавычки - такие ", а не такие "<<" ">>"

{Обработка.Обработка1.Форма.Форма.Форма(17,6)}: Недостаточно фактических параметров (РеквизитФормыВЗначение)

Об = <<?>>РеквизитФормыВЗначение(«Объект»); (Проверка: Сервер)

{Обработка.Обработка1.Форма.Форма.Форма(18,34)}: Ожидается выражение

 

 

­Когда первую фигню кода убрал, далее выводит ошибки:

{Обработка.Обработка1.Форма.Форма.Форма(18,34)}: Ожидается выражение

Схема = Обработка1.ПолучитьМакет(<<?>>«Макет»); (Проверка: Сервер)  // РСА Потому что надо Обработки.Обработка1.ПолучитьМакет("Макет")

{Обработка.Обработка1.Форма.Форма.Форма(18,34)}: Ожидается выражение

Схема = Обработка1.ПолучитьМакет(<<?>>«Макет»); (Проверка: Тонкий клиент)

 

 

 

 Правил код с учетом примера 2 - не выполнялось из-за клиент-серверных дел

&НаКлиенте

Процедура СформироватьОтчет(Команда)

// Вставить содержимое обработчика.

СформироватьНаСервере();

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

 

&НаСервере

Процедура СформироватьНаСервере()

 

// Об = РеквизитФормыВЗначение(«Объект»);

Схема = Обработки.Обработка1.ПолучитьМакет("Макет");

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

КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;

КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));

КомпоновщикНастроекДанных.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);

 

//Параметр = КомпоновщикНастроекДанных.Настройки.ПараметрыДанных.Элементы.Найти(«НекоторыйПараметр»);

//Параметр.Использование = Истина;

//Параметр.Значение = 12345;

 

//Очищаем поле табличного документа

Результат = Новый ТабличныйДокумент();

 

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

Макет = КомпоновщикМакета.Выполнить(Схема, КомпоновщикНастроекДанных.ПолучитьНастройки());

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(Макет);

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

 

// Результат.Очистить();

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

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Результат.ОтображатьЗаголовки = Ложь; // РСА ДОбавил, т. к. ничего иначе не выводилось

Результат.ОтображатьСетку = Ложь;

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

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

 

 

Выводило ошибку:

Метод недоступен на сервере

{Обработка.Обработка1.Форма.Форма.Форма(43)}:Результат.Показать();

{Обработка.Обработка1.Форма.Форма.Форма(10)}:СформироватьНаСервере();

по причине:

Метод недоступен на сервере

 

Вот такое решение нашлось

Вот пишут https://forum.infostart.ru/forum9/topic164064/

13. antz 16.12.16 14:43

Формируйте табличный документ на сервере в функции и возвращайте на клиент, делов-то.


&НаКлиенте

Процедура Сформировать(Команда)

Табдок().Показать()

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

 

&НаСервере

Функция ТабДок()

Результат = Новый ТабличныйДокумент;

Результат.Область(1,1,1,1).Текст = "Ура, получилось!";

Возврат Результат

КонецФункции //()

 

Исходный вопрос был такой:

Вот исходный вопрос

ТабДок.Показать() в управляемом приложении

1С:Бухгалтерия 3.0 Платформа 1С v8.3

1. Новичок1с 4 15.12.16 19:41


Конфигурация- управление ЖКХ, управляемое приложение.
Есть стандартный отчёт, где данные выводятся в табличный документ.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Сформировать(ДокументРезультат);
КонецПроцедуры
//это работает- ТабДокумент выводиться
Процедура Сформировать(ТабДокумент)
Макет = ПолучитьМакет("Макет");
    ТабДокумент.Очистить();   

......//различные запросы для вывода данных

ТабДокумент.Вывести(ОбластьПодвал);


Пытаюсь сделать на клиенте ТабДокумент.Показать(), к сожалению вообще ничего не получается.

//это не получается
&НаКлиенте
Процедура Печать1()
    ТабДокумент = Новый ТабличныйДокумент;

    Сформировать(ТабДокумент);

    ТабДокумент.Показать("Тест");
КонецПроцедуры

Хотелось бы иметь возможность редактировать печатную форму табличного документа. Подскажите пожалуйста, как правильно обратиться к этому табличному документу из другой процедуры или функции. Благодарю за помощь.

 

 Итоговый код, который по нажатию кнопки в обработке выводит отчет на СКД в табличный документ.

Пример из учебной базы

В учебной базе в обработке в макетах сделан макет отчета на СКД. Далее код, который по нажатию кнопки выводит отчет в табличный документ.

 // Перем Результат; // Сюда выводим табличный документ отчета.. Это объявление вроде не нужное, но пока мучился - писало, что переменная не определена

 

&НаКлиенте

Процедура СформироватьОтчет(Команда)

СформироватьНаСервере().Показать();    // Результат=СформироватьНаСервере(); Результат.Показать(); - не работало!

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

 

&НаСервере

Функция СформироватьНаСервере()

Схема = Обработки.Обработка1.ПолучитьМакет("Макет");

Настройки = Схема.НастройкиПоУмолчанию;  // Не  нужная строка, далее напрямую написано: "ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);"

КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;

КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));

КомпоновщикНастроекДанных.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);

Результат = Новый ТабличныйДокумент();

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

Макет = КомпоновщикМакета.Выполнить(Схема, КомпоновщикНастроекДанных.ПолучитьНастройки());

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(Макет);

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


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

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Возврат(Результат);

КонецФункции   // КонецПроцедуры - с процедурой не работало. Процедура должна сохранить результат в реквизит формы или в объявленную переменную, что ли?


 

Остались вопросы

ЗначениеВРеквизитФормы - что такое?

Об = РеквизитФормыВЗначение(«Объект»); - что такое в исходном примере?

 

По кнопке вызывается функция на сервере, которая возвращает табличный документ, к которому сразу применяется "Показать()".

А если бы была процедура на сервере, тогда процедура должна была бы сохранить результат в реквизит формы или в объявленную переменную, что ли?  И как потом управление передалось бы на форму, чтобы на форме вывести полученный результат?

 

По примеру вопросы:

В этом примере https://forum.infostart.ru/forum9/topic164064/ используется:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Сформировать(ДокументРезультат);
КонецПроцедуры

Что за процедуре "ПриКомпоновкеРезультата"? Это для Объект.Отчет? А если отчет сделан как макет внутри обработки, оно будет работать?



"ТабличныйДокумент" может быть:

переменной, созданной "на сервере"?

реквизитом формы?



"Либо вызовите контекст НаСервере и сформируйте Табличный документ там, либо попробуйте запихнуть во временное хранилище, вынуть и показать то, что вынули) " - ничего не понятно!