Имя: Пароль:
1C
1С v8
Как заставить штатно УФ открываться в режиме "Восстанавливать текущую строку"?
,
0 ChAlex
 
16.01.13
12:02
Есть форма выбора справочника - управляемая. Для списка установлен флаг "Восстанавливать текущую строку". Форма выбора открывается командой ОткрытьФормуМодально("Справочник.Номенклатура.ФормаВыбора", Новый Структура("ЗакрыватьПриВыборе", Истина), ЭлементыФормы.Номенклатура)

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

Как заставить форму штатно восстанавливать позицию? Запоминать предыдущий выбор и передавать через параметры не предлагать. Ключевое слово "штатно"
1 regniws
 
16.01.13
12:06
чем ВосстанавливатьТекущуюСтроку не нравится
2 regniws
 
16.01.13
12:07
я в смысле того, что не понятно, что с ней не работает
3 ChAlex
 
16.01.13
12:08
(2) - при открытии формы не происходит позиционирование на строку списка по состоянию при закрытии предыдущего окна.
4 Vertalex
 
16.01.13
12:23
Мне кажется, штатно позиционируется только если форма открта стандартно без своего обрабоьчика из поля ввода. Позиция при этом   ставится на значении которое было в поле ввода. А эта команда восстановления не привязана к вызывающему полю ввода' по идее она восстанавливает строку, на которой форма была закрыта в послдний раз. Я такую задачу решил через параметр...
5 regniws
 
16.01.13
12:31
(3) странно как-то, в документации нет про то, что только для стандартных обработчиков. Тогда действительно только параметры и остаются
6 ChAlex
 
16.01.13
12:32
(4) - при вводе новой строки значение поля не проинициализировано, поэтому откуда открывать - в общем-то должно быть без разницы. В обычном интерфейсе - все работает нормально (то бишь строка восстанавливается). В управляемом - нет. Из поля - сейчас не помню, возможно и восстанавливается. В данном случае нужно открывать форму через процедуру. В документации по этому поводу ничего не сказано откуда и как открывается форма:
Расширение таблицы формы для динамического списка (Form table extension for dynamic list)
ВосстанавливатьТекущуюСтроку (RestoreCurrentRow)
Использование:

Чтение и запись.
Описание:

Признак необходимости сохранения и восстановления текущей позиции в списке при следующем открытии формы.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
7 regniws
 
16.01.13
12:37
А если открыть форму без передачи параметров
ОткрытьФормуМодально("Справочник.Номенклатура.ФормаВыбора", , ЭлементыФормы.Номенклатура)
8 ChAlex
 
16.01.13
12:38
В данный момент пока прихожу к более элегантному решению: ставлю для формы автосохранениеданныхвнастроках, и добавляю 2 реквизита: ПоследнийВыбор - сохраняемое значение и БлокироватьВосстановление - не сохраняемый и дальше

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   ЭтаФорма.БлокироватьВосстановление=(Параметры.ТекущаяСтрока<>Неопределено);
КонецПроцедуры

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
   ЭтаФорма.ПоследнийВыбор=ВыбраннаяСтрока;
КонецПроцедуры

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

Но блин возникает вопрос нафиг чего-то извращаться, если для этого созданы инструменты!!! Блин куда ни кинь - сплшная "Ж".
9 ChAlex
 
16.01.13
12:46
(7) - хоть с параметрами, хоть без - один фиг штатно не работает
10 ChAlex
 
16.01.13
13:08
(4) проверил: да только при открытии формы из элемента работает восстановление строки. В общем есть жигули и оглобли к ним
11 Vertalex
 
16.01.13
13:41
(8) значит не понимаем коцепции :-) если не выходт просто значит так лучше не длать...
12 ChAlex
 
16.01.13
14:02
(11) - ага. вот концепцию "контекстный поиск по строке" = "отбор" - я никак не понимаю, и не пойму сколько бы меня не убеждали. Есть контекстный поиск, а есть отбор - одно не заменяет другое. Просто в стиле 1С недодумать до всех мелочей модель, и то что не получается в рамках этой модели, назвать фичей и полетом к марсу.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.