Управление текущей строкой табличной части документа (тонкий клиент)
Вроде сабж звучит банально, но как корректно управлять текущей строкой -- всю голову сломал, не вижу решения. Мож. кто занимался плотно этим вопросом.
текущая пратформа 8.3.734, тонкий клиент.
Задача следующая: идет набор документа с помощью сканера. Требуется сделать текущей новую строку или найденную строку в этом документе (когда товар уже был выбран). Делается это довольно просто.
Но как только пользователь удаляет, например, строки 1-3, начинаются танцы с бубном.
Объект.Товары.Индекс(СтрокаДокумента) получает индекс уже с учетом удаленных строк (т.е. фактически НомерТекущиестроки-1). А Элементы.Товары.ТекущаяСтрока имеют старые индексы. если пставить курсор на первую строку и заглянуть в это свойство, мы увидем значение 3, но не 0. И соответственно строка документа с номером 10 будет иметь индекс 12, но не 9. А метод Объект.Товары.Индекс(СтрокаДокумента) вернет для первой строки инд. 0, для десятой инд.9.
Кто не верит -- вставляем в любой документ код и ходим по табличной части сразу после открытия, потом удаляем несколько первых строк и опять ходим по табличной части. Смотрим на результат в окне сообщений. Потом можем переместить строку(ки) снизу вверх и посмотреть ее индекс.
Так как же все таки получить верный для свойства .ТекущаяСтрока индекс? Без бубна способы есть?
текущая пратформа 8.3.734, тонкий клиент.
Задача следующая: идет набор документа с помощью сканера. Требуется сделать текущей новую строку или найденную строку в этом документе (когда товар уже был выбран). Делается это довольно просто.
НайденныеСтроки=Объект.Товары.НайтиСтроки(НайденныйТовар);
Если ЗначениеЗаполнено(НайденныеСтроки) Тогда
СтрокаДокумента=НайденныеСтроки[НайденныеСтроки.ВГраница()];
Иначе
СтрокаДокумента=Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДокумента,НайденныйТовар);
КонецЕсли;
ИндексСтроки=Объект.Товары.Индекс(СтрокаДокумента);
СтрокаДокумента.Количество=СтрокаДокумента.Количество+1;
Элементы.Товары.ТекущаяСтрока=ИндексСтроки;
ПоказатьНо как только пользователь удаляет, например, строки 1-3, начинаются танцы с бубном.
Объект.Товары.Индекс(СтрокаДокумента) получает индекс уже с учетом удаленных строк (т.е. фактически НомерТекущиестроки-1). А Элементы.Товары.ТекущаяСтрока имеют старые индексы. если пставить курсор на первую строку и заглянуть в это свойство, мы увидем значение 3, но не 0. И соответственно строка документа с номером 10 будет иметь индекс 12, но не 9. А метод Объект.Товары.Индекс(СтрокаДокумента) вернет для первой строки инд. 0, для десятой инд.9.
Кто не верит -- вставляем в любой документ код
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
Сообщить(""+Объект.Товары.Индекс(Элемент.ТекущиеДанные)+" - "+Элементы.Товары.ТекущаяСтрока)
КонецПроцедуры
Так как же все таки получить верный для свойства .ТекущаяСтрока индекс? Без бубна способы есть?
По теме из базы знаний
- Лучшее копирование/вставка табличных частей документов
- Как вывести итоговый вес и объем на форму документа Заказ клиента. УТ 11.4
- Итоги в табличной части с учетом отбора (управляемая форма)
- Управление сборкой. Расширение для конфигурации СППР
- Инструменты разработчика "Инструментики" для тонкого клиента 1С
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ну почему ж не верит? )) Все правильно.
Выражение
возвращает не индекс строки, а идентификатор строки. А он для каждой строки постоянен.
Соответственно, свойству "ТекущаяСтрока" нужно присваивать не индекс, а идентификатор строки, получив его соответствующим методом.
Выражение
Элементы.Товары.ТекущаяСтрока
возвращает не индекс строки, а идентификатор строки. А он для каждой строки постоянен.
Соответственно, свойству "ТекущаяСтрока" нужно присваивать не индекс, а идентификатор строки, получив его соответствующим методом.
Элементы.Товары.ТекущаяСтрока = СтрокаДокумента.ПолучитьИдентификатор();
Может кому и поможет, тк сам ломал голову
Инвентаризация - наша Табличная часть
Все это делаем на клиенте
Инвентаризация - наша Табличная часть
Все это делаем на клиенте
НСтроки = объект.Инвентаризация.НайтиПоИдентификатору(Элементы.Инвентаризация.ТекущаяСтрока).НомерСтроки; // получаем номер строки
//код который меняет ваши табличные части
Идентификатор = Объект.Инвентаризация[НСтроки-1].ПолучитьИдентификатор();
Элементы.Инвентаризация.ТекущаяСтрока = Идентификатор;
Спасибо! При копировании строки и сортировки табличной части курсор прыгал на первую строку Тоже 2-3 часа ломал голову. Получилось так:
&НаКлиенте
Процедура ДанныеОВремениПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ТекСтрока = Элементы.ДанныеОВремени.ТекущаяСтрока;
НСтроки = Объект.ДанныеОВремени.НайтиПоИдентификатору(ТекСтрока).НомерСтроки;
УчетРабочегоВремениРасширенныйКлиент.ТабельДанныеОВремениПередНачаломДобавления(ЭтаФорма, Элемент, Отказ, Копирование, Родитель, Группа);
СортироватьПоВозрастаниюНаСервере();
НовыйИд = Объект.ДанныеОВремени[НСтроки - 1].ПолучитьИдентификатор();
Элементы.ДанныеОВремени.ТекущаяСтрока = НовыйИд;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот