Имя: Пароль:
1C
 
Подскажите по поводу расшифровки СКД, как получить всю строку
0 inkvizitr
 
17.03.20
10:58
Имеется отчет СКД, в нем есть два макета, основной и подчиненный.
Если пользователь будет кликать в поле Код_мероприятия(основного макета), то будет вызывается расшифровка, собираются данные и передаются во второй макет(подчиненный)
Все реализовал, все работает, но если пользователь поменяет в настройках СКД поля местами, данный алгоритм начинает ломаться, как правильнее получить все значения одной строки.

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

            Возврат РасшифровкаСтруктура;
        Иначе
            Возврат Расшифровка;
        КонецЕсли;
        Если ПолеРасшифровки.Поле = "Статья" Тогда
            РасшифровкаСтруктура.Вставить("Статья", ПолеРасшифровки.Значение);
            ЭлементРасшифровки = ДанныеОтчета.Элементы.Получить(СчетчикРасшифровки + 1);
            ПолеРасшифровки = ЭлементРасшифровки.ПолучитьПоля()[0];
            РасшифровкаСтруктура.Вставить("Код_мероприятия", ПолеРасшифровки.Значение);
            ЭлементРасшифровки = ДанныеОтчета.Элементы.Получить(СчетчикРасшифровки - 1);
            ПолеРасшифровки = ЭлементРасшифровки.ПолучитьПоля()[0];
            РасшифровкаСтруктура.Вставить("Код_статьи", ПолеРасшифровки.Значение);
            ЭлементРасшифровки = ДанныеОтчета.Элементы.Получить(СчетчикРасшифровки - 2);
            ПолеРасшифровки = ЭлементРасшифровки.ПолучитьПоля()[0];
            РасшифровкаСтруктура.Вставить("Подразделение", ПолеРасшифровки.Значение);
            
            Возврат РасшифровкаСтруктура;
        Иначе
            Возврат Расшифровка;
        КонецЕсли;
    КонецЕсли;
1 inkvizitr
 
17.03.20
11:03
может как то есть способ понять куда поле переместилось, сравнив пользовательские и начальные настройки
2 fisher
 
17.03.20
11:08
Это ты до расшифровок вышестоящих группировок так добираешься? :)
Извращенец. Гляди в сторону ПолучитьРодителей() у элемента расшифровки.
3 inkvizitr
 
17.03.20
11:16
(2) у меня там родитель всего один, данные тупо выводятся табличкой в которой около тысяча строк
4 fisher
 
17.03.20
11:21
(3) Так у этого родителя есть свой родитель и так далее. Дерево, рекурсия - вот это все.
5 inkvizitr
 
17.03.20
11:34
(4) вот мой пример у меня выводятся только детальные записи, как получить родителя?
https://ibb.co/6gBfmmq
6 fisher
 
17.03.20
11:48
(5) Если все в детальных записях, тогда не знаю. Не сталкивался...
7 inkvizitr
 
17.03.20
11:50
(6) а можно ли как то сделать, на вид как детальные записи, а по факту группировка используется к примеру
8 fisher
 
17.03.20
11:51
(7) Можно сделать составной группировкой. Но не уверен, что это решит проблему. С расшифровками по составной группировке я тоже не работал.
9 fisher
 
17.03.20
11:55
Еще можно попробовать в макетах СКД принудительно засунуть в данные расшифровки по каждому полю значения остальных нужных полей
10 toypaul
 
гуру
17.03.20
12:07
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.