Программная расшифровка СКД

  1. 9 г. назад

    Как сабж сделать?
    Есть несколько группировок. При клике на ячейку (ресурс в колонке) нужно получить значения этих группировок для данной строки и открыть новую форму этого отчета с новым вариантом компоновки, где в отбор выставить значения выбранных группировок.

  2. Для начала делаешь форму отчета, потом у табличного поля делаешь ОбработкаРасшифровки

  3. 17.12.2015 12:52:19 отредактировано MIK

    Значение можно получить так

        Расшифровка = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0];
        ЗначениеГруппировки = Расшифровка.Значение;
        ИмяГруппировки = Расшифровка.Поле;
    
    Ответы: (3)
  4. (2) у меня ДанныеРасшифровки - строка с навигационной ссылкой внутри. ЧЯДНТ?

    Ответы: (5)
  5. 17.12.2015 13:30:25 отредактировано bvn13

    Ошибка загрузки изображения!

  6. (3) очевидно что это ссылка на временное хранилище, сделай

    ДР=ПолучитьИзВременногоХранилища(ДанныеРасшифровки);

  7. 17.12.2015 14:29:22 отредактировано MIK
    &НаСервере 
    Процедура ОбработкаСервер(ДанныеРасшифровки, Расшифровка)
        Сообщить(ПолучитьИзВременногоХранилища(ДанныеРасшифровки).Элементы[Расшифровка].ПолучитьПоля()[0].Значение);
    КонецПроцедуры // ОбработкаСервер()
     
    
    &НаКлиенте
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
        ОбработкаСервер(ДанныеРасшифровки, Расшифровка);
    КонецПроцедуры
    Ответы: (7)
  8. (6) делаю так.

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

    Вот на этом

    Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, , ПараметрыРаботы.ДополнительныеДействия);

    получаю:

    {Форма.ФормаОтчета.Форма(477)}: Ошибка при вызове метода контекста (Выполнить)
    Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, , ПараметрыРаботы.ДополнительныеДействия);
    по причине:
    Метод контекста недоступен

    Что дальше?

или зарегистрируйтесь чтобы ответить!