Имя: Пароль:
1C
 
Расшифровка в СКД
0 antotti
 
05.02.15
18:37
Добрый вечер, есть внешний отчет на скд + самописная расшифровка. Проблема в том, что когда вызываю расшифровку - отчет почему сам очищается....(  Подскажете, с чем может быть связанно?
1 PR
 
05.02.15
18:39
(0) Что-то не так запрограммировано.
2 antotti
 
05.02.15
18:40
Вот код:

&НаСервере
Функция ПолучитьURLСхема()    
    ОсновнаяСхемаКомпоновкиДанных = ПолучитьМакетНаСервере();  //Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    URLСхемы = ПоместитьВоВременноеХранилище(ОсновнаяСхемаКомпоновкиДанных);    
    Возврат URLСхемы;        
КонецФункции

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    Перем ВыполненноеДействие;
    
    //Поля = ПолучитьИзВременногоХранилища(ДанныеРасшифровки).Элементы[Расшифровка].ПолучитьПоля();
    
    СтандартнаяОбработка = Ложь;
    
    ЗначениеРасшифровки = ПолучитьЗначениеРасшифровки(Расшифровка);
    
    URLСхемы=ПолучитьURLСхема();
    ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
    
    Обработка = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,ИсточникДоступныхНастроек);
    Результат = Неопределено;
    Параметр = Неопределено;
    ДоступныеДействия = Новый Массив;
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
    Обработка.ВыбратьДействие(Расшифровка,Результат,Параметр,ДоступныеДействия,);
    
    //    Модель = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
    
    ЭлементыОтбора = Новый Структура("Склад,Модель", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение, ЗначениеРасшифровки);
    ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора);
    
    Форма = ОткрытьФорму("Обработка.АнализМодели.Форма.ОсновнаяФорма",ПараметрыФормы);
    
    ПриОткрытии(ложь);    
КонецПроцедуры

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

&НаСервере
Процедура ВывестиЗначениеГруппировки(ТекРасшифровка,Массив_Родителей)
    КоллекцияРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    
    МассивРодителей = КоллекцияРасшифровки.Элементы[ТекРасшифровка].ПолучитьРодителей();
    Для Сч = 1 По МассивРодителей.Количество() Цикл
        ПолеРодитель = МассивРодителей[Сч-1];
        
        
        Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
            
            //Выведем значения текущей расшифровки
            Поле = ПолеРодитель.ПолучитьПоля()[0];
            Массив_Родителей.Добавить(Поле.Значение);
            //Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение);
            //
            //Рекурсивный вызов процедуры.
            РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
            ВывестиЗначениеГруппировки(РасшифровкиВыше,Массив_Родителей);
        ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") тогда
            Попытка
                
                Поле =    ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля()[0] ;
                Массив_Родителей.Добавить(Поле.Значение);
                //Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение);
                
                //Рекурсивный вызов процедуры.
                РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
                ВывестиЗначениеГруппировки(РасшифровкиВыше,Массив_Родителей);
                
            Исключение
                
            КонецПопытки;
        КонецЕсли;
        
    КонецЦикла;
        
КонецПроцедуры

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

&НаСервере
Функция ПолучитьМакетНаСервере()
    
    ОтчетОбъект= РеквизитФормыВЗначение("Отчет");
    Макет = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Возврат Макет;    
    
КонецФункции
3 antotti
 
05.02.15
18:42
Можно ли как-то указать  программно, чтобы отчет не очищался.... ? Я так понимаю это в функции "РезультатОбработкаРасшифровки" нужно что- то дописать.???
Так все работает как надо.
PS: (УФ)
4 Crush
 
05.02.15
18:47
(2) Безобразие! Код почитай или найми программиста для этих целелей.
5 Classic
 
05.02.15
18:53
(3)
Не совсем. Нужно что-то убрать. Например всю расшифровку
6 antotti
 
06.02.15
13:06
Блин, ну в стандартной же расшифровки, не пропадает отчет после раскрытия элемента.....Мне нужно обязательно делать расшифровку, но только чтобы отчет не сворачивался после этого.... Не ужели нельзя это сделать?
7 romanoff
 
22.02.15
19:01
Друзья, мне одному очевидно что вопрос только вот в этой строчке ??

Результат = Неопределено;

Если на скд просто создать упр.форму, то реквизит формы табличного документа имеет имя "Результат"