|
Расшифровка СКД - Получить имя Поля при выводе таблицы | ☑ | ||
---|---|---|---|---|
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) большое спасибо ".ПолучитьРодителей()" похоже этот метод мне и нужен - попробую при первой возможности |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |