Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:13

Отчет СКД с параметрами из ТЧ

Автор Artjomrgv, 15 сен 2016, 18:34

0 Пользователей и 1 гость просматривают эту тему.

Artjomrgv

Добрый вечер, коллеги. Есть документ, в документе есть кнопка "История платежей", хочу сделать чтобы при нажатии кнопки "история платежей" формировался отчет СКД, а параметр договор должен передаваться из текущей строки табличной части. Может у кого есть готовый пример, буду очень благодарен.

LexaK

была такая примерная задача, при нахождении на какой-то строке в ТЧ, сформировать отчет СКД с параметрами из этой строки.
Вот пример, адаптируйте его под свою задачу
Примечание используется в БП30, есть процедуры из общих модулей по настройке отчета.
(это просто кусок кода из реальной обработки)

&НаКлиенте
Процедура КомандаРасшифровка(Команда)
//Отчет по одному Контрагент - Договор

лкТекСтрока = Элементы.тзДанные.ТекущиеДанные;
Если лкТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;

//переделано на вывод в закладку с отчетом
//лкТаб = Новый ТабличныйДокумент;
//лкТаб.ТолькоПросмотр = Истина;
ПараметрыОтчета = Новый Структура();
ПараметрыОтчета.Вставить("Организация", Организация);
ПараметрыОтчета.Вставить("ГруппаЭквант", ГруппаКонтрагентов);
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("Контрагент", лкТекСтрока.Контрагент);
ПараметрыОтбора.Вставить("Договор", лкТекСтрока.Договор);

СформироватьОтчетНаСервере("ОсновнаяСхемаКомпоновкиДанных", ПараметрыОтчета, ПараметрыОтбора);
Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Отчет;
//лкТаб.Показать();

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

&НаСервере
Процедура СформироватьОтчетНаСервере(лкИмяСКД, лкПараметры = 0, лкОтбор = 0, лкВнешниеДанные = 0)

УстановитьПривилегированныйРежим(Истина);

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

лкСКД = лкОтчет.ПолучитьМакет(лкИмяСКД);
лкВариант = лкСкд.ВариантыНастроек.Основной;
лкНастройки = лкВариант.Настройки;

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

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

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

// Помещаем в переменную данные о расшифровке данных.
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

// Формируем макет, с помощью компоновщика макета.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

тдОтчет.Очистить();

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

АдресДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор);

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

УстановитьПривилегированныйРежим(Ложь);

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

если помогло нажмите: Спасибо!

Artjomrgv


Теги: 1С 8.3 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск