Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Выполнение автоматических действий каждые несколько секунд (http://forums.kuban.ru/f1040/vypolnenie_avtomaticheskih_dejstvij_kazhdye_neskol-ko_sekund-2665881.html)

Caballero 30.05.2012 10:44

Выполнение автоматических действий каждые несколько секунд
 
Товарищи, помогите, сил уже нет через эти грабли пробираться.
Нужно каждые 10 секунд делать опрос другой базы (по ODBC соединяемся) и если стоят флаги принт - печатать документы.
Как блин это сделать?
1С 8.2 Бухгалтерия ПРОФ, Клиент-сервер на Postgre.
Я нашёл, что это можно сделать фоновыми задания, регламентными заданиями, ПодключитьОбработкиОжидания, ActiveX-компоненту нашёл, всё выдаёт какие-то ошибки или тупо не работает.

Caballero 30.05.2012 10:44

И кстати желательно конфигурацию не трогать, но если никак нельзя - фиг с ней, лишь бы работало.

angro 30.05.2012 11:20

я так понимаю развод.
например какие ошибки при использовании ПодключитьОбработкиОжидания

Caballero 30.05.2012 11:22

2-angro >Сейчас скажу.
Недопустимое значение параметра (параметр номер '1')
Запускаю это всё из внешней обработки

Caballero 30.05.2012 11:23

Можно вообще как-то зациклить выполнение обработки с паузой 10 секундной?

angro 30.05.2012 11:27

:) запусти обработку напиши
пока 1=1 цикл
полезнаяобработка();
предупреждение("ждём",10)
обработкапрерыванияпользователя();
конецЦикла

Caballero 30.05.2012 11:29

5-angro >Ну это как-то жестоко :)
И всё-таки есть возможность как-то регламентные задания использовать?

angro 30.05.2012 11:36

(6) да, всё работает

bma1 30.05.2012 11:39

2(0) Сделай отдельную базу с одной обработкой. И пусть она проверяет внешний SQL, если что найдет - пусть коннектится к бухии и что-то там нехорошее делает.

Caballero 30.05.2012 11:40

7-angro > А печать на сервере вообще возможна?

angro 30.05.2012 11:50

х.з. не сталкивался с такой задачей. наверняка как-то можно

Caballero 30.05.2012 12:02

10-angro > Вот именно что никак. Фоновые задания не подходят, регламентное не может печатать, подключитьобработкиожидания нужен глобальный модуль, ActiveX-компонента не работает. Ааааааа

VZ 30.05.2012 12:20

11-Caballero > Что мешает из клиента запустить приложение на сервере (или любом другом компе)?

Caballero 30.05.2012 12:22

12-VZ >В смысле?

VZ 30.05.2012 12:42

Поместить на сервере (или другом компе) "Компонента работы с файлами", там же поместить скрипт, который вызывает эту компоненту командной строкой с нужным файлом в параметре, а затем сендкеем заставляет распечатить этот документ на принтере, а затем тем же сендкеем закрывает приложение (F10+END+ENTER)
Как активизировать скрипт на чужой машине расскажет Марк Русинович (Mark Russinovich)

Uho 30.05.2012 12:45

пишется обработка и запускается 1С по шедуллеру с обработкой в командной строке.
обработку напишет любой программист 1С.

Caballero 30.05.2012 13:59

Блин, ну как-то всё очень криво, товарищи...
15-Uho >Запуск 1С с внешней обработкой по расписанию винды работает, но она открывается почти полминуты, потом закрывается ещё 10, такую конструкцию каждый раз вытворять для постоянного обновления - проще убиться об стену...
Пока "более-менее" стабильно работает только вручную запускаемая обработка с бесконечным циклом и ожиданием (блин, как вспомню, что в 1С нет процедуры паузы...), но она грузит память при каждом вызове и к середине дня уже приходится перегружаться.

angro 30.05.2012 14:02

так обновление или печать?

Uho 30.05.2012 14:05

16-Caballero > [quote=Caballero;25304697]Запуск 1С с внешней обработкой по расписанию винды работает, но она открывается почти полминуты, потом закрывается ещё 10[/quote]Запускать 1 раз в день, далее в самой обработке опрос каждые "несколько" секунд,



[quote=angro;25304781]с бесконечным циклом и ожиданием (блин, как вспомню, что в 1С нет процедуры паузы...), но она грузит память при каждом вызове[/quote]

бесконечный цикл не нужен, память грузит из-за кривых рук.

Caballero 30.05.2012 14:29

17-angro > Печать
18-Uho > Как сделать опрос каждые несколько секунд без цикла?

Uho 30.05.2012 14:31

19-Caballero >

УправляемаяФорма.ПодключитьОбработчикОжидания (ManagedForm.AttachIdleHandler)
УправляемаяФорма (ManagedForm)
ПодключитьОбработчикОжидания (AttachIdleHandler)
Синтаксис:

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

<ИмяПроцедуры> (обязательный)

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

Тип: Число.
Интервал времени в секундах с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число).
Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
<Однократно> (необязательный)

Тип: Булево.
Признак однократного выполнения обработчика ожидания.
Истина - указанный обработчик ожидания будет выполнен один раз.
Значение по умолчанию: Ложь
Описание:

Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
Примечание:

Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания.

Caballero 30.05.2012 14:41

20-Uho > В посте 3 писал, что подключитьобработчикожидания не работает у меня. Можно как-то это исправить?
Модуль создал новый. Атрибуты глобальный и клиент установлены

Uho 30.05.2012 14:43

21-Caballero > можно, для этого нужен программист 1С или придется все-таки почитать RTFM

Caballero 30.05.2012 14:46

22-Uho > Ответ в духе технической поддержки 1С :)
Так на что обратить внимание-то? Где ошибки может быть?

Uho 30.05.2012 15:04

[quote=Caballero;25305725]Так на что обратить внимание-то? Где ошибки может быть? [/quote]наверное, в коде

Caballero 30.05.2012 15:07

24-Uho >
А как прекратить-то внешнюю обработку, в которой ПодключитьОбработчикОжидания срабатывает? Ctrl-break не срабатывает, пишет невозможно отменить.

EvG32 30.05.2012 15:10

отключитьобработкуожидания. кэп

Uho 30.05.2012 15:10

25-Caballero > опять RTFM

УправляемаяФорма (ManagedForm)
ОтключитьОбработчикОжидания (DetachIdleHandler)
Синтаксис:

ОтключитьОбработчикОжидания(<ИмяПроцедуры>)
Параметры:

<ИмяПроцедуры> (обязательный)

Тип: Строка.
Имя процедуры, которую необходимо исключить из обработки ожидания.
Описание:

Отключает ранее подключенную процедуру - обработчик ожидания, подключенный ранее методом формы ПодключитьОбработчикОжидания.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент

EvG32 30.05.2012 15:17

сопсно, если религия позволяет, то можно запустить клиентское приложение на сервере, а в нем ПодключитьОбработчикОжидания(), который будет смотреть на флаги и посылать на печать

VZ 30.05.2012 15:17

Так и чем не понравилось (14)? "Фонового" клиента 1С (отжирающего ключ, между прочем) запускать не требуется, скрипт можно разместить на любом компе сети рядом с любимым принтером, все компоненты для сборки сего механизма бесплатны, доступны, документированы, пользоваться может любой юзер 1С, находящийся в сети...
Покритиковали бы :D

Caballero 30.05.2012 15:23

26-EvG32 > А пользователем-то как прервать?
29-VZ > Так эти файлы же ещё создать нужно

Uho 30.05.2012 15:29

[quote=Caballero;25306567]А пользователем-то как прервать?[/quote]зачем? эта обработка не для пользователя же? если в исключительных случаях - то закрыть окно приложения

EvG32 30.05.2012 15:33

(30)вариантов не мало
в базе, которую запускаем на сервере, делаем константу "Печать", при подключении обработчика даем ей значение "Печатать"; в общем, например, интерфейсе делаем кнопку, которая меняет значение константы на "Послать в" , перед определением флагов проверяем значение константы и если нас послали, значит ОтключитьОбработчикОжидания(), закрыть приложение

EvG32 30.05.2012 15:33

(31) ну если уж так хочется человеку

Uho 30.05.2012 15:34

зачем такие извраты, если все решается БЕЗ изменения типовой?

EvG32 30.05.2012 15:37

поддерживаю сендкейный дух темы )

Caballero 30.05.2012 15:46

31-Uho > Ок
32-EvG32 >Не, ну это совсем геморно

Короче, сейчас работает так. В начале работы шедулером винды запускается 1С с внешней обработкой. Она выполняет нужную процедуру каждые 10 секунд. В конце дня видимо будем её отключать. Вроде неплохо :)
Остался один вопрос. Сейчас ПодключитьОбработчикОжидания работает с процедурой из добавленного Общего модуля. Можно как-то всё-таки обойтись без изменения конфигурации, то есть чтоб эта процедура где-то внешне хранилась? Если её тупо вставить в эту обработку, пишет, что она не найдена.

Uho 30.05.2012 15:56

[quote=Caballero;25307130]Если её тупо вставить в эту обработку, пишет, что она не найдена. [/quote]у меня все работает без изменения конфигурации, что я делаю не так?

Uho 30.05.2012 15:56

[quote=Caballero;25307130]В конце дня видимо будем её отключать[/quote]почему нельзя программно закрывать?

Caballero 30.05.2012 16:01

37-Uho > Можешь скинуть какой-нибудь легкий код?
Потому как вроде пишут, что только в глобальном модуле можно процедуры эти вставлять
[url]http://it-buh.narod.ru/fmista/v8/v8_1/v8_1_037/476230.htm[/url]
38-Uho > Проверять время и закрывать?


Текущее время: 15:04. Часовой пояс GMT +3.