Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Получить данные из другой БД (число прочтений - 3595 )
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Получить данные из другой БД
30. Ноября 2010 :: 07:08
Печать  
Прошу прощения если повтор (не нашёл поиском) - прошу помощи.

Задача - получить данные из нескольких БД (расположенных на одном SQL сервере) данные (несколько полей из справочника "Контрагенты" и перечень расходных накладных без ТЧ - только шапка). В пределах одной БД я это умею делать. А тут как?

Сижу в ступоре. Буду благодарен за теорию (как это сделать в принципе) и практику (примеры кода)

Спасибо заранее
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Получить данные из другой БД
Ответ #1 - 30. Ноября 2010 :: 07:49
Печать  
А требуется метапарсинг?
К чему я это - можно написать один запрос типа
Код
Выбрать все
SELECT
SC_1.*
 Base1.dbo.SC133 as SC_1
LEFT JOIN
 Base2.dbo.SC124 as SC_2
ON SC_1.Code = SC_2.Code 


Где соответственно Base1 и Base2 - базы в пределах одного сервера, а SC133 и SC124 справочники контрагентов в одной и второй базе.
А вот для получения с помощью метапарсера имен таблиц SC133  и SC124 соответственно для двух разных баз нужно будет использовать 2 объекта MetaDataWork с разными присоединенными MD.
  
Наверх
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Получить данные из другой БД
Ответ #2 - 30. Ноября 2010 :: 08:17
Печать  
Стоп стоп сто. вот как я делаю и нарываюсь на ошибку типизации

Если ПустоеЗначение(ВыбБазаДанных)=1 Тогда
           Возврат;
     КонецЕсли;
     Если ЕстьПодключение=0 Тогда
           Предупреждение("Нет подключения к SQL серверу");
           Возврат;
     КонецЕсли;
     ТекБазаДанных=СоздатьОбъект("ODBCDataBase");
     ИмяБазы=СокрЛП(ВыбБазаДанных.Наименование);
     Логин=СокрЛП(ВыбБазаДанных.ИмяПользователя);
     Пароль=СокрЛП(ВыбБазаДанных.ПарольПользователя);  
     КаталогБазы=СокрЛП(ВыбБазаДанных.ПутьКБазеДанных);
     СтрокаСоединения="Driver={SQL ";Pwd="+Пароль+";";
     Попытка      
           ТекБазаДанных.ПрисоединитьИБ(КаталогБазы,Логин,Пароль,СтрокаСоединения);
     Исключение
     КонецПопытки;
     Если ТекБазаДанных.ЕстьСоединение()=0 Тогда
         ТекБазаДанных=0;
         Сообщить("Ошибка подключения к внешней базе """+ИмяБазы+"""", "!!!");
         Возврат;  
     Иначе
           Сообщить("Вроде подключение выполнили");
     КонецЕсли;
     // попробуем простейший запрос к той базе данных
     ЗапросТекБаза=СоздатьОбъект("ODBCRecordSet");
     ЗапросТекБаза.УстБД(ТекБазаДанных);
     ЗапросТекБаза.МД.ПрисоединитьМД(КаталогБазы+"1cv7.md");
     ТекстЗапроса="
     |SELECT
     |code AS Код,
     |id AS [Контрагент $Справочник.Контрагенты]
     |FROM $Справочник.Контрагенты WHERE isfolder=2";
     Попытка
           ТЗРезультата=ЗапросТекБаза.ВыполнитьИнструкцию(ТекстЗапроса);
           ТЗРезультата.ВыбратьСтроку();
     Исключение
           Сообщить(ОписаниеОшибки());
     КонецПопытки;

Ошибка типизации поля Контрагент $Справочник.Контрагенты.
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Получить данные из другой БД
Ответ #3 - 30. Ноября 2010 :: 08:30
Печать  
Вопрос снят. я дятел - пытаюсь получить элемент чужого справочника в текущей БД. А мне надо было просто "descr" поставить вместо "id"....

Наступный вопрос Подмигивание

я просто задаю его заранее потому как подозреваю - будут проблемы

надо из этой другой базы получить перечень документов определённого вида (номердок, датадок, контрагент). Вот поле "контрагент" меня и смущает. как?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Получить данные из другой БД
Ответ #4 - 30. Ноября 2010 :: 09:03
Печать  
Ты же сам себе ответил - получай наименование клиентоса, или, если есть соответствие в Этой базе (по наименованию/коду/реквизиту или еще как), ищи его  и показывай "родного" клиентоса, заместо клиентоса из внешней базы.
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Получить данные из другой БД
Ответ #5 - 30. Ноября 2010 :: 09:08
Печать  
как получить реквизиты справочник контрагенты (имя и код) если в журналах стоит id а если я попытаюсь присоедениться к справочнику Контрагенты по id опять будет ошибка типизации. или я торможу?

как из журнала получить код и наименование элемента справочника - реквизита шапки документа?

просто я даже придумать ничего пока не могу.....
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Получить данные из другой БД
Ответ #6 - 30. Ноября 2010 :: 09:17
Печать  
Улыбка)
Да не надо его типзировать и привет, типизировать в таком запросе можешь только объекты родной базы, а не сторонней.

Получай descr в запросе и привет (тупо присоединяя левым соединением табличку справочника клиентосов)
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Получить данные из другой БД
Ответ #7 - 30. Ноября 2010 :: 09:24
Печать  
Ага SnarkHunter уже подсказал по аське.... сенькс Подмигивание
  
Наверх
 
IP записан
 
droff
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 17. Августа 2010
Re: Получить данные из другой БД
Ответ #8 - 12. Сентября 2012 :: 10:38
Печать  
Добрый день, коллеги.
Хочу использовать метод ПрисоединитьИБ(КаталогБазы,Логин,Пароль,СтрокаСоединения).
Но база у меня на том же сервере, что и база 1С. Обязательно ли указывать путь к базе?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Получить данные из другой БД
Ответ #9 - 12. Сентября 2012 :: 10:45
Печать  
а зачем присоединить тогда ?
Запрос к той=же базе, или всё же к сторонней ?
  
Наверх
 
IP записан
 
droff
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 17. Августа 2010
Re: Получить данные из другой БД
Ответ #10 - 12. Сентября 2012 :: 10:50
Печать  
К сторонней.
База на том же сервере, что и база 1С.
  
Наверх
 
IP записан
 
droff
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 17. Августа 2010
Re: Получить данные из другой БД
Ответ #11 - 12. Сентября 2012 :: 10:58
Печать  
Спасибо. Проблема решена.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать