Добрый день, коллеги!
Столкнулась с такой ситуацией: в глобальном модуле определяется обработка ожидания (для местной выгонялки системы). По желанию заказчика потребовалось, чтобы несколько групп пользователей каждые три часа и при запуске 1С видели отчет по ДЗ. Пришлось в коде глобального модуля определить еще одну обработку ожидания.
Теперь возникла проблема: предыдущая обработка ожидания перестала работать. Получается, что в глобальном модуле может быть определена только одна обработка ожидания?
Столкнулась с такой ситуацией: в глобальном модуле определяется обработка ожидания (для местной выгонялки системы). По желанию заказчика потребовалось, чтобы несколько групп пользователей каждые три часа и при запуске 1С видели отчет по ДЗ. Пришлось в коде глобального модуля определить еще одну обработку ожидания.
Теперь возникла проблема: предыдущая обработка ожидания перестала работать. Получается, что в глобальном модуле может быть определена только одна обработка ожидания?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) a.o.popova,
В обработке ожидания запускается процедура, например
ОбработкаОжидания("ЗапускРобота",50);
при этом каждые 50 секунд программа заходит в процедуру ЗапускРобота()
например у меня в этой процедуре вызов нескольких обработок:
Процедура ЗапускРобота()
//1 процедура
ПроверитьСообщения();
// 2 процедура
ФайлШторк();
КонецПроцедуры
В обработке ожидания запускается процедура, например
ОбработкаОжидания("ЗапускРобота",50);
при этом каждые 50 секунд программа заходит в процедуру ЗапускРобота()
например у меня в этой процедуре вызов нескольких обработок:
Процедура ЗапускРобота()
//1 процедура
ПроверитьСообщения();
// 2 процедура
ФайлШторк();
КонецПроцедуры
(3) Dmitr033, Вызывать одну обработку из другой - отключает действие первой обработки. Когда прийдет время завершить работу пользователей - начнет формироваться отчет, а завершения - не будет. Лучше в середине обработки проверки завершения работы пользователей поставить проверку времени формирования отчета в виде диапазона времени > времени1 и < времени2. В таком варианте, достаточно одной обработки ожидания и отчет будет сохраняться на экране.
Для периодического формирования отчета лучше не делать обработку ожидания, а завести специального пользователя, например, Робот. ПриНачалеРаботыСистемы проверять, если пользовать "Робот", формировать нужные отчеты и рассылать по электронной почте и/или сохранять в нужную папку. После формирования отчетов завершать работу 1С.
1С запускать из штатного планировщика с конкретным пользователем и паролем с командной строке примерно так:
"C:\Program Files\1Cv77\bin\1cv7.exe" entreprise /D"C:\Bases\MyBase\" /N"Робот" /P""
1С запускать из штатного планировщика с конкретным пользователем и паролем с командной строке примерно так:
"C:\Program Files\1Cv77\bin\1cv7.exe" entreprise /D"C:\Bases\MyBase\" /N"Робот" /P""
Можно еще интересней. Для пользователя Робот проверять наличие *.ert в личной папке пользователя. Если есть - открываем их ОткрытьФорму(...) по очереди. 1С запускаем из планировщика с указанием личной папки пользователя
"C:\Program Files\1Cv77\bin\1cv7.exe" entreprise /D"C:\Bases\MyBase\" /N"Робот" /P"" /U"C:\Bases\MyBase\Робот\Авто1\"
В результате имеем возможность в разное время и с разной периодичностью выполнять в 1С разные обработки.
У меня подобным образом раз в пятнадцать минут расчитывается управленческая себестоимость, ночью формируется и рассылается по мылу пакет отчетности по результатам дня, в обед формируется и рассылается ряд отчетов ко времени совещания у руководителей. Ну и прочие автонужды.
"C:\Program Files\1Cv77\bin\1cv7.exe" entreprise /D"C:\Bases\MyBase\" /N"Робот" /P"" /U"C:\Bases\MyBase\Робот\Авто1\"
В результате имеем возможность в разное время и с разной периодичностью выполнять в 1С разные обработки.
У меня подобным образом раз в пятнадцать минут расчитывается управленческая себестоимость, ночью формируется и рассылается по мылу пакет отчетности по результатам дня, в обед формируется и рассылается ряд отчетов ко времени совещания у руководителей. Ну и прочие автонужды.
Круто, vcv - большое спасибо, что поделились опытом. Планировщиком пользоваться умею (как раз для рассылки электронных отчетов) - проблема в том, что мне свой отчет надо открывать именно в 1с - он достаточно сложный, он содержит ссылки, благодаря которым открываются документы реализации и прочая информация, поэтому очень важно, чтобы отчет именно в 1С открывался.
(6) А я о чём?
Помещаем в ПриНачалеРаботыСистемы примерно такой код:
Делаем отдельную папочку, куда складываем все внешние обработки/отчеты, которые должны выполниться. И запускаем из планировщика 1С с указанием этой самой папки личной для пользователя.
Помещаем в ПриНачалеРаботыСистемы примерно такой код:
Если ИмяПользователя() = "Робот" Тогда
СписокАвтоОтчетов = СоздатьОбъект("СписокЗначений");
ФС.УстТекКаталог(КаталогПользователя());
ИмяФайлаАвтоВыполнения = ФС.НайтиПервыйФайл("*.ert");
Пока ПустоеЗначение(ИмяФайлаАвтоВыполнения)=0 Цикл
СписокАвтоОтчетов.ДобавитьЗначение(КаталогПользователя()+"\"+ИмяФайлаАвтоВыполнения);
ИмяФайлаАвтоВыполнения = ФС.НайтиСледующийФайл();
КонецЦикла;
Для Номер=1 По СписокАвтоОтчетов.РазмерСписка() Цикл
ИмяАвтоотчета = СписокАвтоОтчетов.ПолучитьЗначение(Номер);
Попытка
ОткрытьФорму("Отчет",,ИмяАвтоотчета);
Исключение
ЗаписьЖурналаРегистрации(ОписаниеОшибки(),"Робот",ИмяАвтоотчета);
КонецПопытки;
КонецЦикла;
СтатусВозврата(0);
ЗавершитьРаботуСистемы(0);
Возврат;
КонецЕсли;
ПоказатьДелаем отдельную папочку, куда складываем все внешние обработки/отчеты, которые должны выполниться. И запускаем из планировщика 1С с указанием этой самой папки личной для пользователя.
Отчет сохранять в MXL, тогда все ссылки и расшифровки с нём остаются. Готовый сформированный отчет уже можно открывать у пользователя.
Ну вот вы представьте, я пользователь, работаю, провожу документы и формирую отчеты и ВДРУГ, 1С встаёт в ступор, что-то делает сама с собой энное время, потом выдаёт на экран мне то, чего я не просил. И еще хорошо, если эти тормоза и этот выскочивший отчет появятся как-то уместно, а не тогда, когда я только-только собрался нажать ОК на документе, над которым сидел последние полчаса.
Не знаю кто как, а я бы этого программиста с такими методами бы постарался найти и долго бы его... объяснял что он не прав. :-)
Ну вот вы представьте, я пользователь, работаю, провожу документы и формирую отчеты и ВДРУГ, 1С встаёт в ступор, что-то делает сама с собой энное время, потом выдаёт на экран мне то, чего я не просил. И еще хорошо, если эти тормоза и этот выскочивший отчет появятся как-то уместно, а не тогда, когда я только-только собрался нажать ОК на документе, над которым сидел последние полчаса.
Не знаю кто как, а я бы этого программиста с такими методами бы постарался найти и долго бы его... объяснял что он не прав. :-)
Про Робота все написали, только не ответили на тему: "Как сделать несколько Ожиданий ?".
Разумеется в 7.7 может работать только одна процедура. Я делаю так:
И, разумеется, вызываемые процедуры должны быть быстрые, почти не заметными для пользователя.
Разумеется в 7.7 может работать только одна процедура. Я делаю так:
Перем ТекВызов; // текущий счетчик вызовов
//----------------------------------------------------------
// Вызывается периодически (5 сек)
Процедура Ожидание()
// При первом вызове
Если ПустоеЗначение(ТекВызов) = 1 Тогда
ТекВызов = 0;
КонецЕсли;
ТекВызов = ТекВызов + 1;
//------ Сигнал или Завершение системы
Если (ТекВызов % 5 = 0) Тогда
ОжиданиеСигнал();
КонецЕсли;
//------ Звуковой
Если (ТекВызов % 29 = 0) Тогда
ОжиданиеЗвук();
КонецЕсли;
//------ Автоснятие резерва
Если (ТекВызов % 17 = 0) Тогда
ОжиданиеРезерв();
КонецЕсли;
//------ АвтоИмпорт
Если (ТекВызов % 3 = 0) Тогда
ОжиданиеИмпорт();
КонецЕсли;
КонецПроцедуры // Ожидание
ОбработкаОжидания("Ожидание", 5);
ПоказатьИ, разумеется, вызываемые процедуры должны быть быстрые, почти не заметными для пользователя.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот