[РЕШЕНО] Расшифровка отчета СКД с двумя макетами

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем kosalex, 17 апр 2015.

  1. TopicStarter Overlay
    kosalex
    Offline

    kosalex Опытный в 1С

    Регистрация:
    6 июн 2013
    Сообщения:
    127
    Симпатии:
    1
    Баллы:
    29
    Доброго времени суток, есть отчет СКД с двумя макетами, по кнопке "Сформировать" выполняется следующий код:
    Код:
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если ОстаткиРеализации Тогда
    МакетОстаткиРеализаций = ПолучитьМакет("ОстаткиРеализаций");
    Настройки = МакетОстаткиРеализаций.НастройкиПоУмолчанию;
    Настройки.ПараметрыДанных.Элементы[0].Значение = КонецДня(НаДату);
    Настройки.ПараметрыДанных.Элементы[0].Использование = Истина;
    Настройки.Отбор.Элементы[0].ВидСравнения = КомпоновщикНастроек.Настройки.Отбор.Элементы[0].ВидСравнения;
    Настройки.Отбор.Элементы[0].ПравоеЗначение = КомпоновщикНастроек.Настройки.Отбор.Элементы[0].ПравоеЗначение;
    Настройки.Отбор.Элементы[0].Использование = КомпоновщикНастроек.Настройки.Отбор.Элементы[0].Использование;
    Настройки.Отбор.Элементы[1].ВидСравнения = КомпоновщикНастроек.Настройки.Отбор.Элементы[1].ВидСравнения;
    Настройки.Отбор.Элементы[1].ПравоеЗначение = КомпоновщикНастроек.Настройки.Отбор.Элементы[1].ПравоеЗначение;
    Настройки.Отбор.Элементы[1].Использование = КомпоновщикНастроек.Настройки.Отбор.Элементы[1].Использование;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(МакетОстаткиРеализаций, Настройки,ДанныеРасшифровки,,,,);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,);
    ДокументРезультат.Очистить();
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    ИначеЕсли РасчетныеДанныеПоФючерсамЗаПериод Тогда
    МакетРасчетныеДанныеПоФьючерсамЗаПериод = ПолучитьМакет("РасчетныеДанныеПоФьючерсамЗаПериод");
    Настройки = МакетРасчетныеДанныеПоФьючерсамЗаПериод.НастройкиПоУмолчанию;
    Настройки.ПараметрыДанных.Элементы[0].Значение = НачалоДня(СДаты);
    Настройки.ПараметрыДанных.Элементы[0].Использование = Истина;
    Настройки.ПараметрыДанных.Элементы[1].Значение = КонецДня(ПоДату);
    Настройки.ПараметрыДанных.Элементы[1].Использование = Истина;
    Настройки.Отбор.Элементы[0].ВидСравнения = КомпоновщикНастроек.Настройки.Отбор.Элементы[0].ВидСравнения;
    Настройки.Отбор.Элементы[0].ПравоеЗначение = КомпоновщикНастроек.Настройки.Отбор.Элементы[0].ПравоеЗначение;
    Настройки.Отбор.Элементы[0].Использование = КомпоновщикНастроек.Настройки.Отбор.Элементы[0].Использование;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(МакетРасчетныеДанныеПоФьючерсамЗаПериод, Настройки,ДанныеРасшифровки,,,,);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,);
    ДокументРезультат.Очистить();
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    КонецЕсли;
    КонецПроцедуры

    Вот что происходит на форме:
    Код:
    Процедура Переключатель1ПриИзменении(Элемент)
    Если Переключатель1 = 0 Тогда
    ОстаткиРеализации = Истина;
    ЭлементыФормы.НадписьНаДату.Видимость = Истина;
    ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Видимость = Истина;
    ЭлементыФормы.НадписьДатаНачала.Видимость = Ложь;
    ЭлементыФормы.ПолеВводаСДаты.Видимость = Ложь;
    ЭлементыФормы.ПолеВводаСДаты.Значение = Неопределено;
    СДаты = Неопределено;
    ЭлементыФормы.НадписьДо.Видимость = Ложь;
    ЭлементыФормы.ПолеВводаПоДату.Видимость = Ложь;
    ЭлементыФормы.ПолеВводаПоДату.Значение = Неопределено;
    ПоДату = Неопределено;
    РасчетныеДанныеПоФючерсамЗаПериод = Ложь;
    МакетОстаткиРеализации = ПолучитьМакет("ОстаткиРеализаций");
    НастройкиПоУмолчанию = МакетОстаткиРеализации.НастройкиПоУмолчанию;
    КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);
    
    ИначеЕсли Переключатель1 = 1 Тогда
    
    ОстаткиРеализации = Ложь;
    ЭлементыФормы.НадписьНаДату.Видимость = Ложь;
    ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Видимость = Ложь;
    ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Значение = Неопределено;
    НаДату = Неопределено;
    ЭлементыФормы.НадписьДатаНачала.Видимость = Истина;
    ЭлементыФормы.ПолеВводаСДаты.Видимость = Истина;
    ЭлементыФормы.НадписьДо.Видимость = Истина;
    ЭлементыФормы.ПолеВводаПоДату.Видимость = Истина;
    РасчетныеДанныеПоФючерсамЗаПериод = Истина;
    
    //Подставить ОТБОР
    МакетРасчетныеДанныеПоФьючерсамЗаПериод = ПолучитьМакет("РасчетныеДанныеПоФьючерсамЗаПериод");
    НастройкиПоУмолчанию = МакетРасчетныеДанныеПоФьючерсамЗаПериод.НастройкиПоУмолчанию;
    КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);
    
    КонецЕсли;
    КонецПроцедуры

    Как я понимаю, то данные расшифроке беруться из основного макета, а как их можно передать после того как я сменил макет програмно?
  2. TopicStarter Overlay
    kosalex
    Offline

    kosalex Опытный в 1С

    Регистрация:
    6 июн 2013
    Сообщения:
    127
    Симпатии:
    1
    Баллы:
    29
    Получилось, немного подравил и дописал, вот код:
    Код:
    Процедура Переключатель1ПриИзменении(Элемент)
        Если Переключатель1 = 0 Тогда
            ОстаткиРеализации = Истина;
            ЭлементыФормы.НадписьНаДату.Видимость = Истина;
            ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Видимость = Истина;
           
            ЭлементыФормы.НадписьДатаНачала.Видимость = Ложь;
            ЭлементыФормы.ПолеВводаСДаты.Видимость = Ложь;
            ЭлементыФормы.ПолеВводаСДаты.Значение = Неопределено;
            СДаты = Неопределено;
           
            ЭлементыФормы.НадписьДо.Видимость = Ложь;
            ЭлементыФормы.ПолеВводаПоДату.Видимость = Ложь;
            ЭлементыФормы.ПолеВводаПоДату.Значение = Неопределено;
            ПоДату = Неопределено;
           
            РасчетныеДанныеПоФючерсамЗаПериод = Ложь;
           
           
            МакетОстаткиРеализации = ПолучитьМакет("ОстаткиРеализаций");
            НастройкиПоУмолчанию = МакетОстаткиРеализации.НастройкиПоУмолчанию;
            КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);
           
            ЭтотОбъект.СхемаКомпоновкиДанных = МакетОстаткиРеализации;
           
        ИначеЕсли Переключатель1 = 1 Тогда
           
           
            ОстаткиРеализации = Ложь;
            ЭлементыФормы.НадписьНаДату.Видимость = Ложь;
            ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Видимость = Ложь;
            ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Значение = Неопределено;
            НаДату = Неопределено;
           
            ЭлементыФормы.НадписьДатаНачала.Видимость = Истина;
            ЭлементыФормы.ПолеВводаСДаты.Видимость = Истина;
           
           
            ЭлементыФормы.НадписьДо.Видимость = Истина;
            ЭлементыФормы.ПолеВводаПоДату.Видимость = Истина;
                   
            РасчетныеДанныеПоФючерсамЗаПериод = Истина;
    
           
            //Подставить ОТБОР
            МакетРасчетныеДанныеПоФьючерсамЗаПериод = ПолучитьМакет("РасчетныеДанныеПоФьючерсамЗаПериод");
            НастройкиПоУмолчанию = МакетРасчетныеДанныеПоФьючерсамЗаПериод.НастройкиПоУмолчанию;
            КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);
           
            ЭтотОбъект.СхемаКомпоновкиДанных = МакетРасчетныеДанныеПоФьючерсамЗаПериод;
           
           
        КонецЕсли;
    КонецПроцедуры
    
    
    
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
        СтандартнаяОбработка = ложь;
       
        Если Переключатель1 = 0 Тогда
           
            Если ДанныеРасшифровки = Неопределено Тогда Возврат КонецЕсли;
           
            ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
           
            Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка);
           
            Если Настройки<>Неопределено Тогда                                                                                         
               
                КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
               
                ЭлементыФормы.Результат.Очистить();
               
                СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
               
            КонецЕсли;
        ИначеЕсли Переключатель1 = 1 Тогда
           
            Если ДанныеРасшифровки = Неопределено Тогда Возврат КонецЕсли;
           
            ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
           
            Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка);
           
            Если Настройки<>Неопределено Тогда                                                                                         
               
                КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
               
                ЭлементыФормы.Результат.Очистить();
               
                СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
               
            КонецЕсли;
           
           
        КонецЕсли;
    КонецПроцедуры
    alexburn нравится это.

Поделиться этой страницей