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


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Присоединение и запрос в другой базе 1С
12. Сентября 2008 :: 08:49
Печать  
Присоединяюсь к другой базе 1с следующим образом

БД     = СоздатьОбъект("ODBCDataBase");
Запрос = СоздатьОбъект("ODBCRecordSet");
     
СтрокаСоединения = "Driver={SQL ПарольSQL+";";
     
Попытка
     БД.ПрисоединитьИБ(КаталогБазы,Пользователь,Пароль,СтрокаСоединения);
           Запрос.УстБД(БД);
Исключение
     Сообщить("Нет доступа к базе ОУ!");
     Сообщить(ОписаниеОшибки());            
     Возврат;
КонецПопытки;      

Делаю простейший запрос по выборке документов. Сами данные выбираются верно, но типизация вида документов производиться не по присоединенной базе, а по текущей. Что я забыл сделать?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #1 - 12. Сентября 2008 :: 09:01
Печать  
Т.е. ты хочешь чтоб в одной базе 1с можно было получить агрегатный объект другой базы? Как ты это себе представляешь?
  
Наверх
ICQ  
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Присоединение и запрос в другой базе 1С
Ответ #2 - 12. Сентября 2008 :: 09:05
Печать  
Не агрегатный объект другой базы, а всего лишь верный вид агрегатного объекта (вид документа). А в чем тогда смысл УстБД?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #3 - 12. Сентября 2008 :: 09:17
Печать  
Beginner писал(а) 12. Сентября 2008 :: 09:05:
Не агрегатный объект другой базы, а всего лишь верный вид агрегатного объекта (вид документа). А в чем тогда смысл УстБД?

Например парсер запросов к другой базе без этого не работает
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #4 - 12. Сентября 2008 :: 09:22
Печать  
Beginner писал(а) 12. Сентября 2008 :: 08:49:
Делаю простейший запрос по выборке документов. Сами данные выбираются верно, но типизация вида документов производиться не по присоединенной базе, а по текущей. Что я забыл сделать?

Только что проверил. У меня такой код работает верно.
Код
Выбрать все
бд=СоздатьОбъект("ODBCDataBase");
бд.ПрисоединитьИБ("C:\Bases\test\","Новый1","");

ТекстЗапроса="
|select
| docno Номер,
| iddocdef [Вид $ВидДокумента]
|from _1sjourn j (nolock)
|";
рс=СоздатьОбъект("ODBCRecordset");
рс.УстБД(бд);
Рез=рс.ВыполнитьИнструкцию(ТекстЗапроса);
Рез.ВыбратьСтроку();
 

  

1&&2&&3
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Присоединение и запрос в другой базе 1С
Ответ #5 - 12. Сентября 2008 :: 09:56
Печать  
Всем спасибо, все заработало... Улыбка
  
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Присоединение и запрос в другой базе 1С
Ответ #6 - 13. Октября 2008 :: 12:29
Печать  
У меня таже проблема и пример кода не прокатывает....? Как можно получить вид документа строкой в чужой базе?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #7 - 13. Октября 2008 :: 13:06
Печать  
в результирующей выборке так и написано "не прокатывает"?
  

1&&2&&3
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Присоединение и запрос в другой базе 1С
Ответ #8 - 13. Октября 2008 :: 19:17
Печать  
Не правильно выразился, не показывает представление Вида документа
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #9 - 14. Октября 2008 :: 05:28
Печать  
версия 1с++?
  

1&&2&&3
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Присоединение и запрос в другой базе 1С
Ответ #10 - 14. Октября 2008 :: 06:12
Печать  
trad писал(а) 14. Октября 2008 :: 05:28:
версия 1с++?


1с++ = 2.5.0.7
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #11 - 14. Октября 2008 :: 06:55
Печать  
хм. Озадачен
если версия 2507 и код в точности как в #4 и не работает, то я пас.
  

1&&2&&3
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Присоединение и запрос в другой базе 1С
Ответ #12 - 14. Октября 2008 :: 07:07
Печать  
trad писал(а) 14. Октября 2008 :: 06:55:
хм. Озадачен
если версия 2507 и код в точности как в #4 и не работает, то я пас.


Все получилось была версия 2.5.0.5, заменил на 2.5.0.7, пасиб
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #13 - 14. Октября 2008 :: 14:43
Печать  
Ешкин кот
Моя тестовая база и рабочая (десятки юзверей) крутятся на 2.5.0.5
Типа лучше поменять? Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #14 - 20. Октября 2008 :: 09:01
Печать  
может, кому поможет?

Имеется глобальный гЗапрос = СоздатьОбъект("ODBCRecordSet") работающий с базой по умолчанию
Нужно залинковаться к некой бух.базе.

Параметры бух.базы хранятся в основной базе:
     ПрефиксБазы=СокрЛП(ВыбФирма.ИмяБухБазы)+".dbo.";
     ПрефиксМД=СокрЛП(ВыбФирма.ПутьКБухБазе);
     Если Прав(ПрефиксМД,1)<>"\" Тогда
           ПрефиксМД=ПрефиксМД+"\";
     КонецЕсли;
     ПрефиксМД=ПрефиксМД+"1Cv7.MD";

Внимание! Если внешняя база лежит на другом сервере, сервера должны быть залинкованы.
ИмяБухБазы тогда должно быть таким:
ИмяБухБазы="BuxServer.BuxBaza"

Готовим требуемые алиасы внешней базы:
     БухМета=СоздатьОбъект("MetaDataWork");
     БухМета.ПрисоединитьМД(ПрефиксМД);
     БухКли=ПрефиксБазы+БухМета.ОбрМетаСКЛ("$Справочник.Контрагенты");
     БухИнн=БухМета.ОбрМетаСКЛ("$Справочник.Контрагенты.ИНН");


Строим запрос:
лТекстЗапроса="SELECT
|кбух.descr as ИмяБух,
|кбаз.descr as ИмяБаз
|from
|$Справочник.Контрагенты as кбаз (nolock)
|inner join "+БухКли+" as кбух (nolock)
|on
|$кбаз.ИНН = кбух."+БухИнн+"
|";

ТабРезульт=гЗапрос.ВыполнитьИнструкцию(лТекстЗапроса);

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

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Присоединение и запрос в другой базе 1С
Ответ #15 - 20. Октября 2008 :: 13:57
Печать  
А если выполнить запрос к базе, в которой нет документов такого вида, как в текущей? Что вернется в этом случае?
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #16 - 21. Октября 2008 :: 07:23
Печать  
Antes писал(а) 20. Октября 2008 :: 13:57:
А если выполнить запрос к базе, в которой нет документов такого вида, как в текущей? Что вернется в этом случае?


Вопрос некорректен.
Любой запрос к любой базе возвращает всего лишь 9-символьную строку. Её можно интерпретировать как существующий объект, если же объект в текущем контексте отсутствует, то строка так и останется строкой.
В частности, у меня ссылка на документ может вобще храниться в наименовании служебного справочника (из соображений оптимизации индексов). Никаких неудобств по этому поводу я не испытываю  Класс
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #17 - 21. Октября 2008 :: 07:25
Печать  
Quan писал(а) 21. Октября 2008 :: 07:23:
В частности, у меня ссылка на документ может вобще храниться в наименовании служебного справочника (из соображений оптимизации индексов). Никаких неудобств по этому поводу я не испытываю  Класс

И как помогает подобное решение, можешь описать?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Присоединение и запрос в другой базе 1С
Ответ #18 - 21. Октября 2008 :: 07:39
Печать  
Я поясню. Конечно, если не приводить в тексте запроса к виду документа  (iddocdef [Вид $ВидДокумента]), то выдается строка. Я имел в виду как раз случай, если привести к виду документа, то вернется пустая строка? Или....?
И вопрос вот такой есть. Сталкивался с тем, что конструкция:
ТипРеквизита = РС.МД.Метаданные.Метаданные.Справочник(ВидСправочника).Реквизит(Сч).Тип;
ВидРеквизита = РС.МД.Метаданные.Справочник(ВидСправочника).Реквизит(Сч).Вид;
возвращает верный тип, но неверный вид, если реквизит - справочник. В чем тут причина может быть?
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #19 - 21. Октября 2008 :: 08:02
Печать  
Antes писал(а) 21. Октября 2008 :: 07:39:
Я имел в виду как раз случай, если привести к виду документа, то вернется пустая строка? Или....?


Гм.... откройте табло калькулятора и наберите:
Метадата.ЗначениеИзСтрокиБД("Справочник.Контрагенты","     1   ")
а потом
Метадата.ЗначениеИзСтрокиБД("Справочник.Номенклатура","     1   ")
//где Метадата - глобальный объект типа Metadatawork
И Вы поймёте, что одна и та же строка может типизироваться как душе угодно.
Если же Вы возьмете
Метадата.ЗначениеИзСтрокиБД("Справочник.Номенклатура","ZZZZZZ   ") то при размере номенклатурника менее 2-х лимардов наименований получите пустое значение типа "Справочник.Номенклатура"
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Присоединение и запрос в другой базе 1С
Ответ #20 - 21. Октября 2008 :: 08:07
Печать  
artbear писал(а) 21. Октября 2008 :: 07:25:
Quan писал(а) 21. Октября 2008 :: 07:23:
В частности, у меня ссылка на документ может вобще храниться в наименовании служебного справочника (из соображений оптимизации индексов). Никаких неудобств по этому поводу я не испытываю  Класс

И как помогает подобное решение, можешь описать?


Элементарно: получаем псевдотабличную часть документа.
А используя механизм подчиненного справочника и/или реквизиты с признаком отбора можно вообще организовать индекс, позволяющий (к примеру) сразу отобрать из данного документа конкретный товар отгруженый с определенного склада. И при этом не париться штатным ограничением количества строк.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать