Имя: Пароль:
1C
1С v8
СКД. Возможно ли обработать результат программно сформированного СКД отчета?
,
0 oduvanchikyan
 
28.07.21
13:43
Всем привет! Я не так давно начал работать с 1с и мне поступила задача создать отчет на основе запроса и выгрузить его в формат XML. Решил сделать через СКД внешний отчет. В итоге, столкнулся  с проблемой не знания, как именно можно считать результат отчета, дабы его потом записать в файл xml. Я записываю его в поле табличного документа, которое было создано автоматически при создании формы. Есть ли возможность получить результат отчета выведенного на экран? Может есть также литература по СКД буду очень благодарен.
Прикрепил часть кода, формирования вывода СКД отчета
&НаСервере
Процедура СформироватьОтчетНаСервере(ТаблДок)
    
    ОбъектОтчет = РеквизитФормыВЗначение("Отчет");
    
    ОСКД = ОбъектОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    НастройкиОСКД = ОСКД.НастройкиПоУмолчанию;
    
    //НастройкиОСКД = КомпоновщикНастроек.ПолучитьНастройкиОСКД();
    
    ПараметрыДанныхОСКД = НастройкиОСКД.ПараметрыДанных.Элементы;
    
    //Элемент формы начало
    ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Начало");
    ЭлементНачалоПериода.Использование = Истина;
    //ЭлементНачалоПериода.Значение = НачалоМесяца(ТекущаяДата());
    ЭлементНачалоПериода.Значение = ЭтаФорма.Начало; // = значение Начала периода
    
    //Элемент формы конец
    ЭлементКонецПериода = ПараметрыДанныхОСКД.Найти("Конец");
    ЭлементКонецПериода.Использование = Истина;
    ЭлементКонецПериода.Значение = ЭтаФорма.Конец;
    
    
    КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакетаОСКД.Выполнить(ОСКД, НастройкиОСКД);
    
    ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиОСКД.Инициализировать(Макет);
    
    ТаблДок.Очистить();
    
    ПроцессорВыводаОСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВыводаОСКД.УстановитьДокумент(ТаблДок);
    ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД);
    
КонецПроцедуры

&НаКлиенте
Процедура СформироватьОтчет(Команда)
        
    СформироватьОтчетНаСервере(Результат);
    
    // Чтобы не писалось "Отчет не сформирован..."
    Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
    Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
КонецПроцедуры
Спасибо за ранее))
1 fisher
 
28.07.21
13:46
"ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент" в своем коде видишь?
А есть еще и "ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений"
2 Vadim_37
 
28.07.21
13:50
Хрусталева, "Разработка сложных отчетов СКД"
Листинг 3.63. Вывод отчета в дерево значений

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,

Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));



ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);



ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

ПроцессорВывода.УстановитьОбъект(ДеревоРезультата);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
3 ДенисЧ
 
28.07.21
13:52
ПроцессорВыводаОСКД.УстановитьДокумент(ТаблДок);
    ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД);
  
///////////////////////////
// Тут можешь обрабатывать свой ТабДок
///////////////////////////

КонецПроцедуры
4 GANR
 
28.07.21
13:59
(0) Заменить, либо дополнить существующий вывод в табличный документ вы выводом в коллекцию значений, как (1) говорит.
5 GANR
 
28.07.21
14:00
Но если надо картинками табличный документ дополнить, тут надо в сторону (3) копать
6 oduvanchikyan
 
28.07.21
14:11
Дело в том что у меня уже выводить результат отчета, мне нужно его считать чтобы записать в файл формата
<?xml version="1.0" encoding="WINDOWS-1251"?>

-<DECLAR xsi:noNamespaceSchemaLocation="J0208206.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


-<DECLARHEAD>

<TIN>23791145</TIN>

<C_DOC>J02</C_DOC>

<C_DOC_SUB>082</C_DOC_SUB>

<C_DOC_VER>6</C_DOC_VER>

<C_DOC_TYPE>0</C_DOC_TYPE>

<C_DOC_CNT>6</C_DOC_CNT>

<C_REG>08</C_REG>

<C_RAJ>27</C_RAJ>

<PERIOD_MONTH>6</PERIOD_MONTH>

<PERIOD_TYPE>1</PERIOD_TYPE>

<PERIOD_YEAR>2021</PERIOD_YEAR>

<C_STI_ORIG>827</C_STI_ORIG>

<C_DOC_STAN>1</C_DOC_STAN>

<LINKED_DOCS xsi:nil="true"/>

<D_FILL>17072021</D_FILL>

</DECLARHEAD>
Я написал примерный код для загрузки в файл xml, но присваивать значения не могу( не из чего). Вариант с колекцией, который fisher говорит, не совсем подходить.  У меня так же есть табличная часть, может в ней попробовать сделать результат. Как считаете лучше? Простите за глупость, я понимаю, что сначала теорию нужно учить, а потом идти что-то делать. Но вот так сложилось, задача есть, решение вроде рядом, но не уверен, чего не хватает.
7 GANR
 
28.07.21
14:36
(6) Над прикладной составляющей думай сам - никто не форуме не станет это копать