Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема 1С-овский запрос в прямой (число прочтений - 2838 )
Vadim
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 29
Зарегистрирован: 27. Декабря 2007
1С-овский запрос в прямой
27. Декабря 2007 :: 10:39
Печать  
Всем доброго дня. Сразу скажу, что обратиться за помощью решил далеко не сразу, до этого долго курил faq'и и доки Улыбка. Результат не очень утешительныйПечаль. Так вот, не могли бы подсказать, в каком направлении думать при решении следующей задачи: необходимо переделать обычный 1С-овский запрос в прямой. Вот, собвтенно, сам запрос:
Код
Выбрать все
"|Период с ДатаС по ДатаПо
|Поставщик = Регистр.ОстаткиТоваров.Партия.Клиент;
|Склад	   = Регистр.ОстаткиТоваров.Партия.Склад;
|БазСто	 = Регистр.ОстаткиТоваров.БазоваяСтоимость;
|РасхСто     = Регистр.ОстаткиТоваров.РасходнаяСтоимость;
|ТекДок	 = Регистр.ОстаткиТоваров.ТекущийДокумент;
|Функция ПриходБазовый = Расход(БазСто);
|Функция РасходПолный = Расход(РасхСто);
|Группировка Поставщик упорядочить по Поставщик.Наименование без групп;
|Группировка ТекДок;
|Условие (ТекДок.Вид()=""ЗакрытиеСмены"");"
 



Сразу же загвоздка у меня возникла: "Клиент" не является измерением регистра "ОстаткиТоваров", соответственно непонятно, как включить его в выборку в прямом запросе. В итоге получился у меня такой запрос:
Код
Выбрать все
"
		|SELECT DISTINCT $ОстаткиТоваров.Партия [Партия $Документ.ПриходнаяКредит]
		|	, SUM($ОстаткиТоваров.БазоваяСтоимость) БазоваяСтоимость
		|	, SUM($ОстаткиТоваров.РасходняСтоимость) РасходнаяСтоимость
		|FROM $Регистр.ОстаткиТоваров AS ОстаткиТоваров
		|GROUP BY $ОстаткиТоваров.Партия WITH ROLLUP";
 



который, естественно, даже близко не дает нужных результатов. Но даже этот запрос отрабатывает как-то странно: по некоторым группам "ОстаткиТоваров.Партия" (т. е. партиям, коими являются приходные накладные) значения "БазоваяСтоимость" и "РасходнаяСтоимость" оказываются задвоенными без видимых на то причинПечаль.
Даже не знаю, какой конкретно помощи проситьПечаль, но буду рад любойУлыбка
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1С-овский запрос в прямой
Ответ #1 - 27. Декабря 2007 :: 10:55
Печать  
Партия у регистра и клиент у партии всегда заполнены?

Цитата:
|Функция ПриходБазовый = Расход(БазСто);
- здесь всё верно?
  

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


I Love YaBB 2!

Сообщений: 29
Зарегистрирован: 27. Декабря 2007
Re: 1С-овский запрос в прямой
Ответ #2 - 27. Декабря 2007 :: 11:00
Печать  
berezdetsky писал(а) 27. Декабря 2007 :: 10:55:
Партия у регистра и клиент у партии всегда заполнены?

Да, заполнены всегда
Цитата:
|Функция ПриходБазовый = Расход(БазСто);
Цитата:
- здесь всё верно?

Да, здесь все верно
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1С-овский запрос в прямой
Ответ #3 - 27. Декабря 2007 :: 11:06
Печать  
Код
Выбрать все
SELECT Клиенты.ID [Поставщик $Справочник.Клиенты]
	, Журнал.IDDOC [ТекДок $Документ.ЗакрытиеСмены]
	, SUM($ОстаткиТоваров.БазоваяСтоимость) ПриходБазовый
|	, SUM($ОстаткиТоваров.РасходняСтоимость) РасходПолный
FROM $Регистр.ОстаткиТоваров ОстаткиТоваров (NOLOCK)
	INNER JOIN _1SJOURN Журнал (NOLOCK) ON ОстаткиТоваров.IDDOC = Журнал.IDDOC
	INNER JOIN $Документ.ПриходнаяКредит ПриходнаяКредит (NOLOCK) ON $ОстаткиТоваров.Партия = ПриходнаяКредит.IDDOC
	INNER JOIN $Справочник.Клиенты Клиенты (NOLOCK) ON $ПриходнаяКредит.Клиент = Клиенты.ID
WHERE (Журнал.DATE_TIME_IDDOC Between :ДатаС AND :ДатаПо ~)
	AND (Журнал.IDDOCDEFF = $ВидДокумента.ЗакрытиеСмены)
	AND (ОстаткиТоваров.DEBKRED = 1)
GROUP BY Клиенты.ID, Клиенты.DESCR, Журнал.IDDOC
ORDER BY Клиенты.DESCR 

  

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


I Love YaBB 2!

Сообщений: 29
Зарегистрирован: 27. Декабря 2007
Re: 1С-овский запрос в прямой
Ответ #4 - 27. Декабря 2007 :: 11:13
Печать  
Спасибо большое. Буду пробовать. О результатах отпишусь

Edit: от же ж блин, работаетУлыбка. Спасибо тебе, добрый человек. Буду вникать в сие мастерствоУлыбка
  
Наверх
 
IP записан
 
Vadim
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 29
Зарегистрирован: 27. Декабря 2007
Re: 1С-овский запрос в прямой
Ответ #5 - 28. Декабря 2007 :: 14:07
Печать  
В последний запрос добавил условие:
Код
Выбрать все
|AND ($ОстаткиТоваров.Склад = :ВыбМагазин~)";
 


где "ВыбМагазин" - это реквизит формы, тип - Справочник.Склады. Так вот, при добавлении этого условия выборка получается пустой. Посмотрел в profiler'е какой запрос отправляется на скл-сервак и оказалось, что это условие принимает вид: AND (ОстаткиТоваров.sp100 = '   V     6   '). Однако если посмотреть таблицу SC31 (Справочник.Склады), то видно, что у выбранного магазина (ВыбМагазин) поле ID равно ' 6 '. Откуда блин берется эта буква 'V' - не понятноПечаль. Это как, глюк? или все же я туплю где-то?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: 1С-овский запрос в прямой
Ответ #6 - 28. Декабря 2007 :: 14:10
Печать  
|AND ($ОстаткиТоваров.Склад = :ВыбМагазин)";
...
RecordSet.УстановитьТекстовыйПараметр("ВыбМагазин", ВыбМагазин);


  

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1С-овский запрос в прямой
Ответ #7 - 28. Декабря 2007 :: 14:13
Печать  
  

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


I Love YaBB 2!

Сообщений: 29
Зарегистрирован: 27. Декабря 2007
Re: 1С-овский запрос в прямой
Ответ #8 - 28. Декабря 2007 :: 14:17
Печать  
Ага, таки я протупорезилУлыбка. Спасибо за подсказку
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать