Не формируется отчет (СКД) с настройками, переданными программно

1. Sunderland 24.01.17 12:35 Сейчас в теме
Добрый день. (Конфигурация Зарплата и Управление Персоналом, редакция 2.5 (2.5.113.1), Платформа 1С:Предприятие 8.3 (8.3.8.2197))
Не удается программно сформировать типовой отчет Расчетные листки. Необходимо открывать сформированный отчет из документа Зарплата к выплате. Отчет должен выводить данные для сотрудников из табличной части документа Зарплата к выплате. В настройки в качестве ПараметровДанных передаются "НачалоПериода" и "КонецПериода", в Отбор передается "Сотрудник".
Мой код:
 
    тОтчет = Отчеты.РасчетныеЛистки.Создать();
    НастройкиКД = тОтчет.КомпоновщикНастроек.ПолучитьНастройки();
    НастройкиКД.ПараметрыДанных.Элементы.Найти("НачалоПериода").Значение = '20161111000000';
    НастройкиКД.ПараметрыДанных.Элементы.Найти("КонецПериода").Значение = '20161111235959';    
    ПолеОтбора = Новый ПолеКомпоновкиДанных("Сотрудник");
    ОтборыКомпановщика = НастройкиКД.Отбор.Элементы;
    
        Для каждого Стр Из ОтборыКомпановщика Цикл
            Если Стр.ЛевоеЗначение = ПолеОтбора Тогда
                Отбор = Стр;
                Прервать;
            КонецЕсли;
        КонецЦикла;
    
        Если Отбор = Неопределено Тогда
            Отбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            Отбор.ЛевоеЗначение  = ПолеОтбора;
        КонецЕсли;                             
    
        Если СотрудникОтбор <> Неопределено Тогда
            Отбор.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
            Отбор.Использование  = Истина;
            Отбор.ПравоеЗначение  = СотрудникОтбор; // СотрудникОтбор - полученный ранее из таб части сотрудник
        Иначе
            Отбор.Использование  = Ложь;
        КонецЕсли;

    тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
    тФорма = тОтчет.ПолучитьФорму("ФормаОтчета");
    тОтчет.СформироватьОтчет(тФорма.ЭлементыФормы.Результат);
    тФорма.Открыть();
Показать


В итоге просто открывается форма отчета, игнорируя мою настройку. Подскажите, что не так делаю.
По теме из базы знаний
Найденные решения
6. Sunderland 30.01.17 15:02 Сейчас в теме
(2)
(3)
(5)
Спасибо всем за участие и помощь. В итоге у меня получился такой код. Он не идеален, но работает:

тОтчет = Отчеты.РасчетныеЛистки.Создать();
	тФорма = тОтчет.ПолучитьФорму("ФормаОтчета");
	тФорма.Открыть();
	
	// вырвано из Отчет.РасчетныеЛистки.МодульОбъекта Процедура ПрименитьНастройку() Экспорт 
	Схема = ТиповыеОтчеты.ПолучитьСхемуКомпоновкиОбъекта(тОтчет);
	
	// Считывание структуры настроек отчета
	Если Не тОтчет.СохраненнаяНастройка.Пустая() Тогда
		
		СтруктураНастроек = тОтчет.СохраненнаяНастройка.ХранилищеНастроек.Получить();
		Если Не СтруктураНастроек = Неопределено Тогда
			тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(СтруктураНастроек.НастройкиКомпоновщика);
			ЗаполнитьЗначенияСвойств(тОтчет, СтруктураНастроек);
		Иначе
			тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
		КонецЕсли;
		
	Иначе
		тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
	КонецЕсли;
	// вырвано
	
	// Загружаем в тОтчет, введенные ранее пользователем, настройки отборов, параметров - ЗначенияНастроекПанелиПользователя
	ТиповыеОтчеты.ПрименитьНастройкуПользователяНастройкиОтчета(тОтчет);
	
	// Выгружаем ЗначенияНастроекПанелиПользователя
	ЗначенияНастроек = ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователяОбъекта(тОтчет); 
	
	СписокСотрудников = ЗначенияНастроек.ДинамическиеОтборы.Получить("Сотрудник");
	
	//МассивСотрудников - массив сотрудников полученный ранее из таб части документа "Зарплата к выплате"
	СписокСотрудников.Значение.ЗагрузитьЗначения(МассивСотрудников);
	
	//СсылкаНаОбъект.Дата - дата документа "Зарплата к выплате"
	ЗначенияНастроек.СтандартныйПериод.ДатаНачала =  НачалоМесяца(СсылкаНаОбъект.Дата); 
	ЗначенияНастроек.СтандартныйПериод.ДатаОкончания = КонецМесяца(СсылкаНаОбъект.Дата);
	
	тОтчет.ЗначенияНастроекПанелиПользователя = Новый ХранилищеЗначения(ЗначенияНастроек);
	
	тОтчет.СформироватьОтчет(тФорма.ЭлементыФормы.Результат);
		
	тФорма.РежимРедактированияНастройки = Истина;
Показать
user645982_karazumeiko; user811769; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Liyа 24.01.17 14:23 Сейчас в теме
ЗУПа 2.5 у меня нет, без кода могу предположить, что будет достаточно перенести заполнение параметров и отбора в модуль отчета ПриКомпоновкеРезультата().
А в целом надо смотреть как заполняются настройки, в том числе пользовательские, не затираются ли они в процедуре СформироватьОтчет().
6. Sunderland 30.01.17 15:02 Сейчас в теме
(2)
(3)
(5)
Спасибо всем за участие и помощь. В итоге у меня получился такой код. Он не идеален, но работает:

тОтчет = Отчеты.РасчетныеЛистки.Создать();
	тФорма = тОтчет.ПолучитьФорму("ФормаОтчета");
	тФорма.Открыть();
	
	// вырвано из Отчет.РасчетныеЛистки.МодульОбъекта Процедура ПрименитьНастройку() Экспорт 
	Схема = ТиповыеОтчеты.ПолучитьСхемуКомпоновкиОбъекта(тОтчет);
	
	// Считывание структуры настроек отчета
	Если Не тОтчет.СохраненнаяНастройка.Пустая() Тогда
		
		СтруктураНастроек = тОтчет.СохраненнаяНастройка.ХранилищеНастроек.Получить();
		Если Не СтруктураНастроек = Неопределено Тогда
			тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(СтруктураНастроек.НастройкиКомпоновщика);
			ЗаполнитьЗначенияСвойств(тОтчет, СтруктураНастроек);
		Иначе
			тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
		КонецЕсли;
		
	Иначе
		тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
	КонецЕсли;
	// вырвано
	
	// Загружаем в тОтчет, введенные ранее пользователем, настройки отборов, параметров - ЗначенияНастроекПанелиПользователя
	ТиповыеОтчеты.ПрименитьНастройкуПользователяНастройкиОтчета(тОтчет);
	
	// Выгружаем ЗначенияНастроекПанелиПользователя
	ЗначенияНастроек = ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователяОбъекта(тОтчет); 
	
	СписокСотрудников = ЗначенияНастроек.ДинамическиеОтборы.Получить("Сотрудник");
	
	//МассивСотрудников - массив сотрудников полученный ранее из таб части документа "Зарплата к выплате"
	СписокСотрудников.Значение.ЗагрузитьЗначения(МассивСотрудников);
	
	//СсылкаНаОбъект.Дата - дата документа "Зарплата к выплате"
	ЗначенияНастроек.СтандартныйПериод.ДатаНачала =  НачалоМесяца(СсылкаНаОбъект.Дата); 
	ЗначенияНастроек.СтандартныйПериод.ДатаОкончания = КонецМесяца(СсылкаНаОбъект.Дата);
	
	тОтчет.ЗначенияНастроекПанелиПользователя = Новый ХранилищеЗначения(ЗначенияНастроек);
	
	тОтчет.СформироватьОтчет(тФорма.ЭлементыФормы.Результат);
		
	тФорма.РежимРедактированияНастройки = Истина;
Показать
user645982_karazumeiko; user811769; +2 Ответить
3. Rokky78 40 24.01.17 14:45 Сейчас в теме
Попробовал Ваш код. Он абсолютно рабочий. Единственное, что заменил "РасчетныеЛистки" на "РасчетныеЛисткиОрганизаций" ( у нас ЗУП КОРП). Может тоже отчетом ошиблись?
4. Sunderland 24.01.17 15:12 Сейчас в теме
(3) прошу прощения, не указал, что база тоже ЗУП КОРП. По заданию нужно использовать отчет Расчетные листки. Но попробовал изменить на отчет РасчетныеЛисткиОрганизаций, по-прежнему не работает. Открывается отчет с параметрами и отбором, указанными в последний раз пользователем..
5. SyachinS 24.01.17 15:31 Сейчас в теме
Делал не много другую задачу, нужно было реализовать СКД на мобильной платформе - параметры устанавливал следующим образом:

1. Получал макет схемы компоновки данных
2. Получал текущие настройки варианта отчета: НастройкиСКД = МакетСКД.ВариантыНастроек.Основной.Настройки;
3. Далее устанавливал методом: НастройкиСКД.ПараметрыДанных.УстановитьЗначениеПарамера("ИмяПараметра", ЗначениеПараметра);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот