Имя: Пароль:
1C
1С v8
Вынос мозга на простейшей конструкции
,
0 tertva_1C
 
10.04.13
12:12
Доброго времени суток, всем...

Жила была переписанная УПП релиза 1.3.26.1, жила не тужила, пока не пришлось её обновлять, до 1.3.36.1, обновилось все замечательно все пользователи довольны, пока не дошёл я до разбора одного запроса от пользователя..

и уперся я в один очень простой код
МассивПТ = ПереченьПТ.НайтиСтроки(Новый Структура("Здание", Здание));

в хелпе про метод НайтиСтроки ясно сказано, цитата:
"Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным."
Но как бы не на оборот !!!!
просто при удалении данных из МассивПТ в версии 1.3.26.1 данные в ПереченьПТ оставались, а вот после обновления стали удаляться...

Вопрос что я делаю не так ? или уже пора просто выспаться....
1 Другая
 
10.04.13
12:14
Ну подумай... если массив хранит ссылки.. то изменяя данные в массиве по ссылке ты изменяешь данные в строке
2 Maxus43
 
10.04.13
12:16
от версии конфы это не зависит никак, если код не менялся
3 tertva_1C
 
10.04.13
12:16
спинным мозгом я это понимаю, но данный код замечательно отрабатывал в течении полугода и перестал работать после обновления базы...
4 H A D G E H O G s
 
10.04.13
12:18
Растет молодежь. ** смахнул слезу.
5 H A D G E H O G s
 
10.04.13
12:18
(3) Показывайте своего друга.
6 tertva_1C
 
10.04.13
12:19
(5)а что именно ?
7 zzerro
 
10.04.13
12:21
(6) Что и как удаляшь из массива?
8 Зойч
 
10.04.13
12:23
есть метод скопировать, там тоже можно отбор задавать
9 vicof
 
10.04.13
12:25
(0) Видимо раньше такие строки просто не находились :)
10 tertva_1C
 
10.04.13
12:26
(7) для справки ПереченьПТ имеет несколько уровней вложенности  
удаляем вот так
Для каждого строкаПТ Из МассивПТ Цикл
           Для Каждого СтрокаВР Из СтрокаПТ.ВР Цикл
               
               Отбор = Новый Структура;
               Отбор.Вставить("НомерУровня", НомерТекущегоУровня);
               Отбор.Вставить("ВидУслугиПроизводимой", ВидУслугиВодаНаГВС);
               Отбор.Вставить("ВидУслугиПотребляемой", УслугаВодаНаГВС);
               
               МассивВРВода =  СтрокаПТ.ВР.НайтиСтроки(Отбор);
               
               Для каждого СтрокаВРВода Из МассивВРВода  Цикл
                   если СтрокаВР = СтрокаВРВода тогда
                       СтрокаПТ.ВР.удалить(СтрокаВР);
                       
                   КонецЕсли;    
                   
               КонецЦикла;
           КонецЦикла;
           
           
       КонецЦикла;
11 tertva_1C
 
10.04.13
12:30
(9) посмеялся ...
12 NWsFF
 
10.04.13
12:34
СтрокаПТ.ВР это что? Это ты уже не с массива удаляешь, а из ТЗ
13 NWsFF
 
10.04.13
12:35
Распишу всю структуру данных с типами
14 tertva_1C
 
10.04.13
12:35
Для каждого строкаПТ Из МассивПТ Цикл
15 tertva_1C
 
10.04.13
12:36
(13) а смысл ?
16 tertva_1C
 
10.04.13
12:43
кстати метод Скопировать тоже не спасает...
17 Зойч
 
10.04.13
12:44
ты удаляешь, почему не должно удаляться то?
18 Рэйв
 
10.04.13
12:47
(11)>>данные в ПереченьПТ оставались


чтото ты путаешь

СтрокаПТ.ВР.удалить(СтрокаВР);
в любом релизе удаляет строку.
19 tertva_1C
 
10.04.13
12:47
да потому что мне не надо удалять данные в таблице значений ПереченьПТ поэтому я и копирую данные в МассивПТ...
20 Рэйв
 
10.04.13
12:48
только вот удалять строки СтрокаПТ.ВР пв цикле перебора както не очень правильно
21 tertva_1C
 
10.04.13
12:48
(18) согласен он и должен удалять, и замечательно её удаляет, дело то не в этом...
22 Рэйв
 
10.04.13
12:50
(21)>> поэтому я и копирую данные в МассивПТ...

покажи как ты копируешь
23 Рэйв
 
10.04.13
12:51
вообще покажи нормально код, а не куски из контекста
24 tertva_1C
 
10.04.13
12:53
(22) в (0) все написано...

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

Это что то даст ????
25 Рэйв
 
10.04.13
12:57
(24)Не понял толком что тебе надо то? Ты удаляешь строки.Хочешь чтобы не удалялись или чего?
26 Рэйв
 
10.04.13
12:59
и убери

Для Каждого СтрокаВР Из СтрокаПТ.ВР Цикл

Это лишнее
27 dmpl
 
10.04.13
13:00
(24) Предлагаю переделать все нафиг на запрос и там все скопом считать.
28 tertva_1C
 
10.04.13
13:04
ага а заодно переписать ядро программы, она кстати отраслевка и ПереченьПТ является глобальной, и  Рэйв прочти внимательно (0) пост...а потом (19).., ладно не обижайтесь, топик можно сливать... займемся переписью кода ...
29 NWsFF
 
10.04.13
13:06
(28) Если ты не понимаешь как может помочь решить твой вопрос полное описание структуры твоих данных, то новый код ты напишешь еще хуже прежнего.
30 NWsFF
 
10.04.13
13:09
Вангую, что ВР у тебя ссылка на одну и туже структуру данных, и хоть двадцать раз ее скопируй. При обращении через ПР.блалала обращение у тебя будет идти к одной и той же таблице или что там у тебя это...
31 tertva_1C
 
10.04.13
13:11
(30) это я и сам понимаю, и уже знаю как это исправить, НО мне не понять как ЭТО работало полгода....
32 tertva_1C
 
10.04.13
13:11
причем у 5 человек одновременно....
33 NWsFF
 
10.04.13
13:16
ага а заодно переписать ядро программы, она кстати отраслевка и ПереченьПТ является глобальной, и  Рэйв прочти внимательно (0) пост...а потом (19).., ладно не обижайтесь, топик можно сливать... займемся переписью кода ...

Исходя из этого, проблему нужно опять таки искать в структурах данных, глобальной переменной ПереченьПТ возможно сменили структуру?
34 dmpl
 
10.04.13
13:18
(31) А кто сказал что оно работало? Может пользователи вручную били, а теперь им надоело...
35 tertva_1C
 
10.04.13
13:20
(34) били ручками расчет по 16 000 контрагентам :) каждый месяц в течении полугода :)))) говорю же забейте на это... уже все исправил....
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.