Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос к "чужой" базе (число прочтений - 11745 )
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Запрос к "чужой" базе
21. Августа 2006 :: 11:25
Печать  
Юзаю 1с++
Наваял пару запросов. В родной базе все работает
Как выполнить запрос в сторонней базе чтобы не коннектится по ОЛЕ?
Помогите примерами, ссылками (если такое уже есть в функционале и работает)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #1 - 21. Августа 2006 :: 11:28
Печать  
насколько я помню, уже просто мес. 3 не юзаю 1С++, но скоро испралю данную ошибку, такой функционал есть, но в стадии тестирования и планировался он быть в версии 2.0.3.х которой пока нет, вернее она есть но в ночных сборках, а я юзаю тока рекомендованный релиз, а он как был так и есть 2.0.2.2 а в нем такого нет...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
1cvirus
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 89
Зарегистрирован: 24. Мая 2006
Re: Запрос к "чужой" базе
Ответ #2 - 21. Августа 2006 :: 11:52
Печать  
Код
Выбрать все
	БазаДанных = СоздатьОбъект("ODBCDatabase");

	БазаДанных.Соединение("Driver={SQL Server};Server=ИМЯСЕРВЕРА;Database=ИМЯБАЗЫ;Uid=sa;Pwd=ПАРОЛЬ;");
	Если БазаДанных.ЕстьСоединение() = 0 Тогда
		Предупреждение(БазаДанных.ПолучитьОписаниеОшибки(),0);
		Возврат;
	КонецЕсли;    

	RecordSet = СоздатьОбъект("ODBCRecordSet");
	RecordSet.УстБД(БазаДанных);

	СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
	ТЗДок = СоздатьОбъект("ТаблицаЗначений");
	Докум.ВыгрузитьТабличнуюЧасть(ТЗДок,"Номенклатура");
	ТЗДок.Выгрузить(СписокНоменклатуры);  

	RecordSet.УложитьСписокОбъектов(СписокНоменклатуры,"#ВыбТовар","Номенклатура");
    
	НачМес = НачМесяца(РабочаяДата());
	РабДата = Лев(Формат(НачМес,"ДГГГГММДД"),4) + "-" + Сред(Формат(НачМес,"ДГГГГММДД"),5,2) + "-" + Прав(Формат(НачМес,"ДГГГГММДД"),2);

	ТекстЗапроса = "
	|Select
	|    Номенклатура [Номенклатура $Справочник.Номенклатура],
	|    КоличествоОстаток Количество
	|FROM
	|     (
	|   select
	|   rg328_vt.sp331 as Номенклатура,
	|   sum(rg328_vt.sp342) as КоличествоОстаток
	|   from rg328 as rg328_vt (nolock)
	|   where rg328_vt.period={d '"+РабДата+"'}
	|   and (rg328_vt.sp4061 = '     3CDP' AND rg328_vt.sp7442 = '     5XOB' AND rg328_vt.sp331 in (Select val from #ВыбТовар))
	|   group by
	|   rg328_vt.sp331
	|   having
	|   sum(rg328_vt.sp342) <> 0
	|   ) as РегОстатки  
	|";  

	ТЗИтогов = глПолучитьВыборку(RecordSet, ТекстЗапроса,);
    
	RecordSet.УстБД1С();  

  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #3 - 21. Августа 2006 :: 11:59
Печать  
1cvirus ты наверное его не правильно понял, он хочет в "чужой" базе использовать возможности парсера, как это делается в текущей локальной базе...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
1cvirus
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 89
Зарегистрирован: 24. Мая 2006
Re: Запрос к "чужой" базе
Ответ #4 - 21. Августа 2006 :: 12:06
Печать  
Цитата:
1cvirus ты наверное его не правильно понял, он хочет в "чужой" базе использовать возможности парсера, как это делается в текущей локальной базе...

пока я ему предложил ответ на вопрос: Как выполнить запрос в сторонней базе чтобы не коннектится по ОЛЕ?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #5 - 21. Августа 2006 :: 12:09
Печать  
Цитата:
Юзаю 1с++
Наваял пару запросов. В родной базе все работает
Как выполнить запрос в сторонней базе чтобы не коннектится по ОЛЕ?
Помогите примерами, ссылками (если такое уже есть в функционале и работает)

в документации см. метод ODBCDataBase :: ПрисоединитьИБ
  

1&&2&&3
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #6 - 21. Августа 2006 :: 12:13
Печать  
trad писал(а) 21. Августа 2006 :: 12:09:
в документации см. метод ODBCDataBase :: ПрисоединитьИБ

в 2.0.2.2 это уже есть?
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #7 - 21. Августа 2006 :: 12:30
Печать  
Спасибки!
АЛьФ подсказал решение

МетаДата = СоздатьОбъект("MetaDataWork");
МетаДата.ПрисоединитьМД(ПутьКИсточнику+"1cv7.md");
   
ИБ = СоздатьОбъект("ODBCDataBase");
ИБ.ПрисоединитьИБ(ПутьКИсточнику);
   
Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УстБД(ИБ);

Скачал ночную сборку... и взлетело!
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #8 - 21. Августа 2006 :: 12:31
Печать  
Вот интересно... какие траблы ждут если использовать это дело на ДБФ? И как лучше делать в этом случае? До этого пробовал ОлеДБ
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #9 - 21. Августа 2006 :: 13:10
Печать  
Цитата:
Вот интересно... какие траблы ждут если использовать это дело на ДБФ? И как лучше делать в этом случае? До этого пробовал ОлеДБ

А чем тебя OLEDBData отпугнул? Я у себя для dbf его и использую.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #10 - 21. Августа 2006 :: 13:22
Печать  
JohnyDeath писал(а) 21. Августа 2006 :: 13:10:
Цитата:
Вот интересно... какие траблы ждут если использовать это дело на ДБФ? И как лучше делать в этом случае? До этого пробовал ОлеДБ

А чем тебя OLEDBData отпугнул? Я у себя для dbf его и использую.


Я о том, что коннектится к другой базе как лучше для ДБФ

  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #11 - 21. Августа 2006 :: 13:39
Печать  
думаю лучше все таки через 1С++, нежели 1С-ом по OLE...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #12 - 21. Августа 2006 :: 13:51
Печать  
Товарищи, неожиданная проблема  Плачущий
Не удается получить результат - пустая ТЗ
IDD проверил - в обеих базах одинаковы, передаю через УстановитьТекстовыйПараметр()
Что-то туплю... хочется плакать  Нерешительный
Вот запрос:

Код
Выбрать все
|SELECT Продажи.IDDOC [Документ $Документ.Реализация]
   |, $Продажи.Номенклатура [Номенклатура $Справочник.Номенклатура]
   |, $Продажи.Покупатель [Покупатель $Справочник.Контрагенты]
   |, $Продажи.Фирма [Фирма $Справочник.Фирмы]
   |, Sum($Продажи.Количество) СуммаКоличество
   |FROM $Регистр.Продажи AS Продажи With (NOLOCK)
   |INNER JOIN (SELECT Номенклатура.ID Ссылка
   |, $Номенклатура.IDD IDD
   |FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
   |WHERE ($Номенклатура.IDD = :ИДДНоменклатура)) AS Подзапрос ON $Продажи.Номенклатура = Подзапрос.Ссылка
   |INNER JOIN (SELECT Журнал.IDDOC Документ
   |, Журнал.DATE_TIME_IDDOC ДатаВремяИдДок
   |, Журнал.IDDOCDEF Документ_вид
   |FROM _1SJOURN AS Журнал With (NOLOCK)
   |WHERE (Журнал.DATE_TIME_IDDOC > :НачДата)
   |AND (Журнал.DATE_TIME_IDDOC <= :КонДата)
   |AND (Журнал.IDDOCDEF = $ВидДокумента.Реализация)) AS Подзапрос1 ON Продажи.IDDOC = Подзапрос1.Документ
   |INNER JOIN (SELECT Фирмы.ID Ссылка
   |, $Фирмы.IDD IDD
   |FROM $Справочник.Фирмы AS Фирмы With (NOLOCK)
   |WHERE ($Фирмы.IDD = :ИДДФирма)) AS Подзапрос2 ON $Продажи.Фирма = Подзапрос2.Ссылка
   |INNER JOIN (SELECT $Контрагенты.IDD IDD
   |, Контрагенты.ID Ссылка
   |FROM $Справочник.Контрагенты AS Контрагенты With (NOLOCK)
   |WHERE ($Контрагенты.IDD = :ИДДКонтрагент)) AS Подзапрос3 ON $Продажи.Покупатель = Подзапрос3.Ссылка
   |GROUP BY Продажи.IDDOC
   |, $Продажи.Номенклатура
   |, $Продажи.Покупатель
   |, $Продажи.Фирма
 


  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #13 - 21. Августа 2006 :: 13:53
Печать  
посмотри в ФАК какой там драйвер рекомендуют для ДБФ и какой у тебя, если у тебя дефолтный драйвер, то 100% работать не будет
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос к "чужой" базе
Ответ #14 - 21. Августа 2006 :: 13:56
Печать  
Это на SQL запускается, в родной базе запрос поменьше, т.к. не нужно искать соответствие по ИДД
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать