Имя: Пароль:
1C
1С v8
Вывод результата компоновки в таблицу значений
0 Zixxx
 
02.10.13
16:32
Есть отчет, он выводить заказы покупателей и количество товара которое осталось отгрузить. Пользователи накладывают отборы, а после я получают ТЗ из компоновки и создаю заказ поставщику. Данные собираю следующим кодом:

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

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

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ДеревоРезультата = Новый ДеревоЗначений;
    ПроцессорВывода.УстановитьОбъект(ДеревоРезультата);
    ПроцессорВывода.Вывести(ПроцессорКД);

Проблема в том что пользователи могут убрать группировку или колонку, что приведет к ошибке. Например для заказа поставщику мне нужно количество, я ожидаю его получить в соответствующей колонке, которой нет.

Пробовал получить настройки по умолчанию но ничего не вышло. Подскажите как получить настройки по умолчанию и сохранить при этом отборы.
1 samozvanec
 
02.10.13
16:43
1. запомнить отборы
2. восстановить настройки по умолчанию
3. восстановить отборы
2 Zixxx
 
02.10.13
16:56
(1) Уже пробовал, делал так...

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

Выводит все поля пустые, пусто
3 samozvanec
 
02.10.13
16:58
(2) где запоминаешь и восстанавливаешь отборы? настройки не пустые?
4 Zixxx
 
02.10.13
17:44
(3) Отборы пока можно опустить, как быть с настройками по умолчанию? Почему когда я их выдергиваю из схемы и подставляю в КомпоновщикМакета результат пустой?

По этапам и так понятно что нужно сохранить, получить и восстановить, как кодом это реализовать?
5 samozvanec
 
02.10.13
18:20
(4) в отладчике посмотри, когда настройки по умолчанию получаешь - они заполнены?
6 Лефмихалыч
 
02.10.13
18:32
может дело в том, что компоновщик как-то черезжопно колонки переименовывает? Глянь отладчиком, может данные есть, но колонки по-другому называются
7 Zixxx
 
02.10.13
18:57
Не выводит данные потому что не установлены параметры в запросе. При открытии получаю элементы в "Настройки.ПараметрыДанных.Элементы" и устанавливаю для каждого нужное значение.

Но когда получаю настройки по умолчанию в "Настройки.ПараметрыДанных.Элементы" нет ни одного параметра, каким методом их можно получить из запроса?
8 Очкарик
 
02.10.13
18:59
Напиши макет компоновки кодом и не парь мозги.
9 Zixxx
 
02.10.13
19:00
(8) например?
10 Очкарик
 
02.10.13
19:01
Только ответь на один вопрос, набуя тебе компоновка если ты не хочешь чтобы юзеры ей управляли?
11 Очкарик
 
02.10.13
19:02
(9) Создаешь все кодом и ни один юзер ничего не сделает.
12 Zixxx
 
02.10.13
19:06
(10) Вроде наоборот хочу чтобы управляли, а где сказал что не хочу?
13 Очкарик
 
02.10.13
19:09
(12) Запрети пользователям менять группировки.
14 Zixxx
 
02.10.13
19:12
(13) Так это ты только это сказал, до тебя такого никто не говорил
15 Zixxx
 
02.10.13
19:44
Сделал так, херня какая-то, проще никак?

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

    // 2
    
    Для Каждого Отбор Из ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
        НовыйОтбор = СхемаКомпоновкиДанных.ВариантыНастроек.Основной.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЗаполнитьЗначенияСвойств(НовыйОтбор, Отбор);
    КонецЦикла;