Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расшифровка отчета СКД с двумя макетами
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Система компоновки данных
kosalex
Доброго времени суток, есть отчет СКД с двумя макетами, по кнопке "Сформировать" выполняется следующий код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
        
    Если ОстаткиРеализации Тогда
        МакетОстаткиРеализаций = ПолучитьМакет("ОстаткиРеализаций");
        
        Настройки = МакетОстаткиРеализаций.НастройкиПоУмолчанию;
        
        Настройки.ПараметрыДанных.Элементы[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 Тогда

        ОстаткиРеализации = Ложь;
        ЭлементыФормы.НадписьНаДату.Видимость = Ложь;
        ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Видимость = Ложь;
        ЭлементыФормы.ПолеВводаДатаОстаткиРеализации.Значение = Неопределено;
        НаДату = Неопределено;
        
        ЭлементыФормы.НадписьДатаНачала.Видимость = Истина;
        ЭлементыФормы.ПолеВводаСДаты.Видимость = Истина;
        
        
        ЭлементыФормы.НадписьДо.Видимость = Истина;
        ЭлементыФормы.ПолеВводаПоДату.Видимость = Истина;
                
        РасчетныеДанныеПоФючерсамЗаПериод = Истина;

        
        //Подставить ОТБОР
        МакетРасчетныеДанныеПоФьючерсамЗаПериод = ПолучитьМакет("РасчетныеДанныеПоФьючерсамЗаПериод");
        НастройкиПоУмолчанию = МакетРасчетныеДанныеПоФьючерсамЗаПериод.НастройкиПоУмолчанию;
        КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);

    КонецЕсли;
КонецПроцедуры


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

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


Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    
    Если Переключатель1 = 0 Тогда
        
        Если ДанныеРасшифровки = Неопределено Тогда Возврат КонецЕсли;
        
        ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
        
        Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка);
        
        Если Настройки<>Неопределено Тогда                                                                                          
            
            КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
            
            ЭлементыФормы.Результат.Очистить();
            
            СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
            
        КонецЕсли;
    ИначеЕсли Переключатель1 = 1 Тогда
        
        Если ДанныеРасшифровки = Неопределено Тогда Возврат КонецЕсли;
        
        ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
        
        Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка);
        
        Если Настройки<>Неопределено Тогда                                                                                          
            
            КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
            
            ЭлементыФормы.Результат.Очистить();
            
            СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
            
        КонецЕсли;
        
        
    КонецЕсли;
КонецПроцедуры
Vofka
А чем отличается код в процедуре РезультатОбработкаРасшифровки при Переключатель1 = 0 или Переключатель1 = 1 ?
kosalex
Цитата(Vofka @ 17.04.15, 10:39) необходимо зарегистрироваться для просмотра ссылки
А чем отличается код в процедуре РезультатОбработкаРасшифровки при Переключатель1 = 0 или Переключатель1 = 1 ?



Ничем, можно убрать часть! Когда разбирался, нужно было так сделать smile.gif А как разобрался, оказывается что это условие уже не нужно.
Осталось это:
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;

        Если ДанныеРасшифровки = Неопределено Тогда Возврат КонецЕсли;

          ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
          Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка);
        
        Если Настройки<>Неопределено Тогда                                                                                          
            
           КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
           ЭлементыФормы.Результат.Очистить();
           СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
            
        КонецЕсли;
    
КонецПроцедуры
Vofka
А что поменялось тогда?
kosalex
Цитата(Vofka @ 17.04.15, 13:16) необходимо зарегистрироваться для просмотра ссылки
А что поменялось тогда?


Здесь "Процедура Переключатель1ПриИзменении(Элемент)" добавил это
ЭтотОбъект.СхемаКомпоновкиДанных = МакетОстаткиРеализации;

И
ЭтотОбъект.СхемаКомпоновкиДанных = МакетРасчетныеДанныеПоФьючерсамЗаПериод;

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.