Имя: Пароль:
1C
1C 7.7
v7: Запуск из ГМ функций по расписанию
, ,
0 evgpinsk_
 
18.08.19
23:34
Предположим каждый час нужно запускать вызов формы.
Реализовал в ГМ так:
Процедура Планировщик() экспорт  
Час=Число(Лев(Константа.ВремяВыходаИз1с,2));  Мин_=Число(Сред(Константа.ВремяВыходаИз1с,3,2)); Сек=Число(Прав(Константа.ВремяВыходаИз1с,2));
  Если (Число(М)=59) и (Число(с)<4) тогда
    ОткрытьФорму("Отчет.ЭкспортвCSV#","КопияФоток");
  конецесли;
//  и здесь ещё многу других заданий,выполняемых в разное время
конецпроцедуры    

ОбработкаОжидания("Планировщик", 2);


Но мне нужно чтобы процедура внутри планировщика выполнялась только один раз каждый час.
Есть способ не сильно заморачиваясь реализовать?
1 Сияющий в темноте
 
19.08.19
01:38
запускаешь функцию раз в минуту,а в ней проверяешь время и раз в час запускаешь то,что нужно.
2 Lazy Stranger
 
19.08.19
04:03
ТекущееВремя(Ч,М,С)
Если Константа.ВремяПоследнегоЗапуска = Ч тогда
возврат; // уже запускали
иначе
// тут весь твой код
Константа.ВремяПоследнегоЗапуска = Ч;
КонецЕсли;
3 Kigo_Kigo
 
19.08.19
07:24
(2) + ну и по хорошему бы еще проверку по дате и по пользователю
то есть в константу писать
ВремяЗапуска = ТекущееВремя();
Константа.ВремяПоследнегоЗапуска = ТекущайДата() + "$" + Сред(ВремяЗапуска,,2) + "$" + СокрЛП("глПользователь");

ну и про проверке через СтрНайти(Константа.ВремяПоследнегоЗапуска,"$") разложить на параметры и проверять
4 trdm
 
19.08.19
08:12
лучше справочник, а не константы.
5 dk
 
19.08.19
08:19
или глобальная переменная типа массив
это если несколько обработок с разной периодичностью
6 evgpinsk_
 
19.08.19
08:48
Сорян, разобрался. Небольшая неточность кода заставила меня подумать что код в ГМ
ОбработкаОжидания("Планировщик", 2);
запускается чаще чем каждые две секунды
7 Kigo_Kigo
 
19.08.19
08:49
(4) Зачем справочник?
(5) глобальная переменная обнулится после перезапуска

я бы вообще сделал отдельного пользователя для этого, для которого бы открывалась обработка с обработкойОжидания, что бы не у всех пользователей срабатывала а только у конкретного

недокументированная функция у клюшек для формы
Форма.ОбработкаОжидания()
8 Kigo_Kigo
 
19.08.19
08:50
Форма.ОбработкаОжидания() будет срабатывать только тогда когда открыта эта форма
9 Провинциальный 1сник
 
19.08.19
08:55
(7)  "Зачем справочник? "
Потому что константы в семерке - большое и толстое зло. Ибо хранятся в одной огромной таблице вперемешку со значениями периодических реквизитов справочников, так что лучше отдельный справочник - он гарантированно в отдельной таблице хранится.
10 Kigo_Kigo
 
19.08.19
09:03
(9) Константой больше, константой меньше, зато прямой доступ с ксчитыванию и записи данных, а чтотам до справочника достучаться из-зи одной переменной?
а ну да, Спр = СоздатьОбъек("Справочник.ВремяЗапуска");

и так далее, не рационально из-за одной переменной городить огород
11 ADirks
 
19.08.19
09:05
(10) дык ведь потом понадобится не одно регламентное задание запускать, и что, по константе на каждое задание?
12 Провинциальный 1сник
 
19.08.19
09:09
(10) Вы же планируете дергать его по расписанию каждую минуту, а зачем нам эскалация блокировок?
13 ADirks
 
19.08.19
09:13
(12) и кстати да, блокировки же
14 АгентБезопасной Нацио
 
19.08.19
10:10
хосспадя. опять он....
ну возьмите конфигурацию Агент+ образца 2004 года, выдерните оттуда подсистему-планировщик (это один справочник и десяток функций ГМ), и наступит вам счастье - можно выгонять подьзователей (хоть всех, хоть по отдельности, хоть сразу, хоть в нужное время), запускать обработки (внешние и внутренние) по гибкому графику (через время, в заданное время - ежедневно, еженедельно, по дням недели, ежемесячно), отправлять сообщения пользователю или всем...
15 АгентБезопасной Нацио
 
19.08.19
11:22
вот как-то так
http://prntscr.com/ouhzan
16 evgpinsk_
 
19.08.19
11:37
(7) можно по идее проще:
Если ИмяПользователя()=СокрЛП(Константа.ИмяПользователяРобота) тогда
// здесь запускаем все регламентные функции по расписанию
КонецЕсли
17 HawkEye
 
19.08.19
11:42
(0) пфф... в планировщике винды настрой по расписанию старт 1С под нужным пользователем...
в 1С приСтартеРаботыСистемы сделай что надо и закрой сеанс...
18 АгентБезопасной Нацио
 
19.08.19
11:46
(17) ну, держать много разных служебных  пользователей - не комильфо.
19 HawkEye
 
19.08.19
11:55
(18) зачем много, держи одного )) в зависимости от времени запускай то, что тебе надо...
заодно и конфликтов не будет...
20 АгентБезопасной Нацио
 
19.08.19
12:00
(19) ну вот для этого и делается шедулер типа (14)(15). Вот я воткнул его на той конфе, которая показана на скрине, в августе 2005 - проработало без проблем до декабря 2018. там и запуски. и напоминалки, и сообщения о заявках, выгрузка в кубики олаповские, отсылка отчетности поставщикам,  прием заявок с планшетов и  EDI, выгонялка для нерадивых, всякие АРМЫ грузчиков и весовые места...
21 HawkEye
 
19.08.19
12:00
+19

у меня вот так автоомбен РБД сделан:
    
Если СокрЛП(ИмяПользователя()) = "AO" Тогда //автообмен
    ОткрытьФормуМодально("Обработка.Автообмен","изГМ");
    СтатусВозврата(0);
    Возврат;
Конецесли;
22 АгентБезопасной Нацио
 
19.08.19
12:01
(21) должно быть "изГК" ?
23 HawkEye
 
19.08.19
12:03
(20) зачем, если все что касается расписания есть в виндовом шудулере?
(22) у нее есть еще несколько мест откуда она запускается, в т.ч. и интерактивно..
24 evgpinsk_
 
19.08.19
12:04
(17) Да ну, для каждой новой задачи запускать 1с?
Помоему проще отдельный сеанс на Робота, в нём всегда запущена 1с. И уже в ГМ добавляем разные регламентные процедуры.
25 HawkEye
 
19.08.19
12:05
(24) тебе виднее...
26 АгентБезопасной Нацио
 
19.08.19
12:05
(23) (24) каждый сам кузнец своего геморроя...©
27 evgpinsk_
 
19.08.19
12:07
(25) У меня 1с постоянно отслеживает извне обращения к ней (c интернет-магазина). Всегда должна быть запущена
28 HawkEye
 
19.08.19
12:07
(26) а кто с этим спорит...
только все равно потом придет к шедулеру, который будет смотреть, а запущен ли сеанс под роботом и если не запущен то запускать его )))
29 evgpinsk_
 
19.08.19
12:08
(28) запустить за в неделю не запущенный сеанс тоже самое что запускать 1с 20 раз в день ? )
30 HawkEye
 
19.08.19
12:09
(27) так ты определись, всегда или раз в час?
в твоем сценарии вообще надо запускать по появлению в папке файла... есть файл - запустил, обработал его, перенес в другое место, закрылся...

(29) понедельник день тяжелый.... прожуй и внятно скажи..
31 evgpinsk_
 
19.08.19
12:13
(30) В данном топике одна из 20ти регламентных задача. Запускается раз в час
Есть куча других задач,  в том числе и анализировать папку на наличие CSV-заказов, поступивших извне
32 evgpinsk_
 
19.08.19
12:15
И запускать в сеансе тяжёлую 1с 20 раз в сутки для 20ти разных задач ??
Помоему логичней, когда 1с запущена в сеансе всегда и в своём шедулеле (в ГМ) что хочет и когда хочет запускает
33 evgpinsk_
 
19.08.19
12:16
(30) "в твоем сценарии вообще надо запускать по появлению в папке файла... есть файл - запустил, обработал его, перенес в другое место, закрылся... "

если файлы появляются каждую минуту? ))
Что будем наблюдать в сеансе робота? )
34 HawkEye
 
19.08.19
12:18
(32) что будет если твой сеанс с роботом завис?
(33) ну вот проблема.. перед закрытием проверь, есть новый файл - не закрывайся, его обрабатывай, нет - закройся...

что-то у тебя требования меняются каждые 2 минуты... в заголовке написано - РАЗ в час, в (33) каждую минуту... ты может определишься для начала?
35 АгентБезопасной Нацио
 
19.08.19
12:24
(34) Зависание сеанся - проблема, не решающаяся и виндовым шедулером. Без принудительного киляния, конечно.
впрочем, все проблемы решаемы, с той или иной кровью и с тем или иным геморроем.
ТСу сказали достаточно. но, как всегда, не в кобылу сено...
36 evgpinsk_
 
19.08.19
12:33
(34)
" ну вот проблема.. перед закрытием проверь, есть новый файл - не закрывайся, его обрабатывай, нет - закройся... "
Из интернет-магазины заказы поступают постоянно с разной периодичностью. И их нужно отслеживать. Каким это образом можно не закрываться ? ))

"что-то у тебя требования меняются каждые 2 минуты... в заголовке написано - РАЗ в час, в (33) каждую минуту... ты может определишься для начала?"

у меня требования не меняются. Уже выше писал, в (0) была одна задача /которая запускается 1 раз в час, копирование фотографий на хостинг/, а позже объяснил, что есть ещё много других задач.
И под каждую задачу запускать 1с - ну очень не рационально
37 evgpinsk_
 
19.08.19
12:36
В (0) я просто затупил. Приведённый в (0) код нормально отрабатывается и запускается как и нужно - каждый час. Без всяких констант и справочников. Может не совсем красиво (расчлиняем текущее время на часы минуты и секунды) , но работает.
38 АгентБезопасной Нацио
 
19.08.19
12:36
(36) ты (14) прочитал?
39 HawkEye
 
19.08.19
12:46
(37) оставив в стороне "тяжелую" и "1С:7.7"....

если у тебя там все так критично, то давно уже должны быть созданы объекты для контроля выполнения регламентных заданий с фиксацией времени старта, времени финиша и результата выполнения, а их у тебя судя по всему нет... может и не все так критично?
40 Cthulhu
 
19.08.19
12:57
Процедура ПросмотрБлокнота() - есть в ГМ? ну и вперед.
41 Eiffil123
 
19.08.19
13:02
когда работал с 7.7, на сервере висело 3 разных 1с-ки постоянно открытие. В них были открыты обработки для загрузки данных из агент+ и еще каких-то систем. Проблем с запуском после обновления баз раз в день не возникало.

Было несколько раз, что обработки зависали или падали с ошибкой (при этом обработкаожидания переставала работать). Вышли из положения так: обработка при регулярном запуске создает в специальной папке на сервере пустой файл. На компах у службы поддержки работала самопальная программа, которая смотрела время файла. Если больше 15 минут - ругалась, типа "проверьте обмен, возможно отвалился". Можно наверно было написать какой-нибудь bat-файл, который перезапускал бы 1С-ку на сервере. Но это уже было лень, т.к. случаи были редки.
42 vova1122
 
19.08.19
13:23
(41) вот это совпадение. У меня тоже самое было. (с текстовым файлом) Я писал в текстовый файл, дату и время, и также проверял это время, но уже в рег задании восьмерки и в случае аварии (время также не обновлялось) отправлял сообщение на телефон.
43 АгентБезопасной Нацио
 
19.08.19
13:33
(41) (42) так самый простой способ.
шедулер пишет каждые 15 минут.
а как админы контолировали - я не знаю...
44 vova1122
 
19.08.19
13:53
+(41) кстати, в соседней ветке про авторское право ( Как вы относитесь к авторскому праву? ). Кому должно пренадлежать авторское право на эту идею.....
45 Злопчинский
 
19.08.19
15:39
46 vtolga
 
19.08.19
16:21
(45)+100  Классная вещь, работает как часы.
47 vtolga
 
19.08.19
16:22
И все твои проблемы решит просто настройками, без велосипедов
48 Salimbek
 
19.08.19
16:46
(32) 1С 7-ка вообще не тяжело запускается на современных компах. Есть еще такая штука, как открытие периода и прочие монопольные режимы, которым все время запущеный сеанс мешается
49 ДенисЧ
 
19.08.19
16:47
(48) открытие периода в 7ке можно и немонопольно делать.
50 АгентБезопасной Нацио
 
19.08.19
19:25
(48) открытие периода - достаточно легко делается и без монопольного режима.
Единственное, где нужен монопольный (по крайней мере, я не смог обойтись) - обновление конфигурации в периферийных базах (хотя у меня периферийки работали не 24/7).
51 evgpinsk_
 
19.08.19
20:04
(38) Да прочитал. Но пока не хочется наворачивать новую ВК для решения того, что впринципе нормально решено стандартными средствами.
Хотя функционал в ней конечно не плохой - если будет время, можно будет попробовать применить
52 evgpinsk_
 
19.08.19
20:04
(47) Проблем на самом деле никаких нет ).
Создавая тему я затупил, предполагая что есть проблема. Её нет
53 evgpinsk_
 
19.08.19
20:07
(39) Ничего критичного нет. Но когда есть /как у меня/ внешние обращения к 1с, логичней её всегда держать открытой, чтобы эти воздействия обрабатывать
54 АгентБезопасной Нацио
 
19.08.19
20:14
(51) никаких ВК там нет - всё сделано накошерном языке 7.7, благославленным нуралиевым.
55 Злопчинский
 
19.08.19
20:36
(49) и как? есть инструмент для немонопольного открытия периода в файловом варианте?
56 ДенисЧ
 
19.08.19
20:55
(55) Тот же, что и для скулёвой.
57 Злопчинский
 
19.08.19
20:55
(56) Не видел такого.
58 HawkEye
 
19.08.19
21:25
(57) есть обработка, сам не пользовался... использует 1С++ пересчитывает непосредственно в таблицах БД...
куда тебе кинуть?
59 Злопчинский
 
19.08.19
23:04
60 ДенисЧ
 
20.08.19
04:00
(57) А я тебя живьём не видел... Стоит ли мне отрицать твоё существование?
61 АгентБезопасной Нацио
 
20.08.19
04:58
(58) пересчитать-то - не проблема
Записать вместе с индексами - вот проблема для файловой...
62 ДенисЧ
 
20.08.19
06:53
(61) Если писать не через побайтовый вывод, а через дб-драйвер - нет такой проблемы
63 АгентБезопасной Нацио
 
20.08.19
07:25
(62) с чтением нет. с записью - были.
впрочем. я с файловыми работал крайне мало и очень давно ("на заре").
64 Salimbek
 
20.08.19
08:53
(50) А я и это обошел, используя TurboMD
65 ДенисЧ
 
20.08.19
08:57
(64) Добавь новый справочник через турбу )))
А тексты можно обновлять и без неё. ПРавда, с ней удобней
66 АгентБезопасной Нацио
 
20.08.19
09:03
(64) Добавление метаданных через турбомд не сделать. в ЦБ на SQL - можно.
67 Злопчинский
 
20.08.19
11:57
(60) солпсист елы-палы.
положил бы куда-нить обработку.
68 ДенисЧ
 
20.08.19
12:21
(67) ТЫ знаешь, когда я последний раз брал в руки клюшки? Сколько компов я с тех поменял.
69 HawkEye
 
20.08.19
19:39
(67) отправил на почту..
70 Злопчинский
 
20.08.19
20:10
(69) Получил, спсб
71 Злопчинский
 
20.08.19
20:14
(68) Стабильность - признак мастерства!
72 smitti911
 
21.08.19
09:33
(70) можно и мне на [email protected]
73 Salimbek
 
21.08.19
09:45
(65),(66) Добавил один раз свою Таблицу прямо в СКЛ, типа ИД метаданных, ИД объекта, ИД реквизита - Значение. И все что нужно туда записывал/считывал через 1С++/ОДБЦ
74 ДенисЧ
 
21.08.19
09:46
(73) А появился новый справочник? В ДД его добавиьт надо. В таблицы - надо. В твою таблицу надо.
75 ДенисЧ
 
21.08.19
09:46
Хотя всё это можно всё тоже немонопольно длеать...
76 Salimbek
 
21.08.19
11:05
(74) А зачем мне нужен был новый справочник? Я, в таком случае, писал в свою таблицу: ИД - "МойСправочник1", ИД объекта - 1, ИД реквизита - "Поле 1", Значение - "Вася Пупкин". Потом получал выборку через select * from Table where ID="МойСправочник1". Для бОльшей части задач - этого вполне хватало. Для "типа справочника" с большим количеством данных - там просто создал отдельную Таблицу.
А потом все переехало на 8-ку.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан