Имя: Пароль:
1C
1С v8
Запуталась с расшифровкой в СКД
,
0 tlg25
 
11.11.15
10:14
Первый раз делаю расшифровку в СКД, Хрусталёву читала, но не смола до конца разобраться: решаема ли моя задача и как.
Есть Отчёт с СКД-макетом (В макете "Детальные записи". И потом ещё будет строка с итогами). Специального объекта "Отчёт" не было, просто по кнопке форме элемента я создавала табличный документ и связывала его с СКД-макетом:
    СКД = Справочники.ДоговораДМС.ПолучитьМакет("МакетВыплатыКлиента");
    НастройкаСКД = СКД.НастройкиПоУмолчанию;
    Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
    Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;    
    Параметр1 = НастройкаСКД.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Клиент"));
    Параметр1.Значение = Застрахованный;
    Параметр1.Использование = Истина;
    
    Параметр = НастройкаСКД.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СтрокаПрейскуранта"));
    Параметр.Значение = СтрокаПрейскуранта;
    Параметр.Использование = Истина;
    Макет = Компоновщик.Выполнить(СКД, НастройкаСКД, Расшифровка);    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет, , , Истина);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);         

А теперь конечный пользователь захотел расшифроку. По двойному клику переход в документ/справочник ссылка на который есть в детальных данных в строке отчёта. Вроде поняла, после Хрусталёвой и гугления, что нельзя сделать расшифровку без специального объекта отчёт и созданной в нём формы. И что никакие стандартные расшифровки не будут работать для детальных записей. Я создала отчёт и форму в нём, я могу там прописать своё событие обработка расшифровки. НО мне надо, чтобы в эту в СКД
1 tlg25
 
11.11.15
10:17
(0) НО мне надо, что с СКД этой формы параметры передавались из формы справочника по кнопке автоматом, чтобы конечный пользователь эту форму отчёта в глаза не видел и ничего не должен был в ней нажимать, а для него по прежнему сразу как и раньше при нажатии на кнопку выдавался уже отчёт готовый, но в нём по двойному клику работала прописанная мной расшифровка.
2 DmitrO
 
11.11.15
10:22
Специальный объект Отчет для решения задачи и не нужен. Нужна просто специальная форма, в которой надо разместить табличный документ, и которая будет хранить и обрабатывать расшифровку.
3 tlg25
 
11.11.15
10:44
(2) Спасибо. Создала на форме невидимый реквизит типа "ТабличныйДокумент" и его использую. Правда пока нет ни пункта меню "расшифровать"(В конце концов расшифровку, конечно, надо по двойному клику, без дом. пунктов меню), ни реакции на событие "Выбор" у табличного документа. (не попадает в событие Выбор ) Но хотя бы никаких лишних объектов отчёт/форм, для пользователя. Но может какие-то свойства у него не выставила, буду сейчас смотреть/экспериментировать.
4 tlg25
 
11.11.15
11:31
(2) Да, Вы правы по специальную форму, увы. Невидимый объект "табличный документ", как я хотела - не работает. Отчёт выводится, как и выводился, но нет никакой реакции на нажатие. И только если этот табличный документ сделать видимым и кликать не в получающийся с его помощью отчёт, а в видимый реквизит на форме, происходит попадание в событие.
5 ИС-2
 
naïve
11.11.15
11:38
(4) у табличного документа должно быть установлено толькопросмотр = истина, чтобы работала расшифровка
6 ViSo76
 
11.11.15
11:39
Перем пРасшифровка;

// Замени Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных; на:

пРасшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;


Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    Перем ВыполненноеДействие;

    Если ТипЗнч( Расшифровка ) = Тип( "ИдентификаторРасшифровкиКомпоновкиДанных" ) Тогда
        СтандартнаяОбработка = Ложь;
        ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных( пРасшифровка, Новый ИсточникДоступныхНастроекКомпоновкиДанных( СхемаКомпоновкиДанных ) );

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

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

    КонецЕсли;

КонецПроцедуры


В ТабДок формы в событие "Обработка расшифровки" вставь название процедуры - РезультатОбработкаРасшифровки
7 ИС-2
 
naïve
11.11.15
11:40
не знаю что такое ТабДок. Но лучше нормально вывести на форму табличный документ и

  ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ТабДок);
8 ViSo76
 
11.11.15
11:46
(7) ТабДок это и есть ЭлементыФормы.Результат;
Просто в коде нет присвоения, но это и так понятно.
9 tlg25
 
11.11.15
12:22
(5) Спасибо, стояло изначально. Чтобы пользователь ничего там не правил.
10 tlg25
 
11.11.15
12:34
(8) Почти так и есть. Просто не весь код привела. Только у меня этот реквизит формы, имеющий тип "табличные документ", не "результат" называется, а по-своему, но это роли не играет. У меня не форма объекта отчёт теперь, когда сказали, что так извращаться не обязательно, а просто произвольная форма с реквизитом типа "табличный документ"
Спасибо за пример в (6). В нём не определена переменная СхемаКомпоновкиДанных, но я сама определила и положила свой СКД-макет  (СхемаКомпоновкиДанных = Справочники.ДоговораДМС.ПолучитьМакет("МакетВыплатыКлиента");)Буду с этим примером разбираться.
11 ViSo76
 
11.11.15
15:25
(10) Если изначально это отчёт, а не обработка, то СхемаКомпоновкиДанных уже инициализирована "Основной схемой компоновки данных"