Имя: Пароль:
1C
1С v8
Установить курсор на предыдущую выбранную строку в справочнике товары
,
0 prilforreal
 
28.09.17
10:00
Доброго времени суток форумчанам! Конфа самописная, 8.3 Уже очень долго долго мучаюсь с таким вопросом: Есть у нас иерархический справочник товары, нужно восстанавливать позицию выбора предыдущего элемента, стоит галка при открытии восстанавливать позицию, в форме списка (она же форма выбора) прописано ВосстанавливатьТекущуюСтроку=Истина; но к моему сожалению позиция восстанавливается только если элемент находится не глубже 3-о уровня, иначе возвращает в корень на папку в которой находится папка с данным элементом, поиск решения в гуглах результата не дал, помогите люди добрые!
1 DrShad
 
28.09.17
10:09
ну так не закрывайте при выборе
2 prilforreal
 
28.09.17
10:14
(1) Как это?
3 DrShad
 
28.09.17
10:17
ну вы же подбор в документ реализовываете?
4 prilforreal
 
28.09.17
10:22
(3) Да, подбор реализован, для удобного подбора и нужно восстанавливать позицию, но при выборе элемента он не сразу залетает в табличное поле документа, а нужно нажать кнопку заполнить, тогда при условии что он есть на складе элемент появляется в списке (Документ Ревизия)
5 DrShad
 
28.09.17
10:23
ЯННП
6 Serg_1960
 
28.09.17
10:26
"позиция восстанавливается только если элемент находится не глубже 3-о уровня" - не зная конфигурации сложно сказать, но такое "ограничение" - программное скорее всего. Озвучьте алгоритм восстановления позиции (если он есть).
7 prilforreal
 
28.09.17
10:33
(6) Процедура ТабличноеПоле1ПриАктивизацииСтроки(Элемент)
    Надпись1=ПолучитьОстатокТовара();
    ТекЭлемент=?(ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные=Неопределено,Справочники.Товары.ПустаяСсылка(),ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Ссылка);
    если ТТ<>ТекЭлемент тогда
        Если НЕ ТекЭлемент.ЭтоГруппа тогда
            ТТ=ТекЭлемент;    
            ТЦены.Очистить();//.УдалитьСтроки();
            Ц=Справочники.ЦеныТоваров.Выбрать(,ТТ);//создатьобъект("Справочник.ЦеныТоваров");
            Пока Ц.Следующий() Цикл
                СтрТЦены=ТЦены.Добавить();
                СтрТЦены.Тип=Ц.ТипЦенТоваров;
                СтрТЦены.Цена=Ц.Цена;                
            Конеццикла;
        конецесли;
    конецесли;
КонецПроцедуры

Процедура ПриОткрытии()
    // Вставить содержимое обработчика.
    ВосстанавливатьТекущуюСтроку=Истина;
        если ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные<>Неопределено тогда
        Тов=ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Ссылка;
        ЭлементыФормы.ТабличноеПоле1.Текущаястрока=Тов
    конецесли;
КонецПроцедуры
8 prilforreal
 
28.09.17
10:35
(6) Конфигурацию писал не я, я лишь ее правлю, и как знаете в чужих джунглях найти что-то не так то просто.
9 vicof
 
28.09.17
10:35
ну и г-код
10 vicof
 
28.09.17
10:36
Удали его полностью и напиши свой
11 prilforreal
 
28.09.17
10:43
(9) И все таки насчет восстановления позиции?
12 Serg_1960
 
28.09.17
11:06
Процедура ПриОткрытии()
  
  ЭлементыФормы.СправочникСписок.ВосстанавливатьТекущуюСтроку = Истина;
КонецПроцедуры
13 prilforreal
 
28.09.17
11:20
(12)  {Справочник.Товары.Форма.ФормаСписка.Форма(195)}: Поле объекта не обнаружено (СправочникСписок)
    ЭлементыФормы.СправочникСписок.ВосстанавливатьТекущуюСтроку = Истина;

Насколько я понимаю восстановление не работает из-за того что в справочнике дерево реализовано. Как быть в этом случае?
14 Сияющий Асинхраль
 
28.09.17
11:31
(13) В твоем случае скорее всего вместо СправочникСписок будет ТабличноеПоле1
15 prilforreal
 
28.09.17
11:35
(14) Ошибки не выдает, но позицию не восстанавливает
16 Serg_1960
 
28.09.17
11:57
Возможно позиционирование "теряется" при обработке событий формы, событий других табличных полей. Надо смотреть в алгоритмах / проверять в отладке.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.