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

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

Автор bartolomew, 23 янв 2017, 16:38

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

bartolomew

Здравствуйте, форумчане. (Конфигурация Зарплата и Управление Персоналом, редакция 2.5 (2.5.113.1), Платформа 1С:Предприятие 8.3 (8.3.8.2197))
Не удается программно сформировать типовой отчет Расчетные листки. Необходимо открывать сформированный отчет из документа Зарплата к выплате. Отчет должен выводить данные для сотрудников из табличной части документа Зарплата к выплате. В настройки в качестве ПараметровДанных передаются "НачалоПериода" и "КонецПериода", в Отбор передается "Сотрудник"
Мой код:

        тОтчет = Отчеты.РасчетныеЛистки.Создать();
НастройкиКД = тОтчет.КомпоновщикНастроек.ПолучитьНастройки();
НастройкиКД.ПараметрыДанных.Элементы.Найти("НачалоПериода").Значение = '20161111000000';
НастройкиКД.ПараметрыДанных.Элементы.Найти("КонецПериода").Значение = '20161111235959';
ПолеОтбора = Новый ПолеКомпоновкиДанных("Сотрудник");
ОтборыКомпановщика = НастройкиКД.Отбор.Элементы;

        Для каждого Стр Из ОтборыКомпановщика Цикл
            Если Стр.ЛевоеЗначение = ПолеОтбора Тогда
                Отбор = Стр;
        Прервать;
            КонецЕсли;
КонецЦикла;

        Если Отбор = Неопределено Тогда
            Отбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            Отбор.ЛевоеЗначение  = ПолеОтбора;
КонецЕсли;                             

        Если СотрудникОтбор <> Неопределено Тогда
            Отбор.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
            Отбор.Использование  = Истина;
            Отбор.ПравоеЗначение  = СотрудникОтбор; // СотрудникОтбор - полученный ранее из таб части сотрудник
        Иначе
            Отбор.Использование  = Ложь;
КонецЕсли;

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


В итоге просто открывается форма отчета, игнорируя мою настройку. Подскажите, что не так делаю)

bartolomew

Свою задачу решил. Может кому-то пригодится. Код не идеален, но работает:

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

Теги: скд Отбор 

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

13856

Ответов: 4
Просмотров: 4579

62721

Ответов: 4
Просмотров: 4549

69886

Автор AlexA


Ответов: 1
Просмотров: 659

Рейтинг@Mail.ru Rambler's Top100

Поиск