powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход к записи CronosPlus по системному номеру из формы Access
31 сообщений из 31, показаны все 2 страниц
Переход к записи CronosPlus по системному номеру из формы Access
    #38803354
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не уверен в том, что создаю топик в нужном форуме. Если что, прошу простить и переместить:)
Есть таблица с данными в SQL, выкатил ее из Кроноса. Она выглядит так:
Системный номер Наименование товара Стоимость222 Настольный компьютер 30 000 руб.223 Колонки 500 руб.
Данную таблицу я привязал к форме access (табличная форма). Так вот, можно ли из формы access, при нажатии на поле(к примеру: по двойному клику) с системным номером переходить в Кронос на соответствующую запись? Как лучше это сделать? Через гиперссылку или с помощью VBA. К сожалению, в нете ничего подходящего не нашел.
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #38804055
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,

Я бы делал так - выгружал системный номер в промежуточный текстовый файл, в Кроносе создал форму ввода и запрос по образцу, в форме ввода на обработку события открытия формы повесил код, в котором бы считывался из промежуточного текстового файла системный номер и присваивался переменной, далее там же вызывался ранее созданный запрос по образцу , которому в качестве параметра присваивалось бы значение этой переменной, соответственно, при вызове Кроноса c помощью Shell с параметром командной строки startform (со ссылкой на созданную форму ввода) из процедуры VBA формы Access в Кроносе открывалась бы искомая запись. Вот , собственно говоря, и всё. Должно получиться. :)
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #38804802
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, я теоретически вас понял! Только вот выгружать в текстовый файл все данные не хочу. Если только не брать конкретное значение(системный номер) из поля формы и сразу передавать его в текстовый файл. Просто выгружать все записи из аксесс не нужно, а только конкретную запись, т.е. конкретный системный номер в текстовый файлик.

А можно пример:
guest_rusimportпри вызове Кроноса c помощью Shell с параметром командной строки startform
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #38804876
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555Ну, я теоретически вас понял! Только вот выгружать в текстовый файл все данные не хочу. Если только не брать конкретное значение(системный номер) из поля формы и сразу передавать его в текстовый файл. Просто выгружать все записи из аксесс не нужно, а только конкретную запись, т.е. конкретный системный номер в текстовый файлик.

А можно пример:
guest_rusimportпри вызове Кроноса c помощью Shell с параметром командной строки startform

конечно же, я имел ввиду выгружать только системный номер конкретной записи (которую надо посмотреть)

выдержка из хелпа кроноса-

"Параметр /startform задает оконную форму, которая должна быть открыта после запуска ИСУБД «CronosPro».

Синтаксис:

/startform=<идентификатор_формы>

Для управляющей формы <идентификатор_формы> – это ее номер. Для входной формы <идентификатор_формы> – это строка в формате <НомерФормы>_<МнемокодБазы>.

Пример использования:

Cronos.exe /startform=1

Cronos.exe -startform:1_ЛЦ "

т.е. создаете bat файл , например cro.bat, туда "засовываете" строку вызова кроноса - Cronos.exe -startform:1_ЛЦ
в access вызываете этот батник через shell
shell ("cmd /c <путь к батнику>\cro.bat")

это , я думаю , вы сделаете без проблем, другое дело - вам необходимо будет немного попрограммировать в Кроносе, и тут надо будет изучить его язык "заклинаний"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Переход к записи CronosPlus по системному номеру из формы Access
    #39322290
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Дико извиняюсь, но после очень долгого перерыва, решил продолжить данную тему:))

В принципе, все это я смогу реализовать, но мне нужно, чтобы кронос не открывался каждый раз в новом окне! Это важно! Батник, если я не ошибаюсь, именно так и делает. Команду для перехода к открытому окну не нашел:(( Надо, чтобы работа происходила между открытым аксессом и уже открытым (запущенным) кроносом, то есть, как бы взаимодействуя друг с другом.
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323062
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555guest_rusimport,

Дико извиняюсь, но после очень долгого перерыва, решил продолжить данную тему:))

В принципе, все это я смогу реализовать, но мне нужно, чтобы кронос не открывался каждый раз в новом окне! Это важно! Батник, если я не ошибаюсь, именно так и делает. Команду для перехода к открытому окну не нашел:(( Надо, чтобы работа происходила между открытым аксессом и уже открытым (запущенным) кроносом, то есть, как бы взаимодействуя друг с другом.
Ну, в принципе, можно.
В примере на полэкрана растянул Кронос , на полэкрана - Access, в общий модуль акса запихнул
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Option Compare Database

Public Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
                    ByVal lpWindowName As String) As Long
Public Declare Function SetFocus _
        Lib "user32.dll" (ByVal hWnd As Long) As Long
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long


на двойной клик по системному номеру в аксе повесил
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Системный_номер_DblClick(Cancel As Integer)
hhh = FindWindow(vbNullString, "Primer - старый формат ( малая модель )")
hhh1 = SetForegroundWindow(hhh)
hhh1 = Module1.SetFocus(hhh)
SendKeys "{F3}", True
SendKeys "2", True
SendKeys "{ENTER}", True
SendKeys "{ENTER}", True
SendKeys CStr(Me.Системный_номер), True
SendKeys "%{v}", True
End Sub


и , вообщем, всё работает (но есть маленький затык - строчку sendkeys "%{v} приходиться править каждый раз при открытии акцесс , ну, типа , добавить скобки , потом сразу их удалить, только тогда отрабатывает как надо... почему так происходит - не разобрался :)
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323106
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportи , вообщем, всё работает
В Вас я и не сомневался! Действительно все работает!

Только для новых аксесов в общем модуле добавляем "PtrSafe" перед "Function".

guest_rusimportстрочку sendkeys "%{v} приходиться править каждый раз
На счет скобок в "SendKeys" не понял. У меня нет проблем с этим. Закрываю запрос в Кроносе, перехожу в аксес, снова дабл клик по полю и все пашет.

И все же, можете в двух словах объяснить как работает последовательность имитации нажатий "SendKeys"? В кодах ничего про Кронос не вижу, только отсылка на "Primer - Старый формат (малая модель)"... Как вообще запрос формируется в Кроносе? И это вообще запрос по образцу? Или обычный?
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323107
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Кажись, я понял все! Find Window " Primer - Старый формат (малая модель) " - это и есть поиск окна с текущим банком! Дальше, банальная передача Кроносу имитации нажатия "горячих" клавиш с заранее взятым системником из аксесса))) Все гениально и просто!
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323121
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,
да, всё верно... Кронос я знавал , когда его ещё звали Персей в одной очень серьезной организации, поэтому , видимо и проблем не возникло :)
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323125
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Ну, насколько я знаю, бывшие выходцы из одной очень серьезной организации его и придумали:)
В понедельник опробую все на работе, отпишу если что. Еще раз огромное спасибо за помощь!
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323130
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555guest_rusimport,
Ну, насколько я знаю, бывшие выходцы из одной очень серьезной организации его и придумали:)

было такое дело
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323194
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

А как быть, если Кронос свернут в панель задач? Можно ли его как-то активизировать без минимизации и максимизации окна?
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323203
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555guest_rusimport,

А как быть, если Кронос свернут в панель задач? Можно ли его как-то активизировать без минимизации и максимизации окна?
в общий модуль добавить
Код: vbnet
1.
2.
Public Const SW_NORMAL = 1
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long


и в событии дабл клик
Код: vbnet
1.
2.
3.
4.
5.
6.
...
hhh = FindWindow(vbNullString, "Primer - старый формат ( малая модель )")
hhh1 = SetForegroundWindow(hhh)
hhh1 = Module1.SetFocus(hhh)
ShowWindow hhh, SW_NORMAL
...
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323205
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Ну вот, теперь другое дело! Осталось опробовать на работе. Бооольшое-пребольшое спасибо:)
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323611
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

К сожалению, на работе возникли проблемы со скобками:(( И еще у Кронос Плюс нет кнопки или горячей клавиши - просмотреть запрос. Поставил ее сам в настройках кроноса, но до нее команда не доходит. Нельзя ли задержку поставить между sendkeys 'ами?
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323691
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Первая проблема понятна! Не нужно скобки переписывать, перед двойным кликом раскладка клавиатуры должна быть английской! Как бы сделать так, чтобы перед кликом раскладка была автоматом на Английском? И еще нужна задержка после выполнения запроса, но перед нажатием на кнопку "показать результаты запроса".
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323800
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал так:
В модуль:
Код: vbnet
1.
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)


В код:
Код: vbnet
1.
Sleep 500

- число в миллисекундах! Это нужно вставить между командой "выполнить" и "показать запрос" (предварительно заданное в параметрах горячих клавиш). Просто необходимо для старого Кроноса(CronosPlus)
Код: vbnet
1.
2.
3.
4.
5.
6.
. . . 
SendKeys CStr(Me.Системный_номер), True
SendKeys "%{v}", True
Sleep 500
SendKeys "{w}", True
End Sub
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323849
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Вообщем, осталось два момента, которые никак не могу решить.
Это раскладка клавиатуры и почему-то при выполнении кода, гаснет клавиша Num lock.
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323857
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,
раскладка 13496926
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323859
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,
NumLock 1976125
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39323994
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Вот, с раскладкой теперь все норм! С num look решил не заморачиваться пока, тупо включаю его в конце команд:) Оказалось не все так просто с этим говнокроносом, если окно просмотра развернуто, то меняется название главного окна! Следующий дабл клик уже не идет, findwindow уже его не видит. Есть варианты обхода?
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324061
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,
у окна Кроноса есть класс окна: Afx:00400000:8:00010003:00000000:000504E9 (во всяком случае у меня такой, определить его не сложно), поэтому FindWindow можно запускать так
Код: vbnet
1.
hhh = FindWindow("Afx:00400000:8:00010003:00000000:000504E9", vbNullString)



класс окна в отличие от заголовка окна при работе приложения , по идее, меняться не должен

код для определения класса окна
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 Public Const MaxLen = 128
 Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
 (ByVal hWnd As Long, _
 ByVal lpClassName As String, _
 ByVal nMaxCount As Long) As Long

Public Function ClassName(hWnd As Long)
Dim strBuffer As String
strBuffer = Space(MaxLen)
intCount = GetClassName(hWnd, strBuffer, MaxLen)
ClassName = Trim(strBuffer)
End Function
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324069
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportкод для определения класса окна

Что-то не пойму, это чтобы узнать какой у меня класс окна? Как ее вызвать?
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324078
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,

класс окна, по идее, он не зависит от компа, он один для окна приложения на любом компе

определить его не сложно, запихните код выше в общий модуль своей базы access
и добавьте строки в свой код
Код: vbnet
1.
2.
3.
4.
5.
...
dim hhh as long
hhh = FindWindow(vbNullString, "Primer - старый формат ( малая модель )")
Debug.Print ClassName(hhh)
...



когда жмякните на системный номер в аксе и код отработает, перейдите в редактор VBA (Alt+F11) в базе access и в окне Immediate увидите название класса окна
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324080
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Кстати, у нас КроносПлюс сетевая версия, у всех класс окна, скорее всего, будет разный... Наверное, этот способ не пойдет Да чтож так все сложно....
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324086
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,
не зная, что такое класс окна, уже делаешь выводы... мда уж
ты сначала попробуй , а потом уж будешь выводы делать :)
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324088
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportне зная, что такое класс окна, уже делаешь выводы... мда уж
Так я и не претендую на крутого знатока VBA.

guest_rusimportты сначала попробуй , а потом уж будешь выводы делать :)
Попробовал, работало! Закрыл Кронос, потом снова открыл, даббл-клик перестал работать, проверил, класс поменялся...
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324097
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,
да, зачем то меняют класс окна при каждом запуске приложения , встречаюсь с таким впервые... тогда надо идти сложным путем - на таймер формы access вешать findwindow по заголовку при запуске Кроноса и каждый раз определять класс окна и потом на протяжении сеанса уже оперировать с ним, ну, думаю , идея понятна
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324098
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport,

Да, я так и подумал, что посоветуете его ловить... Но, игра не стоит свеч! Скажу всем, чтобы внутренние окна Кроноса не разворачивали и пес с ним... Спасибо за помощь!
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324116
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eric555,
я тут на досуге подумал - можно сделать проще
в общий модуль
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDNEXT = 2

Public Function Gethwnd() As Long
Dim ListItem As String
Currwnd = GetWindow(Application.hWndAccessApp, GW_HWNDFIRST)
Do While Currwnd <> 0
 Length = GetWindowTextLength(Currwnd)
 ListItem = Space(Length + 1)
 Length = GetWindowText(Currwnd, ListItem, Length + 1)
 If Length > 0 Then
    If InStr(1, ListItem, "Primer - старый формат ( малая модель )") > 0 Then Gethwnd = Currwnd
 End If
 Currwnd = GetWindow(Currwnd, GW_HWNDNEXT)
 DoEvents
Loop
End Function



и дабл клик меняем
Код: vbnet
1.
2.
3.
4.
...
'hhh = FindWindow(vbNullString, "Primer - старый формат ( малая модель )") - комментируем строку
hhh = Gethwnd
...


при таком раскладе должно работать и с развернутыми внутренними окнами Кроноса
...
Рейтинг: 0 / 0
Переход к записи CronosPlus по системному номеру из формы Access
    #39324289
eric555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportя тут на досуге подумал - можно сделать проще
Ну, вроде работает:) Посмотрим как будет дальше Если что, отпишусь:) Спаааасибо!
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход к записи CronosPlus по системному номеру из формы Access
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]