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

Как запускать процедуру в форме, раз в некоторое время?

Автор Ratelok, 04 авг 2022, 03:40

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

Ratelok

Есть документ. Внутри формы есть кнопка, при нажатии на которую запускается функция. Как сделать, чтобы она запускалась не по кнопке, а сама, при открытии формы раз в 5 сек? Начал изучать 1с неделю назад, извините, если вопрос тупой

wise

(0) ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

LexaK

Ratelok, есть такая процедура
ПодключитьОбработчикОжидания  (подробнее см. СП)
как раз подключает выполнение нужной команды/процедуры с заданной переодичностью
ПодключитьОбработчикОжидания (AttachIdleHandler)
Синтаксис:
ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Параметры:
<ИмяПроцедуры> (обязательный)
Тип: Строка.
Имя процедуры, подключаемой в качестве обработчика ожидания.
Процедура не должна содержать параметров.
<Интервал> (обязательный)
Тип: Число.
...
если помогло нажмите: Спасибо!

Ratelok

LexaK, Тогда еще один вопрос. Куда мне это нужно засунуть? Вставляю, где кнопка находится - форма списка - ошибка. Я не понимаю, где должен находится ПодключитьОбработчикОжидания, чтобы он ссылался на мою процедуру и это работало

LexaK

Ratelok, как называется кнопка (которая должна работать каждые 5 сек)
и еще откройте модуль формы, и весь код, скопируйте и вставьте сюда, в тему в теги КОДА (кнопка 1С)
если помогло нажмите: Спасибо!

Ratelok

LexaK,
&НаКлиенте
Процедура ПроверкаСтатуса(Команда)
   СравнениеСтатуса();   
КонецПроцедуры



&НаСервере
Функция СравнениеСтатуса()   
   //Код Функции
Элементы.Список.Обновить();
КонецФункции

Все это находится в Форме Списка документа

LexaK

Ratelok, сейчас надо сделать доп.настройку, в модуле формы, вверху, там список Процедуры и функции
нажать и в списке выбрать
<ПриОткрытии>

в модуле появится процедура
&НаКлиенте
Процедура ПриОткрытии(Отказ)

сохраните конфигурацию
и еще раз скопируйте и вставьте сюда весь код модуля формы

В ТЕГАХ КОДА!!! (в меню кнопка с символом 1С)
если помогло нажмите: Спасибо!

Ratelok

LexaK,


&НаКлиенте
Процедура ПроверкаПлановойПоставки(Команда)
    СравнениеДаты();   
   
КонецПроцедуры



&НаСервере
Функция СравнениеДаты()   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваров.ПлановаяДатаПоставки КАК ПлановаяДатаПоставки,
        |    ПоступлениеТоваров.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
        |ГДЕ
        |    ПоступлениеТоваров.ПлановаяДатаПоставки < &ТекущаяДата
        |ИТОГИ ПО
        |    Ссылка,
        |    ПоступлениеТоваров.Номер,
        |    ПлановаяДатаПоставки";
   
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
   
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаНомер = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
    Пока ВыборкаНомер.Следующий() Цикл       
        ВыборкаПлановаяДатаПоставки = ВыборкаНомер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
        Пока ВыборкаПлановаяДатаПоставки.Следующий() Цикл
            Сообщение = Новый СообщениеПользователю();
            Документ = ВыборкаПлановаяДатаПоставки.Ссылка.ПолучитьОбъект();
            Если НЕ ((Документ.СтатусПоставки = Перечисления.СтатусыПоставок.Исполнена) ИЛИ  (Документ.СтатусПоставки = Перечисления.СтатусыПоставок.Отменена)) Тогда
                Документ.СтатусПоставки= Перечисления.СтатусыПоставок.Просрочена;
                Документ.Записать();
                Сообщение.Текст= "Просрочена плановая дата поставки у документа "+ ВыборкаПлановаяДатаПоставки.Ссылка;
                Сообщение.КлючДанных = ВыборкаПлановаяДатаПоставки.Ссылка;
                Сообщение.Сообщить();
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;   
Элементы.Список.Обновить();
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПодключитьОбработчикОжидания("СравнениеДаты", 5)
КонецПроцедуры

Снимок экрана 2022-08-04 121547.png

Не работает. Хотя кнопка работает без обработчика ожидания

LexaK

Ratelok, немного подправил, вставьте, попробуйте
&НаКлиенте
Процедура ПроверкаПлановойПоставки(Команда)
    СравнениеДаты();   
   
КонецПроцедуры



&НаСервере
Функция СравнениеДаты()   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваров.ПлановаяДатаПоставки КАК ПлановаяДатаПоставки,
        |    ПоступлениеТоваров.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
        |ГДЕ
        |    ПоступлениеТоваров.ПлановаяДатаПоставки < &ТекущаяДата
        |ИТОГИ ПО
        |    Ссылка,
        |    ПоступлениеТоваров.Номер,
        |    ПлановаяДатаПоставки";
   
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
   
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаНомер = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
    Пока ВыборкаНомер.Следующий() Цикл       
        ВыборкаПлановаяДатаПоставки = ВыборкаНомер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
        Пока ВыборкаПлановаяДатаПоставки.Следующий() Цикл
            Сообщение = Новый СообщениеПользователю();
            Документ = ВыборкаПлановаяДатаПоставки.Ссылка.ПолучитьОбъект();
            Если НЕ ((Документ.СтатусПоставки = Перечисления.СтатусыПоставок.Исполнена) ИЛИ  (Документ.СтатусПоставки = Перечисления.СтатусыПоставок.Отменена)) Тогда
                Документ.СтатусПоставки= Перечисления.СтатусыПоставок.Просрочена;
                Документ.Записать();
                Сообщение.Текст= "Просрочена плановая дата поставки у документа "+ ВыборкаПлановаяДатаПоставки.Ссылка;
                Сообщение.КлючДанных = ВыборкаПлановаяДатаПоставки.Ссылка;
                Сообщение.Сообщить();
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;   
Элементы.Список.Обновить();
КонецФункции

&НаКлиенте
Процедура СравнениеДатыНаКлиенте()
    СравнениеДаты();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПодключитьОбработчикОжидания("СравнениеДатыНаКлиенте", 5); //подключаются только клиентские процедуры
КонецПроцедуры
если помогло нажмите: Спасибо!

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

Рейтинг@Mail.ru

Поиск