Переключение на Главную Страницу Страницы: [1] 2 3 ... 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос к внешней базе (число прочтений - 16398 )
oav
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 97
Местоположение: Пермь
Зарегистрирован: 09. Ноября 2009
Пол: Мужской
Запрос к внешней базе
09. Ноября 2009 :: 13:26
Печать  
При подключении к внешней базе если выполняется запрос с
использованием  виртуальной таблицы ОстаткиОбороты,
период расчета остатков берется по текущей базе. Соответственно остатки вычисляются неправильно. Как задать период расчета по той базе , к которой я подключился ??
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к внешней базе
Ответ #1 - 09. Ноября 2009 :: 14:11
Печать  
Провел тест:
В текущей ИБ периодичность итогов - Месяц
В присоединяемой ИБ периодичность итогов - Декада

Код
Выбрать все
Процедура Сформировать()
	бд=СоздатьОбъект("ODBCDatabase");
	бд.ПрисоединитьИБ("C:\Bases\test\","Новый1","");

	ТекстЗапроса="
	|select *
	|from $РегистрОстатки.Новый1('20091015')
	|";
	рс=СоздатьОбъект("ODBCRecordset");
	рс.УстБД(бд);
	рс.Отладка();
	рс.ВыполнитьИнструкцию(ТекстЗапроса);
КонецПроцедуры 


select *
from (
select
rr22_vt.sp23 as новый1,
sum(rr22_vt.sp24) as новый2Остаток
from (
select
rg22_vt.sp23,
rg22_vt.sp24
from rg22 as rg22_vt (nolock)
where rg22_vt.period={d '2009-10-11'}
union all
select
ra22_vt.sp23,
case ra22_vt.debkred when 1 then ra22_vt.sp24 else -ra22_vt.sp24 end
from ra22 as ra22_vt (nolock)
inner join _1sjourn as j22_vt (nolock) on j22_vt.iddoc = ra22_vt.iddoc
where j22_vt.date_time_iddoc >= '20091015' and j22_vt.date_time_iddoc < '20091020Z'
and j22_vt.rf22 = 0x1
) as rr22_vt
group by
rr22_vt.sp23
having
sum(rr22_vt.sp24) <> 0
) as Rests22

судя по подсвеченным датам вроде все в порядке.
1с++ 3.0.1.21 и 2.5.0.8
  

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


1C++ rocks!

Сообщений: 97
Местоположение: Пермь
Зарегистрирован: 09. Ноября 2009
Пол: Мужской
Re: Запрос к внешней базе
Ответ #2 - 10. Ноября 2009 :: 04:44
Печать  
Тест несколько не правильный ! Надо выполнить запрос к присоединенной базе, а не к текущей ! Иначе какой смысл присоединять базу!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к внешней базе
Ответ #3 - 10. Ноября 2009 :: 05:24
Печать  
oav писал(а) 10. Ноября 2009 :: 04:44:
ТНадо выполнить запрос к присоединенной базе, а не к текущей ! Иначе какой смысл присоединять базу!

как раз запрос к присоединенной применяется:
бд.ПрисоединитьИБ("C:\Bases\test\","Новый1","");
рс.УстБД(бд);
  

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


1C++ rocks!

Сообщений: 97
Местоположение: Пермь
Зарегистрирован: 09. Ноября 2009
Пол: Мужской
Re: Запрос к внешней базе
Ответ #4 - 10. Ноября 2009 :: 05:26
Печать  
Вот пример запроса.
Если период взять, что бы он включал границу, то можно все увидеть.

ИБ=СоздатьОбъект("ODBCDataBase");
ИБ.ПрисоединитьИБ(КаталогБазыOLE+"\",ПользовательOLE,ПарольOLE,"Driver={SQL Server};Server="+СокрЛП(СпрИБ.Сервер)+
+СокрЛП(СпрИБ.Пароль)+";");
RS=СоздатьОбъект("ODBCRecordset");
RS.УстБД(ИБ);

           ТекстЗапроса = "
           |SELECT
           |      СпрСклад.Code  as Склад,
           |      СпрТовар.Code  as Товар,
           |      Рег.ОстатокТовараНачальныйОстаток as НачОст,
           |      Рег.ОстатокТовараПриход as Приход,
           |      Рег.ОстатокТовараРасход as Расход,
           |      Рег.ОстатокТовараКонечныйОстаток as КонОст
           |FROM
           |  а,,Фирма=$ПустойИД ,(Товар,Склад),ОстатокТовара) as Рег
           |INNER JOIN
           |      $Справочник.Номенклатура as СпрТовар ON СпрТовар.ID = Рег.Товар      
           |INNER JOIN
           |      $Справочник.МестаХранения as СпрСклад ON СпрСклад.ID = Рег.Склад
           |";            

     RS.УстановитьТекстовыйПараметр("НачДата", ДатаНачала);
     RS.УстановитьТекстовыйПараметр("КонДата", ДатаКонца);

А вот как он выглядит ...
В базе к которой делается запрос, период установлен "ДЕКАДА",
а в той из которой делается запрос "МЕСЯЦ"
период с 30 пред. месяца по 1 число текущего.

SELECT
     СпрСклад.Code  as Склад,
     СпрТовар.Code  as Товар,
     Рег.ОстатокТовараНачальныйОстаток as НачОст,
     Рег.ОстатокТовараПриход as Приход,
     Рег.ОстатокТовараРасход as Расход,
     Рег.ОстатокТовараКонечныйОстаток as КонОст
FROM
  (
select
rb99_vt.Товар,
rb99_vt.Склад,
sum(rb99_vt.ОстатокТовараОстаток) - sum(rb99_vt.ОстатокТовараПриход) + sum(rb99_vt.ОстатокТовараРасход) as ОстатокТовараНачальныйОстаток ,
sum(rb99_vt.ОстатокТовараПриход) as ОстатокТовараПриход,
sum(rb99_vt.ОстатокТовараРасход) as ОстатокТовараРасход,
sum(rb99_vt.ОстатокТовараОстаток) as ОстатокТовараКонечныйОстаток
from (
select
ra99_vt.sp101 as Товар,
ra99_vt.sp100 as Склад,
case when ra99_vt.debkred = 0 then ra99_vt.sp102 else 0 end as ОстатокТовараПриход,
case when ra99_vt.debkred = 1 then ra99_vt.sp102 else 0 end as ОстатокТовараРасход,
0 as ОстатокТовараОстаток
from ra99 as ra99_vt (nolock)
inner join _1sjourn as j99_vt (nolock) on j99_vt.iddoc = ra99_vt.iddoc
where j99_vt.date_time_iddoc > '20091030' and j99_vt.date_time_iddoc < '20091101Z'
and j99_vt.rf99 = 0x1
and (ra99_vt.sp3603='     0   ')
union all
select
rg99_vt.sp101 as Товар,
rg99_vt.sp100 as Склад,
0,
0,
rg99_vt.sp102
from rg99 as rg99_vt (nolock)
where rg99_vt.period={d '2009-10-01'}
and (rg99_vt.sp3603='     0   ')
) as rb99_vt
group by
rb99_vt.Товар,
rb99_vt.Склад
having
sum(rb99_vt.ОстатокТовараОстаток) - sum(rb99_vt.ОстатокТовараПриход) + sum(rb99_vt.ОстатокТовараРасход) <> 0 or
sum(rb99_vt.ОстатокТовараПриход) <> 0 or
sum(rb99_vt.ОстатокТовараРасход) <> 0 or
sum(rb99_vt.ОстатокТовараОстаток) <> 0
) as Рег
INNER JOIN
     sc33 as СпрТовар ON СпрТовар.ID = Рег.Товар      
INNER JOIN
     sc31 as СпрСклад ON СпрСклад.ID = Рег.Склад

а если попытаться получить группировку по периоду, например по дням, то вообще выводиться ошибка!!!!!!
  
Наверх
 
IP записан
 
oav
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 97
Местоположение: Пермь
Зарегистрирован: 09. Ноября 2009
Пол: Мужской
Re: Запрос к внешней базе
Ответ #5 - 10. Ноября 2009 :: 05:42
Печать  
А вот если конечная дата 2 и т. д число, то период уже правильный
={d '2009-10-21'}! Очень странно!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к внешней базе
Ответ #6 - 10. Ноября 2009 :: 05:59
Печать  
да, если ВТ $РегистрОстаткиОбороты, то ошибка наблюдается.
  

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


1C++ rocks!

Сообщений: 97
Местоположение: Пермь
Зарегистрирован: 09. Ноября 2009
Пол: Мужской
Re: Запрос к внешней базе
Ответ #7 - 10. Ноября 2009 :: 06:06
Печать  
А, что делать????
Возможно ли это поправить, или надо жить как есть???
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к внешней базе
Ответ #8 - 10. Ноября 2009 :: 07:38
Печать  
trad писал(а) 10. Ноября 2009 :: 05:59:
да, если ВТ $РегистрОстаткиОбороты, то ошибка наблюдается.

и ВТ $РегистрОстатки тоже
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к внешней базе
Ответ #9 - 10. Ноября 2009 :: 08:00
Печать  
oav писал(а) 10. Ноября 2009 :: 06:06:
А, что делать????
Возможно ли это поправить, или надо жить как есть???

думаю эту беду можно поправить.
только нужно найти время Печаль
  

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


1C++ rocks!

Сообщений: 97
Местоположение: Пермь
Зарегистрирован: 09. Ноября 2009
Пол: Мужской
Re: Запрос к внешней базе
Ответ #10 - 10. Ноября 2009 :: 08:11
Печать  
А как долго ждать результата????
Очень хочется !!!!!!
А, то придется выкручиваться.
Возможно ли это исправить до конца недели????
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к внешней базе
Ответ #11 - 10. Ноября 2009 :: 10:15
Печать  
oav писал(а) 10. Ноября 2009 :: 08:11:
Возможно ли это исправить до конца недели????

постараюсь.
но, естественно, ничего обещать не могу.
  

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


1C++ rocks!

Сообщений: 97
Местоположение: Пермь
Зарегистрирован: 09. Ноября 2009
Пол: Мужской
Re: Запрос к внешней базе
Ответ #12 - 10. Ноября 2009 :: 11:10
Печать  
С надеждой буду ждать!!!!!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к внешней базе
Ответ #13 - 10. Ноября 2009 :: 11:29
Печать  
кстати, обрати внимание на такой баг ВТ ОстаткиОбороты:
http://www.1cpp.ru/forum/YaBB.pl?num=1240379935/17#17
это я не поправлю
  

1&&2&&3
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Запрос к внешней базе
Ответ #14 - 10. Ноября 2009 :: 11:47
Печать  
trad писал(а) 10. Ноября 2009 :: 11:29:
кстати, обрати внимание на такой баг ВТ ОстаткиОбороты:
http://www.1cpp.ru/forum/YaBB.pl?num=1240379935/17#17
это я не поправлю

А вообще переделать ОстаткиОбороты на расчет через update тоже наверное можно не просить?  Круглые глаза
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 5
ОтправитьПечать