Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Расшифровка по данным из другого поля , это не дубль похожей темы, а ее некоторое развитие          
pablo Подменю пользователя
сообщение 02.10.14, 14:17
Сообщение #1

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

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

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

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

Про вариант создать список с 10 видами расшифровки для правильного поля я знаю, но сейчас хочу узнать другую возможность.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Vofka Подменю пользователя
сообщение 02.10.14, 15:53
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Сделать 10 процедур типо Выполнить_ОбщийРасход(). Потом вместо

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


сделать так:

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

pablo Подменю пользователя
сообщение 02.10.14, 16:01
Сообщение #3

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

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

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


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Vofka Подменю пользователя
сообщение 02.10.14, 20:13
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Так и не понял что вы хотите сделать.

pablo Подменю пользователя
сообщение 03.10.14, 8:11
Сообщение #5

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

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


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 11:01
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!