Имя: Пароль:
1C
1С v8
Получить линейную таблицу из замороченной СКД
0 findpol
 
20.06.25
14:49
Есть относительно сложный отчёт на СКД с набором данных из множества таблиц, ресурсы/поля вычисляются и так далее. Красиво и удобно для визуального потребления, конечно, но мне нужно программно работать с результатом работы, для чего хочется линейную таблицу (Менеджер, заказ, сумма..) получить на базе этой СКД в отчёте.

Это возможно малой кровью? Буду благодарен за пример где это разобрано - сам такого не нашёл, как вывести в отчёт и прочее есть, а программно получить плоскую таблицу - нет.
1 Волшебник
 
20.06.25
14:51
Сделайте запрос к исходным таблицам
2 findpol
 
20.06.25
14:56
(1) просто запросить, минуя СКД? Там в СКД много таблиц, тысячи строк запросов со стопицот условий для формирования исходных данных. Всё это проработать и перевести в "обычный" запрос будет очень трудоёмко.
3 findpol
 
20.06.25
14:56
(1) сейчас так и делаю, но конца и края нет, а часть параметров падает вообще кодом из модуля отчёта и прочие сюрпризы.
4 PLUT
 
гуру
20.06.25
14:58
(0) в качестве бреда - сохрани табличный документ (ссуть результат СКД) в XL

а там уже "программно можно работать с результатом работы"
5 Asmody
 
20.06.25
15:00
(0) сделай вариант настроек, где будет только твоя "плоская таблица". используй его для программного формирования СКД в таблицу значений.
6 PLUT
 
гуру
20.06.25
15:09
+(4)

Магия чтения XL
Если Файл.Существует() Тогда
                ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
...

&НаСервере

ВремФайл = ПолучитьИмяВременногоФайла(Расширение);
    ДвоичныеДанные.Записать(ВремФайл);
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.Прочитать(ВремФайл, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    УдалитьФайлы(ВремФайл);


Для Каждого Область Из ТабличныйДокумент.Области Цикл
        
        ЧитаемаяОбласть = ТабличныйДокумент.ПолучитьОбласть(Область.Имя);
        // для каждого листа можем сделать свой обработчик чтения или все считать одинаково
        Если СтрНачинаетсяС(Область.Имя, "ТутКакоеТоИмяЛиста") Тогда
....

ПостроительЗапроса = Новый ПостроительЗапроса;
            ИсточникДанных = ЧитаемаяОбласть.Область(НомерПервойСтроки, НомерПервойКолонки, ЧитаемаяОбласть.ВысотаТаблицы, ЧитаемаяОбласть.ШиринаТаблицы);
            ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ИсточникДанных );
            ПостроительЗапроса.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
            ПостроительЗапроса.ЗаполнитьНастройки();
            ПостроительЗапроса.Выполнить();
            ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();  
            
            Если ТаблицаДанных.Количество() > 0 Тогда  
                
                Для Каждого ТекСтрока Из ТаблицаДанных    Цикл
Для Каждого ТекКолонка Из ТаблицаДанных.Колонки Цикл

... и еще много букв


но самое простое в (5)
7 Мультук
 
гуру
20.06.25
15:06
(0)

а) Читаем например вот это
https://infostart.ru/1c/articles/658410/

Пробуем на каком-нибудь маленьком детском отчёте с СКД.

б) Получилось ?
Пытаемся перенести свои знания на тот большой отчёт

P.S.

A:А я хочу сразу на большом!
Q:Плачь-плачь! Танцуй-танцуй!

A:А в большом заказе оказывается строится структура с использованием "Таблица"
Q:Постарайся переделать ей в линейную структуру. Выгрузить в таблицуЗначений, затем
таблицу значений трансформировать
Q:Плачь-плачь! Танцуй-танцуй! (Я как-то танцевал и плакал, угу)

A:Я ничего не понимаю, что написано в той статье
Q:
google / youtube:
1С СКД курсы
8 DiMel_77
 
20.06.25
15:06
(0) В ЗУП есть отчет "СтатистикаПерсонала", который используется для получения данных в виде коллекции. Там же просто получил схему, установил настройки и вывел в коллекцию? Или я не понял вопроса?
9 findpol
 
20.06.25
15:39
(8) не все СКД выводятся в коллекцию. Если там накручено, то в коллекцию вывести нельзя.
10 findpol
 
20.06.25
15:46
(4) можно и в табличный документ без экселя, но как его читать, учитывая, что там до 10 уровней вложенности и самые разные сущности в одном столбце. Может туплю, конечно..
11 DiMel_77
 
20.06.25
15:46
(9) Даже интересно стало, можно пример когда данные скомпонованные для вывода в табличный документ нельзя вывести в дерево значений? (понятно, что для таблицы значений необходимо делать служебный вариант для плоского вывода). Может я не понимаю как работает СКД и есть настройки вариантов, которые только в табличном поле посмотреть можно :))
12 findpol
 
20.06.25
15:47
(5) это сделал, но тогда у меня и пользователю будут разные варианты отчётов, боюсь, что у него просто из-за разных настроек будут отличаться итоговые показатели от моих.

Но так и буду делать, наверное.
13 findpol
 
20.06.25
15:50
(11) ну вот в такую ошибку падает при попытке использовать ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений: "Ошибка генерации макета
по причине: Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений"
14 findpol
 
20.06.25
15:58
(5) а можно пользовательский вариант подпихнуть, которые доступны на форме отчёта через "Еще -> Варианты отчета"?

в "СхемаКомпоновкиДанных.ВариантыНастроек" ожидаемо только те варианты, которые заданы в самой СКД.
15 PLUT
 
гуру
20.06.25
16:01
(14) разрешаю
16 findpol
 
20.06.25
16:05
(15) полдела сделано - где их искать подскажешь?
17 PLUT
 
гуру
20.06.25
16:06
(16) справочник.вариантыотчетов скорее всего
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс