Форум OlegON > Программы и оборудование для автоматизации торговли > Другие вопросы

Тот самый жирный скрипт. Расчет ТД : Другие вопросы

22.11.2024 13:59


17.08.2007 15:50
Извиняюсь за своего коллегу, который не выложил скрипт, он действительно не программист.
Скачайте прогу AutoHotkey.
Скрипт советую протестить, т.к. он по разному работает на разных машинах. Пишется в обычном блокноте, расширение *.ahk.
Удачи.
Пример:

Pause_Sleep := 1000
SetControlDelay, 1000 ; задержка для команд control
run, SMAdmin.exe, C:\SM2000\Bin\, UseErrorLevel, idSM
if ErrorLevel = ERROR
Exit
Sleep, Pause_Sleep

Send, +{Tab}
If %0% = 0
{
Send, supermag ; пользователь
Send, {Tab}
Send, 234 ; пароль
Pause_sec:=15 ; задержка по умолчанию
}
else
{ ; командная строка
Send, %1% ; пользователь
Send, {Tab}
Send, %2% ; пароль
Pause_sec:=%3% ; задержка на выполнение расчетов в сек.
}
Send, {Enter}
Sleep, Pause_Sleep

IfWinExist, Сообщение об ошибке
{
Sleep, Pause_Sleep
WinClose, ahk_pid %idSM%
Sleep, Pause_Sleep
WinClose, ahk_pid %idSM%
exit
}
Sleep, Pause_Sleep

; аналитика
Send, {Down 2}
sleep, Pause_Sleep

; товародвижение
Send, {Tab}
Sleep, Pause_Sleep
Send, +{Right}
Sleep, Pause_Sleep
sleep, Pause_Sleep

; Очистка базы
Send, {Tab 6}
Sleep, Pause_Sleep
Send, {Enter}
sleep, Pause_Sleep

Send, {Down} ; Полная
Sleep, Pause_Sleep

Send, {Enter} ; Ок
Sleep, Pause_Sleep

Send, {Left} ; Полная очистка базы
Sleep, Pause_Sleep

Send, {Enter} ; Ок

Sleep, Pause_Sleep

WinWait, Административный модуль, Очистка базы данных завершена., Pause_sec
if ErrorLevel
{
MsgBox, 0, , Ошибка очистки базы, 3
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
WinClose, ahk_pid %idSM%
else
{
Send, {Enter}
break
}
Sleep, Pause_Sleep
}
exit
}
Sleep, Pause_Sleep


Send, {Enter} ; Ок
Sleep, Pause_Sleep

; перенести
Send, +{Tab 4}
Send, {Enter} ; Ок
sleep, Pause_Sleep

Send, {Enter} ; Ок
sleep, Pause_Sleep
IfWinExist, Административный модуль, Время, по которое
{
Send, {Enter} ; Ок
sleep, Pause_Sleep
}

IfWinExist, Сообщение об ошибке
{
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
Send, {ALTDOWN}{F4}{ALTUP}
else
{
Send, {Enter}
exit
}
Sleep, Pause_Sleep
}
}


sleep, Pause_Sleep

WinWait, Административный модуль, Перенос выполнен успешно., Pause_sec
if ErrorLevel
{
MsgBox, 0, , Ошибка переноса , 3
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
WinClose, ahk_pid %idSM%
else
{
Send, {Enter}
break
}
Sleep, Pause_Sleep
}
exit
}
sleep, Pause_Sleep

Send, {Enter} ; Ок

; рассчитать
send, {Tab}
send, {Enter}
sleep, Pause_Sleep*2

Send, {Enter} ; Ок

sleep, Pause_Sleep

WinWait, Административный модуль, Расчет завершен успешно., Pause_sec
if ErrorLevel
{
MsgBox, 0, , Ошибка расчета аналитики, 3
; закрыть все окна
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
WinClose, ahk_pid %idSM%
else
{
Send, {Enter}
break
}
Sleep, Pause_Sleep
}
exit
}

Sleep, Pause_Sleep
Send, {Enter}
Sleep, Pause_Sleep

; закрыть все окна
loop
{
IfWinNotExist, Административный модуль, Завершить работу с программой?
Send, {ALTDOWN}{F4}{ALTUP}
else
{
Send, {Enter}
exit
}
Sleep, Pause_Sleep
}
12.02.2009 05:20
Я попроще сделал:

;Запускаем административный модуль супермага
run, SMAdmin.exe, C:\SM2000\Bin\, UseErrorLevel

;Вводим пароль и эмулируем дальнейшие нажатия
WinWaitActive, Подключение к рабочей базе. Введите имя и пароль., &База данных
Send, qqq{ENTER}{DOWN}{DOWN}{TAB}{RIGHT}{TAB}{TAB}{RIGHT}{RIGHT}{ENTER}{TAB}{TAB}{TAB}{ENTER}

Это с условием, что заранее выставлены галочки: выполнить перенос, расчет и радиокнопка "Запустить сейчас".
Конечно можно потом убивать процесс после таймаута, но суть не в этом.
Все это работает при условии разблокированного рабочего стола сервера. Может быть есть какие-то решения по автоматической разблокировке (Ctrl+Alt+Del, потом ввод пароля и Enter, после чего уже будет работать скрипт). Windows не поддерживает эмуляцию нажатия сочетания Ctrl+Alt+Del, поэтому в autohk запихать это нельзя.
12.02.2009 06:46
В общем программных решений никаких не нашел (только если в msgina.dll лезть и самому кодить).
Нашел другое решение:
Делаем файл server.rdp для подключения к серверу по TS (сохраняем в нем пароль подключения), делаем ярлык или 123.cmd-файл:
mstsc.exe server.rdp /console
Запускаем задание (например на другом сервере) в нужное время (например в 0:00) выполнить 123.cmd, а на сервере бд уже в 0:01 запускать скрипт autohk. (ну и естественно нужно стопорить\запускать Кассовый модуль супермага).
12.02.2009 08:36
С rdp вариант работает? Просто в сеансе сообщения нажатий клавиш куда-то мимо пролетают...
13.02.2009 06:39
С RDP работает - сегодня утром пришел - все рассчиталось (да в принципе я и вчера проверял, поэтому уверен был), осталось дошлифовать, чтоб окно супермага закрывалось и tsclient тоже, но самое главное сделано.
Че за "сеанс сообщения" никак не могу понять?
20.02.2009 07:43
Цитата:
anderson Че за "сеанс сообщения" никак не могу понять?
системные сообщения в RDP-сеансе
Часовой пояс GMT +3, время: 13:59.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.