Переход между базами в программе
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Переход между базами в программе
Вопрос: какая есть функция для изменения пути на данные? В Настройка-Администратор. есть функция "Изменить путь на данные". Хотелось бы делать это из прогрммного кода без вызова интерфейса выбора каталога..типа вот так:
SetNewDBPath('f:\data1') и мы уже в другой базе.
Задача: Пишем программу управления логистикой холдинга.
В интерфейсе просмотра остатков по холдингу при переходе между колонками, где каждая колонка - остатки по одному юр.лицу холдинга (каждое юр.лицо - своя БД) НУЖНО МЕНЯТЬ ПУТЬ НА БАЗУ,т.е. переходить в БД соответсвующего колонке юр.лица. Нужно для того, чтобы сразу переходить в режим выписки накладных в нужной базе (юр.лице) из интерфейса, без использования функции администатора.
Первазис. Галактика 7 11.
SetNewDBPath('f:\data1') и мы уже в другой базе.
Задача: Пишем программу управления логистикой холдинга.
В интерфейсе просмотра остатков по холдингу при переходе между колонками, где каждая колонка - остатки по одному юр.лицу холдинга (каждое юр.лицо - своя БД) НУЖНО МЕНЯТЬ ПУТЬ НА БАЗУ,т.е. переходить в БД соответсвующего колонке юр.лица. Нужно для того, чтобы сразу переходить в режим выписки накладных в нужной базе (юр.лице) из интерфейса, без использования функции администатора.
Первазис. Галактика 7 11.
Некоммерческое общение в форуме
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Переход между базами в программе
Да..желательно, чтобы функция проверяла права текущего пльзователя на изменение пути на данные.
Некоммерческое общение в форуме
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Переход между базами в программе
где то тут уже обсуждалось как подцепить таблу из другой базы.
а так нужно сгенерить событие
cmNewData - а вот как не курсях
а так нужно сгенерить событие
cmNewData - а вот как не курсях
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Переход между базами в программе
подцепить таблицу - это другое. это понятно.
нужно базу изменить текущую.
нужно базу изменить текущую.
Некоммерческое общение в форуме
-
- Местный житель
- Сообщения: 278
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Переход между базами в программе
У нас есть задача - в одной базе подситать что продано и влить это в другую базу. В своем фейсе пишу такую строчку
ExecProgram('\\galaxy\sysvol\old_base\mm.bat','username()','',4096,m_ex);
(m_ex объявлена как integer)
Содержание MM.BAT
E:
cd \
cd OLD_BASE
E:\old_base\exe\winint.exe /c:new.cfg
new.cfg - обычный CFG-файл с указанием пути на новую базу. Только добавляется одна секция
[LOGIN]
/U:%user%
/P:<пароль пользователя>
ExecProgram('\\galaxy\sysvol\old_base\mm.bat','username()','',4096,m_ex);
(m_ex объявлена как integer)
Содержание MM.BAT
E:
cd \
cd OLD_BASE
E:\old_base\exe\winint.exe /c:new.cfg
new.cfg - обычный CFG-файл с указанием пути на новую базу. Только добавляется одна секция
[LOGIN]
/U:%user%
/P:<пароль пользователя>
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Переход между базами в программе
Извините, я чего-то не понял.
CFG-файлы же читаются при загрузке. А я не хочу выходить из Галактики..даже из интерфейса. Я нахожусь в интерфейсе и при переходе в другую панень хочу, чтобы я оказался в другой базе данных. Т.е. если рассмотреть Вашу задачу, то Вы просматриваете информацию в верхней части интерфейса в одной базе, а затем переходите в нижнюю и Вы уже в другой (т.е. не таблица из другой базы, что сделать легко используя Reopentablebypath). ВСЯ база является уже другой..и если я вызову стандартный интерфейс Галактики из нижнего окна, то он будет паказывать данные из другой базы, а если из верхнего - то данные из текущей базы.
CFG-файлы же читаются при загрузке. А я не хочу выходить из Галактики..даже из интерфейса. Я нахожусь в интерфейсе и при переходе в другую панень хочу, чтобы я оказался в другой базе данных. Т.е. если рассмотреть Вашу задачу, то Вы просматриваете информацию в верхней части интерфейса в одной базе, а затем переходите в нижнюю и Вы уже в другой (т.е. не таблица из другой базы, что сделать легко используя Reopentablebypath). ВСЯ база является уже другой..и если я вызову стандартный интерфейс Галактики из нижнего окна, то он будет паказывать данные из другой базы, а если из верхнего - то данные из текущей базы.
Некоммерческое общение в форуме
Re: Переход между базами в программе
Попробуйте OLE автомат использовать
Описан тут: http://galpro.itpark.ru/cgi-bin/cutecas ... thread=312
а вообще у нас механизм учета нескольких юр лиц в одной БД давно отлажен в нашем решении http://itpark.ru
Описан тут: http://galpro.itpark.ru/cgi-bin/cutecas ... thread=312
а вообще у нас механизм учета нескольких юр лиц в одной БД давно отлажен в нашем решении http://itpark.ru
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Переход между базами в программе
Спасибо, но ведение в одной базе несколько юр.лиц - это нарушение методологии Галактики. В Галактике есть четкий принцип 1 юр.лицо - 1 база данных и нарушать его ни в коем случае нельзя.
Такое не надо. Тем более, что все базы не с нуля, а ведутся нормально уже несколько лет. Ничего менять в них не надо..хочется просто переходить из одной в другую.
Мне нужно сейчас просто название функции, которая изменит текущую базу в интерфейсе. Может ее и нет. Если кто-то может назвать функцию или точно сказать,что такой нет, то буду очень признателен.
С уважением, Игорь.
Такое не надо. Тем более, что все базы не с нуля, а ведутся нормально уже несколько лет. Ничего менять в них не надо..хочется просто переходить из одной в другую.
Мне нужно сейчас просто название функции, которая изменит текущую базу в интерфейсе. Может ее и нет. Если кто-то может назвать функцию или точно сказать,что такой нет, то буду очень признателен.
С уважением, Игорь.
Некоммерческое общение в форуме
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Re: Переход между базами в программе
может для этого лучше Ra.NET использовать
Жду выхода Вселенная 2.12!
Re: Переход между базами в программе
Есть функция, правда сам не пользовал :
ChangeDataPath(newpath : string) : word;
ReinitDataBase(newpath, riShowMessage);
Но их можно только на паскале пользовать.
Первая - проводит и переключение периода по новой базе и т.д.
Вторая помоему просто переключается на новую базу.
Если получится их использовать, опиши эффект.
Только вот я абсолютно не могу понять как хочешь ты их использовать, т.е. не понятно как будут отображать данные к примеру в бравсе. Есть вариант выгрузить их в таб памяти и отображать или из запроса отображать, но тогда как будет перечитываться запрос к базе. Т.е. два бравса, одн по одной базе, другой по другой, в теории пока подключены к базе 1 в первом браве данные есть, во втором нет, когда подрубаемся ко второй базе, то наоборот?
ChangeDataPath(newpath : string) : word;
ReinitDataBase(newpath, riShowMessage);
Но их можно только на паскале пользовать.
Первая - проводит и переключение периода по новой базе и т.д.
Вторая помоему просто переключается на новую базу.
Если получится их использовать, опиши эффект.
Только вот я абсолютно не могу понять как хочешь ты их использовать, т.е. не понятно как будут отображать данные к примеру в бравсе. Есть вариант выгрузить их в таб памяти и отображать или из запроса отображать, но тогда как будет перечитываться запрос к базе. Т.е. два бравса, одн по одной базе, другой по другой, в теории пока подключены к базе 1 в первом браве данные есть, во втором нет, когда подрубаемся ко второй базе, то наоборот?
Ищу возможности довести и так отличный продукт до еще большего блеска
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Переход между базами в программе
Большое спасибо. Я правда не знаю, как бы их вызвать из ВИПа, т.к. Паскаль уже лет 6 не использовал при доработке Галактики . Чтобы их вызвать из ВИПа надо же, чтобы они были зарегистрированы в ВИПе, а этого я так понял нет. Если бы кто подсказал..или дал ссылку на этом форуме, как можно вызвать функцию, которая есть в Паскале, но не зарегистрирована в ВИПе, то было бы здорово. В благодарность могу тут рассказать как все работает..может кому еще понадобится, если несколько юр. лиц в Галактике.
Идея очень проста:
Сейчас мы часто используем интерфейсы, в которых одна таблица в одном окне из одной базы, другая в другом из другой, в третьем - из третьей. Просто открываешь множество синонимом таблицы и используя функции REOPENTABLEBYPATH открываешь из другой базы.
Таким обрабом, к примеру, переоткрыв все связанные с накладной таблицы из всех баз получаешь на экране возможность смотреть накладные.(а можно.остатки..или договора..или сальдо по счетам бухучета..) по разным базам. Это позволяет оценивать ситуацию в целом по холдингу, без каких-то выгрузок. Тут же можно легко получить сводные остатки по холдингу и все прочее. Здесь же можно перебросить напрямую информацию сразу в другую базу без экспорта-импорта. Мы так напрямую копируем накладные из одной в другую (исходящая-входящая), сверяем встречные договора и т.д. Это все работает и уже используется организациями не однин год.
По моей проблеме - зачем нужно:
Понять в какой ты находишься колонке также легко, так как при переходе между таблицами происходит событие смены таблиц. Ловишь его и ты знаешь в какой ты базе.
Но в интерфейсе есть такой сервис еще...можно в колонке со своей базой (на которой не делалось REOPEN...) перейти в редактирование накладной, которую ты видишь..для этого вызываешь стандартный интерфейс soprdoc или soprdocb и можешь править. Но по переокрытым таблицам такого не сделаешь...ведь стандартный интерфейс работает на текущей базе. Но если перед вызовом стандартного перейти на другую базу, то стандартный интерфейс будет редактировать уже накладную из другой базы. После возврата из интерфейса сразу меняешь базу на текущую:
mybase :='\f:\base';
ReinitDataBase('f:\newbase',1);
runinterface('SoprDoc',KatSoprBASE2.Nrec);
ReinitDataBase('\f:\base',1);
или переходить между базами сразу по событию перехода между таблицами KаtsoprBASE1
и KatSoprBASE2.
OLE-автомат, который тут предлагали вообще выход из положения с точки зрения решения проблемы вообще, но уж очень сложно получается. Чтобы просто вызвать интерфейс, который уже в этой галактитке есть, я так понял, нужно вызвать другую Галактику и в ней вызвать интерфейс. Если баз 7, то надо иметь вызывать 7 Галактик...Хотя я вообще не работал активно с OLE...может не так и все мрачно.
А на самом деле все вроде просто - Галактика открывает базу используя метапеременную %DATA% и вроде измени ее и вызывай свои интерфейсы в другой базе.
Если у кого есть какие еще мысли - буду благодарен.
Спасибо еще раз за информацию.
Идея очень проста:
Сейчас мы часто используем интерфейсы, в которых одна таблица в одном окне из одной базы, другая в другом из другой, в третьем - из третьей. Просто открываешь множество синонимом таблицы и используя функции REOPENTABLEBYPATH открываешь из другой базы.
Таким обрабом, к примеру, переоткрыв все связанные с накладной таблицы из всех баз получаешь на экране возможность смотреть накладные.(а можно.остатки..или договора..или сальдо по счетам бухучета..) по разным базам. Это позволяет оценивать ситуацию в целом по холдингу, без каких-то выгрузок. Тут же можно легко получить сводные остатки по холдингу и все прочее. Здесь же можно перебросить напрямую информацию сразу в другую базу без экспорта-импорта. Мы так напрямую копируем накладные из одной в другую (исходящая-входящая), сверяем встречные договора и т.д. Это все работает и уже используется организациями не однин год.
По моей проблеме - зачем нужно:
Понять в какой ты находишься колонке также легко, так как при переходе между таблицами происходит событие смены таблиц. Ловишь его и ты знаешь в какой ты базе.
Но в интерфейсе есть такой сервис еще...можно в колонке со своей базой (на которой не делалось REOPEN...) перейти в редактирование накладной, которую ты видишь..для этого вызываешь стандартный интерфейс soprdoc или soprdocb и можешь править. Но по переокрытым таблицам такого не сделаешь...ведь стандартный интерфейс работает на текущей базе. Но если перед вызовом стандартного перейти на другую базу, то стандартный интерфейс будет редактировать уже накладную из другой базы. После возврата из интерфейса сразу меняешь базу на текущую:
mybase :='\f:\base';
ReinitDataBase('f:\newbase',1);
runinterface('SoprDoc',KatSoprBASE2.Nrec);
ReinitDataBase('\f:\base',1);
или переходить между базами сразу по событию перехода между таблицами KаtsoprBASE1
и KatSoprBASE2.
OLE-автомат, который тут предлагали вообще выход из положения с точки зрения решения проблемы вообще, но уж очень сложно получается. Чтобы просто вызвать интерфейс, который уже в этой галактитке есть, я так понял, нужно вызвать другую Галактику и в ней вызвать интерфейс. Если баз 7, то надо иметь вызывать 7 Галактик...Хотя я вообще не работал активно с OLE...может не так и все мрачно.
А на самом деле все вроде просто - Галактика открывает базу используя метапеременную %DATA% и вроде измени ее и вызывай свои интерфейсы в другой базе.
Если у кого есть какие еще мысли - буду благодарен.
Спасибо еще раз за информацию.
Некоммерческое общение в форуме
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Re: Переход между базами в программе
Ну эти функции тоже можно заюзать.
технология такова.
1. Пишем собственную в которой делаем
uses
AtlApSrv (если для серавака)
AtlApp (если для клиента);
2. В этой ДЛЛ определяем свои ф-ии
MyChangeDataPath(newpath : string) : word;
MyReinitDataBase(newpath, riShowMessage);
в каждой из которых вызываем ф-ии ChangeDataPath(newpath : string) : word;
ReinitDataBase(newpath, riShowMessage);
3. Регистрим собственные ф-ии в випе и юзаем, наслаждаясь...
технология такова.
1. Пишем собственную в которой делаем
uses
AtlApSrv (если для серавака)
AtlApp (если для клиента);
2. В этой ДЛЛ определяем свои ф-ии
MyChangeDataPath(newpath : string) : word;
MyReinitDataBase(newpath, riShowMessage);
в каждой из которых вызываем ф-ии ChangeDataPath(newpath : string) : word;
ReinitDataBase(newpath, riShowMessage);
3. Регистрим собственные ф-ии в випе и юзаем, наслаждаясь...
Re: Переход между базами в программе
Абсолютно верно, т.е. треба написать свою dll-ю, в которой вызывать эти функции из свох и регистрить библиотеку с функциями в своем проекте.
В принципе ни чего сложно, только вот я не знаю как поведет себя гал-ка если будут помимо этого фейса открыты другие фейсы с данными из предыдущей базы.
В принципе ни чего сложно, только вот я не знаю как поведет себя гал-ка если будут помимо этого фейса открыты другие фейсы с данными из предыдущей базы.
Ищу возможности довести и так отличный продукт до еще большего блеска
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Переход между базами в программе
Спасибо, конечно, но не знаю смогу сделать. Я никогда не пользовался технологий подключения своих dll. А где хоть она описана в доке? Да и Паскаля даже у меня нет Или сслылка может кто знает на этом форуме?
НО большое большое спасибо..я хоть буду знать, что можно все сделать. Видимо надо кого-то мне найти..спеца по Паскалю, который работает с Галактикой. Сам видимо много времени потрачу...а его нет. Тут на ВИПе много писать по холдингу надо.
На счет того, как себя поведут интерфейса открытые - на никаках - грохнется видиом у них все в окнах. Поэтому мой интерфейс я открому в модальном окне и фиг кто сможет попасть в другие, а когда буду выходить - установлю БД старую.
НО большое большое спасибо..я хоть буду знать, что можно все сделать. Видимо надо кого-то мне найти..спеца по Паскалю, который работает с Галактикой. Сам видимо много времени потрачу...а его нет. Тут на ВИПе много писать по холдингу надо.
На счет того, как себя поведут интерфейса открытые - на никаках - грохнется видиом у них все в окнах. Поэтому мой интерфейс я открому в модальном окне и фиг кто сможет попасть в другие, а когда буду выходить - установлю БД старую.
Некоммерческое общение в форуме
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Re: Переход между базами в программе
Написать dll на Паскале не составляет труда этот механизм достаточно хорошо прописан.
Далее просто прописать в файлике эти функции для использования на VIP, тоже нет вопросов (можно посмотреть как это сделано, к примеру, в исходниках Галкатики
function InitServTXO (Word): Boolean; external 'G_TXO.Dll';)
Но вот то, что придется при этом перекомпилить Галактические исходники на Паскале, заменить ими стандарный функционал Галки, причем не известно какой будут свежести эти исходники и что делать когда придет следующий патч.
Далее просто прописать в файлике эти функции для использования на VIP, тоже нет вопросов (можно посмотреть как это сделано, к примеру, в исходниках Галкатики
function InitServTXO (Word): Boolean; external 'G_TXO.Dll';)
Но вот то, что придется при этом перекомпилить Галактические исходники на Паскале, заменить ими стандарный функционал Галки, причем не известно какой будут свежести эти исходники и что делать когда придет следующий патч.
Жду выхода Вселенная 2.12!