Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Внешний отчет на СКД

Внешний отчет на СКД
Я
   егаис
 
12.04.17 - 13:22
Приветствую, подскажите по такому вопросу, никогда не приходилось сталкиваться.
Есть отчет на СКД. Но мне нужно обработать получаемые данные и вывести в макет. Напрмер, надо пропарсить "Способ отражения расходов в ЗУП" и вывести рассчитанный результат. Дополнительно нужно получить данные по COM соединению с другой базой и "засунуть" в этот же отчет.
В качестве форма отчета использую общие формы отчета, настройки и вариантов.
Получается надо перехватить результат компоновки, дополнительно его обработать и выдать результат в макет.
Как это реализовать?
 
 
   Гипервизор
 
1 - 12.04.17 - 13:34
Данные из другой базы в ТЗ;
ТЗ в компоновку через ВнешниеНаборыДанных: ПроцессорКомпоновкиДанных.Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>);
ТЗ описать в схеме как набор данных объект.
   егаис
 
2 - 12.04.17 - 13:50
а если создать НаборДанных "Объект" и подсунуть общую ТЗ ( с учетом COM) в ПриКомпоновкеРезультата()?
   DrShad
 
3 - 12.04.17 - 13:54
так об этом и речь
   егаис
 
4 - 12.04.17 - 15:33
подскажите, а как программно очистить настройки СКД?
Короче, устанавливаю отбор через изменить вариант по полю, который не участвует с отборе.
Парсю свой запрос с учетом этого отбора.
Но потом этот отбор участвует     
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки); 

Он не нужен, как его очистить?
   егаис
 
5 - 12.04.17 - 15:34
код такой

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.ФизическоеЛицо,
        |    ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.СпособОтраженияЗарплатыВБухучете,
        |    СУММА(ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.Сумма) КАК Сумма
        |ИЗ
        |    Документ.ОтражениеЗарплатыВБухучете.НачисленнаяЗарплатаИВзносы КАК ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы
        |ГДЕ
        |    ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
        |
        |СГРУППИРОВАТЬ ПО
        |    ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.СпособОтраженияЗарплатыВБухучете,
        |    ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.ФизическоеЛицо";
    
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ОбъектВыполнения", Новый ОписаниеТипов("Строка"));
    ТЗ.Колонки.Добавить("СтатьяЗатрат", Новый ОписаниеТипов("Строка"));
    ТЗ.Колонки.Добавить("ФизическоеЛицо", Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
    
    КвалификаторыЧисла = 
      Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный);
    ОписаниеЧисла = Новый ОписаниеТипов("Число", КвалификаторыЧисла);
    ТЗ.Колонки.Добавить("Сумма", ОписаниеЧисла);
    ТЗ.Колонки.Добавить("СуммаПремии", ОписаниеЧисла);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    ОтборОбъектов = "";
    СписокЭлементов = КомпоновщикНастроек.Настройки.Отбор.Элементы;
    Для Каждого Элемент из СписокЭлементов Цикл
        Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектВыполнения") Тогда
            ОтборОбъектов = Элемент.ПравоеЗначение;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    МассивОбъектов = СтрРазделить(СтрЗаменить(ОтборОбъектов," ",""), ";", Ложь);
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //распарсим способ отражения расходов

        СпособОтраженияЗарплатыВБухучете = СокрЛП(ВыборкаДетальныеЗаписи.СпособОтраженияЗарплатыВБухучете);
        Счет = Лев(СпособОтраженияЗарплатыВБухучете, 2);
        Если Счет = "26" Тогда
            ОбъектВыполненияКод = "АУП";
            СтатьяЗатрат = "Зарплата";
        ИначеЕсли Счет = "25" Тогда
            ОбъектВыполненияКод = "ИТР";
            СтатьяЗатрат = "Зарплата";
        ИначеЕсли Счет = "20" Тогда
            ОбъектВыполненияКод = Сред(СпособОтраженияЗарплатыВБухучете, 7, 4);
            СтатьяЗатрат = ПолучитьСтатьюЗатратПоКоду(Прав(СпособОтраженияЗарплатыВБухучете, 3));
        Иначе                                         
            ОбъектВыполненияТаблица = "";
            СтатьяЗатрат = "";
        КонецЕсли;
        
        Если МассивОбъектов.Количество() > 0 Тогда
            НайденныйЭлеменМассива = МассивОбъектов.Найти(ОбъектВыполненияКод);
            Если НайденныйЭлеменМассива = Неопределено Тогда
                Продолжить;
            КонецЕсли;    
        КонецЕсли;
        
        ОбъектВыполнения = Справочники.ОбъектыВыполнения.НайтиПоКоду(ОбъектВыполненияКод);
        
        НоваяСтрокаТЗ = ТЗ.Добавить();
        НоваяСтрокаТЗ.ОбъектВыполнения = ОбъектВыполнения;
        НоваяСтрокаТЗ.СтатьяЗатрат = СтатьяЗатрат;
        НоваяСтрокаТЗ.ФизическоеЛицо = ВыборкаДетальныеЗаписи.ФизическоеЛицо;
        НоваяСтрокаТЗ.Сумма = ВыборкаДетальныеЗаписи.Сумма;
    КонецЦикла;
    
    //Связь между таблицей значений и именами в СКД 

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

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

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
    
    //Вывод результата 

    ДокументРезультат.Очистить();
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);    
    
КонецПроцедуры
   егаис
 
6 - 12.04.17 - 15:40
все ,разобрался
            КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить(Элемент);

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует