Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Проблемы использования прямых запросов к БД (число прочтений - 2802 )
RaiN
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 26. Января 2007
Проблемы использования прямых запросов к БД
26. Января 2007 :: 11:41
Печать  
В работе используются одновременно запросы с SQL (собственно сама база 1С) и к внешним DBF талицам.

Использую объект "OLEDBData", соответственно приходится использовать 1С++ версии начиная со 2... НО! Перестаёт работать инструкция "УложитьСписокОбъектов" при прямых запросах к SQL (В другом отчёте) помогает только использование версии 1С++ 1.8...

Проблему пока решаю загрузкой разных версий для разных пользователей.

Есть другое решение проблемы?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблемы использования прямых запросов к БД
Ответ #1 - 26. Января 2007 :: 14:03
Печать  
RaiN писал(а) 26. Января 2007 :: 11:41:
Перестаёт работать инструкция "УложитьСписокОбъектов" при прямых запросах к SQL (В другом отчёте) помогает только использование версии 1С++ 1.8...
подробнее, плиз
и пример использования
  

1&&2&&3
Наверх
 
IP записан
 
RaiN
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 26. Января 2007
Re: Проблемы использования прямых запросов к БД
Ответ #2 - 26. Января 2007 :: 14:10
Печать  
trad писал(а) 26. Января 2007 :: 14:03:
RaiN писал(а) 26. Января 2007 :: 11:41:
Перестаёт работать инструкция "УложитьСписокОбъектов" при прямых запросах к SQL (В другом отчёте) помогает только использование версии 1С++ 1.8...
подробнее, плиз
и пример использования


Что собственно положить? Есть 2 отчёта 1 работает с версией 1.8 и перестаёт с любой доступной больше 2. А 2-я версия 1С++ нужна для использования прямых запросов к DBF.

Как выяснил что не пашет инструкция "УложитьСписокОбъектов". Тупо заменил                  
Код
Выбрать все
коннект.УложитьСписокОбъектов(списКлиентыФильтр,"#clients");
 


на
Код
Выбрать все
			коннект.УложитьСписокОбъектов(списКлиентыФильтр,"clients");
 


и посмотрел на содержимое таблицы в обеих случаях. В версии 1С++ старше 2. Она пустая.

Вот запрос, если это поможет.
Код
Выбрать все
	лЗапросОстатки   = "
	|set nocount on
	|insert into #BalanceDetail
	|select контрагенты.id КодКлиента,
	|	 контрагенты.DESCR,
	|	 "+метаДатаС+",
	|	 SUM(ДолгОстаток),
	|		0,
	|	 0,
	|	 case when LEFT(Остатки.КредДокумент,4) = '  BE' THEN (select SP9425 from DH410 where IDDOC = RIGHT(Остатки.КредДокумент,9))
	|		when LEFT(Остатки.КредДокумент,4) = '  C2' THEN (select SP9426 from DH434 where IDDOC = RIGHT(Остатки.КредДокумент,9))
	|		else 0
	|	 end
	|from $РегистрОстатки.ВзаиморасчетыПокупателей("+метаДатаС+",,,,Долг) as Остатки
	|     inner join $Справочник.Контрагенты контрагенты ON контрагенты.id=right(Клиент,9)
	|     inner  join $Справочник.КаналСбыта каналсбыта ON каналсбыта.id=$контрагенты.КаналСбыта
	| and контрагенты.id in (select * from #clients)
	| and Остатки.Фирма = :ВыбФирма
	|group by контрагенты.id,
	|	   контрагенты.DESCR,
	|	   Остатки.КредДокумент
	|order by контрагенты.id
	|set nocount off";
 



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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблемы использования прямых запросов к БД
Ответ #3 - 26. Января 2007 :: 14:15
Печать  
Цитата:
select * from #clients

а где в документации написано что #clients будет иметь только одно поле?
  

1&&2&&3
Наверх
 
IP записан
 
RaiN
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 26. Января 2007
Re: Проблемы использования прямых запросов к БД
Ответ #4 - 26. Января 2007 :: 14:18
Печать  
trad писал(а) 26. Января 2007 :: 14:15:
Цитата:
select * from #clients

а где в документации написано что #clients будет иметь только одно поле?


Это вопрос не по существу. Я же написал что она СОВСЕМ пустая. И с версией 1.8 это отлично работает.

ПС: версии dll

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблемы использования прямых запросов к БД
Ответ #5 - 26. Января 2007 :: 14:23
Печать  
RaiN писал(а) 26. Января 2007 :: 14:18:
Это вопрос не по существу
ну, тебе виднее.
-----------

Давай немного продиагностируем:
Код
Выбрать все
коннект.УложитьСписокОбъектов(списКлиентыФильтр,"#clients");
Сообщить(списКлиентыФильтр.РазмерСписка());
Сообщить(коннект.ВыполнитьИнструкцию("select * from #clients").КоличествоСтрок()); 


результат-сюда
  

1&&2&&3
Наверх
 
IP записан
 
RaiN
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 10
Зарегистрирован: 26. Января 2007
Re: Проблемы использования прямых запросов к БД
Ответ #6 - 26. Января 2007 :: 14:24
Печать  
trad писал(а) 26. Января 2007 :: 14:23:
RaiN писал(а) 26. Января 2007 :: 14:18:
Это вопрос не по существу
ну, тебе виднее.
-----------

Давай немного продиагностируем:
Код
Выбрать все
коннект.УложитьСписокОбъектов(списКлиентыФильтр,"#clients");
Сообщить(списКлиентыФильтр.РазмерСписка);
Сообщить(коннект.ВыполнитьИнструкцию("select * from #clients").КоличествоСтрок()); 


результат-сюда


Всегда хорошо обрашаться с умными людьми.

Вот старый метод для УложитьСписокОбъектов

Код
Выбрать все
declare @P1 int
set @P1=-1
exec sp_prepexec @P1 output, N'@P1 char(9)', N'insert #clients values (@P1)', '   4FT000'
select @P1
 



А вот и новый, с 2-мя колонками.

Код
Выбрать все
declare @P1 int
set @P1=-1
exec sp_prepexec @P1 output, N'@P1 char(9)', N'insert #clients values (@P1, 2)', '   4FT000'
select @P1
 



Теперь можно и тему закрыть. Хотя конечно это не очень хорошо что отчёты которые работали почти 2 года надо переписывать...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать