Имя: Пароль:
1C
1С v8
Расшифровка СКД - Получить имя Поля при выводе таблицы
0 cube033
 
13.08.17
18:37
Задача: В БП 3.0 внешний отчет, СКД, вывожу данные таблицой. Строки - это "Статьи", Колонки - это "Подразделения", на пересечении ресурс "Сумма".
В интернете по поводу расшифровки описан примерно один и тот же принцип, который дает мне при расшифровке ячейки Статью, а качестве колонки слово "Сумма", то есть примеры в интернете отлично подходят для списков, но не для таблиц.

&НаСервере
Функция ПолучитьРасшифровкуНаСервере(Расшифровка)
    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля();
    Статья= Поля.Найти("Статьи");
КонецПроцедуры

Нужно как-то добраться до "Подразделения", проблема в том, что названием поля он считает имя ресурса "Сумма".
Осложняет все то, что названия типов вызывают кровотечение из глаз (осложняя поиск в СП) и построено всё на методах, так что просто покапаться в точке останова отладчиком  не получится. Может есть у кого-то пример?
1 Имитация работы
 
13.08.17
19:12
> вызывают кровотечение
> просто покапаться

Может лучше к врачу? За каплями?
А то у меня для тебя плохие новости - ты сейчас нашкодишь без понимания, а потом пользователь изменит структуру варианта отчта и ты опять почувствуешь себя плохо и помрешь, а мы тут отвечай.
2 DexterMorgan
 
13.08.17
19:28
Функция ПолучитьРекурсивноСтруктуруОтбора(Расшифровка, СтруктураОтбора = Неопределено)
    
        
        ТекущееПоле = ДанныеРасшифровки.Элементы[Расшифровка];
        
        Если СтруктураОтбора = Неопределено Тогда
            СтруктураОтбора = Новый Структура;
        КонецЕсли;
        ТекущееПоле = ДанныеРасшифровки.Элементы[Расшифровка];
        Если ТипЗнч(ТекущееПоле) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля")  Тогда
            Для каждого ТекЭл Из ТекущееПоле.ПолучитьПоля() Цикл
                Если не Найти(ТекЭл.Поле,".") > 0 Тогда
                    СтруктураОтбора.Вставить(ТекЭл.Поле, ТекЭл.Значение);
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;        
        Для каждого ТекЭл Из ТекущееПоле.ПолучитьРодителей() Цикл
            ПолучитьРекурсивноСтруктуруОтбора(ТекЭл.Идентификатор, СтруктураОтбора);    
        КонецЦикла;
       Возврат СтруктураОтбора;
    
КонецФункции // ПолучитьРекурсивноСтруктуруОтбора()
3 DexterMorgan
 
13.08.17
19:30
Тут правда коряво обходят ситуацию когда в отчете есть реквизиты через точку, потому что такие поля нельзя в структуре использовать. Лучше соответствие сделать
4 DexterMorgan
 
13.08.17
19:32
http://catalog.mista.ru/public/383839/

вот тут не только родителей поля получают, но и все соседние поля
5 DexterMorgan
 
13.08.17
19:36
Из ут11

ПроверкаПолейРасшифровки = Новый ТаблицаЗначений;
ПроверкаПолейРасшифровки.Колонки.Добавить("Значение");
ПроверкаПолейРасшифровки.Колонки.Добавить("ИмяПоля");
    
ДобавитьРодителей(ДанныеРасшифровки.Элементы[Расшифровка], ПроверкаПолейРасшифровки);


Функция ДобавитьРодителей(ЭлементРасшифровки, ПроверкаПолейРасшифровки)
    
    Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
        Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
            Отбор = Новый Структура("Значение, ИмяПоля", Поле.Значение, Поле.Поле);
            НайденныеСтроки = ПроверкаПолейРасшифровки.НайтиСтроки(Отбор);
            
            Если НайденныеСтроки.Количество() = 0 Тогда
                НовоеПоле = ПроверкаПолейРасшифровки.Добавить();
                НовоеПоле.Значение = Поле.Значение;
                НовоеПоле.ИмяПоля = Поле.Поле;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Для каждого Родитель Из ЭлементРасшифровки.ПолучитьРодителей() Цикл
        ДобавитьРодителей(Родитель, ПроверкаПолейРасшифровки);
    КонецЦикла;
    
КонецФункции
6 Имитация работы
 
13.08.17
20:30
(5) Ты, похоже, убил наповал нелюбителя методов.
7 DexterMorgan
 
13.08.17
20:37
(6) Да прям вчера похожую задачу решал, просто кинул что нарыл)
8 cube033
 
14.08.17
09:51
(1) Где бы таких пользователей найти? А то обычно попадаются - У меня отчет ничего не показывает!
- А Вы кнопу "Сформировать" нажимали?
- А надо?
(2)(4)(5) большое спасибо ".ПолучитьРодителей()" похоже этот метод мне и нужен - попробую при первой возможности
2 + 2 = 3.9999999999999999999999999999999...