Имя: Пароль:
1C
 
заполнить ТЗ данными из массива
,
0 Вебер
 
01.09.15
05:36
закидываю ТЗ в массив, манипулирую массивом.Теперь хочу полученный массив закинуть обратно в ТЗ. Делаю так

ДанныеНаборовЗаписей.Хозрасчетный.Очистить();
       Для Каждого Строка Из Строки Цикл
          НоваястрокаТЗ  = ДанныеНаборовЗаписей.Хозрасчетный.Добавить();
           ЗаполнитьЗначенияСвойств(НоваястрокаТЗ , Строка);
       КонецЦикла;

но при использовании Очистить() для ТЗ, массив тоже очищается 0_0 (пишет-строка была удаленна)
не хочется изобретать велосипед....
посоветуйте что нибудь адекватное ?
1 GreatOne
 
01.09.15
05:39
1) отладчик
2) используй нормальные имена переменных. СтрокаТЗ к примеру. ТЗ вместе Строки.
2 Альбатрос
 
01.09.15
05:54
(0) Потому что в массиве хранятся ссылки на строки ТЗ
3 Брегорьян
 
01.09.15
05:55
манипулировать ТЗ - не вариант?
4 Вебер
 
01.09.15
06:57
при использовании ПостроительЗапроса я получу свою ТЗ или копию ?
5 GreatOne
 
01.09.15
07:05
(4) можно вообще ничего не получить
6 Cube
 
01.09.15
07:35
Что-то мне подсказывает, что ТС получил массив строк своей ТЗ методом НайтиСтроки и, не изучив СП, удивляется полученному результату... Если так, то он даже и не ведает, что загружать назад не надо, "оно само" (с) там поменялось уже...
7 Вебер
 
01.09.15
09:02
(6) проверил, надо, "оно само" туда не попадает
вот весь код

Отбор = Новый Структура();     Отбор.Вставить("СчетКт",ПланыСчетов.Хозрасчетный.НайтиПоКоду("44.01"));
     Строки = ДанныеНаборовЗаписей.Хозрасчетный.НайтиСтроки(Отбор);    
      ИндексЭлемента=0;
    числоСтрок=  Строки.количество();
    Пока ИндексЭлемента<числоСтрок Цикл
            Если  (Строки[ИндексЭлемента] .СубконтоКт1= УслугиГПМ) или   (Строки[ИндексЭлемента] .СубконтоКт1=ТекущеееСодержаниеПодъездныхПутей)
             Тогда
             Строки.удалить(ИндексЭлемента);
             числоСтрок=числоСтрок-1;
             ИндексЭлемента=ИндексЭлемента-1;
            Продолжить;
                КонецЕсли;    
            ИндексЭлемента=ИндексЭлемента+1;
    КонецЦикла;
8 Брегорьян
 
01.09.15
09:06
СтрокиСовсемНеДерева = ДанныеНаборовЗаписей.Хозрасчетный.НайтиСтроки(Отбор);

Для Каждого ТекСтрока Из СтрокиСовсемНеДерева Цикл
ДанныеНаборовЗаписей.Хозрасчетный.Удалить(ТекСтрока);

не?
9 Брегорьян
 
01.09.15
09:06
+(8) ну или на худой конец загнать движения в ТЗ, сделать (8) и загрузить ТЗ обратно
10 Cube
 
01.09.15
09:12
(7) Ха))))) Я телепат 80 лвл!))
А ты делай так:

Отбор = Новый Структура();     Отбор.Вставить("СчетКт",ПланыСчетов.Хозрасчетный.НайтиПоКоду("44.01"));
НайденныестрокиСтроки = ДанныеНаборовЗаписей.Хозрасчетный.НайтиСтроки(Отбор);    
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
    Если НайденнаяСтрока.СубконтоКт1= УслугиГПМ ИЛИ Найденнаястрока.СубконтоКт1=ТекущеееСодержаниеПодъездныхПутей Тогда
        ДанныеНаборовЗаписей.Хозрасчетный.Удалить(НайденнаяСтрока);
    КонецЕсли;
КонецЦикла;

И не надо лохматить бабушку...
11 Альбатрос
 
01.09.15
09:13
(10) Я намекал ему еще в (2)
12 Cube
 
01.09.15
09:14
Кстати, не люблю лишние переменные... Поэтому вместо этого

Отбор = Новый Структура();     Отбор.Вставить("СчетКт",ПланыСчетов.Хозрасчетный.НайтиПоКоду("44.01"));
НайденныестрокиСтроки = ДанныеНаборовЗаписей.Хозрасчетный.НайтиСтроки(Отбор);

Делай так

НайденныестрокиСтроки = ДанныеНаборовЗаписей.Хозрасчетный.НайтиСтроки(Новый Структура("СчетКт", ПланыСчетов.Хозрасчетный.НайтиПоКоду("44.01"));
13 Cube
 
01.09.15
09:18
(11) А, блин, точно, я не заметил)
14 Вебер
 
01.09.15
09:22
(10) конечная ТЗ должна быть уже без 44.01, но смысл понятен в цикле перебрать всю ТЗ по нужному условию
15 Вебер
 
01.09.15
09:22
(14) голова кругом идет наоборот
16 hhhh
 
01.09.15
09:27
(14) ничего не надо перебрать. Просто замени

             Строки.удалить(ИндексЭлемента);

на

ДанныеНаборовЗаписей.Хозрасчетный.Удалить(Строки[ИндексЭлемента]);
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой