|
v7: Как организовать выполнение функции в цикле с задержкой по времени | ☑ | ||
---|---|---|---|---|
0
BORG
01.08.13
✎
20:48
|
Подскажите плз как решать следующую проблему, может кто сталкивался с чем то подобным...
из документа расх. накладная пользователь печатает сертификаты, алгоритм печати следующий: происходит выборка табличной части, затем для каждой единицы товара программа находит файлы сертификата в формате bmp, далее эти файл(картинки) загружается в таблицу(печатную форму) и далее через оператор Таб.Напечатать(0) отправляется на печать, без предварительного просмотра и минуя стандартное диалоговое окно печати в винде. Так вот когда сертификатов немного, то все нормально, а вот когда 30-40 то получается ситуация когда на принтер в течении 1-2 секунд посылается 30-40 файлов немаленького размера для печати, в итоге возможно происходит переполнение буфера и эти файлы теряются т.е. печать не работает, так как пользователь работает в терминале и принтер пробрасывается на сервер, поэтому как один из вариантов требуется чтобы перед функцией Напечатать() была какая то временная задержка, т.е. некий оператор, условно говоря, который будет выполняться несколько секунд, прежде чем выполнится функция Напечатать() очередной раз. Надеюсь объяснил понятно, если что спрашивайте:) Заранее благодарен. |
|||
1
ДенисЧ
01.08.13
✎
20:54
|
цикл гоняй. от 1 до 10000000 с вычислением синуса от счётчика.
Самый простой вариант Если не терминал, конечно |
|||
2
Ork
01.08.13
✎
20:57
|
(0) Например :
Для экземпляров = 1 По 20 Цикд //Печать ... //Печать Таймаут = 4; Вопрос("Продолжить печать?", "Да", Таймаут); КонецЦикла; |
|||
3
BORG
01.08.13
✎
21:00
|
(2) спасибо, что то даже не подумал про использования Вопрос, совсем под конец дня туго, с мыслями, таким же макаром можно и просто обычное предупреждение выводить на опред. количество секунд
|
|||
4
Ork
01.08.13
✎
21:01
|
+ (2) Либо чисто счетчик времени
Для экземпляров = 1 По 20 Цикд //Печать ... //Печать Таймаут = 4; ЧЧ = 0; мм = 0; сс = 0; ТекущееВремя(чч, мм, сс); начало = чч*3600 + мм * 60 + сс; сейчас = чч*3600 + мм * 60 + сс; Пока (Сейчас - начало) < Таймаут Цикл ТекущееВремя(чч, мм, сс); сейчас = чч*3600 + мм * 60 + сс; КонецЦикла; КонецЦикла; Здесь правда еще нужно замутить переход через сутки. |
|||
5
Ork
01.08.13
✎
21:05
|
(3) Могут стсуки на <Enter> положить чего нить тяжелое. И тогда ни Ворос, ни Предупреждение не спасут.
|
|||
6
Эльниньо
01.08.13
✎
21:36
|
(1) Ага. И загрузка ЦП 100%
(0) Ставь приблуду Ромикса с слипом. |
|||
7
ДенисЧ
01.08.13
✎
21:41
|
(6) читай последнее предложение
|
|||
8
Фокусник
01.08.13
✎
22:02
|
(7) 7.7 не в терминале - это еще хуже, чем 100%ая нагрузка циклом, ИМХО
;) |
|||
9
arsik
гуру
01.08.13
✎
22:05
|
А WScript.Sleep(500) не канает?
|
|||
10
Злопчинский
01.08.13
✎
22:13
|
мониторь очередб принтера и все...
|
|||
11
arsik
гуру
01.08.13
✎
22:38
|
||||
12
varelchik
02.08.13
✎
12:18
|
Функция глПауза(ЧислоСек) Экспорт
Система=СоздатьОбъект("Система"); Для н=1 По ЧислоСек Цикл Система.Уснуть(1000); Состояние("Пауза : "+Строка(н)+" сек."); КонецЦикла; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |