Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Глюк или ... 2 страниц V   1 2 >          
Pepe Подменю пользователя
сообщение 13.12.12, 20:32
Сообщение #1

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Столкнулся с такой ситуацией:
Есть кусок кода внешнего отчетадля бухгалтерии 1С 7.7 допиленной (не важно)
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
...
...
...
КонецЦикла;

Прикол в том, что при выполнении кода вылетает ошибка "не выбран элемент" на строку начала цикла. В отладчике получается, что перебор элементов справочника идет не в цикле (после выполнения метода ПолучитьЭлемент(), а при выполнении каждой строки тела цикла.

Zaval Подменю пользователя
сообщение 13.12.12, 20:56
Сообщение #2

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

"После выполнения метода "ПолучитьЭлемент()" Кл будет спозиционирован на очередно элементе.
Если останов поставить на строке "Пока....", то нужно смотреть не значение Кл, а вычислять Кл.ПолучитьЭлемент() или Кл.ТекущийЭлемент() в следующей строке.

Спасибо сказали: Pepe,

Pepe Подменю пользователя
сообщение 13.12.12, 21:14
Сообщение #3

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Останов на "Пока".
Кл.Наименование показывает первую запись. Пошаговое прохождение цикла меняет Кл.Наименование (Кл.ТекущийЭлемент()) после каждого шага в цикле, а не после его завершения (начала).

Сообщение отредактировал Pepe - 13.12.12, 21:22

Zaval Подменю пользователя
сообщение 13.12.12, 21:42
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

При первом останове Кл будет не выбран( останов в строке = останов до выполнения строки), при всех последующих в Кл будет храниться элемент, выбранный в предыдущей итерации ... если тело цикла написано, так скажем, не совсем корректно smile.gif если же оно написано правильно, то во избежание непоняток Кл перед новой итерацией будет очищаться.
Смысл очистки - реакция на неудачное позиционирование.

Pepe Подменю пользователя
сообщение 14.12.12, 11:05
Сообщение #5

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Для понимания доделал код
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
    Пар1=1;
   Сообщить(Кл.ТекущийЭлемент);
КонецЦикла;

При выполнении будет простой перебор с выводом контрагента в порядке наименования. В отладчике при пошаговом проходе контрагенты будут пропускаться, перепрыгивать.

Zaval Подменю пользователя
сообщение 14.12.12, 13:35
Сообщение #6

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

А здесь уже, похоже, другой(давно известный) глюк - не успевает.
Предлагаю в развитие эксперимента в начало цикла воткнуть замедлитель - пусть подождет полсекунды(или посчитает там до 10 000). smile.gif

Ardi Подменю пользователя
сообщение 14.12.12, 13:40
Сообщение #7

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Цитата(Zaval @ 14.12.12, 14:35) *
А здесь уже, похоже, другой(давно известный) глюк - не успевает.

Отладчик же медленнее работает и в отладчике наоборот должно успевать.


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Pepe Подменю пользователя
сообщение 14.12.12, 13:56
Сообщение #8

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

В отладчике на каждый "Ентер" или щелчек мыши происходит шаг по справочнику, наверняка замедлитель ни при чем.

Ardi Подменю пользователя
сообщение 14.12.12, 14:10
Сообщение #9

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Pepe
Видео давайти.


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Zaval Подменю пользователя
сообщение 14.12.12, 14:37
Сообщение #10

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

В Отладчике при останове в первой строке тела цикла(Пар1...) никаких пропусков быть не должно

Pepe Подменю пользователя
сообщение 14.12.12, 15:34
Сообщение #11

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Можно и видео, а проще самому скопировать в форму код и в отладчике посмотреть.

Ardi Подменю пользователя
сообщение 14.12.12, 16:57
Сообщение #12

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Цитата(Pepe @ 14.12.12, 16:34) *
Можно и видео, а проще самому скопировать в форму код и в отладчике посмотреть.

Не проще. Просто кто-то неправильно отладчиком пользуется. Вот и глюки.


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Pepe Подменю пользователя
сообщение 14.12.12, 17:26
Сообщение #13

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Цитата(Ardi)
Просто кто-то неправильно отладчиком пользуется.
Может и неправильно, но для того чтоб поставить точку останова на начало цикла, открыть табло и ввести переменную или функцию, а потом пошагово выполнять код и смотреть значение переменных не надо снимать целое видео...

Ardi Подменю пользователя
сообщение 14.12.12, 18:06
Сообщение #14

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Признайтесь, во сколько мест вы засунули "Кл.ПолучитьЭлемент()"


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: Читатель,

Cthulhu Подменю пользователя
сообщение 14.12.12, 18:35
Сообщение #15

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

чудес на этом свете нет. ну или почти нет. так что авторство "глюка" принадлежит скорее всего автору топика.
Даю наводку: в Отладчике выражения Табло (Меню>Отладка>Табло или кнопарь соответвующимй на панели) - вычисляются каждый раз при получении управления Отладчиком. Отладчик получает управление при прерывании на точке прерывания, или (sic!) при завершении каждого шага (F8,F10,F7,etc.). И если у тебя там "нечаянно" стоит прямое вычисление "Кл.ПолучитьЭлемент()" - или непрямое, с вычислением значения какой-нибудь функции, которая выполняет "нечаянно" подобный переход на следующий элемент выборки - то так оно и выглядит.

Сообщение отредактировал Cthulhu - 14.12.12, 18:37

Спасибо сказали: Pepe,

Pepe Подменю пользователя
сообщение 14.12.12, 19:06
Сообщение #16

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Чудес не бывает, но кто-то хоть попытался повторить код из поста №5? Там всего пять строк, прямое вычисление стоит в начале цикла и больше нигде. Повтрю код, скопируйте и пройдите отладчиком.
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
    Пар1=1;
   Сообщить(Кл.ТекущийЭлемент());
КонецЦикла;

Ardi Подменю пользователя
сообщение 14.12.12, 19:12
Сообщение #17

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

x

Сообщение отредактировал Vofka - 14.12.12, 20:04
Причина редактирования: Низззя тыкать


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Cthulhu Подменю пользователя
сообщение 14.12.12, 19:19
Сообщение #18

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Цитата(Pepe @ 14.12.12, 19:06) *
Чудес не бывает, но кто-то хоть попытался повторить код из поста №5? Там всего пять строк, прямое вычисление стоит в начале цикла и больше нигде. Повтрю код, скопируйте и пройдите отладчиком.
Кл=СоздатьОбъект("Справочник.Контрагенты");
Кл.ВыбратьЭлементы(0);
Пока Кл.ПолучитьЭлемент()>0 Цикл
    Пар1=1;
   Сообщить(Кл.ТекущийЭлемент());
КонецЦикла;

кхм... к коду как раз никаких вопросов (он прозрачный и в проверке не нуждается). вопросы - к содержимому табло Отладчика (если, конечно, процитированный код - именно таков). об чом и сказано (и даже, вроде, разжевано).
пошаговое выполнение с единственным(!!!) вычисляемым в табло выражением "Кл.ТекущийЭлемент()" (без кавычек) - "пострадавшим от глюков" опробовано? и каковы результаты?

Сообщение отредактировал Cthulhu - 14.12.12, 19:20

Спасибо сказали: Pepe,

Ardi Подменю пользователя
сообщение 14.12.12, 19:25
Сообщение #19

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Да, и чтобы
Цитата
При выполнении будет простой перебор с выводом контрагента в порядке наименования.

нужна ещё одна строка которая отсутствует.


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Pepe Подменю пользователя
сообщение 14.12.12, 19:59
Сообщение #20

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Про порядок вывода я написал т.к. вывод по умолчанию идет именно в таком порядке, а если надо, допишите лишнююстрочку чтоб глаза радовал другой порядок. На выполнение это не влияет.
Вот пошаговое прохождение





Сообщение отредактировал Vofka - 14.12.12, 21:14
Причина редактирования: Картинки вставляем не ссылками

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 22:42
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!