Имя: Пароль:
1C
 
Ошибка при удалении строки табличной части
,
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
Причем все делаю то по инструкции :-)

http://v8.1c.ru/metod/faq2/answer.jsp?id=580
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
Спасибо)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn