Имя: Пароль:
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) Остап Сулейманович, снимаю шляпу. Все получилось как нельзя лучше. Вопрос закрыт. Всем большое спасибо.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший