Страница 1 из 2

Переход между базами в программе

Добавлено: 01 дек 2004, 11:05
ecasoft
Вопрос: какая есть функция для изменения пути на данные? В Настройка-Администратор. есть функция "Изменить путь на данные". Хотелось бы делать это из прогрммного кода без вызова интерфейса выбора каталога..типа вот так:

SetNewDBPath('f:\data1') и мы уже в другой базе.


Задача: Пишем программу управления логистикой холдинга.
В интерфейсе просмотра остатков по холдингу при переходе между колонками, где каждая колонка - остатки по одному юр.лицу холдинга (каждое юр.лицо - своя БД) НУЖНО МЕНЯТЬ ПУТЬ НА БАЗУ,т.е. переходить в БД соответсвующего колонке юр.лица. Нужно для того, чтобы сразу переходить в режим выписки накладных в нужной базе (юр.лице) из интерфейса, без использования функции администатора.

Первазис. Галактика 7 11.

Re: Переход между базами в программе

Добавлено: 01 дек 2004, 11:06
ecasoft
Да..желательно, чтобы функция проверяла права текущего пльзователя на изменение пути на данные.

Re: Переход между базами в программе

Добавлено: 01 дек 2004, 11:46
edward_K
где то тут уже обсуждалось как подцепить таблу из другой базы.
а так нужно сгенерить событие
cmNewData - а вот как не курсях

Re: Переход между базами в программе

Добавлено: 01 дек 2004, 12:53
ecasoft
подцепить таблицу - это другое. это понятно.
нужно базу изменить текущую.

Re: Переход между базами в программе

Добавлено: 01 дек 2004, 14:36
ALEKS123
У нас есть задача - в одной базе подситать что продано и влить это в другую базу. В своем фейсе пишу такую строчку
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:<пароль пользователя>

Re: Переход между базами в программе

Добавлено: 01 дек 2004, 18:32
ecasoft
Извините, я чего-то не понял.

CFG-файлы же читаются при загрузке. А я не хочу выходить из Галактики..даже из интерфейса. Я нахожусь в интерфейсе и при переходе в другую панень хочу, чтобы я оказался в другой базе данных. Т.е. если рассмотреть Вашу задачу, то Вы просматриваете информацию в верхней части интерфейса в одной базе, а затем переходите в нижнюю и Вы уже в другой (т.е. не таблица из другой базы, что сделать легко используя Reopentablebypath). ВСЯ база является уже другой..и если я вызову стандартный интерфейс Галактики из нижнего окна, то он будет паказывать данные из другой базы, а если из верхнего - то данные из текущей базы.

Re: Переход между базами в программе

Добавлено: 02 дек 2004, 00:49
AtlantG
Попробуйте OLE автомат использовать
Описан тут: http://galpro.itpark.ru/cgi-bin/cutecas ... thread=312
а вообще у нас механизм учета нескольких юр лиц в одной БД давно отлажен в нашем решении http://itpark.ru

Re: Переход между базами в программе

Добавлено: 02 дек 2004, 09:39
ecasoft
Спасибо, но ведение в одной базе несколько юр.лиц - это нарушение методологии Галактики. В Галактике есть четкий принцип 1 юр.лицо - 1 база данных и нарушать его ни в коем случае нельзя.

Такое не надо. Тем более, что все базы не с нуля, а ведутся нормально уже несколько лет. Ничего менять в них не надо..хочется просто переходить из одной в другую.

Мне нужно сейчас просто название функции, которая изменит текущую базу в интерфейсе. Может ее и нет. Если кто-то может назвать функцию или точно сказать,что такой нет, то буду очень признателен.

С уважением, Игорь.

Re: Переход между базами в программе

Добавлено: 02 дек 2004, 10:10
Max_Fin
может для этого лучше Ra.NET использовать

Re: Переход между базами в программе

Добавлено: 02 дек 2004, 12:38
Vitas
Есть функция, правда сам не пользовал :) :
ChangeDataPath(newpath : string) : word;
ReinitDataBase(newpath, riShowMessage);
Но их можно только на паскале пользовать.
Первая - проводит и переключение периода по новой базе и т.д.
Вторая помоему просто переключается на новую базу.

Если получится их использовать, опиши эффект.

Только вот я абсолютно не могу понять как хочешь ты их использовать, т.е. не понятно как будут отображать данные к примеру в бравсе. Есть вариант выгрузить их в таб памяти и отображать или из запроса отображать, но тогда как будет перечитываться запрос к базе. Т.е. два бравса, одн по одной базе, другой по другой, в теории пока подключены к базе 1 в первом браве данные есть, во втором нет, когда подрубаемся ко второй базе, то наоборот?

Re: Переход между базами в программе

Добавлено: 02 дек 2004, 15:56
ecasoft
Большое спасибо. Я правда не знаю, как бы их вызвать из ВИПа, т.к. Паскаль уже лет 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% и вроде измени ее и вызывай свои интерфейсы в другой базе.


Если у кого есть какие еще мысли - буду благодарен.
Спасибо еще раз за информацию.

Re: Переход между базами в программе

Добавлено: 03 дек 2004, 09:40
Maverick
Ну эти функции тоже можно заюзать.
технология такова.
1. Пишем собственную в которой делаем
uses
AtlApSrv (если для серавака)
AtlApp (если для клиента);
2. В этой ДЛЛ определяем свои ф-ии
MyChangeDataPath(newpath : string) : word;
MyReinitDataBase(newpath, riShowMessage);
в каждой из которых вызываем ф-ии ChangeDataPath(newpath : string) : word;
ReinitDataBase(newpath, riShowMessage);
3. Регистрим собственные ф-ии в випе и юзаем, наслаждаясь...

Re: Переход между базами в программе

Добавлено: 03 дек 2004, 13:49
Vitas
Абсолютно верно, т.е. треба написать свою dll-ю, в которой вызывать эти функции из свох и регистрить библиотеку с функциями в своем проекте.

В принципе ни чего сложно, только вот я не знаю как поведет себя гал-ка если будут помимо этого фейса открыты другие фейсы с данными из предыдущей базы.

Re: Переход между базами в программе

Добавлено: 03 дек 2004, 14:20
ecasoft
Спасибо, конечно, но не знаю смогу сделать. Я никогда не пользовался технологий подключения своих dll. А где хоть она описана в доке? Да и Паскаля даже у меня нет :( Или сслылка может кто знает на этом форуме?

НО большое большое спасибо..я хоть буду знать, что можно все сделать. Видимо надо кого-то мне найти..спеца по Паскалю, который работает с Галактикой. Сам видимо много времени потрачу...а его нет. Тут на ВИПе много писать по холдингу надо.

На счет того, как себя поведут интерфейса открытые - на никаках - грохнется видиом у них все в окнах. Поэтому мой интерфейс я открому в модальном окне и фиг кто сможет попасть в другие, а когда буду выходить - установлю БД старую.

Re: Переход между базами в программе

Добавлено: 03 дек 2004, 15:26
Max_Fin
Написать dll на Паскале не составляет труда этот механизм достаточно хорошо прописан.
Далее просто прописать в файлике эти функции для использования на VIP, тоже нет вопросов (можно посмотреть как это сделано, к примеру, в исходниках Галкатики
function InitServTXO (Word): Boolean; external 'G_TXO.Dll';)
Но вот то, что придется при этом перекомпилить Галактические исходники на Паскале, заменить ими стандарный функционал Галки, причем не известно какой будут свежести эти исходники и что делать когда придет следующий патч.