Имя: Пароль:
1C
1С v8
УФ. Нестандартный выбор документа
0 akhmadey
 
17.07.15
07:02
В поле табличной части нужно выбрать документ с использованием собственной формы выбора. В этой форме есть динамический список с установленным свойством РежимВыбора. Вроде бы все работает, но в этом списке есть поле-гиперссылка, которая открывает другой документ. Суть в том, что перед тем, как сделать выбор, может возникнуть необходимость посмотреть документ по гиперссылке. При нажатии на гиперссылку документ открывается, но и выбор тоже происходит. Если вместо динамического списка использовать таблицу значений, то нет выбора по двойному щелчку, зато документ открывается без лишних телодвижений. Вопрос: можно ли научить динамический список не производить выбор при нажатии в поле с гиперссылкой? Или все-таки использовать таблицу значений и кнопку для осуществления выбора?
1 samozvanec
 
17.07.15
08:50
у ТЗ есть событие Выбор
2 akhmadey
 
17.07.15
09:06
(1) Проблема в том, что ТЗ не позволяет осуществить выбор и закрыть форму по двойному щелчку. Происходит просто редактирование поля. А если поле сделать гиперссылкой, то с помощью этого события можно, например, отрыть документ, который в этом поле есть. Я совершенно не против использовать ТЗ, но чтобы тогда можно было выбирать можно было двойным щелчком, а не редактировать поля.
3 Остап Сулейманович
 
17.07.15
09:12
(0) В таком варианте РежимВыбора убить на месте.
Пользовать ОповеститьОВыборе в нужных вам местах и ситуациях.
4 butterbean
 
17.07.15
09:13
(2) можно сделать ТолькоПросмотр, обрабатывать событие Выбор, закрывать форму программно... но я бы не парился и просто в форме с дин. списком убрал гиперссылку из таблицы на форму, и менял ее при активизации строки
5 akhmadey
 
17.07.15
09:24
(3) Если убить режим выбора, то он будет просто открывать документ, который должен быть выбран, вместо того, чтобы выбрать его в поле таблицы значений.
6 Остап Сулейманович
 
17.07.15
09:28
(5) Это почему? Как запрограммируешь выбор так он и отработает. Запрограммируешь открыть - откроет, запрограммируешь вернуть как значение выбора оно так и сделает.
Стандартно - да. Откроет. НО система позволяет отказаться от стандартной обработки и выполнить ее так, как нужно в конкретном случае.
7 akhmadey
 
17.07.15
09:30
(6) То есть, если я правильно понял, отменить стандартную обработку и для каждого поля описывать необходимые действия?
8 Остап Сулейманович
 
17.07.15
09:33
(7) Что значит "для каждого поля"? Ты выбор где выполняешь? В табличном поле? Вот его событие и переопредели. А там уже внутри смотри какая колонка сейчас текущая. Гиперссылка - открыли. Не гиперссылка - сказали, что это нужно выбрать.
9 akhmadey
 
17.07.15
09:38
(8) Так, не совсем понятно, пойдем другим путём. На сегодняшний день Обработчик выбора выглядит таким образом:

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
        Если Поле.Имя = "СписокСсылка" Тогда
            ПоказатьЗначение(Неопределено, Элементы.Список.ТекущиеДанные.Ссылка);
        ИначеЕсли Поле.Имя = "СписокПоступление" Тогда
            ПоказатьЗначение(Неопределено, Элементы.Список.ТекущиеДанные.Поступление);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Что не так?
10 Остап Сулейманович
 
17.07.15
09:44
(9) Не отключена СтандартнаяОбработка. Поэтому вместе с ПоказатьЗначение... выполняется выбор.
11 akhmadey
 
17.07.15
09:52
(10) При ее отключении не происходит выбора по двойному щелчку, зато как нужно открываются документы. Если при таком раскладе все-таки не убивать РежимВыбора, то выбор будет происходить по нажатию кнопки Выбор в командной панели формы. В принципе, пользователю, может и подошел такой вариант, но это как-то не по-спортивному. Хочется все-таки использовать двойной щелчок мышью... Либо убедиться, что это нереально и успокоиться ))).
12 Остап Сулейманович
 
17.07.15
09:58
(11) Не нужно стандартную обработку выключать для любого случая.
Ну возьми же проверь текущую колонку и реши что делать. Например так:

Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    Если Поле.Имя = "СписокСсылка" Тогда
        СтандартнаяОбработка = Ложь; //В этом случае выбор не нужен.
        ПоказатьЗначение(...);
    ИначеЕсли Поле.Имя = "СписокПоступление" Тогда
        СтандартнаяОбработка = Ложь; //И в этом случае выбор не нужен.
        ПоказатьЗначение(...);
    КонецЕсли;
    //В любом другом выбор выполниться сам.
КонецПроцедуры
13 Остап Сулейманович
 
17.07.15
10:00
+ (12) Вот это вот :
Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
не нужно. Потому что в случае когда на что-то нажали - то значит это что-то есть. И проверка на то, что этого что-то нет не имеет смысла.
14 akhmadey
 
17.07.15
10:16
(13) Остап Сулейманович, снимаю шляпу. Все получилось как нельзя лучше. Вопрос закрыт. Всем большое спасибо.