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

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

А можно пример:
guest_rusimportпри вызове Кроноса c помощью Shell с параметром командной строки startform
...
Рейтинг: 0 / 0
13.11.2014, 14:09
    #38804876
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
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
Период между сообщениями больше года.
06.10.2016, 20:19
    #39322290
eric555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
guest_rusimport,

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

В принципе, все это я смогу реализовать, но мне нужно, чтобы кронос не открывался каждый раз в новом окне! Это важно! Батник, если я не ошибаюсь, именно так и делает. Команду для перехода к открытому окну не нашел:(( Надо, чтобы работа происходила между открытым аксессом и уже открытым (запущенным) кроносом, то есть, как бы взаимодействуя друг с другом.
...
Рейтинг: 0 / 0
07.10.2016, 21:14
    #39323062
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
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
07.10.2016, 23:37
    #39323106
eric555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
guest_rusimportи , вообщем, всё работает
В Вас я и не сомневался! Действительно все работает!

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

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

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

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

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

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

А как быть, если Кронос свернут в панель задач? Можно ли его как-то активизировать без минимизации и максимизации окна?
...
Рейтинг: 0 / 0
08.10.2016, 13:21
    #39323203
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
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
08.10.2016, 13:37
    #39323205
eric555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
guest_rusimport,

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

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

Первая проблема понятна! Не нужно скобки переписывать, перед двойным кликом раскладка клавиатуры должна быть английской! Как бы сделать так, чтобы перед кликом раскладка была автоматом на Английском? И еще нужна задержка после выполнения запроса, но перед нажатием на кнопку "показать результаты запроса".
...
Рейтинг: 0 / 0
10.10.2016, 14:21
    #39323800
eric555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
Сделал так:
В модуль:
Код: 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
10.10.2016, 15:27
    #39323849
eric555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
guest_rusimport,

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

Вот, с раскладкой теперь все норм! С num look решил не заморачиваться пока, тупо включаю его в конце команд:) Оказалось не все так просто с этим говнокроносом, если окно просмотра развернуто, то меняется название главного окна! Следующий дабл клик уже не идет, findwindow уже его не видит. Есть варианты обхода?
...
Рейтинг: 0 / 0
10.10.2016, 21:19
    #39324061
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
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
10.10.2016, 21:41
    #39324069
eric555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
guest_rusimportкод для определения класса окна

Что-то не пойму, это чтобы узнать какой у меня класс окна? Как ее вызвать?
...
Рейтинг: 0 / 0
10.10.2016, 21:58
    #39324078
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
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
10.10.2016, 22:00
    #39324080
eric555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход к записи CronosPlus по системному номеру из формы Access
guest_rusimport,

Кстати, у нас КроносПлюс сетевая версия, у всех класс окна, скорее всего, будет разный... Наверное, этот способ не пойдет Да чтож так все сложно....
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переход к записи CronosPlus по системному номеру из формы Access / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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