Имя: Пароль:
1C
 
СКД, расшифровка: как получить получить данные полей текущей строки?
0 dave2000
 
29.03.18
18:50
Есть простой отчет на СКД:

  Работник    |   Подразделение    |    Начислено    |    Удержано    |    Премия
Иванов             Бухгалтерия           5000              100              200
Петров             Бухгалтерия           7000              200              800
Сидоров            Бухгалтерия           6000              100              300


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


Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    
    ЗначениеВЯчейке = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
    ИмяТекущегоПоля = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле;

    РаботникВСтроке = как получить работника??????

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


А как получить ссылку на работника, который находится в данной строке? Т.е. если кликаем на 7000, как нам определеить, что это Петров?
1 Boleev
 
29.03.18
19:07
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    СтруктураРасшифровки = Новый Структура("Работник,Подразделение");
    ПолучитьДанныеРасшифровкиСоСтруктурой(Расшифровка,СтруктураРасшифровки);
    
КонецПроцедуры
2 Boleev
 
29.03.18
19:08
&НаСервере
Процедура ПолучитьСтруктуруВозврата(ПолеИлиГруппировка,СтруктураПолей)
    МассивРодителей = ПолеИлиГруппировка.ПолучитьРодителей();
    Для Каждого Стр из МассивРодителей Цикл
        Если ТипЗнч(Стр) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
            ПолучитьСтруктуруВозврата(Стр,СтруктураПолей);
        ИначеЕсли ТипЗнч(Стр) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
            ПоляГруппировки = Стр.ПолучитьПоля();
            Для Каждого гСтр из ПоляГруппировки Цикл
                Если СтруктураПолей.Свойство(гСтр.Поле) Тогда
                    Если Не ЗначениеЗаполнено(СтруктураПолей[гСтр.Поле]) Тогда
                        СтруктураПолей[гСтр.Поле] = гСтр.Значение;
                    КонецЕсли;
                КонецЕсли;
                ПолучитьСтруктуруВозврата(Стр,СтруктураПолей);
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

&НаСервере
Функция ПолучитьДанныеРасшифровкиСоСтруктурой(Расшифровка,СтруктураВозврата);
    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    ПолучитьСтруктуруВозврата(Данные.Элементы[Расшифровка],СтруктураВозврата);
КонецФункции // ПолучитьДанныеРасшифровки()
3 dave2000
 
29.03.18
19:38
(1) (2) Спасибо, попробую!
4 dave2000
 
29.03.18
20:14
(3) К сожалению не сработало.

Дело в том, что

ПоляРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()

содержит лишь один элемент - колонку и значение ячейки, по которой мы кликнули. Поля "Работник" и "Подразделение" там отсутствуют :(
5 dave2000
 
29.03.18
20:33
Всё, разобрался! Нужно было создать макет поля и в качестве расшифровки указать, какие поля я там хочу видеть.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан