Имя: Пароль:
1C
1С v8
Ошибка при очистке табличной части обработки
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
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой