Версия для печати темы (https://pro1c.org.ua/index.php?s=ed1531cecdf29cd9d29260f2a0118fb6&showtopic=66685)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Как обработать результат отчета СКД выведенный в табличный документ 1с БУ 8.3

Автор: oduvan 05.08.21, 16:05

Добрый день, столкнулся с задачей обрабатывать выведенные данные в табличный документ, для того чтобы после перебирать их и записать в файл XML.
Как я получаю данные? Создал Функцию, в которую передаю табличный документ(Результат), который находиться на форме. Он то и получает данные с СКД.

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

    Возврат ТаблДок;
КонецФункции


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

Пожалуйста, подскажите, уже переделываю отчет 5 раз. Просто устал морально работать с ним, крышу сносит. Спасибо за вашу помощь!

Автор: Vofka 05.08.21, 16:59

Цитата(oduvan @ 05.08.21, 17:05) *
Для Каждого ТУТМНЕНЕПОНЯТНОКАКОЙОПЕРАНДУСТАНОВИТЬ ИЗ ДанныеСКД Цикл
//Тут делаю обработку данных с записью в ХМЛ
КонецЦикла

Вы работаете с табличным документом, а он так не умеет. Посмотрите в синтакс-помощнике метод Получить() табличного документа. С помощью этого метода поячеечно обходите табличный документ и собирайте с него данные.
А зачем вам сохранять его в XML?

Да, функция ПолучениеДанныхСКД у вас странно выглядит, т.к. возвращает тот же параметр, который принимает. В ней либо параметр лишний, либо возвращаемое значение не нужно.

Автор: oduvan 06.08.21, 16:36

Vofka @ Вчера, 17:59 * ,
Мне нужно создать отчет в 1с на основе реализаций по алкоголю по этому , а после вытянуть его в xml файл, а тот уже и затягивается в так званую программу медок. Может есть вариант как вывести скд и потом его записать в xml файл? Спасибо большое за помощь!

Автор: Vofka 06.08.21, 18:14

oduvan @ Сегодня, 17:36 * ,
правильный подход заключается в том, что бы выполнить СКД, получить набор данных (в сыром, так сказать, виде) и работать с данными, а не с табличным документом. Результат СКД можно вывести, например, в таблицу значений. В Гугле есть много примеров.

Автор: oduvan 09.08.21, 9:54

Vofka @ 06.08.21, 19:14 * ,
Да, видел их, хотел уточнить по поводу такого, что у меня не выводит данные при нажатии на кнопку "Сформировать". Заполняю я вроде как правильно, могу предоставить код для понимания. Минусы то что я не могу найти информацию о том, какой элемент должен быть на форме " Таблица значений , табличный документ, Дерево...." ????

Автор: alexandr_f 09.08.21, 10:13

oduvan @ Сегодня, 10:54 * ,
если нажимается на кнопку значит есть форма. Надо пройти отладчиком

Автор: sava1 09.08.21, 10:47

что не получается?
на форме таб.док
по кнопке выгрузить - считываете настройки компоновщика, формируете ТЗ или Дерево (через СКД), обрабатывете его, сохраняете в файл

Автор: Batchir 11.08.21, 10:18

А Вам точно нужен табличный документ?

При нажатии кнопки выгрузки в ХМЛ использовать тот же код, только

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


заменить на

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


Получите на выходе таблицу значений (это при условии что СКД линейный) и уже эту таблицу преобразовывайте в нужный формат

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua