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

  1. 9 г. назад

    Хочу сделать выпадающее меню со своими пунктами.
    Вернее, сделал, но теперь хочу добавить (или вернуть, если это я убрал) стандартный пункт "Расшифровать".

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

    Вот если я в массив действий добавляю пункт

    МассивДействий.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);

    То в момент открытия меню расшифровки платформа падает без возможности посмотреть причину.

    Что я делаю не так?

  2. Выудил ошибку:

    Ошибки:
    --------------------------------------------------------------------------------
    31.03.2016 12:09:19
    Ошибка создания источника доступных настроек компоновки данных

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

    ПрименитьНастройки(<ИдентификаторРасшифровки>, <Настройки>)
    Параметры:

    <ИдентификаторРасшифровки> (обязательный)

    Тип: ИдентификаторРасшифровкиКомпоновкиДанных.
    Идентификатор обрабатываемой расшифровки.
    <Настройки> (обязательный)

    Тип: НастройкиКомпоновкиДанных.

    может дело в этом?

    Ответы: (3)
  4. 31.03.2016 14:17:40 отредактировано bvn13

    sf может дело в этом?

    хм... Добавил первым параметром "Расшифровка". Не помогло.
    Да дело и не в этом. Он при выходе из

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

    Валится.
    Вернее, если стоит последний параметр Истина:

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

    То прямо при вызове этого валится. Если поставить там Ложь:

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

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

    Это может быть из-за того, что я из трех таблиц источников данных связи сделал только 1-к-2 и 1-к-3?
    Т.е. 2 и 3 оставил связанные только через 1?
    Источник1 - основная таблица товаров
    Источник2 - срезы последних цен на каждую строку Источник1
    Источник3 - остатки товаров на каждую строку Источник1

    и я не хочу связывать 2 и 3, т.к. оба этих источника должны выполняться с параметрами (при передачи по связи из Источник1).

  5. ставь СтандартнаяОбработка = Ложь; перед всеми условиями. Иначе получается, что ты насильно обрабатываешь стандартную расшифровку, а потом платформа обрабатывает.

    Ответы: (5)
  6. tsr ставь СтандартнаяОбработка = Ложь; перед всеми условиями. Иначе получается, что ты насильно обрабатываешь стандартную расшифровку, а потом платформа обрабатывает.

    Это стоит

    Ответы: (6)
  7. (5) Перед Если .

  8. 31.03.2016 15:02:16 отредактировано sf

    попробуй как тут

    Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,,ДополнительныеДействия);
                Если Настройки<>Неопределено Тогда
                            КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
                            ЭлементыФормы.Результат.Очистить();
                            СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
                Иначе
                            Если ВыполненноеДействие="Действие1" Тогда
                                       ВыполнитьДействие1(Расшифровка);
                            ИначеЕсли ВыполненноеДействие="Действие2" Тогда
                                       ВыполнитьДействие2(Расшифровка);
                            КонецЕсли;
                КонецЕсли;
    Ответы: (8)
  9. sf попробуй как тут

    Я оттуда и смотрел.
    Только учти, что у меня УФ, а ОбработкаРасшифровки.Выполнить(...) работает только в толстом клиенте.
    А в остальном - у меня ж так же.

    Что именно я должен сделать, как тут?

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