Версия AutoIt: 3.
v3.3.8.1
Описание:
Есть необходимость написать простенькую программу для учета гостей в анти-кафе.
Что такое анти-кафе.Анти-кафе -это кафе в котором оплачивается только за время провождения в заведении. Ни за что другое гости не платят.
Суть программы: Администратор запускает программу. Нажимает кнопочку START. Программа копирует имеющийся exel-файл с новым именем(желательно чтоб именем служила дата и время создания файла) с формулами забитыми за ранее.
В формулах введется подсчет времени нахождения пользователя в помещении, а так-же сколько он должен за это заплатит
Далее приходит гость. Администратор выдает карточку посетителю, забивает ее номер в программу. Нажимает "ОК". По нажатию кнопки "ОК" происходит следующее: Программа заполняет ячейки в Excel: Номер карточки из GUI переносится в первый столбец, дата во второй столбец,время входа в третий столбец.
Далее, когда гость уходит администратор еще раз вбивает номер карточки в программу и нажимает "ОК". Программа проверяет столбец с номерами карточек, находит вбитый ранее номер, находит его. Напротив номера в четвертом столбце программа вбивает время ухода гостя. В 5,6,7,8 столбце Excel подсчитывает сумму к оплате. Программа берет
значение из 8 столбца и выводит на экран администратору, что гость должен заплатить такую-то сумму денег.
В конце рабочего дня администратор нажимает кнопку STOP. Ему программа выводит статистику: Клиентов за день, касса за день.
Также в программе светится текущая статистика: клиентов в зале, клиентов за день.
Примечания:
На данном этапе получилось сделать только GUI.
Ни как не могу подружиться с exce l. Что конкретно мне нужно от Excel- читать выше.
Кому не лень- подскажите, пожалуйста. Ибо сам тупить долго буду.
Ниже выкладываю то что имеется сейчас:
Excel файл выкладываю по ссылке ниже.
http://www.pifp.ru/s/file/429b1420ed2fc9518c2014a222b831c/31259
======================================================================
Благодаря WSWR программа практически готова к использованию, за что WSWR огромная благодарность, основной алгоритм программы я взял из его кода но перевел его из OPENOFFICE В Excel так как была необходимость запаролить файл в котором ведется учет, чтоб кассир не смог его редактировать без программы. В целом программа отлично работает, но периодически выскакивает ошибка "Array variable has subscript badly formatted. Ошибка вылитает когда захочет, немогу отследить почему. Может 1 раз в день вылететь, а может 5 раз в час. Причина ее появления мне неизвестна... Кто с таким сталкивался подскажите... Ниже выкладываю скрин ошибки, полный исходный код программы, и исходные файлы для работы программы. Все файлы должны лежать в папке программы.
Скрин ошибки тут http://cs421523.vk.me/v421523570/a73c/TnwsYwPGz_Q.jpg
Полный исходный код программы ниже.
Исходные файлы качать тут http://yadi.sk/d/inRqBEVr9GoaM
Пароль от файла LOG.xls: lib77722777lib
Да и еще один маленький но доставучий момент... может кто знает как решить...
Чтоб программа работала со сканером карт- пришлось установить HOTKEY На клавишу ENTER. Объясню почему. После считывания кода карты и ввода в соответствующее поле сканер карты посылает ENTER... По этому для удобства я прописал вызов функции по нажатию на ENTER...(Чтоб не делать кнопку OK). Все отлично работает, но клавишей ENTER не возможно пользоваться в других программах, браузере, офисе итд. Можно ли как-то сделать чтоб хоткей работал только когда программа активна?
С уважением и благодарностью ко всем откликнувшимся!
v3.3.8.1
Описание:
Есть необходимость написать простенькую программу для учета гостей в анти-кафе.
Что такое анти-кафе.Анти-кафе -это кафе в котором оплачивается только за время провождения в заведении. Ни за что другое гости не платят.
Суть программы: Администратор запускает программу. Нажимает кнопочку START. Программа копирует имеющийся exel-файл с новым именем(желательно чтоб именем служила дата и время создания файла) с формулами забитыми за ранее.
В формулах введется подсчет времени нахождения пользователя в помещении, а так-же сколько он должен за это заплатит
Далее приходит гость. Администратор выдает карточку посетителю, забивает ее номер в программу. Нажимает "ОК". По нажатию кнопки "ОК" происходит следующее: Программа заполняет ячейки в Excel: Номер карточки из GUI переносится в первый столбец, дата во второй столбец,время входа в третий столбец.
Далее, когда гость уходит администратор еще раз вбивает номер карточки в программу и нажимает "ОК". Программа проверяет столбец с номерами карточек, находит вбитый ранее номер, находит его. Напротив номера в четвертом столбце программа вбивает время ухода гостя. В 5,6,7,8 столбце Excel подсчитывает сумму к оплате. Программа берет
значение из 8 столбца и выводит на экран администратору, что гость должен заплатить такую-то сумму денег.
В конце рабочего дня администратор нажимает кнопку STOP. Ему программа выводит статистику: Клиентов за день, касса за день.
Также в программе светится текущая статистика: клиентов в зале, клиентов за день.
Примечания:
На данном этапе получилось сделать только GUI.
Ни как не могу подружиться с exce l. Что конкретно мне нужно от Excel- читать выше.
Кому не лень- подскажите, пожалуйста. Ибо сам тупить долго буду.
Ниже выкладываю то что имеется сейчас:
Код:
#include <GuiEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Excel.au3>
Opt("GUIOnEventMode", 1)
$Form2 = GUICreate("Form2", 595, 398, 338, 278,$ws_popup)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
;$ws_popup
$i_number = GUICtrlCreateInput("Введите номер карточки", 30, 80, 300, 30)
$OK = GUICtrlCreateButton("OK", 360, 80, 60, 30)
GUICtrlSetOnEvent(-1, "OKPressed")
$client_in = GUICtrlCreateLabel("КЛИЕНТОВ В ЗАЛЕ", 30, 140, 300, 30)
$N_client_in = GUICtrlCreateLabel("", 360, 140, 60, 30)
$client_day = GUICtrlCreateLabel("КЛИЕНТОВ ЗА ДЕНЬ", 32, 200, 300, 30)
$n_client_day = GUICtrlCreatelabel("", 360, 200, 60, 30)
$start = GUICtrlCreateButton("START", 30, 250, 140, 60)
GUICtrlSetOnEvent(-1, "STARTPressed")
$stop = GUICtrlCreateButton("STOP", 190, 250, 140, 60)
GUICtrlSetOnEvent(-1, "STOPPressed")
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func OKPressed()
$number= GUICtrlRead($i_number)
MsgBox(64,"INFO", $number)
EndFunc
Func STARTPressed()
MsgBox(64,"INFO", "Workit")
EndFunc
Func STOPPressed()
Exit 0
EndFunc
;=========================================ДВИГАТЬ ОКНО GUI
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam)
If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
Return $GUI_RUNDEFMSG
EndFunc
;=========================================ДВИГАТЬ ОКНО
http://www.pifp.ru/s/file/429b1420ed2fc9518c2014a222b831c/31259
======================================================================
Благодаря WSWR программа практически готова к использованию, за что WSWR огромная благодарность, основной алгоритм программы я взял из его кода но перевел его из OPENOFFICE В Excel так как была необходимость запаролить файл в котором ведется учет, чтоб кассир не смог его редактировать без программы. В целом программа отлично работает, но периодически выскакивает ошибка "Array variable has subscript badly formatted. Ошибка вылитает когда захочет, немогу отследить почему. Может 1 раз в день вылететь, а может 5 раз в час. Причина ее появления мне неизвестна... Кто с таким сталкивался подскажите... Ниже выкладываю скрин ошибки, полный исходный код программы, и исходные файлы для работы программы. Все файлы должны лежать в папке программы.
Скрин ошибки тут http://cs421523.vk.me/v421523570/a73c/TnwsYwPGz_Q.jpg
Полный исходный код программы ниже.
Код:
; Подключение стандартных функций ===============================================================================================
#include <Date.au3>
#include <Array.au3>
#include <GuiStatusBar.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#Include <Excel.au3>
; Подключение стандартных функций ===============================================================================================
; #OnAutoItStartRegister "RUNPressed"
Opt('GUIOnEventMode', 1) ; активация кнопок GUI
FileInstall("logo.jpg", @ScriptDir)
; Установка горячих клавищ ======================================================================================================
HotKeySet ( "{ENTER}", "WORKPressed" ) ;клавиша ENTER посылается после ввода данных с помощью штрих-сканера... по этому она вызывает функцию WORKPressed
;HotKeySet ( "{Space}", "OKPressed" ) ; клавиша SPACE забита для удобства нажимания кнопки OK
; Установка горячих клавищ ======================================================================================================
;========================================================================================================================================================================================================
; Объявление переменных ==============================================================================================
Global $num, $num1, $num2, $num3, $num4, $num5, $num6, $num7, $num8, $num9, $num10 ; переменные необходимы для вывода мини-истории (номер карточки)
Global $sum, $sum1, $sum2, $sum3, $sum4, $sum5, $sum6, $sum7, $sum8, $sum9, $sum10 ; переменные необходимы для вывода мини-истории (сумма к оплате)
Global $oExcel, $sPatch = @ScriptDir & '\LOG.xls' ; Путь к заполняемому файлу
Global $i_number, $oNumber, $sITIME,$sITIM, $sOTIME,$sOTIM, $sATIME,$sATIM, $stMONEY, $stMONE, $sCNUMBER, $sDate, $sATIMH, $nump
Global $GUESTIN, $GUESTAD, $fCash, $aCash, $dCash, $runned
Global $oCards[3500]
$Form2 = GUICreate('LIBERTY', 1000, 450, -1, -1) ; Создание GUI
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\logo.jpg", 0, 0, 400, 400) ;логотип
GUICtrlSetState($Pic1, $GUI_DISABLE) ; отключить картинку чтоб не вылазила поверх кнопок
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST') ; Регистрация пользовательских функций для известных кодов (ID) сообщений Windows (WM_MSG). ------------------------???????????????????
GUISetBkColor(0x4b2202) ; установка фонового цвета
$Group1 = GUICtrlCreateGroup("", -10 ,-10, 410, 470); создание группы
GUICtrlCreateGroup("", -99, -99, 1, 1)
$List1 = GUICtrlCreateList("", 420, 280, 560, 150); создание поля List для ведения миниистории о действиях программы
$viev = GUICtrlCreateButton('Показать', 600,105, 60, 19) ; Кнопка показа кассы
GUICtrlSetOnEvent($viev, 'VIEVPressed');
GUICtrlSetState($viev, $GUI_DISABLE)
$run = GUICtrlCreateButton('Начать работу!', 30, 250, 140, 60) ; Кнопка запуска программы. Что делает смотреть в описании функции RUNPressed
GUICtrlSetOnEvent($run, 'RUNPressed'); Активация кнопки RUN
$stop = GUICtrlCreateButton('Закрыть программу', 190, 320, 140, 60) ; Кнопка завершения работы с программой. Что делает смотреть в описании функции EXITPressed
GUICtrlSetOnEvent($stop, 'EXITPressed'); Активация кнопки EXIT
;$his = GUICtrlCreateButton('HISTORY', ) ; Кнопка вывода миниистории. Что делает смотреть в описании функции HISTORYPressed
;GUICtrlSetOnEvent(-1, 'HISTORYPressed'); Активация кнопки HYSTORYPressed
$help = GUICtrlCreateButton('Помощь',30, 320, 140, 60 ) ; Кнопка минисправки. Что делает смотреть в описании функции HELPPressed
GUICtrlSetOnEvent($help, 'HELPPressed'); Активация кнопки HELP
$Checkbox1 = GUICtrlCreateCheckbox("Проверка", 190, 250, 140, 60, $BS_PUSHLIKE + $BS_BITMAP) ;создание CHECKBOX для включения отключения режима проверки
$i_number = GUICtrlCreateInput('', 30, 150, 300, 30, 0x2000) ; создание поля ввода номера карточки
GUICtrlSetLimit($i_number,8,8)
GUICtrlSetState($i_number, $GUI_DISABLE); Отключение поля ввода ;i_number
GUICtrlSetData($i_number, 'Нажмите кнопку "Начать работу" !'); Установка значения в поле $i_number
$info = GUICtrlCreateLabel("Информация", 600, 10, 200, 50); Заголовок -текст Информация
GUICtrlSetFont(-1, 22, 400, 0, "Bauhaus 93") ; установка шрифта
GUICtrlSetColor(-1, 0xFFFF00) ;установка цвета шрифта.
$Group2 = GUICtrlCreateGroup("", 705 ,50, 275, 180); объединение в группу
GUICtrlCreateGroup("", -99, -99, 1, 1) ;объединение в гуппу
GUICtrlCreateLabel("№ карточки", 720, 60, 100, 20); Текст № карточки
GUICtrlSetFont(-1, 16, 400, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
$sCNUMBER = GUICtrlCreateLabel("", 850, 62, 120, 20); Поле вывода номера карточки
GUICtrlSetData(-1, ""); очистка поля
GUICtrlSetFont(-1, 16, 400, 0, "Bauhaus 93") ;установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
GUICtrlCreateLabel("Время входа", 720, 80, 200, 20) ; текст Время входа
GUICtrlSetFont(-1, 14, 400, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
$sITIME = GUICtrlCreateLabel("", 850, 82, 120, 20); поле ввода информации о времени входа
GUICtrlSetData(-1, ""); обнуление поля
GUICtrlSetFont(-1, 16, 400, 0, "Bauhaus 93") ; установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
GUICtrlCreateLabel("Время выхода", 720,100, 200, 20); текст Время выхода
GUICtrlSetFont(-1, 14, 400, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
$sOTIME = GUICtrlCreateLabel("", 850, 102, 120, 20); поле ввода информации о времени выхода
GUICtrlSetData(-1, ""); обнуление информации
GUICtrlSetFont(-1, 16, 400, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00);установка цвета
GUICtrlCreateLabel("Проведено", 720, 120, 120, 20) ; текст Проведено
GUICtrlSetFont(-1, 14, 400, 0, "Bauhaus 93") ; установка шрифта
GUICtrlSetColor(-1, 0xFFFF00);установка цвета
$sATIME = GUICtrlCreateLabel("", 850, 122, 120, 20); поле ввода информации о проведенном времени
GUICtrlSetData(-1, ""); обнуление информации
GUICtrlSetFont(-1, 16, 400, 0, "Bauhaus 93");установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
GUICtrlCreateLabel("СУММА", 720,190, 100, 35); Текст Сумма
GUICtrlSetFont(-1, 20, 400, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); Установка цвета
$stMONEY = GUICtrlCreateLabel("", 820, 175, 145, 50); поле ввода информации о сумме к оплате
GUICtrlSetData(-1, ""); обнуление информаци
GUICtrlSetFont(-1, 35, 400, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
$Group3 = GUICtrlCreateGroup("", 420 ,50, 275, 85); объеденение в группу
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("", 420 ,140, 275, 90); объединение в группу
GUICtrlCreateGroup("", -99, -99, 1, 1)
$sString = GUICtrlCreateLabel("", 422, 260, 1000, 20) ; Строка для ввода текста над полем ввода истории
GUICtrlSetFont(-1,10, 550, 0, ""); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
GUICtrlSetData(-1, " Дата Номер карты Время входа Время выхода Времени проведено Сумма"); текст в строке $sString
$iGuest = GUICtrlCreateLabel("", 435,65, 200, 19); текст Гостей в зале
GUICtrlSetFont(-1,12, 550, 0, "") ; установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цыета
GUICtrlSetData(-1, "Гостей в зале"); Текст Гостей в зале
$isGuest = GUICtrlCreateLabel("", 610,65, 30, 19) ; создание поля ввода информации о количестве клиентов в зале
GUICtrlSetFont(-1,12, 550, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
GUICtrlSetData(-1, "0"); установка начального значения
$aGuest = GUICtrlCreateLabel("", 435, 85, 200, 19); текст Гостей за сегодня
GUICtrlSetFont(-1,12, 550, 0, ""); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета шрифта
GUICtrlSetData(-1, "Гостей за сегодня"); текст Гостей за сегодня
$asGuest = GUICtrlCreateLabel("", 610,85, 30, 19); создание поля ввода информации о количестве гостей за сегодня
GUICtrlSetFont(-1,12, 550, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
GUICtrlSetData(-1, "0"); установка начального значения
$dCash = GUICtrlCreateLabel("", 435,105, 150, 19); текст Касса за сегодня
GUICtrlSetFont(-1,12, 550, 0, ""); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00); установка цвета
GUICtrlSetData(-1, "Минуты"); текст Касса за сегодня
;$fCash = GUICtrlCreateLabel("", 610,105, 80, 19);создание поля ввода для ввода информации о сумме положеной в кассу за сегодня
;GUICtrlSetFont(-1,12, 550, 0, "Bauhaus 93"); установка шрифта
;GUICtrlSetColor(-1, 0xFFFF00);установка цвета
;GUICtrlSetData(-1, "0"); установка начального значения
$STATUS = GUICtrlCreateLabel("", 435,155, 250, 70); поле ввода информации о том что делает программа
GUICtrlSetFont(-1,20, 550, 0, "Bauhaus 93"); установка шрифта
GUICtrlSetColor(-1, 0xFFFF00)
GUICtrlSetData(-1, 'Нажмите кнопку "Начать работу" !')
$iDummy = GUICtrlCreateDummy()
Dim $aAccelKeys[1][2] = [["{ENTER}", $iDummy]]
GUISetAccelerators($aAccelKeys)
GUISetState(@SW_SHOW, $Form2)
While 1
ControlFocus('','',$i_number)
Sleep(1000)
WEnd
; Я не знаю что это.Кто может объяснить, напишите в коментариях=================================================================
;=========================================================================================================================================================================================
Func RUNPressed(); функция RUNPressed
GUICtrlSetState($run, $GUI_DISABLE)
GUICtrlSetData($STATUS, "Загрузка...")
GUICtrlSetData($i_number, "Загрузка.Подождите...")
$runned = 0
$sPassword= "lib77722777lib"
$sWritePassword = "lib77722777lib"
If Not FileExists($sPatch) Then FileCopy(@ScriptDir & '\LOG.xls', $sPatch)
$oExcel = _ExcelBookOpen($sPatch,0,False,$sPassword,$sWritePassword)
_ExcelWriteCell($oExcel,"'" & _NowDate(), 'E4')
$GUESTIN=_ExcelReadCell($oExcel, 'D3')
$GUESTAD=_ExcelReadCell($oExcel, 'D4')
$aCash=_ExcelReadCell($oExcel, 'D5')
GUICtrlSetData($isGuest, $GUESTIN)
GUICtrlSetData($asGuest, $GUESTAD)
GUICtrlSetData($fCash, $aCash & 'грн.')
$oCards = _ExcelReadArray($oExcel,8,1,3000,1)
$nump = 1000
GUICtrlSetData($i_number, '')
GUICtrlSetState($i_number, $GUI_ENABLE)
ControlFocus('','',$i_number)
GUICtrlSetState($viev, $GUI_ENABLE)
GUICtrlSetData($STATUS, "Ожидание ввода" & @CR & "номера карточки...")
EndFunc ;конец функции RUNPressed
ControlFocus('','',$i_number)
Func WORKPressed();Функция WORKPressed
if $runned = 0 then
GUICtrlSetState($i_number, $GUI_DISABLE)
;If Not IsObj($oExcel) Then Return SetError(1, 0, 0) ; проверяет, является ли переменная или выражение типом данных Объект
Local $number = GUICtrlRead($i_number) ; присваиваивание переменной $number значение введеное в поле ввода номера карточки
GUICtrlSetData($i_number, 'Обработка данных...')
$runned = 1
$double=$number/10000000
;If $number = '' Then Return SetError(2, 0, 0) ; Проверка введен ли номер в переменную
if $double < 1 Then
GUICtrlSetFont($STATUS,15, 550, 0, "Bauhaus 93")
GUICtrlSetData($STATUS, "Неверный ввод!" & @CR & "Ожидание ввода номера карточки...")
$runned = 0
GUICtrlSetData($i_number, '')
ControlFocus('','',$i_number)
else
$fNumber = _ArraySearch($oCards, $number);поиск номера строки по массиву $oCards с номером необходимой карты картой
sleep(100)
$oNumber= _ExcelReadCell($oExcel,'B2'); поиск строки для ввода данных, № строки берется из ячейки B2, в которой запита формула поиска пустой строчки
sleep(100)
If $fNumber = -1 Then ; если номер карточки введенный в поле ввода $i_number НЕ НАЙДЕН в массиве $oCards тогда (Цикл 1)
sleep(100)
GUICtrlSetFont($STATUS,20, 550, 0, "Bauhaus 93")
GUICtrlSetData($STATUS, "Регистрация" & @CR & "гостя...")
GUICtrlSetData($sCNUMBER,$number)
GUICtrlSetData($sITIME, _NowTime(4))
GUICtrlSetData($sOTIME,'')
GUICtrlSetData($sATIME,'')
GUICtrlSetData($stMONEY,'')
sleep(100)
$oCards[$oNumber-8]= $number
sleep(100)
_ExcelWriteCell($oExcel, $number, 'C' & $oNumber) ; пишем номер карточки в колонку С и строку указанную в переменной $oNumber
_ExcelWriteCell($oExcel,"'" & _NowDate(), 'B' & $oNumber) ; пишем текущую дату в колонку B и строку указанную в переменной $oNumber
_ExcelWriteCell($oExcel,"'" & _NowTime(4), 'D' & $oNumber) ; пишем текущее время в колонку B и строку указанную в переменной $oNumber
sleep(100)
sleep(100)
$GUESTIN=_ExcelReadCell($oExcel, 'D3')
$GUESTAD=_ExcelReadCell($oExcel, 'D4')
GUICtrlSetData($isGuest, $GUESTIN)
GUICtrlSetData($asGuest, $GUESTAD)
sleep(100)
GUICtrlSetData($i_number, 'Сохранение, подождите...')
_ExcelBookSave($oExcel) ;сохраняемся
GUICtrlSetData($i_number, '')
sleep(100)
GUICtrlSetFont($STATUS,15, 550, 0, "Bauhaus 93")
GUICtrlSetData($STATUS, "Гость зарегестрирован. " & @CR & "Ожидание ввода номера карточки...")
sleep (500)
;GUICtrlSetData($STATUS, "Ожидание ввода" & @CR & "номера карточки...")
;;;;;;;;;;;;;;;;;;;;;;;;;;;GUICtrlSetData($iGuest, ''$iGuest
GUICtrlSetState($i_number, $GUI_ENABLE)
ControlFocus('','',$i_number)
$runned = 0
Else ; если номер карточки введенный в поле ввода $i_number НАЙДЕН в массиве $oCards тогда
sleep(100)
$sCheckbox = GUICTRLREAD($Checkbox1)
if $sCheckbox = 4 Then
sleep(100)
GUICtrlSetFont($STATUS,20, 550, 0, "Bauhaus 93")
GUICtrlSetData($STATUS, "Расчет гостя...")
If _ExcelReadCell($oExcel, 'E' & $fNumber+8) = '' Then ; Если колонка Е с номером строки $fNumber(совпадает с номером строчки в массиве $oCard) пустая (в эту колонку забиваеться время выхода гостя) тогда
_ExcelWriteCell($oExcel,"'" & _NowTime(4), 'E' & $fNumber+8); Запишем текущее время в эту же колонку (время выхода гостя) (Цикл 2)
GUICtrlSetData($sOTIME,_NowTime(4))
sleep(100); дадим Excel время подумать и посчитать сколько же гость должен заплатить...
$imoney=_ExcelReadCell($oExcel, 'H' & $fNumber+8); переменной $iMoney присвоим количество денег указаных в колонке H с номером строчки $fNumber
GUICtrlSetData($sCNUMBER,$number)
$sITIM =_ExcelReadCell($oExcel, 'D' & $fNumber+8)
GUICtrlSetData($sITIME,$sITIM)
$oCards[$fNumber]= '0'
$sOTIM =_ExcelReadCell($oExcel, 'E' & $fNumber+8)
GUICtrlSetData($sOTIME,$sOTIM)
$sATIM= _ExcelReadCell($oExcel, 'G' & $fNumber+8) ;кол-во минут в неверной форме
$sATIMG = int($sATIM*1440); кол-во минут в верной форме
sleep(100)
$HOUR= 60 ; 1 час = 60 минут
$sATIMH= Int (($sATIMG)/$HOUR) ;кол-во часов ///INT целая часть от числа
$sATIMM=($sATIMG-($sATIMH*60)); кол-во минут. ;MOD-остаток от деления
sleep(100)
GUICtrlSetData($sATIME,$sATIMH & 'ч ' & $sATIMM & 'мин')
sleep(100)
$GUESTIN=_ExcelReadCell($oExcel, 'D3')
$GUESTAD=_ExcelReadCell($oExcel, 'D4')
$aCash=_ExcelReadCell($oExcel, 'D5')
GUICtrlSetData($isGuest, $GUESTIN)
GUICtrlSetData($asGuest, $GUESTAD)
GUICtrlSetData($fCash, $aCash & 'грн.')
sleep(100)
$stMONE =_ExcelReadCell($oExcel, 'H' & $fNumber+8)
GUICtrlSetData($stMONEY,$stMONE)
sleep(100)
$oCards[$fNumber]= '0'
$sDate=_ExcelReadCell($oExcel, 'B' & $fNumber+8)
$nump +=1
GUICtrlSetData($List1, ""& $nump&" "& $sDate &" "&$number &" " & $sITIM &" "&$sOTIM &" "& $sATIMH & ' ч ' & $sATIMM & " мин"& " "& $stMONE & " грн" )
sleep(100)
GUICtrlSetState($i_number, $GUI_DISABLE)
GUICtrlSetData($i_number, 'Сохранение, подождите...')
sleep(100)
GUICtrlSetData($isGuest, $GUESTIN)
_ExcelBookSave($oExcel) ;сохраняемся
GUICtrlSetData($i_number, '')
GUICtrlSetState($i_number, $GUI_ENABLE)
ControlFocus('','',$i_number)
sleep(100)
GUICtrlSetFont($STATUS,15, 550, 0, "Bauhaus 93")
GUICtrlSetData($STATUS, "Гость расчитан. " & @CR & "Ожидание ввода номера карточки...")
GUICtrlSetState($Checkbox1, 4)
$runned = 0
EndIf; Конец цикла 2
else;===============================================================================================================================================================================================================
sleep(100)
GUICtrlSetFont($STATUS,20, 550, 0, "Bauhaus 93")
GUICtrlSetData($STATUS, "Режим проверки!")
If _ExcelReadCell($oExcel, 'E' & $fNumber+8) = '' Then ; Если колонка Е с номером строки $fNumber(совпадает с номером строчки в массиве $oCard) пустая (в эту колонку забиваеться время выхода гостя) тогда
_ExcelWriteCell($oExcel,"'" & _NowTime(4), 'E' & $fNumber+8); Запишем текущее время в эту же колонку (время выхода гостя) (Цикл 2)
GUICtrlSetData($sOTIME,_NowTime(4))
sleep(100); дадим Excel время подумать и посчитать сколько же гость должен заплатить...
$imoney=_ExcelReadCell($oExcel, 'H' & $fNumber+8); переменной $iMoney присвоим количество денег указаных в колонке H с номером строчки $fNumber
GUICtrlSetData($sCNUMBER,$number)
$sITIM =_ExcelReadCell($oExcel, 'D' & $fNumber+8)
GUICtrlSetData($sITIME,$sITIM)
;$oCards[$fNumber]= '0'
$sOTIM =_ExcelReadCell($oExcel, 'E' & $fNumber+8)
GUICtrlSetData($sOTIME,$sOTIM)
$sATIM= _ExcelReadCell($oExcel, 'G' & $fNumber+8) ;кол-во минут в неверной форме
$sATIMG = int($sATIM*1440); кол-во минут в верной форме
sleep(100)
$HOUR= 60 ; 1 час = 60 минут
$sATIMH= Int (($sATIMG)/$HOUR) ;кол-во часов ///INT целая часть от числа
$sATIMM=($sATIMG-($sATIMH*60)); кол-во минут. ;MOD-остаток от деления
sleep(100)
GUICtrlSetData($sATIME,$sATIMH & 'ч ' & $sATIMM & 'мин')
sleep(100)
$stMONE =_ExcelReadCell($oExcel, 'H' & $fNumber+8)
GUICtrlSetData($stMONEY,$stMONE)
_ExcelWriteCell($oExcel,"", 'E' & $fNumber+8)
sleep(100)
GUICtrlSetState($i_number, $GUI_DISABLE)
GUICtrlSetData($i_number, 'Сохранение, подождите...')
sleep(100)
GUICtrlSetData($i_number, '')
GUICtrlSetState($i_number, $GUI_ENABLE)
ControlFocus('','',$i_number)
sleep(100)
GUICtrlSetFont($STATUS,13, 550, 0, "Bauhaus 93")
GUICtrlSetData($STATUS, "Режим проверки отключен!" & @CR & "Информация получена!" & @CR & "Ожидание ввода номера карточки...")
GUICtrlSetState($Checkbox1, 4)
sleep(100)
$runned = 0
;EndIf; Конец цикла 2
EndIf
EndIf; Rонец цикла 1
EndIf
EndIf
sleep(100)
GUICtrlSetState($i_number, $GUI_ENABLE)
ControlFocus('','',$i_number)
Else
GUICtrlSetData($i_number, 'Не так быстро... Идет работа')
EndIf
EndFunc ; конец функции WORKPressed
Func EXITPressed(); функция EXITPressed
$AYS=MsgBox(4,'Закрыть программу?','Вы уверены что хотите закончить работу с программой?')
if $AYS=6 Then
$sFilePath = 'D:\Отчет\Отчет' & Random(1,10000,1)
$sType = "xls"
$fAlerts = 0
$fOverWrite = 1
$sPass = "lib77722777lib"
$sWritePass = "lib77722777lib"
$iAccessMode = 1
$iConflictResolution = 2
_ExcelBookSaveAs($oExcel, $sFilePath, $sType , $fAlerts , $fOverWrite , $sPass , $sWritePass , $iAccessMode , _
$iConflictResolution)
_ExcelBookSave($oExcel)
_ExcelBookClose($oExcel)
Exit
Else
EndIf
EndFunc ;==>EXITPressed
Func HELPPressed()
ShellExecute(@ScriptDir & "\Help.txt")
EndFunc
func VIEVPressed ()
MsgBox(64,"Минуты", "Минуты за сегодня " & $aCash)
EndFunc
Исходные файлы качать тут http://yadi.sk/d/inRqBEVr9GoaM
Пароль от файла LOG.xls: lib77722777lib
Да и еще один маленький но доставучий момент... может кто знает как решить...
Чтоб программа работала со сканером карт- пришлось установить HOTKEY На клавишу ENTER. Объясню почему. После считывания кода карты и ввода в соответствующее поле сканер карты посылает ENTER... По этому для удобства я прописал вызов функции по нажатию на ENTER...(Чтоб не делать кнопку OK). Все отлично работает, но клавишей ENTER не возможно пользоваться в других программах, браузере, офисе итд. Можно ли как-то сделать чтоб хоткей работал только когда программа активна?
С уважением и благодарностью ко всем откликнувшимся!