|
Ошибка при удалении строки табличной части | ☑ | ||
---|---|---|---|---|
0
LeoKeyn
30.03.18
✎
09:37
|
Получаю очень интересную ошибку при удалении строки табличной части.
Когда действие происходит впервые все удаляется нормально, делаешь действие второй раз на этой же форме вылетает {Справочник.ФизическиеЛица.Форма.ФормаЭлемента1.Форма(284)}: Ошибка при вызове метода контекста (Удалить) Объект.КонтактнаяИнформация.Удалить(Элементы.КонтактнаяИнформация.ТекущаяСтрока); по причине: Недопустимое значение параметра (параметр номер '1') Код процедуры на всякий случай приведу весь: Совпадение = Ложь; Для Каждого Адрес Из Объект.КонтактнаяИнформация Цикл Если Элементы.КонтактнаяИнформация.ТекущиеДанные.ТипАдреса = Адрес.ТипАдреса И НЕ Адрес.НомерСтроки = Элементы.КонтактнаяИнформация.ТекущиеДанные.НомерСтроки Тогда Совпадение = Истина; КонецЕсли; КонецЦикла; Если Совпадение = Истина Тогда ОчиститьСообщения(); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = Строка(Элементы.КонтактнаяИнформация.ТекущиеДанные.ТипАдреса)+" уже заполнен. Вы можете исправить информацию, если данные поменялись"; Сообщение.Сообщить(); Объект.КонтактнаяИнформация.Удалить(Элементы.КонтактнаяИнформация.ТекущаяСтрока); КонецЕсли; Подскажите, пожалуйста, что за ерунда:-) |
|||
1
igorPetrov
30.03.18
✎
09:44
|
(0) Что не понятно из текста ошибки?
|
|||
2
FIXXXL
30.03.18
✎
09:45
|
(0) ставь красную точку на строку
Объект.КонтактнаяИнформация.Удалить(Элементы.КонтактнаяИнформация.ТекущаяСтрока); и смотри, что там в Элементы.КонтактнаяИнформация.ТекущаяСтрока |
|||
3
hhhh
30.03.18
✎
09:45
|
(0) в параметре должна быть строка
|
|||
4
LeoKeyn
30.03.18
✎
09:54
|
(3) Там и так строка
(2) Ставил, там номер строки-строка То есть все правильно по идее. Первый раз отрабатывает и удаляет. делаешь добавление второй раз - ошибка. |
|||
5
FIXXXL
30.03.18
✎
10:07
|
(4) в первый и второй раз одно и то же в параметре?
|
|||
6
FIXXXL
30.03.18
✎
10:11
|
ДанныеФормыКоллекция (FormDataCollection)
Удалить (Delete) Вариант синтаксиса: По индексу Синтаксис: Удалить(<Индекс>) Параметры: <Индекс> (обязательный) Тип: Число. Индекс элемента в коллекции. ТаблицаФормы (FormTable) ТекущаяСтрока (CurrentRow) Использование: Чтение и запись. Описание: Тип: Произвольный. Идентификатор текущей строки таблицы. нужен индекс, ты суешь идентификатор |
|||
7
FIXXXL
30.03.18
✎
10:12
|
ты по идентификатору одной коллекции пытаешься удалять данные в другой коллекции
один разик видимо прокатывает :) |
|||
8
hhhh
30.03.18
✎
10:20
|
(4) там не строка, а идентификатор строки. Если ничего не делал, то идентификатор равен индексу, всё в порядке. Но если что-то делал с тч: удалял строки, менял их местами, то уже идентификатор другой.
|
|||
9
LeoKeyn
30.03.18
✎
10:24
|
(7) (8) Хорошо, а как узнать идентификатор текущей строки?)
|
|||
10
Масянька
30.03.18
✎
10:26
|
В экзамена на спеца уже давно пора сделать задачу на удаление строки из таблицы :(
|
|||
11
LeoKeyn
30.03.18
✎
10:28
|
(10) Так вот просветите не сдававшего еще:-)
|
|||
12
LeoKeyn
30.03.18
✎
10:31
|
||||
13
Масянька
30.03.18
✎
10:31
|
(11) А ты возьми на листочке нарисуй :)-
|
|||
14
LeoKeyn
30.03.18
✎
10:33
|
(13) рисовал уже... Издеваться над только познающими не культурно
|
|||
15
Масянька
30.03.18
✎
10:36
|
(14) Я не издеваюсь. Я пытаюсь толкнуть в правильном направлении. Учение на своих ошибках дает результат.
Значит плохо рисовал... У тебя таблица в 10 строк. Ты удалил 6 строку. Что изменилось? |
|||
16
Малыш Джон
30.03.18
✎
10:38
|
(15) теперь в таблице нет 6-ой строки? :)
|
|||
17
LeoKeyn
30.03.18
✎
10:41
|
(15) (16) так удаляю я не по номе 2, а беру строку из текущей позиции Элементы.КонтактнаяИнформация.ТекущаяСтрока
|
|||
18
LeoKeyn
30.03.18
✎
10:41
|
(17) А следовательно в ней уже лежит правильный индекс(проверил отладчиком)
|
|||
19
Ц_У
30.03.18
✎
10:46
|
Выгрузи КИ в таблицу, очисти КИ, заполни из таблицы по условию
|
|||
20
Масянька
30.03.18
✎
10:55
|
(16) :(
(18) Это при открытии (или заполнении (что там у тебя)) сразу (!!!) правильный индекс. А после удаления "текущей строки" - что изменилось? |
|||
21
Малыш Джон
30.03.18
✎
10:56
|
(18) Твоя ошибка в том, что тебе тупо лень погуглить.
Один только поиск по форуму - уже кучу информации предлагает. https://www.forum.mista.ru/topic.php?id=728713 |
|||
22
dchumak
30.03.18
✎
11:08
|
1. Создаешь массив.
2. Перебираешь строки, которые подходят под условия добавляешь в массив. 3. Перебираешь массив, и делаешь удалить() передавая параметром строку массива. Все. А просто перебором удалять неправильно - при удалении строки таблица смещается, и не все строки могут быть удалены. |
|||
23
DrZombi
гуру
30.03.18
✎
11:10
|
(0) Могу предположить, что после удаления, у вас там значение "Неопределено", т.к. текущей строки нет :)
|
|||
24
DrZombi
гуру
30.03.18
✎
11:12
|
+(0) Элементы.КонтактнаяИнформация.ТекущиеДанные
и Элементы.КонтактнаяИнформация.ТекущаяСтрока Поместите лучше в переменные, и все же это разный способ доступа к данным, хотя ссылаются на одно и тоже :) |
|||
25
hhhh
30.03.18
✎
11:16
|
(23) нет, после удаления индекс будет 6, а идентификатор будет 7. В этом и проблема у автора.
|
|||
26
Масянька
30.03.18
✎
11:19
|
(25) Садись! Отлично!
Только ТС понял почему? И в чем разница? |
|||
27
hhhh
30.03.18
✎
11:22
|
(26) я сам пока не понял.
а разница, что допустим там всего 6 строк, ва идентификатор допустим будет 20. Тогда ошибка будет. |
|||
28
Масянька
30.03.18
✎
11:23
|
(27) Блин... Мальвины на вас нет :)
|
|||
29
hhhh
30.03.18
✎
11:28
|
если на опыте проверить. Создаем пять строк, тут же их удаляем, и потом опять создаем 5 строк. В отладчике смотрим: индексы 0,1,2,3,4, а идентификаторы строк: 5,6,7,8,9.
|
|||
30
FIXXXL
30.03.18
✎
11:45
|
(29) идентификатор - это просто число на время работы формы
открыл - совпадает с индексом удалил-добавил идентификатор+1 |
|||
31
LeoKeyn
30.03.18
✎
12:14
|
Спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |