Имя: Пароль:
1C
1C 7.7
v7: Непонятное поведение кода при отладке
,
0 mpbakunov
 
16.09.11
16:31
Доброго дня!

вот есть такой незамысловатый код:
1 andrewks
 
16.09.11
16:31
действительно, незамысловатый...
2 mpbakunov
 
16.09.11
16:32
ТЗ.выбратьСтроки();        
Пока (ТЗ.ПолучитьСтроку()=1) ИЛИ (к=ТЗ.КоличествоСтрок()) Цикл

...

Конеццикла

при запусе бработки ТЗ.ПолучитьСтроку()=1, а при отладке при первой же итерации ТЗ.ПолучитьСтроку()=0!!! Не могу понять в чем подвох. Есть идеи?
3 Попытка1С
 
16.09.11
16:33
(1) гыгы +1
4 Vladal
 
16.09.11
16:33
Пока ... ИЛИ ?????
5 Vladal
 
16.09.11
16:33
а.. ну да..
6 Rie
 
16.09.11
16:34
(2) Как смотришь? :-)
7 Vladal
 
16.09.11
16:35
Второе условие после ИЛИ зачем?
Или в цикле играешься с количеством строк?
8 mpbakunov
 
16.09.11
16:36
(6) в циклле первой строчкой написал Сообщить("ОК") и при запуске вижу что вход в цикл происходит, а при отладке ставлю точку останова на Пока... и в цикл не захожу, проверяю ТЗ.ПолучитьСтроку()=0, хотя количество строк >0
9 mpbakunov
 
16.09.11
16:37
(7) можно и без ИЛИ (мне это условие прсо надо) все тоже самое происходит
10 Rie
 
16.09.11
16:38
(9) Проверяешь отладчиком? Вот и считал следующую строку. Ещё раз проверил - ещё одну строку "потерял".
11 mpbakunov
 
16.09.11
16:41
(10) да я просто при остановке шагаю по F10 и сразу выхожу из цикла не входя в него. Первый раз такое наблюдаю
12 Rie
 
16.09.11
16:43
(11) А почему ты уверен, что в таблице есть строки?
13 mpbakunov
 
16.09.11
16:44
(12) я их вижу :) и свойство количествострок >0
14 Darych
 
16.09.11
16:45
небось к=0
15 Rie
 
16.09.11
16:46
(13) Видишь - это хорошо. Но где видишь? Может быть, у тебя есть ТЗ на форме и отдельно ТЗ - переменная?
16 Darych
 
16.09.11
16:46
тбьху пятницца... туплю
17 МастерВопросов
 
16.09.11
16:47
(13) выкладывай уже весь код, который внутри цикла
18 andrewks
 
16.09.11
16:48
(17) не, надо _угадать_
19 МастерВопросов
 
16.09.11
16:50
(18) ннну например:

ТЗ.выбратьСтроки();        
Пока (ТЗ.ПолучитьСтроку()=1) ИЛИ (к=ТЗ.КоличествоСтрок()) Цикл
Сообщить("ОК");
Тз=СоздатьОбъект("ТаблицаЗначений");
Конеццикла
20 Rie
 
16.09.11
16:51
(19) Мимо. По утверждению ТС, в цикл он вообще не входит ((11)).
21 Vladal
 
16.09.11
16:52
(19) Угу... вот тебе и ноль строк... ТЗ реинициализируется и ноль строк.
Хотя в первй раз войти должно
22 МастерВопросов
 
16.09.11
16:54
(20) ну первый раз то в (8) у него получилось зайти, а потому уже нет
23 andrewks
 
16.09.11
16:55
интересно, а что будет, если в табло запихать
ТЗ.ПолучитьСтроку()
и шагать по строчкам кода в отладчике?
24 МастерВопросов
 
16.09.11
16:56
еще вариант, попроще:

ТЗ.выбратьСтроки();        
Пока (ТЗ.ПолучитьСтроку()=1) ИЛИ (к=ТЗ.КоличествоСтрок()) Цикл
Сообщить("ОК");
Тз=к;
Конеццикла
25 МастерВопросов
 
16.09.11
16:57
(23) гы, да это вариант поизвращенней :-)
26 Rie
 
16.09.11
16:58
(21) Можно не реинициализировать, а просто выборку сбить.
27 Darych
 
16.09.11
17:00
(26) как вариант добавлением строки в цикле
28 МастерВопросов
 
16.09.11
17:01
(26) правильный ответ уже назвали в (23)

автор в табло выполянет ТЗ.ПолучитьСтроку(), естветсвенно у него выборка перепрыгивает на следующую строку, которой видимо уже нет, поэтому "ТЗ.ПолучитьСтроку()=0"
см.(2)
29 mpbakunov
 
19.09.11
09:53
ТЗ у меня не переменная а элемент управления на форме. количество строк около 10000. без отладчика цикл отрабатывает, при отладке нет!
30 Ёпрст
 
19.09.11
09:56
(29) дурила, выкинь весь код из окна табло в отладчике.
поставь точку останова унутри цикла и шагай.
31 ЧеловекДуши
 
19.09.11
09:57
(0) Убери эту строчку "(к=ТЗ.КоличествоСтрок())"
Писать лучше так...

Сч=1;
Пока Сч <= ТЗ.КоличествоСтрок() Цикл
....// тут чистое шаманство
Сч = Сч + 1;
Конеццикла;

При этом такой цикл работает гораздо быстрее, нежели через выбрать ;)
32 mpbakunov
 
19.09.11
10:04
(30) давай без эмоций дурных! толку мало от остановке внутри цикла. Да, точка останова сработала, но при прохождении цикла как только я выхожу на проверку условия цикла сразу же выхожу из него , т.е дебагом прохожу только одну итерацию цикла.
33 1Сергей
 
19.09.11
10:06
(32) ещё раз. ТАБЛО ОЧИСТИ!
34 mpbakunov
 
19.09.11
10:11
(33) Спасибо друг! помогло. Честно первый раз с эти столкнулся. Но не совсем пойму как табло влияло на отладку?
35 mpbakunov
 
19.09.11
10:12
подозреваю что у меня в табло я просматривал ТЗ.Количество строк() и из за того курсор внутри выборки устанавливался в конец выборки. я прав?
36 1Сергей
 
19.09.11
10:14
(35) нет, там было скорее всего ТЗ.ПолучитьСтроку()