gifts2017

Фоновое выполнение отчетов и обработок в 1С77

Опубликовал Александр Маляев (maljaev) в раздел Обработки - Обработка документов

На примере реального отчета показывается, как заставить 1С выполнять одновременно 1, 2 и более заданий, в то время как пользователь продолжает спокойно работать с базой.
Для организации фоновых процессов используется OLE и WSH. Внешние компоненты не используются. Сам отчет выводит в таблицу документы базы вместе со всеми реквизитами шапок и табличных частей. Отчет простенький, но универсальный и весьма ресурсоемкий (что в данном случае является плюсом).

В связи с тем, что используется OLE, необходимо выполнение двух условий: база не должна быть запущена в монопольном режиме; в базе должен быть заведен пользователь с именем "process", паролем "system" и пустым пользовательским каталогом (то есть с каталогом по умолчанию) - это необходимо для того, чтобы было возможно создание нескольких одновременных OLE-подключений. В дальнейшем разработчик может сам организовать доступ к базе по своему усмотрению.

Возможно запустить одновременно несколько отчетов. В таблице запущенных процессов отображается время старта, время завершения, статус выполнения каждого отчета. Возможно прекратить формированание любого отчета, щелкнув по ячейке колонки "Убить". Если пользователь закрывает форму отчета до окончания формирования, то "убиваются" все незавершенные отчеты из списка. То есть важным условием является не закрывать форму отчета до окончания его (их) формирования. Можно часть кода (процедуру обработки ожидания) вынести в глобальный модуль, тогда это условие будет являться уже необязательным.

Во время выполнения отчета (отчетов) можно заниматься другими делами, то есть работать с базой в полном объеме. Когда один из отчетов завершается, на экран будет выведена таблица завершенного отчета.

Скачать файлы

Наименование Файл Версия Размер
Документы базы в фоне 1132
.1224317810 14,50Kb
25.09.09
1132
.1224317810 14,50Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сhe Burashka (CheBurator) 19.10.08 16:41
нююююю... это получается, что выполняется в другом сеансе 1Ски...? или я чего-то не понял? в чем фишка?
2. Андрей (Свой) 19.10.08 17:36
по сети гемор в плане скорости получится.... + висяки процессов если сетка упадет или ишбка в отчете будет... хотя сама идея хорошая - мы работаем и обработки работают :) хорошобы сделать так чтобы обработки выполнялись только на компе где база... для терминального варианта кстати нормально будет.
3. Сhe Burashka (CheBurator) 19.10.08 18:02
> так чтобы обработки выполнялись только на компе где база...
- запускаем на серваке "робота"
- подсовываем роботу задания
...?
4. Андрей (Свой) 19.10.08 19:51
5. Сhe Burashka (CheBurator) 19.10.08 20:51
(4) ну так это - неинтересно...
6. Maljaev (maljaev) 19.10.08 23:32
В плане скорости все нормально. Увеличение времени формирования отчета незначительное - время создания подключения плюс время на обновление лога, не путайте формирование отчета в оле-среде и работу с объектами, созданными через оле-подключение. Висяки в случае падения сети могут быть - но это уже к разряду форс-мажоров.
7. Maljaev (maljaev) 19.10.08 23:35
Если будет ошибка в отчете, срабатывает попытка-исключение и все корректно закрывается.
8. Maljaev (maljaev) 19.10.08 23:39
(1) По другому с 1С нельзя никак. В 1С8 возможны фоновые процессы через ком-подключение, что по сути то же другой сеанс, а в 1С77 есть только оле.
9. Maljaev (maljaev) 19.10.08 23:45
(1) Даже фоновое выполнение через оле - и то уже нетривиальная задача для 1С. Приходиться инициировать через жо... - смотри код.
10. Сhe Burashka (CheBurator) 20.10.08 00:15
посмотрим конечно...
но я где-то встречал хитрое паралельное выполнение обработок в 7.7...
11. Maljaev (maljaev) 20.10.08 00:32
(10) Хрен ты где встречал. Был функционал фоновых процессов в одной из внешних компонент, перенесенный потом по моей инициативе в формэкс, и благополучно оттуда похеренный в последствии. А дело в том, что параллельно в 1С можно выполнить только простейшие вещи типа 2+2 (утрирую), попытка выполнения более сложных вещей приводит к вылету 1С. Потому разработчики формэкс и 1с++ отказались от этой затеи и пришли к выводу что параллельные процессы в одном сеансе 1С принципиально невозможны. Можно создать фоновый внутрисеансовый отчет по подсчету документов базы, но не отчет по продажам или подобный. Я работал с фоновыми потоками еще до Альфа, и знаю что даже банальный запрос приводит к вылету.
12. Maljaev (maljaev) 20.10.08 00:33
Так что альтернативы нет - либо так (через оле), либо никак.
13. Артур Аюханов (artbear) 20.10.08 08:03
Steban сделал "Сервер приложений для 1Cv77"
http://www.1cpp.ru/forum/YaBB.pl?num=1179245025;start=all
Схема в общем-то похожа, но есть отличия :) - работа через COM+, DCOM и т.д.
Одно из самых интересных отличий - возможна работа с удаленным компьютером :)
14. Аркадий Кучер (Abadonna) 20.10.08 08:59
Хоть я и сам додумался, но плюс все равно ;)))
15. Maljaev (maljaev) 20.10.08 09:25
(13) Это я знаю. Хорошая вещь. Но даже он не сумел в одном сеансе сделать фоновые процессы. Говорю же, чебур - это невозможно. Ну а у меня хоть и не сервер приложений, зато не требует никаких компонент и внешних модулей. Сойдет на тот случай, когда надо порадовать чем-то директора или главбуха. :)
16. Андрей (andrewalexk) 20.10.08 10:21
(10)
:)
наверное ты про фоновую печать...
17. Алексей Плутенко (Noy) 20.10.08 10:52
Технологию то многие знают и понимают, а вот сделать и выложить...
Плюс однозначно.
18. Сергей Лунев (luns) 20.10.08 10:59
А вот тут: http://infostart.ru/profile/10590/projects/2636/ пример для 8... На эту ветку там ссылку тоже сделал.. Так как темы "родственные"
19. Сhe Burashka (CheBurator) 21.10.08 02:27
(15) угумс.. сервер приложений/не сервер приложений - нужен "фоновый процесс" который по расписанию обсчитывает некие алгоритмы по данным из базы и кладет "куда-то" (?) резудьтаты расчета.. я в нужный _мне_ момент времени - беру последний просчитанный вариант данных и юзаю его... (при этом надо чтобы не было грязного чтения)... - держать для этого тривиального робота - хз.. надо подумать...
20. Bambula (bambula) 22.10.08 18:04
Весч не нужная, но реализация зачЁт!
21. Maljaev (maljaev) 27.10.08 14:21
(20) Тебе может и не нужная... На мелких конфигурах вообще смысла нет внедрять - если отчет максимум 30 секунд выполняется, а на больших базах с отчетами по 15 и более минут - есть смысл. Доработка типового отчета под фоновое выполнение занимает где-то 1 час, зато потом начальство оценит старания (особенно если грамотно преподнести).
22. Денис (KrakoZyabl) 29.10.08 11:02
Интересная идея, спасибо, надо взять на вооружение.
23. Владимир (Martyn) 29.04.09 14:47
+++. В бухгалтерии при подготовке годовых и квартальных оценят! А с главбуха и струсить чегой то можно будет ;-)
24. IrinaKostroma (IrinaKostroma) 18.06.09 09:30
25. bulpi bulpi (bulpi) 06.04.10 01:21
А помнится, я видел пример фонового процесса в 7.7 , сделанного без ОЛЕ. Только с помощью текстового поля на форме. Не запомнил, где видел, помню только суть Или это мне приснилось? Кто-то же наверняка видел, если я видел не во сне ? :)
26. bulpi bulpi (bulpi) 07.04.10 16:20
(25)
Вспомнил! Конечно же, это не было параллельным процессом, просто имитация. Такой себе фокус. См. файл.
Прикрепленные файлы:
1.ert
daba; vasko; gucci76; +3 Ответить
27. FIZIK FIZIK (FIZIK) 23.09.11 13:58
Есть отчет который больше часа молотит, вот менеджер порадуется.
28. Andrey (angy) 20.10.11 16:43
Класная штука где маслают большие отчеты, я обычно завожу еще пользователя и выполняю им такие задачи, дешево и сердито...
30. Сергей Толмачев (sss999) 08.08.14 11:16
Напиши что он делает,а то ничего непонятно.
31. Григорьев Анатолий (ToJIuK) 27.08.14 16:43
согласен с sss999, что то вообще ничего не понятно , как засунуть в данную обработку свою Обработку, чтобы она (моя обработка)выполнялась?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа