![]() |
![]() |
![]() |
|
Ошибка при очистке табличной части обработки | ☑ | ||
---|---|---|---|---|
0
slafor
22.03.18
✎
20:07
|
Существует обработка, в которой есть табличная часть.
Заполняю табличную часть по определенному алгоритму. Затем беру оттуда те строки, которые выбрал пользователь (по колонке "Выбрать" тип Булево), очищаю всю таб. часть (методом Очистить()) и заполняю ее новыми строками с измененными данными. Потом возникает потребность отреагировать на двойное нажатие пользователя на какой-либо строке таб. части и выполнить определенное действие. Узнать, на какую именно строку нажал пользователь, я могу только по Индексу строки (нумерация строк идет от нуля). Но почему-то индекс строки начинается не с 0, а с (0+КоличествоСтрокОчищеннойДоЭтогоТаблицнойЧасти), хотя бывшие до этого строки уже не существуют. Так и должно быть? Релиз 8.3.8. |
|||
1
Lexey_
22.03.18
✎
21:34
|
(0) покажи на картинке
|
|||
2
Cyberhawk
22.03.18
✎
21:40
|
Индекс <> номер строки
|
|||
3
slafor
22.03.18
✎
22:26
|
Ссылка на окно с формой обработки после нажатия кнопки "Заполнить": https://yadi.sk/i/XswGVSCs3TfAZK .
Дальше, для понимания сути вопроса, я внес в обработку некоторые изменения. При нажатии кнопки "Сравнить" происходит вызов следующей процедуры: &НаСервере Процедура СравнитьНаСервере() КоличествоСтрокДоОчистки = Объект.ТаблицаСоответствий.Количество(); Объект.ТаблицаСоответствий.Очистить(); КоличествоСтрокПослеОчистки = Объект.ТаблицаСоответствий.Количество(); Возврат; КонецПроцедуры &НаКлиенте Процедура Сравнить(Команда) СравнитьНаСервере(); КонецПроцедуры ТаблицаСоответствий - это табличная часть обработки. После выполнении метода Очистить() КоличествоСтрокПослеОчистки становится равным 0. Потом я вручную добавляю в табличную часть новую строку или опять загружаю строки в ТЧ из XML-файла, неважно как, главное - я добавляю туда новые строки. Далее, у меня есть событие выбора строки пользователем ("Выбор" - "ТаблицаСоответствийВыбор"). &НаКлиенте Процедура ТаблицаСоответствийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; сЗапуститьПриложение(ВыбраннаяСтрока); КонецПроцедуры &НаСервере Процедура сЗапуститьПриложение(ВыбраннаяСтрока) Строка = Объект.ТаблицаСоответствий[ВыбраннаяСтрока]; ПолноеИмяФайла = Строка.ПолноеИмяФайла; //сЗапуститьПриложение(ПолноеИмяФайла); ЗапуститьПриложение(ПолноеИмяФайла); КонецПроцедуры Так вот, параметр ВыбраннаяСтрока и должен содержать индекс выбранной пользователем строки (с 0), т.е. если строка одна, там должен быть 0. Но там содержится число, равное индексу выбранной строки + количеству строк ДО очистки. |
|||
4
slafor
22.03.18
✎
22:29
|
Прошу прощения за неточность - релиз платформы 8.3.9.1818.
|
|||
5
Lexey_
22.03.18
✎
22:29
|
(3) "параметр ВыбраннаяСтрока и должен содержать индекс выбранной пользователем строки" сам придумал?
|
|||
6
slafor
22.03.18
✎
22:54
|
(5) Понял, надо опираться не на ВыбраннуюСтроку, а на Элемент.ТекущиеДанные. Спасибо.
Только тогда непонятно, зачем вообще нужен параметр ВыбраннаяСтрока? |
|||
7
hhhh
23.03.18
✎
04:41
|
(6) это идентификатор, а не индекс. почтай справку про идентификатор строки.
|
|||
8
VladZ
23.03.18
✎
04:50
|
(0) "Заполняю табличную часть по определенному алгоритму. Затем беру оттуда те строки, которые выбрал пользователь (по колонке "Выбрать" тип Булево), очищаю всю таб. часть (методом Очистить()) и заполняю ее новыми строками с измененными данными. " - зачем нужны эти "нелепые телодвижения"?
|
|||
9
slafor
23.03.18
✎
16:34
|
(8) Затем, что по моему алгоритму иначе было бы сложнее:
1. Табличная часть заполняется именами файлов из указанного пользователем каталога. 2. Имена файлов содержат в себе дату и время их создания, но по определенной схеме. Я вытаскиваю из имен эту информацию и заполняю колонку "Дата файла" (просто взять дату создания или дату изменения файла нельзя, потому что они "почему-то" могут не совпадать). 3. Запросом ищу похожие даты звонков и сопоставляю их с датами файлов. Понимаю, что объясняю все весьма сумбурно, но вкратце это так: даты звонков, номера и прочее берется из XML-файла, предоставляемого оператором сотовой связи (каким именно, не скажу, а то сочтут за рекламу) и записываются в регистр сведений. А сами аудио-записи звонков берутся уже потом - из телефона, с которого ведутся разговоры. И вот мне почему-то показалось, что легче и быстрее было бы оперировать непосредственно с табличной частью, чем создавать несколько ТЗ. Но теперь мне кажется, что я ошибался. На производительность это практически не влияет. |
|||
10
Franchiser
гуру
23.03.18
✎
17:01
|
идентификатор строки <> индекс строки = номер строки-1
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |