Имя: Пароль:
1C
1С v8
Как добиться такого переноса строк с одной таблицы в другую.
, ,
0 razbiralshik
 
20.12.17
16:08
Две табличеи на форме.
В одной выделяем строки, нажимаем кнопку и выделенные строки должны перенестись с другую табличку а из предыдущей удалится.
Сделал так:
    Для Каждого тек Из Элементы.ВсеТовары.ВыделенныеСтроки Цикл
        СтрВТ = ТоварыДляПечати.Добавить();
        ЗаполнитьЗначенияСвойств(СтрВТ, ВсеТовары[тек]);
        ВсеТовары.Удалить(ВсеТовары.Индекс(ВсеТовары.НайтиПоИдентификатору(тек)));
    КонецЦикла;


Но он не удаляет все строки и не все переносит. Если без удаления то нормально переносятся. При удалении строки в массиве строк становится на одну строку меньше, непонятно почему. Как сделать правильно?
1 Lexey_
 
20.12.17
16:11
(0) обратным циклом или удаляй после обхода коллекции
2 razbiralshik
 
20.12.17
16:17
(1) после удалять пробовал, результат тотже.
как обратным циклом по выделенным строкам?
3 Lexey_
 
20.12.17
16:20
(2) показывай, как пробовал
4 razbiralshik
 
20.12.17
16:22
Для Каждого тек Из Элементы.ВсеТовары.ВыделенныеСтроки Цикл
        СтрВТ = ТоварыДляПечати.Добавить();
        ЗаполнитьЗначенияСвойств(СтрВТ, ВсеТовары[тек]);
    КонецЦикла;
    Для Каждого тек Из Элементы.ВсеТовары.ВыделенныеСтроки Цикл
        ВсеТовары.Удалить(тек);
    КонецЦикла;
5 X Leshiy
 
20.12.17
16:23
>>При удалении строки в массиве строк становится на одну строку меньше, непонятно почему.

Поржал :)
6 Lexey_
 
20.12.17
16:24
(4) мда...
7 razbiralshik
 
20.12.17
16:25
(5) да понятно почему, ржи, просто я хз как описать чтобы всем угодить
8 DexterMorgan
 
20.12.17
16:25
(0) >>При удалении строки в массиве строк становится на одну строку меньше, непонятно почему.

сп

ВыделенныеСтроки (SelectedRows)
Использование:

Только чтение.
Описание:

Тип: Массив.
Содержит массив идентификаторов выделенных строк.


Давай думать вместе.
"Содержит массив идентификаторов выделенных строк."
"При удалении строки в массиве строк становится на одну строку меньше"
9 razbiralshik
 
20.12.17
16:25
(6) мда.
10 razbiralshik
 
20.12.17
16:26
(8) это я прекрасно знаю, вот решение найти пытаюсь
11 Lexey_
 
20.12.17
16:26
(4) добавляй в новый массив строки, которые нужно удалить, потом обходи его
12 razbiralshik
 
20.12.17
16:27
(11) делал, результата не дало, угадаешь почему?
13 Lexey_
 
20.12.17
16:29
(12) показывай, как делал
14 razbiralshik
 
20.12.17
16:29
(13) мда
15 Lexey_
 
20.12.17
16:39
(12) угадаю - в твоем коде нет НайтиПоИдентификатору()
16 Сияющий в темноте
 
20.12.17
16:39
выделенные строки обходим,переносим в новую таблицу и добавляем в отдельный массив
по окончании перебора перебираеи вновь созданный массив и удаляем все строки,которые в нем есть
17 razbiralshik
 
20.12.17
16:43
(15) не угодал
18 Lexey_
 
20.12.17
16:45
(17) код почему не показываешь?
19 X Leshiy
 
20.12.17
16:54
(17) Нижилей пирименых )))
20 razbiralshik
 
21.12.17
08:06
(18)
    МД = Новый Массив;
    Для Каждого тек Из Элементы.ВсеТовары.ВыделенныеСтроки Цикл
        СтрВТ = ТоварыДляПечати.Добавить();
        ЗаполнитьЗначенияСвойств(СтрВТ, ВсеТовары[тек]);
        МД.Добавить(тек);
    КонецЦикла;
    
    Для Каждого текс Из МД Цикл
        ВсеТовары.Удалить(ВсеТовары.НайтиПоИдентификатору(текс));
    КонецЦикла;


делаешь такой код на обе таблички и потом спустя несколько перекидывай он выдает:
{Документ.ПередачаТовараНаДоставку.Форма.ФормаКомплектовочнаяВедомость.Форма(26)}: Индекс находится за границами массива
        ЗаполнитьЗначенияСвойств(СтрВТ, ВсеТовары[тек]);


т.к. индекс не обнуляется... в этом главная проблема...
21 Lexey_
 
21.12.17
08:18
(20) а почему в одном цикле ты
используешь НайтиПоИдентификатору, а в другом нет?
22 razbiralshik
 
21.12.17
08:23
(21) ты прав, так сработало, спасибо ))
23 Buster007
 
21.12.17
10:35
А если так
Пока Элементы.ВсеТовары.ВыделенныеСтроки.Количество() Цикл
ВсеТовары.Удалить(ВсеТовары.НайтиПоИдентификатору(Элементы.ВсеТовары.ВыделенныеСтроки[0]));
КонецЦикла;
?