Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 дек 2024, 17:29

Конфигурация повисает - что не так вкоде?

Автор Игорь_M, 24 дек 2014, 20:17

0 Пользователей и 1 гость просматривают эту тему.

Игорь_M

Конфигурация повисает из-за вот этого кода

ВсеРаспределены = Ложь; 
   ВремяНачала.Сортировать("Время Возр");
   
   ТекущееВремя = ВремяНачала[0].Время;
   Сообщить (ТекущееВремя);
   Если Час(ТекущееВремя) < 8 Тогда
      ТекущееВремя = ТекущееВремя + 28800;
   КонецЕсли;
   Пока ВсеРаспределены = Ложь Цикл
      Выборка = Справочники.Полуфабрикаты.Выбрать();
      Пока Выборка.Следующий() Цикл  // выбираем полуфабрикат
         МожноРаспределить = Истина;
         ВсеРаспределены = Истина;
         Если Выборка.ФлагРаспределения = Ложь Тогда   //если он еще не распределен пробуем распределить
            Сообщить ("Полуфабрикат "+ Выборка.Наименование + " не распределен");
            ВсеРаспределены = Ложь;
            КодТекущПФ = Выборка.Код;
            Флаг = Истина;
            //ПроверкаНаВыполнимость(КодТекущПФ,ТекущееВремя,Флаг); // проверяем его самого на выполнимость (завершены дочерние пф)
            Если Флаг = Ложь Тогда
               МожноРаспределить = Ложь;
            КонецЕсли;
                        Если МожноРаспределить Тогда
               Сообщить ("    его можно распределить");
            Иначе
               Сообщить ("    его нельзя распределить на " + ТекущееВремя);
            КонецЕсли;
         КонецЕсли;

                  
      КонецЦикла;
      
   ТекущееВремя = ТекущееВремя + 900;   
      
   КонецЦикла;    

если удаляю ту часть что выделена жирным шрифтом - то не виснет. Ошибок никаких не выдает, ни на что не ругается - что за .. ситуация такая?

причем еще так получается - этот код записан в процедуре ЗагрузитьРЦ(ВремяНачала), ее вызывает другая процедура, она тоже не выполняется при наличиии вот этого кода, выделенного жирным

Игорь_M

Разобрался - дело было в том , что цикл получался бесконечным.
Если не сложно поясните новичку, каким образом отрабатывает 1с такую ситуацию? Дело в том, что выполнения самого цикла как видно не происходит (так как не выводятся сообщения внутри цикла). Однако не выполняется и  строки которые предшествуют циклу, то есть 1с как-то заранее что-то проверяет. Но как система заранее может проверять если еще нет конкретных значений переменных , по которым либо будет выход из цикла либо нет

Просто для понимания интересно

cska-fanat-kz

1С никоим образом предварительно не выполняет цикл!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Игорь_M

а как тогда? если она выполняла бы цикл, то постоянно бы печатала сообщение  ("Полуфабрикат "+ Выборка.Наименование + " не распределен");
но ведь не печатает. Не печатает даже те сообщения, которые есть в процедуре, вызывающей рассматриваемую. ... не понятно. Вообщем, добавил еще одно условие выхода из цикла и все заработало

Besart

Зацикливание происходило на Пока ПокаВсеРаспределены = Ложь Цикл

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск