Имя: Пароль:
1C
1С v8
СКД - переопределение поля для расшифровки
0 Stolz
 
04.04.14
10:51
Доброго всем времени суток!

Возникла проблема с переопределением поля для расшифровки. Попробую описать её на следующем примере. Сразу замечу, что пример сильно упрощён, чтобы яснее вычленить суть дела.

Допустим, есть программно формируемая схема компоновки данных с запросом примерно такого вида:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Ссылка,
    Наименование,
    Комментарий
ИЗ
    Справочник.Контрагенты

В табличном поле результата выводятся колонки Наименование и Комментарий, колонка Ссылка выводиться не должна. Однако при двойном щелчке на строке табличного поля должна открываться форма соответствующего элемента справочника Контрагенты. Поскольку схема компоновки данных формируется программно, и состав полей запроса заранее неизвестен, нет возможности нарисовать для неё макет поля, чтобы в нём задать выражение для расшифровки. Возможно, в процедуре ОбработкаРасшифровки как-то можно добраться до поля Ссылка, но, судя по итогам изучения форумов, это вряд ли возможно. Как быть?
1 Cube
 
04.04.14
10:56
(0) Как быть?
Разрешаю удалить поле "Наименование" и выводить вместо него поле "Ссылка", у которого выражение представления типа этого: "Ссылка.Наименование".
2 Stolz
 
04.04.14
11:18
(1)

Я уже упоминал, что приведён упрощённый пример лишь для пояснения сути вопроса. В реальности там нет поля Наименование, да и запрос выполняется вовсе не к справочнику контрагентов. А вот открывать объект по ссылке всё же необходимо.
3 Defender aka LINN
 
04.04.14
11:23
(2) Если уж ты пишешь отвлеченными примерами - будь, ять, готов этот отвлеченный пример преобразовать обратно в свою задачу. В (1) все написано, что тебе поможет ее сделать.
4 Cube
 
04.04.14
11:23
(2) А что там есть?
Можно, конечно, и дальше обсуждать сферических коней в вакууме, но я бы предпочел обсуждать реальные задачи...
5 Stolz
 
04.04.14
11:51
(3) В (1) написано о выводе представления в табличное поле. О том, как это сделать, вопрос не задавался. Вопрос был о переопределении поля для расшифровки. На это ответ не был дан.
6 Defender aka LINN
 
04.04.14
11:54
(5) А ты тугой, как я погляжу...
7 Stolz
 
04.04.14
11:56
(2) Хорошо, вот реальная задача. Запрос выглядит так:

ВЫБРАТЬ
    Ссылка,
    Этап1,
    Этап2,
    Этап3
ИЗ
    &ТаблицаЭтапов КАК ТаблицаЭтапов

Количество полей ЭтапX может варьироваться в зависимости от выбранных пользователем настроек. Требуется при двойном щелчке на строке табличного поля открывать форму объекта, на который указывает ссылка. Как можно видеть, никаких коней тут не наблюдается.
8 Stolz
 
04.04.14
11:57
(6) То есть, по существу тебе ответить нечего? Так бы и сказал с самого начала.
9 Stolz
 
04.04.14
12:03
(7) -> (4)
10 Defender aka LINN
 
04.04.14
12:03
(8) По существу тебе ответили с самого начала в (1).
(7) Вычисляемые поля + (1). Свободен.
11 Stolz
 
04.04.14
12:09
(10) Ты вопрос читал?
Спрашивалось, как переопределить расшифровку. При чём тут вычисляемые поля?
12 GenV
 
04.04.14
12:16
(11) В обработке расшифровки здесь нет? :
ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()
13 Cube
 
04.04.14
12:19
(7) Параметр расшифровки указать для поля нельзя.

Поэтому вижу два варианта:

1. Рисовать свой макет и передавать параметр расшифровки в него (не знаю, получится или нет)

2. Этап 1 выводить как сказано в (1), а при расшифровке всех последующих этапов искать этап 1 в коде (в ДанныхРасшифровки) и открывать...

Все варианты так себе...
14 Cube
 
04.04.14
12:20
Я бы вывел ещё одну колонку с ссылкой...
15 Defender aka LINN
 
04.04.14
12:24
(11) А ты ответ читал? Тебе какая нахрен разница, если выглядит одинаково?
16 barrgand
 
04.04.14
12:27
(11) Решение в (10), лучше подумай, а не распыляйся напрасно. Готового решения тут тебе не дадут, а на правильную мысль уже давно навели.
17 Stolz
 
04.04.14
12:32
(15) Ох, как с тобою тяжко-то. Читай вопрос: там сказано, что поле ссылки выводиться не должно и что пример упрощённый. Читай ответы ниже, там упомянуто, что поля в реальности другие. Что с чем должно «выглядеть одинаково»? И да, монитор себе протри, а то заплевал поди весь, гневный ты наш.
18 Stolz
 
04.04.14
12:34
(14) Спасибо за ответы в (13), попробую и отпишусь по результатам. Но ссылку выводить, увы, нельзя. :-(
19 Stolz
 
04.04.14
12:35
(16) Я бы и рад последовать твоему совету, да только не пояснишь ли, как вычисляемые поля связаны с расшифровкой?
20 Cube
 
04.04.14
12:42
(18) Ты выведи поле Ссылка, а в выражении представления напиши "Подробнее" или "Открыть этапы". Это будет "типа" кнопка для открытия...
21 Stolz
 
04.04.14
12:49
(20) Улыбнуло. :-) (я без иронии). Конечно, на самый крайний случай можно сделать и так, но хотелось бы остаться в пределах стандартного оформления выводимых данных. А то пользователи - они ведь и испугаться могут. :-)
22 Cube
 
04.04.14
13:03
(13) Мне кажется, через макеты должно получиться.
23 Stolz
 
04.04.14
13:56
(22) Ты прав, в общем случае это делается через макеты, как, например, и написано у Хрусталёвой на странице 211. Вот только в том-то и загвоздка, что нарисовать макет здесь нельзя. В макете, сделанном в конструкторе, можно определить конечное число полей (ячеек), к каковым и привязать выводимые поля. Тут же число выводимых этапов может варьироваться до некоего количества, заранее неизвестного. Так что предварительно изготовленный макет не поможет.
24 Cube
 
04.04.14
13:57
(23) Да всё должно получиться. Почитай ищо))
25 Stolz
 
04.04.14
14:11
(24) Ну, бесспорно, литература - штука полезная. Но, увы, такая ситуация там не описана, уж поверь, иначе я бы вопрос не задавал. К сожалению, второй вариант из (13) тоже не годится: там предлагается привязка к конкретному полю (Этап1), а пользователь в настройках СКД может его попросту исключить, и опереться будет не на что. Ладно, «будем подождать» (почти (С)), авось, ещё у кого-либо родятся идеи.
26 Stolz
 
07.04.14
09:39
(12) Нет, там только поле, по которому в данный момент выполняется двойной щелчок мышью. То есть, при двойном щелчке на поле Этап1 - это поле Этап1, при двойном щелчке на поле Этап2 - поле Этап2 и так далее. Самое досадное в том, что после двойного щелчка выдаётся контекстное меню, в котором при выборе пункта Расшифровать открывается диалоговое окно выбора поля, где в числе доступных полей выводится Ссылка. Впрочем, если в окне выбрать это поле, открывается новое окно того же отчёта, а не объект по ссылке. Похоже, что до поля ссылка как-то можно достучаться, да вот только как?
27 Cube
 
07.04.14
12:13
Чем макет не угодил? Там можно использовать любое поле для расшифровки же...
28 ам794123
 
07.04.14
12:29
(26)     Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля();
    Поле = Поля.Найти(Реквизит);
    Если Поле = Неопределено Тогда
        Возврат Неопределено
    Иначе
        Возврат Поле.Значение;
    КонецЕсли;
29 Stolz
 
07.04.14
12:44
(27) См. в (23): количество полей заранее неизвестно.
30 Stolz
 
07.04.14
12:49
(28) Да в том-то и дело, что в коллекции, возвращаемом методом ПолучитьПоля(), нет поля Ссылка. Об этом-то и говорится в (26).
31 Stolz
 
07.04.14
12:50
(30): возвращаемом -> возвращаемой
32 Cube
 
07.04.14
12:51
(29) И что? Не вижу проблемы...
33 ам794123
 
07.04.14
12:55
(30) Для коллекции существует метод Добавить. В чем проблема?
34 Stolz
 
07.04.14
12:55
(32) В нарисованном макете будет фиксированное количество ячеек. Например, ячейка для поля Этап1, ячейка для поля Этап2 и т.д. А в запросе этапов может быть сколько угодно. Можно, конечно, нарисовать ячейки от Этап1 где-то до Этап1000, так как вряд ли их будет больше. Но это как-то некомильфо, разве что на крайний случай.
35 Stolz
 
07.04.14
12:56
(30) А вот это уже любопытно, спасибо. Если это коллекция не фиксированная, должно получиться, попробую.
36 Stolz
 
07.04.14
12:57
(35) -> (33)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.