Как восстановить текущую строку в форме выбора номенклатуры

Опубликовал Руслан Хмельовський (stydent_zt) в раздел Программирование - Практика программирования

Восстановление (запомнить) текущую строку в форме выбора номенклатуры, управляемые формы.

Добрый день! В 1С: Предприятие, обычном приложении, можно восстановить позицию при выборе элемента из справочника в его списке: НастройкаСписка-> При открытии восстанавливать позицию. Было очень удобно пользователям, при последующем открытии нового документа, при новом выборе сохранялась позиция предыдущего выбора.

Но, в управляемых формах есть такой механизм - в форме списка в таблице нужно выставить свойство "Восстанавливать текущую строку" в Истину Рисунок. Но почему-то не работает.  

После долгих исканий чего-то полезного или  адекватного решения этой задачи в просторах интернета  ничего не нашел . Конечно, есть много статей на эту тему, например, http://www.forum.mista.ru/topic.php?id=647591, http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=586653 или эта чуть не по той теме, но принцип тот же http://forum.infostart.ru/forum9/topic136486/  да, были решения с добавлением реквизитов и сохранять выбранное значение, но это все как по мне не то.

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

&НаСервере

Процедура СохранитьНастройки(Номенклатуры)

    ПараметрыЗакрытия = Новый Структура;// Структура может кому надо сохранять не только строку

    ПараметрыЗакрытия.Вставить("Номенклатуры",Номенклатуры);

    ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ФормаВыбораНоменклатурыНастройкиФормы", ,      ПараметрыЗакрытия);

КонецПроцедуры

И да вызвать эту процедуру нада с

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


Вторая востанавлевать позицию строки при открытие . Первым дело открываем процедуру ПриОткрытии (Отказ) и там вызваете  Поцедуру ВостановитьСтроку() вот она:

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

Вот и все, заработало. Всем спасибо.

См. также

Комментарии
1. BigB (BigB) 156 06.03.17 17:06 Сейчас в теме
Я наверное неправильный, но у меня прекрасно работает со включенной галкой на списке "Восстанавливать текущую строку".
Silenser; +1 Ответить
2. Игорь Дайнеко (Dnki) 06.03.17 22:01 Сейчас в теме
Мысль автора на Нобеля явно не тянет, но я ее поддерживаю. Потому что сам такой прием использую.
И причина в том, что еще не видел ни одного пользователя, по доброй воле меняющего параметры журнала.