powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход к записи CronosPlus по системному номеру из формы Access
25 сообщений из 31, страница 1 из 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
25 сообщений из 31, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход к записи CronosPlus по системному номеру из формы Access
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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