Имя: Пароль:
1C
1С v8
Получить данные из штатного отчета в таблицу значений
0 lg2marvel
 
04.09.19
09:37
Привет.
Хочу получить данные из штатного отчета. Нашел пример, но он не полностью, начинаю так:

    ОтчетСостояниеШтатногоРасписания = Отчеты.СостояниеШтатногоРасписания.Создать();
    ОтчетСостояниеШтатногоРасписания.ИнициализироватьОтчет();
    НастройкиДанныеРасчета = ОтчетСостояниеШтатногоРасписания.СхемаКомпоновкиДанных.ВариантыНастроек.ЗаполненностьШтатногоРасписания.Настройки;    
    ОтчетСостояниеШтатногоРасписания.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиДанныеРасчета);
    НастройкиОтчета = ОтчетСостояниеШтатногоРасписания.КомпоновщикНастроек.ПолучитьНастройки();
    
    ДатаОтчета = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаАктуальности"));
    ДатаОтчета.Значение = ТекущаяДата();
    ДатаОтчета.Использование = истина;

Как дальше? Нужно что-то типа ОтчетСостояниеШтатногоРасписания.Сформировать(), но как правильно?
1 lg2marvel
 
04.09.19
09:54
ОтчетСостояниеШтатногоРасписания = Отчеты.СостояниеШтатногоРасписания.Создать();
    ОтчетСостояниеШтатногоРасписания.ИнициализироватьОтчет();
    НастройкиДанныеРасчета = ОтчетСостояниеШтатногоРасписания.СхемаКомпоновкиДанных.ВариантыНастроек.ЗаполненностьШтатногоРасписания.Настройки;    
    ОтчетСостояниеШтатногоРасписания.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиДанныеРасчета);
    НастройкиОтчета = ОтчетСостояниеШтатногоРасписания.КомпоновщикНастроек.ПолучитьНастройки();
    
    ДатаОтчета = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаАктуальности"));
    ДатаОтчета.Значение = ТекущаяДата();
    ДатаОтчета.Использование = истина;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетСостояниеШтатногоРасписания.СхемаКомпоновкиДанных, НастройкиОтчета,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    // Создадим и инициализируем процессор компоновки.
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    РезультатКомпоновки = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(РезультатКомпоновки);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);

Что-то не так:
{ВнешнийОтчет.ДостаточностьИОттокПерсонала.Форма.ФормаОтчета.Форма(2165)}: Ошибка при вызове метода контекста (Выполнить)
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетСостояниеШтатногоРасписания.СхемаКомпоновкиДанных, НастройкиОтчета,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
по причине:
Ошибка компоновки макета
по причине:
Ошибка генерации макета
по причине:
Не поддерживается вывод таблиц и диаграмм в универсальную коллекцию значений
2 luter-89
 
04.09.19
10:05
В сети полно рабочих примеров, может попробовать сначала погуглить?
3 toypaul
 
гуру
04.09.19
10:07
что из этого не понятно "Не поддерживается вывод таблиц и диаграмм в универсальную коллекцию значений" ?
4 lg2marvel
 
04.09.19
10:08
(2) взял пример из конфигурации, делаю на его подобии

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

КонецФункции

Моя функция:

Процедура ТестНаСервере()
    ОтчетСостояниеШтатногоРасписания = Отчеты.СостояниеШтатногоРасписания.Создать();
    НастройкиДанныеРасчета = ОтчетСостояниеШтатногоРасписания.СхемаКомпоновкиДанных.ВариантыНастроек.ЗаполненностьШтатногоРасписания.Настройки;    
    ОтчетСостояниеШтатногоРасписания.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиДанныеРасчета);
    НастройкиОтчета = ОтчетСостояниеШтатногоРасписания.КомпоновщикНастроек.ПолучитьНастройки();
    
    ДатаОтчета = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаАктуальности"));
    ДатаОтчета.Значение = ТекущаяДата();
    ДатаОтчета.Использование = истина;
    
    Отбор = НастройкиОтчета.Отбор;
    Отбор.Элементы.Очистить();
    
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетСостояниеШтатногоРасписания.СхемаКомпоновкиДанных, НастройкиОтчета,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    // Создадим и инициализируем процессор компоновки.
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    РезультатКомпоновки = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(РезультатКомпоновки);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
КонецПроцедуры
5 lg2marvel
 
04.09.19
10:12
ага, проблема в том что  я хочу вывести результат в таблицу значений
6 lg2marvel
 
04.09.19
11:08
ОтчетСостояниеШтатногоРасписания = Отчеты.СостояниеШтатногоРасписания.Создать(); - создаю отчет в конфигурации
ОтчетСостояниеШтатногоРасписания = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Состояние штатного расписания"); - как создать из внешнего отчета?
7 lg2marvel
 
04.09.19
11:22
Нужно получить ОтчетОбъект
Основная теорема систематики: Новые системы плодят новые проблемы.