Имя: Пароль:
1C
1С v8
СКД параллельное заполнение данных
0 FoXSkr
 
02.06.14
14:19
Доброго времени суток. Подскажите пожалуйста решить одну задачу. Нужно при выводе отчета параллельно заполнить сопутствующие данные. Как это можно сделать.

Отчет вывожу следующиеми операторами:

//Построчный вывод что бы собрать данные        ПроцессорВывода.НачатьВывод();
        Пока Истина Цикл
               ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
            
            Если ЭлементРезультата = Неопределено Тогда
                Прервать;
            Иначе
                ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
            КонецЕсли;
        КонецЦикла;
        ПроцессорВывода.ЗакончитьВывод();
    КонецЕсли;

Т.е. у меня есть элемент результата, как мне определить какая это группировка и какой элемент параметра нужная мне колонка.
1 FoXSkr
 
02.06.14
14:21
Т.е. рузультат отчета что то вроде:
Подразделение СуммаОборот Себестоимость Доход
  Сотрудник   СуммаОборот Себестоимость Доход
    Документ  СуммаОборот Себестоимость Доход

И мне нужно собрать итоговые данные дохода по подразделению.
2 DexterMorgan
 
02.06.14
14:35
Извращения с данными расшифровки
3 DexterMorgan
 
02.06.14
14:39
ПолеПоКоторомуНеобходимоПолучитьЗначение = "Твое поле компоновки";
Для каждого ЗначениеПараметра из ЭлементРезультата.ЗначенияПараметров Цикл
    Если ТипЗнч(ЗначениеПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
        ПоляРасшифровки = ДанныеРасшифровки.Элементы[ЗначениеПараметра.Значение].ПолучитьПоля();
        Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
            Если ПолеРасшифровки.Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
                ЗначениеВыводимыхДанных = ПолеРасшифровки.Значение;
                Прервать;
            КонецЕсли;    
        КонецЦикла;    
    КонецЕсли;    
КонецЦикла;
4 DexterMorgan
 
02.06.14
14:41
(0) Итоги по группировками ващета в настройках схемы указываются
5 DexterMorgan
 
02.06.14
14:42
Я сталкивался с единственной задачей для чего понадобилось (3) - вывод картинки
6 FoXSkr
 
02.06.14
14:47
(3) Спасибо.
Мне просто эти данные нужны для другого отчета которы будет формироваться в отдельной вкладке и по определенным причинах хочется взять именно из этого отчета.
1) Что бы были стабильно одинаковые данные, вдруг в изначальном отчете эта сумма будет подругому считаться (что бы не переделывать 2-а отчета)
2)Не хочется дважды нагружить процессор по сути одинаковыми запросами.
7 DexterMorgan
 
02.06.14
14:51
(6) Ад какой то. отчеты одновременно формируются? Есть вложенные схемы в конце концов. ладно тебе виднее)
8 FoXSkr
 
02.06.14
14:57
(7) Это реально Ад, причем заказчик запросил что бы эти отчеты (и там их не 2-а) еще и формировались в документе и там сохранялись.
9 FoXSkr
 
03.06.14
11:58
(3) Помогло но не до конца. Мне нужно было не только подразделение получить но и суммы. А суммы таким образом получить не получилось. Проблема еще в том что требуется точно знать имя параметра.

пришлось немного модифицировать

//Процедура для определения макета группировки
Функция ОпределитьМакетДляГруппировки(ТелоМакетаКомпановки, Имягруппировки)
    Для Каждого Строка Из ТелоМакетаКомпановки Цикл
        Если ТипЗнч(Строка) = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда
            Для Каждого Группировка Из Строка.Группировка Цикл
                Если Группировка.ИмяПоля = Имягруппировки Тогда
                    Возврат Строка.Тело[0].Макет;
                КонецЕсли;
            КонецЦикла;
            Возврат ОпределитьМакетДляГруппировки(Строка.Тело, Имягруппировки)
        КонецЕсли;
    КонецЦикла;
    Возврат "";
КонецФункции


        МакетОтдела = ОпределитьМакетДляГруппировки(МакетКомпоновки.Тело, "Отдел");
        Макет = МакетКомпоновки.Макеты.Найти(МакетОтдела);
        ИмяПараметраДоходы = "";
        ИмяПараметраЗатраты = "";
        ИмяПараметраОборот = "";
        ПараметрыМакета = Макет.Параметры;
        Для Каждого СтрокаПараметр Из ПараметрыМакета Цикл
            Если ТипЗнч(СтрокаПараметр) = Тип("ПараметрОбластиРасшифровкаКомпоновкиДанных") Тогда
                Если СтрокаПараметр.ВыраженияПолей.Найти("Доходы") <> Неопределено Тогда
                    ИмяПараметраДоходы = ПараметрыМакета[ПараметрыМакета.Индекс(СтрокаПараметр)-1].Имя;
                КонецЕсли;
                Если СтрокаПараметр.ВыраженияПолей.Найти("Затраты") <> Неопределено Тогда
                    ИмяПараметраЗатраты = ПараметрыМакета[ПараметрыМакета.Индекс(СтрокаПараметр)-1].Имя;
                КонецЕсли;
                Если СтрокаПараметр.ВыраженияПолей.Найти("Оборот") <> Неопределено Тогда
                    ИмяПараметраОборот = ПараметрыМакета[ПараметрыМакета.Индекс(СтрокаПараметр)-1].Имя;
                КонецЕсли;
                Если СтрокаПараметр.ВыраженияПолей.Найти("Отдел") <> Неопределено Тогда
                    ИмяПараметраОтдел = ПараметрыМакета[ПараметрыМакета.Индекс(СтрокаПараметр)].Имя;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        
... и потом уже можно точно спозиционироваться на макет и на имя параметра при выводе элементов результата компановки.