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

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

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

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

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

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

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

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