Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расшифровка по данным из другого поля
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Система компоновки данных
pablo
Решил я обмануть судьбу и в отчете с 10 колонками числовых показателей (некоторые - вычислимые) сделать для каждой такой колонки в расшифровке вызов поясняющего отчета.
код получился такой
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыполненноеДействие;
    СтандартнаяОбработка = Ложь;  
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровкиОтчета, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных) );
    ДополнительныеДействия = Новый СписокЗначений;
    ДополнительныеДействия.Добавить("Открыть","Нырнуть"); // добавляем свое действие
    Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,,ДополнительныеДействия);
    Если Настройки<>Неопределено Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
        ЭлементыФормы.Результат.Очистить();
        СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
    Иначе
        ИндексТС=-1;
        ТС=Неопределено;
        Для каждого ЭлементРасшифровки из ДанныеРасшифровкиОтчета.Элементы цикл
            Если ТипЗнч(ЭлементРасшифровки)=тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") тогда
                продолжить;
            КонецЕсли;    
            ПолеТек=ЭлементРасшифровки.ПолучитьПоля()[0];
            Если ПолеТек.Поле="ТС" тогда
                ИндексТС=ЭлементРасшифровки.Идентификатор;
                ТС=ПолеТек.Значение;
            КонецЕсли;
        КонецЦикла;    
        Если ИндексТС=-1 тогда
            ПоказатьОповещениеПользователя("Расшифровка не возможна","Добавьте поле государственный номер в список доступных полей");
        иначе
            ПолеРасшифровки = ДанныеРасшифровкиОтчета.Элементы[Расшифровка].ПолучитьПоля()[0];
            Если ПолеРасшифровки.Поле = "ОбщийРасход" Тогда
                    
                ОтчетДоп=Отчеты.уатВедомостьПриходаРасходаГСМ.Создать();
                ОтчетДоп.ДатаКон=КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаКон").Значение.Дата;
                ОтчетДоп.ДатаНач=КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаНач").Значение.Дата;
                ОтчетДоп.Организация=Справочники.Организации.НайтиПоКоду("000000001");
                ОтчетДоп.ЗаполнитьНачальныеНастройки();
                Отбор1=ОтчетДоп.ПостроительОтчета.Отбор;
                Отбор1["ТС"].ВидСравнения=ВидСравнения.Равно;
                Отбор1["ТС"].Использование=Истина;
                Отбор1["ТС"].Значение=ТС;
                Док=Новый ТабличныйДокумент;
                ОтчетДоп.СформироватьОтчет(Док);
                Док.Показать(,,Истина);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;    

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

Естественно, в цикле по элементам расшифровки я обхожу их все и сопоставить нужный мне ТС (из правильной строки) не могу. Возможно ли тут как то исхитриться?

Про вариант создать список с 10 видами расшифровки для правильного поля я знаю, но сейчас хочу узнать другую возможность.
Vofka
Сделать 10 процедур типо Выполнить_ОбщийРасход(). Потом вместо

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


сделать так:

Если ИндексТС=-1 тогда
    ПоказатьОповещениеПользователя("Расшифровка не возможна","Добавьте поле государственный номер в список доступных полей");
иначе
    Попытка
        Выполниить("Выполнить_"+ДанныеРасшифровкиОтчета.Элементы[Расшифровка].ПолучитьПоля()[0]+"()");
    Исключение
        Сообщить("Выбранный показатель не расшифровывается");
    КонецПопытки;
КонецЕсли;
pablo
Проблема не в том участке кода.
        Для каждого ЭлементРасшифровки из ДанныеРасшифровкиОтчета.Элементы цикл
            Если ТипЗнч(ЭлементРасшифровки)=тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") тогда
                продолжить;
            КонецЕсли;    
            ПолеТек=ЭлементРасшифровки.ПолучитьПоля()[0];
            Если ПолеТек.Поле="ТС" тогда
                ИндексТС=ЭлементРасшифровки.Идентификатор;
                ТС=ПолеТек.Значение;
            КонецЕсли;
        КонецЦикла;

Здесь я нахожу всегда только значение последнего элемента из колонки ТС (аналогично можно найти первый), а мне нужен определенный (а какой именно я сам сказать не могу).
Т.е. Если я щелкну по пятой строке, как мне это отловить эту цифру 5?
Единственная подходящая идея - это по Элемент.ТекущаяОбласть.Имя, но я не знаю, как вычислить сколько строк ушло на шапку таблицы.
Vofka
Так и не понял что вы хотите сделать.
pablo
для 10 разных колонок нужно в расшифровке выдавать разные отчеты. в качестве параметров в эти отчеты нужно передавать значение из 11-й колонки. (у меня есть ТС и 10 его параметров вычисляемых за период. Нужно при расшифровке каждой колонки выдавать свой отчет. Из стандартной расшифровки я могу получить имя колонки, к которой относится поле, по которому щелкнули и значение поля. Для правильной формировки отчета мне еще нужно указать ТС, для которого получается расшифровка, т.е. мне нужен хотя бы номер строки, к которой относится поле, по которому щелкнули). Если бы такое поле было одно, то можно было бы использовать "Выражение представление". Но такой финт не подходит для полей, по которым вычисляются итоги.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.