8.х Как приостановить выполнение цикла (поставить на паузу на некоторое время?)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем andrenko, 31 янв 2010.

  1. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Как приостановить выполнение цикла (поставить на паузу на некоторое время)?
    Предупреждение - не подходит. Необходимо именно приостановить выполенние цикла на 2 минуты (допустим) а затем его продалжить

    2 модератры: просьба удалить эту тему - я ее разместил ошибочно в неправильном разделе.
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Только запустить обработчик ожидания, который снова вызовет функцию, но цикл начнется с места предыдущей остановки.

    ЗЫ а что за задача такая странная? Может есть более элегантное решение, или это так из области "чего бы еще такое придумать над чем голову поломать"...
  3. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Задача банальна - рассылка писем пачками по 15 писем с периодом 20 минут (это на мыл.ру, с остальными подобная ситуация).
  4. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Значит создаете очередь сообщений, при отправке из очереди сообщение удаляется, после посылки 15 писем цикл посылки обрывается и вызывается обработчик ожидания, который через 20 минут опять запустит процедуру отправки.
  5. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    как вариант - да. Но хотелеось-бы наблюдать за ходом рассылки и без обработчика.
    кстати, если делать через вызов модальной формы - можно ли ее программно запретить закрывать пользователем?
  6. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    А как сейчас наблюдаете?
    А обработчик можно подключить и к форме:
    Код:
    Форма.ПодключитьОбработчикОжидания (Form.AttachIdleHandler)
    Форма (Form)
    ПодключитьОбработчикОжидания (AttachIdleHandler)
    Синтаксис:
    ПодключитьОбработчикОжидания(<Имя процедуры>, <Интервал>, <Однократно>) 
    Параметры:
    <Имя процедуры> (обязательный)
    Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания. 
    <Интервал> (обязательный)
    Тип: Число. Интервал времени с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число).
    Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина. 
    <Однократно> (необязательный)
    Тип: Булево. Признак однократного выполнения обработчика ожидания.
    Истина - указанный обработчик ожидания будет выполнен один раз.
    Значение по умолчанию: Ложь 
    Описание:
    Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.
    Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения. 
    Примечание:
    Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания. 
    Пример:
    ПодключитьОбработчикОжидания("ПриОжидании", 1);
    См. также:
    Форма, метод ОтключитьОбработчикОжидания
    Глобальный контекст, метод ПодключитьОбработчикОжидания
    
    
    Запретить надо в обработчике "ПередЗакрытием"
    Код:
    Форма.ПередЗакрытием (Form.BeforeClose)
    Форма (Form)
    ПередЗакрытием (BeforeClose)
    Синтаксис:
    ПередЗакрытием(<Отказ>, <Стандартная обработка>) 
    Параметры:
    <Отказ>
    Тип: Булево. Признак отказа от закрытия формы. Если в теле процедуры-обработчика установить данному параметру значение Истина, закрытие формы выполнено не будет.
    Значение по умолчанию: Ложь 
    <Стандартная обработка>
    Тип: Булево. В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. Отказ от стандартной обработки не отменяет закрытие формы.
    Для форм, связанных с типами ДокументОбъект и СправочникОбъект, стандартной обработкой является проверка модифицированности, задание вопроса о сохранении и сохранение объекта.
    Значение по умолчанию: Истина 
    Описание:
    Возникает перед закрытием формы. В обработчике события можно отказаться как от закрытия формы, так и от стандартной обработки при закрытии. 
    
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    1. Хочу сразу объяснить одно правило, весь код выполняется линейно, и циклы не исключение, они тоже работают линейно, например,

    Код:
    Пока i=0 Цикл
    // Тело цикла
    КонецЦикла;
    
    В линейном виде это выглядит так
    Код:
    ~НачалоОбработки;
    // Тело цикла
    Если i=0 Тогда Перейти НачалоОбработки КонецЕсли;
    
    Первый цикл эдинтичен второму коду, который выполняется линейно,.
    Для организации прерывания цикла можете создать глобальную переменную "итератор" и перекидывать при необходимости код на вашу МЕТКУ с Вашим итератором.

    Код:
    ~НачалоОбработки - это метка
    Перейти НачалоОбработки - это операция перехода к метке
    
    2. Можно применить и вариант предложенный Itsys'ом, дело Ваше, и решать Вам.

    Из синтаксис-помощника
  8. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Пока ни как...
    Та рассылка, которая есть использует лист рассылки от Kerio, но есть сервисы мыл.ру и укр.нет, которые ограничивают количесвто писем в определенный промежуток писем с одного адреса. Для Мыл.ру, по моему, это 15-20 минут, количество писем 15.
    Соответственно письма на эти сервисы не отправляются вообще, а надо.
    Наблюдение заключается в том, что происходит и на каком этапе мы находимся. Все рассылки, соответственно хрянятся вместе с адресами.
  9. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    лучше сделать обработчик ожидания отправки.. чтоб он в фоне работал и кажду минуту посылал сообщение.. и вам говорил об этом....
    и цикла не надо будет

Поделиться этой страницей