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

  1. 8 г. назад

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

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

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

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

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

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

    -image-

  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)}: Ошибка при вызове метода контекста (Выполнить)
    Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, , ПараметрыРаботы.ДополнительныеДействия);
    по причине:
    Метод контекста недоступен

    Что дальше?

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