Что нового

[Автоматизация] Проверка значений из ControlGetText()

forbrock

Новичок
Сообщения
43
Репутация
0
Привет форумчане! Нужна ваша помощь.

Есть часть скрипта, которая проверяет значение под курсором (курсор не от мыши, а что бы было проще понять приложен скрин).
Цикл жмет клавишу вверх, пока не встретит указанную ранее дату (1я строка ждет дату).
Проблема состоит в том, что если перед выбранной датой больше никаких строк нет, то цикл так и продолжает жать клавишу вверх, а мне нужно сделать выход (alt+х) и продолжить работу.
Возможные варианты - сравнить значение строки на текущей итерации и на следующей, если 60 раз идет повторение, то выходить из цикла (если этим способом, то нужно сравнивать все 5 полей). Я пытался сделать этим способом, не вышло. Надеюсь на вашу помощь.
Значения полей:
Код:
ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:1]')
ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:2]')
ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:3]')
ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:4]')
ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:5]')
Код:
While Not WinActive('Папка звітів -',StringLeft($dd,2) & '\' & Stringmid($dd,4,2) & '\' & StringRight($dd,4))
	  Send('{UP}')
	  $view_date = GetWinText(1)				;Выбираем колонку с датой
	  If $view_date == '00\00\0000' Then 		;Если указанного числа в печати нет, то наткнувшись на нулевую дату происходит выход из цикла
		 Send('!x')
		 Sleep(500)
		 WinWait('Оболонка середовища функціонування    ІОЦ Мінпраці України', 'Допомога')
		 WinActivate('Оболонка середовища функціонування    ІОЦ Мінпраці України', 'Допомога')
		 ExitLoop
	   Else		;Если указанного числа нет и нет нулевой даты, то выход из цикла используя проверку строк
;~ 		 Действие
	  EndIf
   WEnd
   While WinActive('Папка звітів -',StringLeft($dd,2) & '\' & Stringmid($dd,4,2) & '\' & StringRight($dd,4))
	  Send('{UP}')
   WEnd
   Send('{DOWN}') ;Курсор устанавливается на первую запись указанной даты
   Sleep(300)
   While WinActive('Папка звітів -',StringLeft($dd,2) & '\' & Stringmid($dd,4,2) & '\' & StringRight($dd,4)) ;Жать стрелку вниз, пока строка равна указанной дате
	  Send('{DOWN}')

P.S. Такой же выход нужен если указана текущая дата (т.к. проверку реализовал нажатием клавиши вниз, пока не встретится отличное число от указанного).
P.P.S. Строка 1 на скрине 00\00\0000 не всегда присутствует, а колонка * не учитывается.




Добавлено:
Сообщение автоматически объединено:

Пробовал объединить вытаскиваемые значения и сравнить их до перехода курсора и после. Но значения переменных не обновляются...
Код:
While Not WinActive('Папка звітів -',StringLeft($dd,2) & '\' & Stringmid($dd,4,2) & '\' & StringRight($dd,4))
	  $str_verify1 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:1]')
	  $str_verify2 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:2]')
	  $str_verify3 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:3]')
	  $str_verify4 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:4]')
	  $str_verify5 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:5]')
	  $str = $str_verify1 & ' ' & $str_verify2 & ' ' & $str_verify3 & ' ' & $str_verify4 & ' ' & $str_verify5
	  Send('{UP}')
	  $str_verify = $str_verify1 & ' ' & $str_verify2 & ' ' & $str_verify3 & ' ' & $str_verify4 & ' ' & $str_verify5
	  MsgBox(0,'','$str1 = ' & $str & @CRLF & '$str2 = ' & $str_verify)
	  If $str = $str_verify Then	;Если указанного числа нет и нет нулевой даты, то выход из цикла используя проверку строк
			$counter+=1
	   Else
		 $counter = 0
	  EndIf
	  If $counter == '10' Then
		 MsgBox(0,'','Превышено значение 10')
		 Exit
	  EndIf



Добавлено:
Сообщение автоматически объединено:

Временное решение пока такое:
Код:
$str_verify1 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:1]')
	  $str_verify2 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:2]')
	  $str_verify3 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:3]')
	  $str_verify4 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:4]')
	  $str_verify5 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:5]')
	  $str = $str_verify1 & ' ' & $str_verify2 & ' ' & $str_verify3 & ' ' & $str_verify4 & ' ' & $str_verify5
	  Send('{UP}')
	  $str_verify1 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:1]')
	  $str_verify2 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:2]')
	  $str_verify3 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:3]')
	  $str_verify4 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:4]')
	  $str_verify5 = ControlGetText('Папка звітів -','','[CLASS:Edit; INSTANCE:5]')
	  $str_verify = $str_verify1 & ' ' & $str_verify2 & ' ' & $str_verify3 & ' ' & $str_verify4 & ' ' & $str_verify5
	  MsgBox(0,'','$str1 = ' & $str & @CRLF & '$str2 = ' & $str_verify)
Далее сравнение переменных...

Тема пока открыта, думаю решение громоздкое и требует много "телодвижений", а значит и ресурсов.
 
Верх