Столкнулся с такой ситуацией:
Есть кусок кода внешнего отчетадля бухгалтерии 1С 7.7 допиленной (не важно)
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
...
...
...
КонецЦикла;
"После выполнения метода "ПолучитьЭлемент()" Кл будет спозиционирован на очередно элементе.
Если останов поставить на строке "Пока....", то нужно смотреть не значение Кл, а вычислять Кл.ПолучитьЭлемент() или Кл.ТекущийЭлемент() в следующей строке.
Останов на "Пока".
Кл.Наименование показывает первую запись. Пошаговое прохождение цикла меняет Кл.Наименование (Кл.ТекущийЭлемент()) после каждого шага в цикле, а не после его завершения (начала).
При первом останове Кл будет не выбран( останов в строке = останов до выполнения строки), при всех последующих в Кл будет храниться элемент, выбранный в предыдущей итерации ... если тело цикла написано, так скажем, не совсем корректно если же оно написано правильно, то во избежание непоняток Кл перед новой итерацией будет очищаться.
Смысл очистки - реакция на неудачное позиционирование.
Для понимания доделал код
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
Пар1=1;
Сообщить(Кл.ТекущийЭлемент);
КонецЦикла;
А здесь уже, похоже, другой(давно известный) глюк - не успевает.
Предлагаю в развитие эксперимента в начало цикла воткнуть замедлитель - пусть подождет полсекунды(или посчитает там до 10 000).
В отладчике на каждый "Ентер" или щелчек мыши происходит шаг по справочнику, наверняка замедлитель ни при чем.
Pepe
Видео давайти.
В Отладчике при останове в первой строке тела цикла(Пар1...) никаких пропусков быть не должно
Можно и видео, а проще самому скопировать в форму код и в отладчике посмотреть.
Признайтесь, во сколько мест вы засунули "Кл.ПолучитьЭлемент()"
чудес на этом свете нет. ну или почти нет. так что авторство "глюка" принадлежит скорее всего автору топика.
Даю наводку: в Отладчике выражения Табло (Меню>Отладка>Табло или кнопарь соответвующимй на панели) - вычисляются каждый раз при получении управления Отладчиком. Отладчик получает управление при прерывании на точке прерывания, или (sic!) при завершении каждого шага (F8,F10,F7,etc.). И если у тебя там "нечаянно" стоит прямое вычисление "Кл.ПолучитьЭлемент()" - или непрямое, с вычислением значения какой-нибудь функции, которая выполняет "нечаянно" подобный переход на следующий элемент выборки - то так оно и выглядит.
Чудес не бывает, но кто-то хоть попытался повторить код из поста №5? Там всего пять строк, прямое вычисление стоит в начале цикла и больше нигде. Повтрю код, скопируйте и пройдите отладчиком.
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
Пар1=1;
Сообщить(Кл.ТекущийЭлемент());
КонецЦикла;
x
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
Пар1=1;
Сообщить(Кл.ТекущийЭлемент());
КонецЦикла;
Да, и чтобы
Про порядок вывода я написал т.к. вывод по умолчанию идет именно в таком порядке, а если надо, допишите лишнююстрочку чтоб глаза радовал другой порядок. На выполнение это не влияет.
Вот пошаговое прохождение
Из .лять нижнего .лять окошка .лять убрать .лять Кл.ПолучитьЭлемент() .лять
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua