Форум Кладовочки АЛьФ`а

Обсуждение проектов => Дружественные проекты => Тема начата: АЛьФ от 19 марта 2025, 13:21

Название: Глюк текущей строки табличного поля 1С++
Отправлено: АЛьФ от 19 марта 2025, 13:21
Внезапно обнаружил неприятный глюк.
Табличное поле строится с помощью поставщика данных "ПоставщикДанныхODBC.MSSQL" на основе справочника. В качестве ключевого поля установлен ID элемента справочника. Для сохранения текущей строки при обновлении табличного поля используется такой вот элементарный код:
//
текСтрока = ТабличноеПоле.ТекущаяСтрока;
ТабличноеПоле.ПоставщикДанных.Обновить(текСтрока);
Вроде все должно работать. Но сегодня обнаружил, что текущая строка прыгает после обновления. Натыкал вывод значения переменной "текСтрока" и свойства "ТабличноеПоле.ТекущаяСтрока" до и после вызова метода Обновить(). Получаю на некоторых строках вот такое:
до: '    8W   ' :: '    8W   '
после: '    8C   ' :: '    8W   '
Т.е. в текСтрока нормально помещается ID элемента, но после обновления текущая строка содержит совсем другой ID и строка, соответственно, устанавливается другая. Пробовал после обновления напрямую присваивать:
//
текСтрока = ТабличноеПоле.ТекущаяСтрока;
ТабличноеПоле.ПоставщикДанных.Обновить();
ТабличноеПоле.ТекущаяСтрока = текСтрока;
Глюк не ушел.
Но!
Если и в Обновить() передавать строку, и после присвоить напрямую:
//
текСтрока = ТабличноеПоле.ТекущаяСтрока;
ТабличноеПоле.ПоставщикДанных.Обновить(текСтрока);
ТабличноеПоле.ТекущаяСтрока = текСтрока;
Текущей становится нужная строка.

Вот что за на фиг?
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: АЛьФ от 19 марта 2025, 13:28
А мы еще гнали на транспортный отдел, что это у них глюки или они мышкой дергают сильно...
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: Харлампий Дымба от 19 марта 2025, 17:51
Может Обновить() ещё не может найти новую строку и перепозиционирует ТекущаяСтрока() на предыдущую/первую/последнюю? Типа такого https://1cpp.ru/forum/YaBB.pl?num=1181142885/all
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: Djelf от 19 марта 2025, 19:02
При Обновить() ТП вылетает достаточно стабильно, при Пречитать() не вылетает (или вылетает значительно реже), имхо.
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: АЛьФ от 19 марта 2025, 21:36
Цитата: Харлампий Дымба от 19 марта 2025, 17:51Может Обновить() ещё не может найти новую строку и перепозиционирует ТекущаяСтрока() на предыдущую/первую/последнюю? Типа такого https://1cpp.ru/forum/YaBB.pl?num=1181142885/all

Изначально я не передавал в Обновить текущую строку. Когда добился воспроизводимости глюка, начал комбинировать разные способы установки.
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: АЛьФ от 19 марта 2025, 21:37
Цитата: Djelf от 19 марта 2025, 19:02При Обновить() ТП вылетает достаточно стабильно, при Пречитать() не вылетает (или вылетает значительно реже), имхо.

Вот это странно. У меня много лет работает и никогда не вылетала.
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: trad от 21 марта 2025, 10:51
Почему вместо всего этого не использовать ТабличноеПоле.ОбновитьСтроки() ?
Этот метод и обновляет строки и сохраняет текущую строку
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: trad от 21 марта 2025, 10:53
Если ТП вылетает, то скорее всего не соблюдается уникальность ключа (или идполе)
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: АЛьФ от 21 марта 2025, 15:59
Цитата: trad от 21 марта 2025, 10:51Почему вместо всего этого не использовать ТабличноеПоле.ОбновитьСтроки() ?
Этот метод и обновляет строки и сохраняет текущую строку

Исторически так сложилось. Насколько я помню, ОбновитьСтроки() не обновляло данные когда поставщик - запрос с параметрами. Но могу ошибаться.
upd. Вспомнил. Из-за того что ОбновитьСтроки() только перечитывает данные строк, но не обновляет выборку.
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: trad от 21 марта 2025, 19:04
хм ???
почти везде применяю ОбновитьСтроки и если, допустим, в таблице появились новые строки, то они появляются в ТП
Название: Re: Глюк текущей строки табличного поля 1С++
Отправлено: АЛьФ от 22 марта 2025, 07:49
Цитата: trad от 21 марта 2025, 19:04хм ???
почти везде применяю ОбновитьСтроки и если, допустим, в таблице появились новые строки, то они появляются в ТП

Если источник таблица, то да. В этом случае и сам применяю этот метод. А вот если источник запрос, то у меня были именно описанные проблемы с обновлением состава выборки.
Может я чего и путаю, конечно. Попробую ещё потестить.