Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос к регистру Продажи, и вытащить проект из документов (число прочтений - 2395 )
Malamute
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 29. Июня 2010
Запрос к регистру Продажи, и вытащить проект из документов
08. Июля 2011 :: 13:53
Печать  
Добрый день!
Искал, не нашел...

Задача у меня такая, отобрать из регистра продажи данные по выбранной номенклатуре (без группировки по ней) и показать по "проектам". Регистр "Продажи" оборотный.
Измерения "Проект" в регистре нет, есть общий реквизит журнала. поэтому типовой запрос

     ТекстЗапроса =
     "
     |Период с Нач по Кон;
     |Номенклатура = Регистр.Продажи.Номенклатура;
     |Проект = Регистр.Продажи.ТекущийДокумент.Реализация.Проект,
|Регистр.Продажи.ТекущийДокумент.ВозвратОтПокупателя.Проект;
     |ПродСтоимость = Регистр.Продажи.ПродСтоимость;
     |ПродСтоимостьВ = Регистр.Продажи.ПродСтоимостьВ;
     |Количество = Регистр.Продажи.Количество;
     |КоличествоВ = Регистр.Продажи.КоличествоВ;
     |Функция ПродСтоимостьСумма = Сумма(ПродСтоимость);
     |Функция ПродСтоимостьВСумма = Сумма(ПродСтоимостьВ);
     |Функция КоличествоСумма = Сумма(Количество);
     |Функция КоличествоВСумма = Сумма(КоличествоВ);
     |Группировка Проект без групп;
     |Условие(Номенклатура в СписНом);
     |Условие(Проект в СписПроект);
     |"//}}ЗАПРОС
     ;  

Так понимаю, моя задача на прямом запросе сделать запрос к регистру и join с журналом, делаю это всё крайне редко, вот сейчас пробую, даже без проекта, чтоб разобраться и добавить отбор по проекту,но не работает, выдает ошибку..
Подскажите пожалуйста, что у меня не так с синтаксисом?
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();        
     
     RS.УстановитьТекстовыйПараметр("Нач", Нач);
     RS.УстановитьТекстовыйПараметр("Кон", Кон);  
     
     
     Если СписНом.РазмерСписка()>0 тогда
           RS.УложитьСписокОбъектов(СписНом, "#Группа1", "Номенклатура");
     КонецЕсли  ;

     ТекстЗапроса =  
     "
     |SELECT
     |    Рег.Номенклатура  [Номенклатура $Справочник.Номенклатура],
     |    Рег.КоличествоОборот       ПродКоличество,
     |    Рег.КоличествоВОборот      ПродКоличествоВ,
     |    Рег.ПродСтоимостьОборот    ПродСтоимость,
     |    Рег.ПродСтоимостьВОборот   ПродСтоимостьВ,
     |    Рег.IDDoc as [Документ $Документ],  
     |    Рег.Период Год,
     |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
     |FROM
     |    $РегистрОбороты.Продажи(:Нач, :Кон~, Год)  Рег  
     |INNER JOIN
     |    _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
     |WHERE
     |    Жур.Date_Time_IDDoc BETWEEN :Нач AND :Кон~ AND
     |    Жур.Closed & 1 = 1       "
     ;                    
     
     
     Если (СписНом.РазмерСписка()>0) тогда
           ТекстЗапроса = ТекстЗапроса+  
           "
           |AND
           |   (Рег.Номенклатура  IN (SELECT Val FROM #Группа1))
           |";
     КонецЕсли;    


Текст ошибки выдает: State:42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server] Invalid Column Name 'IDDoc'

почему Invalid Column Name 'IDDoc' не могу понять Печаль
заранее спасибо....
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к регистру Продажи, и вытащить проект из документов
Ответ #1 - 08. Июля 2011 :: 14:36
Печать  
Используй вместо виртуальной таблицы таблицу движений регистра.
  

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


1C++ rocks!

Сообщений: 17
Зарегистрирован: 29. Июня 2010
Re: Запрос к регистру Продажи, и вытащить проект из документов
Ответ #2 - 08. Июля 2011 :: 22:21
Печать  
Спасибо огромное, РОДИЛ.
Единственно что коряво конечно... Можно ли получить ТЗ, как по приведенному типовому запросу, где сразу Проект и показатели по нему? А то у меня получается ТЗ с документами, и я ей потом сворачиваю ... на дух от костыля воротит
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();        
     
     RS.УстановитьТекстовыйПараметр("Нач", Нач);
     RS.УстановитьТекстовыйПараметр("Кон", Кон);  
     

     Если СписНом.РазмерСписка()>0 тогда
           RS.УложитьСписокОбъектов(СписНом, "#Группа1", "Номенклатура");
     КонецЕсли  ;
     
     Если СписПроект.РазмерСписка()>0 тогда
           RS.УложитьСписокОбъектов(СписПроект, "#Группа2", "Проекты");
     КонецЕсли  ;      
     
     
     ТекстЗапроса = "
     |SELECT
     |    Рег.IDDoc as [Док $Документ],
     |    Жур.IDDocDef as Док_вид,  
     |    Жур.$ОбщийРеквизит.Проект as [Проект $Справочник.Проекты],
     |    $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
     |    $Рег.Количество as КоличествоСумма,
     |    $Рег.КоличествоВ as КоличествоВСумма,
     |    $Рег.ПродСтоимость as  ПродСтоимостьСумма,
     |    $Рег.ПродСтоимостьВ as  ПродСтоимостьВСумма,      
     |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
     
     |FROM
     |    $Регистр.Продажи as Рег
     |INNER JOIN
     |    _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
     |WHERE
     |    Жур.Date_Time_IDDoc BETWEEN :Нач AND :Кон~ AND
     |    Жур.Closed & 1 = 1       " ;
     
     
     
     Если (СписНом.РазмерСписка()>0) тогда
           ТекстЗапроса = ТекстЗапроса+  
           "
           |AND
           |   ($Рег.Номенклатура  IN (SELECT Val FROM #Группа1))
           |";
     КонецЕсли;    
     
     Если (СписПроект.РазмерСписка()>0) тогда
           ТекстЗапроса = ТекстЗапроса+  
           "
           |AND
           |   (Жур.$ОбщийРеквизит.Проект IN (SELECT Val FROM #Группа2))
           |";
     КонецЕсли;  

     ТЗ0 = RS.ВыполнитьИнструкцию(ТекстЗапроса);  
     тоимостьВСумма");



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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к регистру Продажи, и вытащить проект из документов
Ответ #3 - 09. Июля 2011 :: 10:29
Печать  
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать