Имя: Пароль:
1C
1С v8
v8: Расшифровка СКД - значение соседних полей по группировке
0 Нуф-Нуф
 
23.09.13
15:15
Простая СКД:

Группировка Контрагент
   Группировка ДетальныеЗаписи (с полями "НомерДоговора", "Наименование договора", "Дата Договора").

Сам запрос:
  
ВЫБРАТЬ
    ДоговорыКонтрагентов.Владелец КАК Контрагент,
    ДоговорыКонтрагентов.Наименование КАК Наименование,
    ДоговорыКонтрагентов.Код КАК Номер,
    ДоговорыКонтрагентов.Дата КАК Дата
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов


С помощью ПолучитьПоля() и значения - я получаю текущее значение ячейки - т.е. нажал на ячейку, содержащую наименование - получил наименование. но как в этот момент получить значение другого поля (например Контрагент или Дата)?
1 Нуф-Нуф
 
23.09.13
15:18
вот этот механизм (спер откуда-то):

&НаСервере
Функция  ПолучитьРасшифровку(Знач Расшифровка, Знач ДанныеРасшифровкиОтчета, ЗначениеРасшифровки) Экспорт
    
    ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    
    //Элемент =ДанныеРасшифровкиОбъект.Элементы[Расшифровка];
    Возврат ПолучитьЗначенияГруппировокИзРасшифровки(ДанныеРасшифровкиОбъект,Расшифровка);
    
КонецФункции

&НаСервере
Функция ПолучитьЗначенияГруппировокИзРасшифровки(ДанныеРасшифровки,ИдентификаторРасшифровки) Экспорт
    
    сооГруппировки=Новый Соответствие();
    ПолучитьГруппировки( сооГруппировки, ДанныеРасшифровки, ИдентификаторРасшифровки );
    Возврат сооГруппировки;
    
КонецФункции

&НаСервере
Процедура ПолучитьГруппировки( сооГруппировки, Знач ДанныеРасшифровки, Знач ИдентификаторРасшифровки )
    
    Родители=ДанныеРасшифровки.Элементы[ИдентификаторРасшифровки].ПолучитьРодителей();
    
    Для Каждого Родитель Из Родители Цикл
        ИдРодителя=Родитель.Идентификатор;
        ЭлементРасшифровки=ДанныеРасшифровки.Элементы[ИдРодителя];
        Если ТипЗнч( ЭлементРасшифровки )= Тип( "ЭлементРасшифровкиКомпоновкиДанныхПоля" ) Тогда
            ПоляРодителя = ЭлементРасшифровки.ПолучитьПоля();
            Если ПоляРодителя.Количество() > 0 Тогда
                Для Каждого Поле Из ПоляРодителя Цикл
                    сооГруппировки.Вставить(Поле.Поле,Поле.Значение);
                КонецЦикла;
                ПолучитьГруппировки( сооГруппировки, ДанныеРасшифровки, ИдРодителя );
            КонецЕсли;
        ИначеЕсли ТипЗнч(ЭлементРасшифровки) = Тип( "ЭлементРасшифровкиКомпоновкиДанныхГруппировка" )  Тогда
            ПолучитьГруппировки( сооГруппировки, ДанныеРасшифровки, ИдРодителя );
        Иначе
            // Странный тип
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры



он таким образом я могу получить поля только у группировки. у детальных записей я не могу получить значение других полей.

если же группировку "детальные записи" заменить на группировку "НомерДоговора, НаименованиеДоговора, ДатаДоговора" - тогда я могу получить значения соседних полей. Но дело в том, что мне нужны именно детальные записи
2 Feunoir
 
23.09.13
15:19
Я делал через макеты и собственные расшифровки. Но куча ограничений у этого метода.
3 Нуф-Нуф
 
23.09.13
15:22
(2) вариант, но мне не подходит
4 ИС-2
 
naïve
23.09.13
15:30
(0) можно использовать свойство поля Выражение представления (на первой закладке скд).
Я в аналогичной задаче, тупо пробегался по полям (как в ПолучитьГруппировки() ), а вот получить всю детальную запись одним махом не смог.
Если получиться, то выложите, пжс, решение
5 Нуф-Нуф
 
23.09.13
15:32
(4) как можно использовать это свойство?
и что значит пробегался по полям? это как в варианте когда у меня вместо детальных записей конкретные группировки?
6 Нуф-Нуф
 
23.09.13
15:41
как-то печально с активностью... в поиске полно тем про расшифровку, но такой постановкой вопроса всего несколько и без решений.

неужели никто не сталкивался с подобной задачей?
7 Feunoir
 
23.09.13
15:48
(6)  Что-то мне подсказывает, что нет адекватного универсального решения. Вот и молчит народ.

Из неуниверсальных способов могу предложить ещё пробежаться вверх-вниз по  расшифровке, то есть получить расшифровки +1/-1 от текущей. Но как корректно ограничить область поиска, сразу и не скажу.
8 ИС-2
 
naïve
23.09.13
15:51
(5) мне надо было сделать, чтобы в отчете выводился номер документа, а при расшифровке открывался сам документ.

да, тупо двигался влево или вправо по ДанныеРасшифровки.Элементы[ИдРодителя]

можно еще вывести результат отчета в ТЗ, но думаю для (0) не подходит.

Какая задача?
9 Нуф-Нуф
 
23.09.13
16:03
(8) задача - получить объект (и выполнить с ним манипуляции) по наименованию (номеру, дате) которого кликнули
10 Нуф-Нуф
 
23.09.13
16:26
вообщем как чувствовал что придется идти путем гамнокода - так и пришлось.

сделал как в (8). вынес "СсылкуНаОбъект" в выводимые поля (поставил для этого поля выражение представление " " и максимальную ширину 1 - чтобы это поле выводилось маленькой пустой колонкой). установил это поле последним в полях.

и теперь при клике по ячейке - в обработке расшифровки - просто тупо смещаюсь по индексу вправо (добавляю к индексу по 1), до тех по, пока не дойдут до поля с именем "СсылкаНаОбъект". И уже оттуда тягаю всю нужную мне инфу.


жесть короче...
11 Feunoir
 
23.09.13
17:18
(10) Попробуй ещё так поэкспериментировать:

Получить родительскую расшифровку текущей ячейки, которую расшифровывают, это должна быть группировка самого нижнего уровня (по логике), потом пробежаться вверх и вниз от текущей расшифровки собрать все поля с тем-же родителем. Это должны быть поля одной детальной записи. В принципе похоже на то, что ты и сделал, но без дополнительного поля.