Что нового

[Автоматизация] 1С автоматизация "Подтверждение/снятие заказа"

All2khoff

Продвинутый
Сообщения
347
Репутация
65
Добрый день. в процессе работы возникла необходимость обрабатывать большое количество документов "Подтверждение заказов" в формате *.txt, в 1с они подгружаются через форму во вложении.
В принципе сам скрипт-времянка если его можно так назвать есть. но корректную работу оного я могу контролировать только на своем компьютере. а есть необходимость раздать его менеджерам и пусть трузят сами.
Суть просьбы нужно чтобы скрипт понимал куда нажимать, у меня сейчас ориентируется по координатам. Через ControlSend ControlClick у меня не получается не могу найти за что зацепится Window Info( рис3) не дает информацию про данную кнопку (рис1) при наведении. после нажатия все нескольпо легче (рис2) дальнейшая судьба скрипта в принципе будет легче там определяем прошло ли подтверждение или нет (ищем пиксель с сообщением об ошибке подтверждения),уже отмахиваясь от этого действуем дальше. но это уже легко будет сделать, как говорится самое сложное это начать.
Заранее спасибо

Код:
WinActivate ("1С:Предприятие")												;Активируем окно 1С
WinWaitActive ("1С:Предприятие")											;Дожидаемся окно 1С
MouseClick ("left", 517, 135)												;Кликаем на "Загрузить"
Sleep (500)																	;Ждем 0.5 секунды
MouseClick ("left", 517, 185)												;Кликаем мышью на "По заказу на внутреннего поставщика"
WinWaitActive ("Выбор файла для открытия...")								;Открывается окно с подтверждениями
MouseClick ("left", 150, 100)												;Выбираем 1й файл
Sleep (500)																	;Ждем 0.5 секунды
Send ("{ENTER}")															;подтверждаем выбор файла 
sleep (2000)																;Ждем 2 секуны
MouseClick("left", 570, 625)												;Подтверждаем проведение
Sleep (2000)																;Ждем 2 секунды
$PixGetCol  = PixelGetColor(669,460) 										;Проверка цвета пикселя
If $PixGetCol = 0xFCFAEB Then  												;Выполнить код если цвет не равен
 	MouseClick ("left", 730, 482)											;Выполнить код если цвет равен
	Sleep (500)
	MouseClick ("left", 750, 625)											
	Sleep (500)
	MouseClick ("", 735, 470)
	Sleep(500)
	WinActivate("цц")														;переключаемяс на папку хранения подтверждений
	MouseClick ("", 200, 160)
	send("{Del}")															;Удаляем файл
	Sleep(200)	
	MouseClick("", 800, 540)												;подтверждаем удаление файла
Else		
	Sleep (1500)															;Ждем 2 секунды
	MouseClick("left", 565, 620)											
	Sleep(1500)																;Ждем 1.5 секунды
	WinActivate("цц")														;переключаемяс на папку хранения подтверждений
	MouseClick ("", 200, 160)												
	send("{Del}")															;удаляем файл
	Sleep(200)
	MouseClick("", 800, 540)												;подтверждаем удаление файла
 EndIf
run ("podtv.exe")
 exit
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Поищите на просторах интернета Microsof Spy++ десятой версии (может быть уже выше, дайте знать если так ;) ) С помощью этой тулзы вы сможете отследить, какие сообщения отсылаются окну при выборе того или иного пункта меню (программа показывает все сообщения). В 1С выбирайте из выпадающего меню ваш пункт и найдите в логе что то похожее на WM_COMMAND wNotifyCode:x (sent from a menu) wId:yyy
Есть нету, то ищите другие сообщения WM_COMMAND или WM_MENUSELECT, возможно будет что нибудь полезное.

Вам нужно wID (yyy).
Если вам повезет и такие сообщения будут, то просто отсылайте в своем скрипте этому окно сообщение с кодом yyy .

Вот например, есть стандартный блокнот, в котором есть меню с пунктом "перенос по словам". Что бы включить/выключить его, отсылаем окну сообщение с кодом 32.
Код:
#Include <SendMessage.au3>
#include <WindowsConstants.au3>
Local $hNotepad = WinGetHandle("[CLASS:Notepad]")
If Not @error Then
	_SendMessageA($hNotepad,$WM_COMMAND,32 )
EndIf


2 вариант это использовать controlclick, только узнать нужно будет координаты x и y.
 
Верх