Имя: Пароль:
1C
1С v8
Отрицательное значение в условии цикла
0 ХДС
 
27.12.21
14:39
Для Счетчик2 = 0 По РезультатЗапроса[Счетчик].КонтактнаяИнформация.Количество() - 1 Цикл

Как отработает такое условие при Количество = 0, и почему?
1 polosov
 
27.12.21
14:41
Ошибка в  РезультатЗапроса[Счетчик] ?
2 ДенисЧ
 
27.12.21
14:42
(0) цикл не выполнится
3 polosov
 
27.12.21
14:43
(0) А, понял. Нормально должно отработать. Там же обычное сравнение.
4 lodger
 
27.12.21
14:45
(0) зачем делать _такие_ конструкты там, где это совершенно не требуется?
5 lEvGl
 
гуру
27.12.21
14:45
надо думать что не попадет в цикл или ошибку даст, что правая часть не может быть меньше нуля
6 Kassern
 
27.12.21
14:46
(0) никак не отработает. Просто дальше код пойдет выполняться минуя цикл
7 Kassern
 
27.12.21
14:47
аналогично для конструкции Для Каждого ТекСтрока Из ТЗ Цикл, где ТЗ пустая таблица
8 Aleksey
 
27.12.21
14:48
(7) не совсем. У него цикл от 0 до -1. Но ответ правильный. Дальше пойдет
9 ДенисЧ
 
27.12.21
14:49
Попробуй
для сч = 0 по -1 Цикл
  сообщить("Мы в цикле");
КонецЦикла;
10 mistеr
 
27.12.21
14:50
(8) Там столько обращений к объектам, что вполне может быть и ошибка.

(4) +1
11 TheRoofIsOn Fire
 
27.12.21
14:52
а что одинэс умеет step -1? Я не знал.
12 Мультук
 
гуру
27.12.21
14:53
(11)
Он и не умеет, да здесь (в этом примере) оно и не нужно
13 TheRoofIsOn Fire
 
27.12.21
14:53
(12) Как отработает такое условие при Количество = 0, и почему? - никак оно не отработает, цикл бля в 1С не умеет считать назад. Цикл Пока - может.
14 dubolom
 
27.12.21
14:58
(13) зачетная опечатка
15 Мультук
 
гуру
27.12.21
14:58
(13)

Очевидно, что цикл

для сч = 0 по -1 Цикл
  сообщить("Мы в цикле");
КонецЦикла;

выполнется
как

сч = 0;
Пока сч <= -1 Цикл

КонецЦикла;

Будет ли проинициализирована "сч" -- не знаю.
16 lEvGl
 
гуру
27.12.21
14:59
(13) новогоднее настроение!! та ра та ра та ра тата та ра та ра та раааа))
17 ХДС
 
27.12.21
15:11
Натурные испытания показали что условие не выполняется.
А вот почему?
18 Kassern
 
27.12.21
15:16
(17) поэтому что это обычное условие, которое равно Ложь, поэтому в цикл и не заходит
19 Serg_1960
 
27.12.21
15:20
Строго говоря, автор не спрашивал про количество итераций цикла - вопрос был "Как отработает такое условие при Количество = 0?".
Отвечаю: результат условия = -1. Ваш КО.
20 mistеr
 
27.12.21
15:24
(17) Условие проверяется ПЕРЕД выполнением тела цикла.
21 Serg_1960
 
27.12.21
15:26
(17) "Натурные испытания показали что условие не выполняется" - Вы всё напутали: условие - выполняется, а цикл с предусловием - не выполняется.
22 ХДС
 
27.12.21
15:34
(21) Не выполняются ни условие, ни цикл?
23 Serg_1960
 
27.12.21
15:49
(22) "Максимальное значение счетчика цикла... вычисляется однократно перед началом цикла и не может быть изменено внутри цикла"(Синтакс-помощник)
24 Fragster
 
гуру
27.12.21
15:51
вот на партнерском хороший кусок из типовых https://partners.v8.1c.ru/forum/topic/1862941
25 Fragster
 
гуру
27.12.21
15:53
для тех, у кого нет доступа: https://i.imgur.com/8MFfxQT.png
26 Fragster
 
гуру
27.12.21
15:54
правда про то, что присвоение происходит до вычисления правой части,  не написано
27 Serg_1960
 
27.12.21
16:06
(26) Левые и правые части условия рассчитываются и присваиваются автономно и независимо друг от друга до проверки условия цикла :)
"Л-логика"(с)
28 Serg_1960
 
27.12.21
16:11
Пример для наглядности вышесказанного:

    Для i = -2 По -1 Цикл
        Сообщить(i);
    КонецЦикла;
    Сообщить(i);
Закон Брукера: Даже маленькая практика стоит большой теории.