Имя: Пароль:
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
Друзья, мне одному очевидно что вопрос только вот в этой строчке ??

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

Если на скд просто создать упр.форму, то реквизит формы табличного документа имеет имя "Результат"
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn