Не формируется отчет (СКД) с настройками, переданными программно
Добрый день. (Конфигурация Зарплата и Управление Персоналом, редакция 2.5 (2.5.113.1), Платформа 1С:Предприятие 8.3 (8.3.8.2197))
Не удается программно сформировать типовой отчет Расчетные листки. Необходимо открывать сформированный отчет из документа Зарплата к выплате. Отчет должен выводить данные для сотрудников из табличной части документа Зарплата к выплате. В настройки в качестве ПараметровДанных передаются "НачалоПериода" и "КонецПериода", в Отбор передается "Сотрудник".
Мой код:
В итоге просто открывается форма отчета, игнорируя мою настройку. Подскажите, что не так делаю.
Не удается программно сформировать типовой отчет Расчетные листки. Необходимо открывать сформированный отчет из документа Зарплата к выплате. Отчет должен выводить данные для сотрудников из табличной части документа Зарплата к выплате. В настройки в качестве ПараметровДанных передаются "НачалоПериода" и "КонецПериода", в Отбор передается "Сотрудник".
Мой код:
тОтчет = Отчеты.РасчетныеЛистки.Создать();
НастройкиКД = тОтчет.КомпоновщикНастроек.ПолучитьНастройки();
НастройкиКД.ПараметрыДанных.Элементы.Найти("НачалоПериода").Значение = '20161111000000';
НастройкиКД.ПараметрыДанных.Элементы.Найти("КонецПериода").Значение = '20161111235959';
ПолеОтбора = Новый ПолеКомпоновкиДанных("Сотрудник");
ОтборыКомпановщика = НастройкиКД.Отбор.Элементы;
Для каждого Стр Из ОтборыКомпановщика Цикл
Если Стр.ЛевоеЗначение = ПолеОтбора Тогда
Отбор = Стр;
Прервать;
КонецЕсли;
КонецЦикла;
Если Отбор = Неопределено Тогда
Отбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = ПолеОтбора;
КонецЕсли;
Если СотрудникОтбор <> Неопределено Тогда
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.Использование = Истина;
Отбор.ПравоеЗначение = СотрудникОтбор; // СотрудникОтбор - полученный ранее из таб части сотрудник
Иначе
Отбор.Использование = Ложь;
КонецЕсли;
тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
тФорма = тОтчет.ПолучитьФорму("ФормаОтчета");
тОтчет.СформироватьОтчет(тФорма.ЭлементыФормы.Результат);
тФорма.Открыть();
ПоказатьВ итоге просто открывается форма отчета, игнорируя мою настройку. Подскажите, что не так делаю.
По теме из базы знаний
- Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов
- Универсальный конструктор отчетов СКД (управляемые формы, тонкий клиент)
- Программная работа с настройками СКД
- Быстрый фронт в базе размером 8.8 терабайт – наши стандарты при разработке компонентов системы
- Фоновое формирование дополнительного отчета БСП
Найденные решения
(2)
(3)
(5)
Спасибо всем за участие и помощь. В итоге у меня получился такой код. Он не идеален, но работает:
(3)
(5)
Спасибо всем за участие и помощь. В итоге у меня получился такой код. Он не идеален, но работает:
тОтчет = Отчеты.РасчетныеЛистки.Создать();
тФорма = тОтчет.ПолучитьФорму("ФормаОтчета");
тФорма.Открыть();
// вырвано из Отчет.РасчетныеЛистки.МодульОбъекта Процедура ПрименитьНастройку() Экспорт
Схема = ТиповыеОтчеты.ПолучитьСхемуКомпоновкиОбъекта(тОтчет);
// Считывание структуры настроек отчета
Если Не тОтчет.СохраненнаяНастройка.Пустая() Тогда
СтруктураНастроек = тОтчет.СохраненнаяНастройка.ХранилищеНастроек.Получить();
Если Не СтруктураНастроек = Неопределено Тогда
тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(СтруктураНастроек.НастройкиКомпоновщика);
ЗаполнитьЗначенияСвойств(тОтчет, СтруктураНастроек);
Иначе
тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
КонецЕсли;
Иначе
тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
КонецЕсли;
// вырвано
// Загружаем в тОтчет, введенные ранее пользователем, настройки отборов, параметров - ЗначенияНастроекПанелиПользователя
ТиповыеОтчеты.ПрименитьНастройкуПользователяНастройкиОтчета(тОтчет);
// Выгружаем ЗначенияНастроекПанелиПользователя
ЗначенияНастроек = ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователяОбъекта(тОтчет);
СписокСотрудников = ЗначенияНастроек.ДинамическиеОтборы.Получить("Сотрудник");
//МассивСотрудников - массив сотрудников полученный ранее из таб части документа "Зарплата к выплате"
СписокСотрудников.Значение.ЗагрузитьЗначения(МассивСотрудников);
//СсылкаНаОбъект.Дата - дата документа "Зарплата к выплате"
ЗначенияНастроек.СтандартныйПериод.ДатаНачала = НачалоМесяца(СсылкаНаОбъект.Дата);
ЗначенияНастроек.СтандартныйПериод.ДатаОкончания = КонецМесяца(СсылкаНаОбъект.Дата);
тОтчет.ЗначенияНастроекПанелиПользователя = Новый ХранилищеЗначения(ЗначенияНастроек);
тОтчет.СформироватьОтчет(тФорма.ЭлементыФормы.Результат);
тФорма.РежимРедактированияНастройки = Истина;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ЗУПа 2.5 у меня нет, без кода могу предположить, что будет достаточно перенести заполнение параметров и отбора в модуль отчета ПриКомпоновкеРезультата().
А в целом надо смотреть как заполняются настройки, в том числе пользовательские, не затираются ли они в процедуре СформироватьОтчет().
А в целом надо смотреть как заполняются настройки, в том числе пользовательские, не затираются ли они в процедуре СформироватьОтчет().
(2)
(3)
(5)
Спасибо всем за участие и помощь. В итоге у меня получился такой код. Он не идеален, но работает:
(3)
(5)
Спасибо всем за участие и помощь. В итоге у меня получился такой код. Он не идеален, но работает:
тОтчет = Отчеты.РасчетныеЛистки.Создать();
тФорма = тОтчет.ПолучитьФорму("ФормаОтчета");
тФорма.Открыть();
// вырвано из Отчет.РасчетныеЛистки.МодульОбъекта Процедура ПрименитьНастройку() Экспорт
Схема = ТиповыеОтчеты.ПолучитьСхемуКомпоновкиОбъекта(тОтчет);
// Считывание структуры настроек отчета
Если Не тОтчет.СохраненнаяНастройка.Пустая() Тогда
СтруктураНастроек = тОтчет.СохраненнаяНастройка.ХранилищеНастроек.Получить();
Если Не СтруктураНастроек = Неопределено Тогда
тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(СтруктураНастроек.НастройкиКомпоновщика);
ЗаполнитьЗначенияСвойств(тОтчет, СтруктураНастроек);
Иначе
тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
КонецЕсли;
Иначе
тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
КонецЕсли;
// вырвано
// Загружаем в тОтчет, введенные ранее пользователем, настройки отборов, параметров - ЗначенияНастроекПанелиПользователя
ТиповыеОтчеты.ПрименитьНастройкуПользователяНастройкиОтчета(тОтчет);
// Выгружаем ЗначенияНастроекПанелиПользователя
ЗначенияНастроек = ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователяОбъекта(тОтчет);
СписокСотрудников = ЗначенияНастроек.ДинамическиеОтборы.Получить("Сотрудник");
//МассивСотрудников - массив сотрудников полученный ранее из таб части документа "Зарплата к выплате"
СписокСотрудников.Значение.ЗагрузитьЗначения(МассивСотрудников);
//СсылкаНаОбъект.Дата - дата документа "Зарплата к выплате"
ЗначенияНастроек.СтандартныйПериод.ДатаНачала = НачалоМесяца(СсылкаНаОбъект.Дата);
ЗначенияНастроек.СтандартныйПериод.ДатаОкончания = КонецМесяца(СсылкаНаОбъект.Дата);
тОтчет.ЗначенияНастроекПанелиПользователя = Новый ХранилищеЗначения(ЗначенияНастроек);
тОтчет.СформироватьОтчет(тФорма.ЭлементыФормы.Результат);
тФорма.РежимРедактированияНастройки = Истина;
Показать
(3) прошу прощения, не указал, что база тоже ЗУП КОРП. По заданию нужно использовать отчет Расчетные листки. Но попробовал изменить на отчет РасчетныеЛисткиОрганизаций, по-прежнему не работает. Открывается отчет с параметрами и отбором, указанными в последний раз пользователем..
Делал не много другую задачу, нужно было реализовать СКД на мобильной платформе - параметры устанавливал следующим образом:
1. Получал макет схемы компоновки данных
2. Получал текущие настройки варианта отчета: НастройкиСКД = МакетСКД.ВариантыНастроек.Основной.Настройки;
3. Далее устанавливал методом: НастройкиСКД.ПараметрыДанных.УстановитьЗначениеПарамера("ИмяПараметра", ЗначениеПараметра);
1. Получал макет схемы компоновки данных
2. Получал текущие настройки варианта отчета: НастройкиСКД = МакетСКД.ВариантыНастроек.Основной.Настройки;
3. Далее устанавливал методом: НастройкиСКД.ПараметрыДанных.УстановитьЗначениеПарамера("ИмяПараметра", ЗначениеПараметра);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот