Имя: Пароль:
1C
 
8.3. Обычное приложение.Обработка расшифровки.Получить значение всей тек строки
0 SeiOkami
 
07.10.14
13:01
Здравия всем!
Никак разобраться не могу. Как получить значение всех полей тек. строки?

Получаю поля так: ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()
Поле там одно - то, по которому пользователь и клацнул
А как получить значение всей строки, по полю которой клацнули?
Могу получить значения группировок, в которые входит тек. поле, но вот как красиво получить тек. строку не пойму.

Единственное, что нашёл: если уменьшить выполнить ДанныеРасшифровки.Элементы[Расшифровка-1], то получишь предыдущее поле. Но это ужасный способ.
1 DmitrO
 
07.10.14
13:11
ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей()
2 SeiOkami
 
07.10.14
13:12
(1), писал в (0)
Это получение родителя, а не тек. строки
3 DmitrO
 
07.10.14
13:16
ну строка идентифицируется, ведь группировкой по какому-то полю (ну или несколько полей)
4 DmitrO
 
07.10.14
13:16
если это не детальные записи конечно..
5 SeiOkami
 
07.10.14
13:18
(4), это детальные записи. Получив группировку, к которой они относятся, я не получу значение тек. строки. По крайней мере не знаю как получить.
6 DmitrO
 
07.10.14
13:32
а точно у родителя (группировка детальных записей) в полях пусто?
7 SeiOkami
 
07.10.14
13:34
(6), у родителя в полях только он сам
8 DmitrO
 
07.10.14
13:36
а, т.е. это верхняя группировка, понял..
9 SeiOkami
 
07.10.14
13:38
(8), структура такая

Таблица
Строки
   группировка "Контрагент"
     <Детальные записи> (Документ, сумма и др.)

Пользователь клацает на сумму в детальных записях
Нужно получить в обработке расшифровке значение не только суммы, но и документа и других полей в тек. строке
10 DmitrO
 
07.10.14
13:48
тут тогда только по тупому можно:
сначала получаем родителя
берем его идентификатор увеличиваем на 1 и получаем значения элементов расшифровки и его поля и так далее пока не получим тип ЭлементРасшифровкиКомпоновкиДанныхГруппировка (это значит пошла следующая строка), либо исключение - это значит отчет кончился..
11 DmitrO
 
07.10.14
13:49
вообще говоря в твоей задаче действия по расшифровке зависят от состава выбранных полей, а если среди них не окажется нужных?
12 DmitrO
 
07.10.14
13:50
например пользователь удалит поле на присутствие которого расшифровка рассчитывает?
13 SeiOkami
 
07.10.14
13:51
(12), Если я получу все значения строки, то смогу определить есть ли в ней нужное, аль нет.
14 SeiOkami
 
07.10.14
13:52
(10),
если я дойду до след. группировки, то не факт, что это след. строка. В одной группировке может быть штук 10 строк. Я нажимаю на 5ую, а след. группировка идёт после 10ой
15 DmitrO
 
07.10.14
13:54
ну, определишь.. что нет какого-то поля, и что дальше? предупреждение пользователю: "невозможно отработать расшифровку потому что нет такого-то поля"?
16 DmitrO
 
07.10.14
13:55
(14) это да, надо еще проанализировать настроки и определить сколько полей выводится в строке :)
17 DmitrO
 
07.10.14
13:55
*проанализировать настройки
18 DmitrO
 
07.10.14
13:56
короче, гадость так-то ))
19 DmitrO
 
07.10.14
14:00
получается они зря не сделали для группировки детальных записей формирование элемента расшифровки типа ЭлементРасшифровкиКомпоновкиДанныхГруппировка, ибо в настройках это все таки группировка(!)
20 SeiOkami
 
07.10.14
14:01
Самое обидное, что я помню, что уже как-то делал подобную фигню... А как и где не помню (
21 DmitrO
 
07.10.14
14:04
да я тоже делал что-то подобное, и пришел к выводу что никакие соседние выведенные значения лучше не использовать а по данным родителей расшифровки надо получать (возможно уже посчитанные и выведенные) данные снова из базы
22 SeiOkami
 
07.10.14
14:13
Кто-нибудь же должен знать? Ап
23 SeiOkami
 
07.10.14
14:19
Вот когда троллить, то сразу куча-мала )
24 hhhh
 
07.10.14
14:35
(23) ну, в типовой слабО глянуть?


    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    
    //определим какое поле расшифровывается
    МассивПолейРасшифровки = ТиповыеОтчеты.ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровки);

    Для Каждого Элт Из МассивПолейРасшифровки Цикл
25 SeiOkami
 
07.10.14
14:40
(24), не слабо. Эта функция возвращает массив родителей. А мне нужны поля текущей строки
26 hhhh
 
07.10.14
15:10
(25) ну пробуйте

ТиповыеОтчеты.ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровки,, Истина);
27 SeiOkami
 
07.10.14
15:14
(26), ну он выведет мне в добавок к родителю ещё и ресурс. Но это мне не нужно
28 SeiOkami
 
07.10.14
15:14
Нашёл способ. Суровый, но всё же.

1. Добавляем вычисляемые поля на каждое поле, которое нужно получить в расшифровке. Вычисляемое поле просто дублирует оригинальное.

2. Эти вычисляемые поля делаем ресурсами с функцией "Массив(НашеВычисляемоеПоле)".

3. Далее создаём в СКД макет для того поля, по клацанию которого хотим получить все наши вычисляемые значения. И в макете в поле "Расшифровка" пишем что-нить, например, "ДанныеСтроки". В параметрах к полю появится таблица, которую можно заполнить нашими вычисляемыми полями.

4. В результате в обработке расшифровки при выполнении ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()  мы получаем не одно поле, а все те, которые указали в макете.


Может быть ест способ лучше, но я пока не нашёл.
P.S. махинации с вычисляемыми полями нужны для того, чтобы не делать настоящие поля ресурсами. Если я указываю поле НЕ ресурс, то отчет выпадает с ошибкой. Возможно это лишь потому, что я привязывал всё к полю, который является ресурсом.


В общем, если кому поможет это, то буду рад =)