8.х ДанныеРасшифровки заполнение СКД

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Elkis, 22 апр 2015.

  1. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    Коллеги, доброго времени суток! Пришлось перерыть кучу литературы, а целостная картина в голове всё равно не сложилась. История вопроса: отчёт на СКД (несложный), пользователь попросил добавить в него дату формирования. Для этого был создан макет, всё получилось. Плюс было добавлено программное формирование параметров отбора. Для этого была добавлена форма отчёта, в неё включён метод ПриКомпоновкеРезультата.

    После этих манипуляций перестала работать расшифровка по полям отчёта. Нужна стандартная - Открыть элемент справочника "ДоговорыКонтрагентов". Поэтому хочется сделать это просто, без излишних наворотов. Макет в СКД использую только для отображения даты заполнения отчёта, по остальным полям и группировкам устраивает стандартная схема.

    Что уже сделано: Табличному полю "Результат" была добавлена обработка события "РезультатОбработкаРасшифровки". Объявлена переменная ДанныеРасшифровки. Пытаюсь заполнить в методе ПриКомпоновкеРезультата. И - не получается.

    Знатоки, помогите: что сделано не так? Как увязать объявленную переменную "ДанныеРасшифровки" с информацией в конкретной ячейке табличного поля? Пока ничего из прочитанного не помогло ((((
    Спасибо!
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Отчет прикрепите. Так проще будет. Какая конфа еще?
  3. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    Отчёт СКД? Полностью?
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Ну если у Вас получится половинку прикрепить, то хотелось бы на это поглядеть :D
    --- Объединение сообщений, 22 апр 2015 ---
    Как внешний просто прикрепите и все.
  5. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    Конфа имеет значение? УПП 1.3.60.3 в режиме обычного приложения. Платформа 8.3.5.1517
  6. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Короче ясно. В таком случае разбирайтесь сами. Вот Вам пример моей расшифровки.
    Код:
    // Обработка расшифровки в отчете. (Обработка выполняется стандартная, просто решил выполнять ее кодом)                                                      
    // ................................................................................
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
       
        перем ВыполненноеДействие;
       
        // Запретим стандартную обработку расшифровки
        СтандартнаяОбработка = Ложь;
       
        // Создадим и инициализируем обработчик расшифровки
        ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
       
        ДоступныеДействия = Новый Массив();
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить);
       
        // Осуществим выбор действия расшифровки пользователем
        Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия);
       
        Если Настройки <> Неопределено Тогда
           
            // Пользователь выбрал действие, для которого нужно менять настройки        
            Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить Тогда
               
                КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
                СформироватьОтчет();   
               
            Иначе
               
                // При других действиях - создадим новый отчет, откроем форму, сформируем отчет в ней
                Отчет = Отчеты.уит_ДУД_ВведенныеДоговораЗаПериодTest.Создать();
                Форма = Отчет.ПолучитьФорму("ФормаОтчета");
                Форма.Открыть();
                Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
                Форма.СформироватьОтчет();
               
            КонецЕсли;
           
        КонецЕсли;
       
    КонецПроцедуры
  7. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    ??? Вопрос не по обработке расшифровки, а по заполнению параметра расшифровки. Как его перехватить, если уже отчёт заполняется частично программно? Отчёт пришлю чуть позже, не на работе уже.
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Вероятно при программном выводе вы забыли указать ДанныеРасшифровки для компоновщика макета компоновки данных, и ли не указали их при инициализации процессора компоновки данных.
    Elkis нравится это.
  9. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Чтобы было понятно о чем говорит shurikvz, то вот
    Код:
    // Формируется отчет, на основе схемы компоновки данных.
    // ................................................................................
    Процедура СформироватьОтчет()
       
        // Получение готовой схемы компоновки данных
        СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        // Установка настроек схемы компоновки данных
        Настройки = КомпоновщикНастроек.Настройки;
        // В этот объект помещается информация о расщифровке данных
        ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
        // Формирование макета компоновки данных с помощью компоновщика макета
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        // В макет компоновки передаются СхемаКомпоновкиДанных, ее Настройки и ДанныеРасшифровки для заполнения информации о расшифровке
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
        // Выполнение компоновки данных с помощью процессора компоновки
        ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
        // Очистка поля табличного документа - Результат
        ЭлементыФормы.Результат.Очистить();
        ДокументРезультат = ЭлементыФормы.Результат;
        // Вывод результат компоновки в табличный документ
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
       
    КонецПроцедуры
    
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Да все так.
    Единственное уточнение - если вызов идет прям из формы отчета СКД строка ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; не нужна, поскольку данные расшифровки - это расширение формы отчета СКД.
  11. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Привычка все в модуле объекта делать. И автору тоже советую.
  12. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    Спасибо, парни, проверяю ещё раз свой отчёт...
  13. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    Что-то я не то делаю в самом начале. При обработке расшифровки ДанныеРасшифровки - это число, пытаюсь расшифровать - ошибка

    {Форма.ФормаОтчета.Форма(70)}: Ошибка при вызове конструктора (ОбработкаРасшифровкиКомпоновкиДанных)
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(Расшифровка,
    по причине:
    Несоответствие типов (параметр номер '1')

    Отладчик показывает: Расшифровка = Неопределено

    Из настроек формы отчёта: в ТП Результат обработка события "ОбработкаРасшифровкиДанных".

    В модуле объекта:

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

    (((((((((((((((((((( Почему не заполняется? Хочу расшифровать стандартной расшифровкой договор контрагента ((((
    Последнее редактирование: 23 апр 2015
  14. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    Наконец-то ясен смысл "Единственное уточнение - если вызов идет прям из формы отчета СКД строка ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; не нужна, поскольку данные расшифровки - это расширение формы отчета СКД." То что не работало в "ПриКомпоновкеРезультата", заработало в модуле формы в "Сформировать". Уфффф ... Спасибо всем! Теперь есть идея сделать не стандартную, а свою расшифровку....
  15. DmitryV
    Offline

    DmitryV

    Регистрация:
    17 апр 2011
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    А как сделать расшифровку на управляемых формах, например форма отчета как в УТ11? Если обработка расшифровки на клиенте, как получить переменную "СхемаКомпоновкиДанных"?
  16. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    А на сервер обратиться, не ?
  17. TopicStarter Overlay
    Elkis
    Offline

    Elkis Опытный в 1С

    Регистрация:
    15 окт 2009
    Сообщения:
    190
    Симпатии:
    1
    Баллы:
    29
    )))) Ну да. Посмотрите общие модули, должна быть стандартная функция что0то типа "ПолучитьРеквизитОбъекта"
  18. Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    а еще данные расшифровки надо инициализировать, желательно до всего "кода"

Поделиться этой страницей