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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

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

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


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

Первазис. Галактика 7 11.
Некоммерческое общение в форуме
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

Да..желательно, чтобы функция проверяла права текущего пльзователя на изменение пути на данные.
Некоммерческое общение в форуме
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

где то тут уже обсуждалось как подцепить таблу из другой базы.
а так нужно сгенерить событие
cmNewData - а вот как не курсях
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

подцепить таблицу - это другое. это понятно.
нужно базу изменить текущую.
Некоммерческое общение в форуме
ALEKS123
Местный житель
Сообщения: 278
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

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

Сообщение 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:<пароль пользователя>
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

Извините, я чего-то не понял.

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

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

Сообщение AtlantG »

Попробуйте OLE автомат использовать
Описан тут: http://galpro.itpark.ru/cgi-bin/cutecas ... thread=312
а вообще у нас механизм учета нескольких юр лиц в одной БД давно отлажен в нашем решении http://itpark.ru
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

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

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

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

С уважением, Игорь.
Некоммерческое общение в форуме
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

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

Сообщение Max_Fin »

может для этого лучше Ra.NET использовать
Жду выхода Вселенная 2.12!
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

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

Сообщение Vitas »

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

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

Только вот я абсолютно не могу понять как хочешь ты их использовать, т.е. не понятно как будут отображать данные к примеру в бравсе. Есть вариант выгрузить их в таб памяти и отображать или из запроса отображать, но тогда как будет перечитываться запрос к базе. Т.е. два бравса, одн по одной базе, другой по другой, в теории пока подключены к базе 1 в первом браве данные есть, во втором нет, когда подрубаемся ко второй базе, то наоборот?
Ищу возможности довести и так отличный продукт до еще большего блеска
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение 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% и вроде измени ее и вызывай свои интерфейсы в другой базе.


Если у кого есть какие еще мысли - буду благодарен.
Спасибо еще раз за информацию.
Некоммерческое общение в форуме
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

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

Сообщение Maverick »

Ну эти функции тоже можно заюзать.
технология такова.
1. Пишем собственную в которой делаем
uses
AtlApSrv (если для серавака)
AtlApp (если для клиента);
2. В этой ДЛЛ определяем свои ф-ии
MyChangeDataPath(newpath : string) : word;
MyReinitDataBase(newpath, riShowMessage);
в каждой из которых вызываем ф-ии ChangeDataPath(newpath : string) : word;
ReinitDataBase(newpath, riShowMessage);
3. Регистрим собственные ф-ии в випе и юзаем, наслаждаясь...
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

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

Сообщение Vitas »

Абсолютно верно, т.е. треба написать свою dll-ю, в которой вызывать эти функции из свох и регистрить библиотеку с функциями в своем проекте.

В принципе ни чего сложно, только вот я не знаю как поведет себя гал-ка если будут помимо этого фейса открыты другие фейсы с данными из предыдущей базы.
Ищу возможности довести и так отличный продукт до еще большего блеска
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

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

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

На счет того, как себя поведут интерфейса открытые - на никаках - грохнется видиом у них все в окнах. Поэтому мой интерфейс я открому в модальном окне и фиг кто сможет попасть в другие, а когда буду выходить - установлю БД старую.
Некоммерческое общение в форуме
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

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

Сообщение Max_Fin »

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