Имя: Пароль:
1C
 
Расшифровка отчета на скд
,
0 СинийКот
 
21.11.19
10:07
Здравствуйте. Не подскажет кто-нибудь, как сделать расшифровку отчета, написанного на СКД, в случае, когда по двойному клику на ячейку должен открываться другой СКД-макет этого же отчета? Или макет - табличный документ созданной формы отчета. Ни то ни другое не получается.
1 toypaul
 
гуру
21.11.19
10:22
наверное надо начать с того, что успел сделать. и описать стартовые условия - УФ/ОФ, внешний/встроенный
2 toypaul
 
гуру
21.11.19
10:26
возможно это чем-то поможет http://catalog.mista.ru/public/1058110/
3 fisher
 
21.11.19
10:31
Гугл, Хрусталева. Тема заезженная.
Что такое "другой СКД-макет"? Другой вариант?
4 СинийКот
 
21.11.19
11:10
УФ. Внешний. Облазил весь инет. Помимо макета "ОсновнаяСхемаКомпоновкиДанных" есть еще два макета, один собран руками, другой сделан на СКД - они одинаковые, пытаюсь хоть какой-нибудь запустить. Это не другой вариант, если конкретно - там детализация по сотрудникам, количество которых указано в самом отчете (то есть имена, телефоны и т.д.). Есть форма отчета. Пытался в процедуре "ОбработкаРасшифровки" что-нибудь написать. Получалось вывести то идентификатор ячейки, то пустой табличный документ, но дальше этого не продвинулся.
5 toypaul
 
гуру
21.11.19
11:11
(4) так и напиши = "не понимаю как работает расшифровка". тогда книжки, яндекс, инфостарт
6 fisher
 
21.11.19
14:56
(4) А! Вообще другая схема СКД? Это сложнее. Но если у тебя не получается расшифровать с использованием обычного макета, то в эту сторону даже не суйся пока. А с обычным макетом я не очень понимаю, какие у тебя проблемы могут быть. Это же вывод обычной печатной формы, просто из события расшифровки?
7 fisher
 
21.11.19
14:57
Или проблема с получением нужных данных из расшифровки в событии расшифровки?
8 fisher
 
21.11.19
14:57
Тут могу пару заготовок подбросить.
9 СинийКот
 
21.11.19
15:45
(6) По сути да, табличный документ. Сформирован в модуле формы. Хотел в том же модуле формы сделать обработку расшифровки.
(7) И да, нужные данные не могу получить, в лучшем случае получаю идентификатор ячейки.
(8) Если не жалко чем-то поделиться, поделитесь.
10 fisher
 
21.11.19
16:05
(9) Это не идентификатор ячейки. Это индекс элемента данных расшифровки, которые лежат во временном хранилище. Адрес хранилища лежит в реквизите отчета "ДанныеРасшифровки" (обычно с таким именем его создает мастер, ссылка на него прописывается в свойствах отчета).
И вот оттуда уже достаешь чего надо. В БСП или в блоке работы с отчетами в типовых какие-то наработки на эту тему уже есть. Но под рукой вот что-то сам когда-то писал.
Вызываешь ПолучитьПараметрыРасшифровываемогоПоля(Расшифровка, ДанныеРасшифровки) и на выходе получаешь структуру, у которой в "ПоляГруппировок" будут значения всех группировок от текущей до вышестоящих.

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

Функция ПолучитьСтруктуруПолейРасшифровки(ЭлементРасшифровки) Экспорт
    
    МассивЭлементовРасшифровки = ПолучитьМассивРодительскихЭлементовРасшифровки(ЭлементРасшифровки);
    МассивЭлементовРасшифровки.Добавить(ЭлементРасшифровки);
    
    СтруктураПолей = Новый Структура;
    
    Для Каждого текЭлементРасшифровки Из МассивЭлементовРасшифровки Цикл
        
        Для Каждого текПоле Из текЭлементРасшифровки.ПолучитьПоля() Цикл
            
            СтруктураПолей.Вставить(СтрЗаменить(текПоле.Поле, ".", ""), текПоле.Значение);
            
        КонецЦикла;
        
    КонецЦикла;
    
    Возврат СтруктураПолей;
    
КонецФункции    

Функция ПолучитьМассивРодительскихЭлементовРасшифровки(ЭлементРасшифровки) Экспорт
    
    МассивРодителей = Новый Массив;
    
    МассивПрямыхРодителей = ЭлементРасшифровки.ПолучитьРодителей();
    
    Для Каждого РодительскийЭлементРасшифровки Из МассивПрямыхРодителей Цикл
        МассивВышестоящихРодителей = ПолучитьМассивРодительскихЭлементовРасшифровки(РодительскийЭлементРасшифровки);
        Для Каждого ЭлементРасшифровкиВышестоящегоРодителя Из МассивВышестоящихРодителей Цикл
            Если ТипЗнч(ЭлементРасшифровкиВышестоящегоРодителя) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
                МассивРодителей.Добавить(ЭлементРасшифровкиВышестоящегоРодителя);
            КонецЕсли;    
        КонецЦикла;
    КонецЦикла;
    
    Для Каждого ПрямойРодитель Из МассивПрямыхРодителей Цикл
        Если ТипЗнч(ПрямойРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
            МассивРодителей.Добавить(ПрямойРодитель);
        КонецЕсли;    
    КонецЦикла;
    
    Возврат МассивРодителей;
    
КонецФункции
11 СинийКот
 
22.11.19
17:19
(10) Спасибо огромное, с этим кодом все сделал.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший