Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Программное выполнение СКД

Программное выполнение СКД
Я
   Орбита
 
26.06.19 - 13:44
В ЗУП есть отчет остатки отпусков.
Пытаюсь программно получить из него данные в виде таблицы значений, чтобы посчитать остаток.
Если я просто запускаю свой код на каком-то сотруднике, то получаю на выходе пустую таблицу значений.
Если же вначале запускаю отчет остатки отпусков, потом запускаю свой код - получаю требуемую таблицу значений.
Вопрос: что я делаю не так?

Вот код функции:

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

    Возврат ДанныеТЗ;
    
КонецФункции
 
 
   palsergeich
 
1 - 26.06.19 - 13:56
Вангую:
КомпоновщикНастроекНастройки.Настройки
это реквизит формы, который заполняется при исполнении первого отчета
   Орбита
 
2 - 26.06.19 - 14:08
(1) но я же его очищаю
   КомпоновщикНастроекНастройки.Настройки.Отбор.Элементы.Очистить(); 

И если я выбираю другого сотрудника в отчете остатки отпусков, то моей функцией выводятся данные нужного сотрудника, а не выбранного в отчете остатки отпусков
   silent person
 
3 - 26.06.19 - 14:15
может лучше использовать функции общего модуля
ОстаткиОтпусков.ОстатокОтпускаСотрудникаНаДату(
или
ОстаткиОтпусков.ОстаткиОтпусковСотрудниковНаДату(
   toypaul
 
4 - 26.06.19 - 14:35
попробовать сначала схему

 СхемаОст = Отчеты.ОстаткиОтпусков.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); 

поместить в хранилище и адрес передать в

Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОст)
   toypaul
 
5 - 26.06.19 - 14:37
плюс посмотреть модуль отчета. мало ли что там еще может быть

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует