Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Код товара в запросе (число прочтений - 7014 )
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Код товара в запросе
29. Ноября 2007 :: 04:57
Печать  
     Есть запрос, работает:

               Запрос = СоздатьОбъект("ODBCRecordset");          // остатки и обороты
     
     ТекстЗапроса = "
     
     |SELECT
       
     |  Рег.Товар as [Товар $Справочник.Товары],
     
     |  Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
     
     |  Рег.КоличествоПриход as КоличествоПриход,
     
     |  Рег.КоличествоРасход as КоличествоРасход,
     
     |  Рег.КоличествоКонечныйОстаток as КоличествоКонОст
           
     |FROM  
           
     |  $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~,,,,
     
     |                               Склад = :ВыбСклад,
     
     |                               (Товар), (Количество)) as Рег
     
     |WHERE
     
     |  Рег.Товар IN (SELECT Val FROM #Группа)";  

     
     Запрос.УложитьСписокОбъектов(ВыбТовар, "#Группа", "Товары");  
               Запрос.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);
     Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
               Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);

           
//      Запрос.Отладка(1);
         
     ТЗ=Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
     ТЗ.ВыбратьСтроку();


     Вопрос: В ТЗ кроме наименования товара нужен еще код, есть какое-нибудь простое решение без сложных конструкций ?
  
Наверх
 
IP записан
 
slawa
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 125
Зарегистрирован: 05. Октября 2006
Re: Код товара в запросе
Ответ #1 - 29. Ноября 2007 :: 05:25
Печать  
ТекстЗапроса = "  
    |SELECT

    |  Тов.Code as Код

    |  Рег.Товар as [Товар $Справочник.Товары],
    |  Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
    |  Рег.КоличествоПриход as КоличествоПриход,
    |  Рег.КоличествоРасход as КоличествоРасход,
    |  Рег.КоличествоКонечныйОстаток as КоличествоКонОст
    |FROM  
    |  $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~,,,,
    |                               Склад = :ВыбСклад,  
    |                               (Товар), (Количество)) as Рег ,
    |
    | $Справочник.Товары as Тов
    |
    |WHERE
    |
    | Тов.ID = Рег.Товар
    |and
    |
    |  Рег.Товар IN (SELECT Val FROM #Группа)";  
  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #2 - 29. Ноября 2007 :: 05:46
Печать  
Огромное спасибо, все работает! Улыбка
  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #3 - 29. Ноября 2007 :: 06:46
Печать  
Попутный вопрос...

Если добавить

|  Спр.ParentID as [Родитель $Справочник.Товары],

то добавится колонка с Родителями (элементами), а  можно как-нибудь получить их коды ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Код товара в запросе
Ответ #4 - 29. Ноября 2007 :: 07:35
Печать  
Код
Выбрать все
ТекстЗапроса = "
     |SELECT
     |  Тов.Code as Код ,
     |  ТовРодитель.Code as КодРодитедь ,
     |  Рег.Товар as [Товар $Справочник.Товары],
     |  Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
     |  Рег.КоличествоПриход as КоличествоПриход,
     |  Рег.КоличествоРасход as КоличествоРасход,
     |  Рег.КоличествоКонечныйОстаток as КоличествоКонОст
     |FROM
     |  $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~,,,,
     |					 Склад = :ВыбСклад,
     |					 (Товар), (Количество)) as Рег ,
     | INNER JOIN
     | $Справочник.Товары as Тов ON
     | Тов.ID = Рег.Товар
     | LEFT JOIN
     | $Справочник.Товары as ТовРодитель ON
     | ТовРодитель.ID = Тов.ParentID
     |WHERE
     |  Рег.Товар IN (SELECT Val FROM #Группа)";
 



Только проверь для товаров лежащих на первом уровне в справочнике товары
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Код товара в запросе
Ответ #5 - 29. Ноября 2007 :: 12:59
Печать  
А так уже не прокатит?  Подмигивание

Код
Выбрать все
Товары.Code as Код ,
...
LEFT JOIN $Справочник.Товары AS Товары With (NOLOCK) ON Рег.Товар = Товары.ID
...
 


  

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


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #6 - 29. Ноября 2007 :: 22:48
Печать  
Так тоже работает, но чуть дольше считает  Подмигивание

Цитата:
А так уже не прокатит?  Подмигивание

Код
Выбрать все
Товары.Code as Код ,
...
LEFT JOIN $Справочник.Товары AS Товары With (NOLOCK) ON Рег.Товар = Товары.ID
...
 



  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #7 - 29. Ноября 2007 :: 22:55
Печать  
Z1, спасибо за помощь, работает!
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Код товара в запросе
Ответ #8 - 29. Ноября 2007 :: 23:53
Печать  
>>Так тоже работает, но чуть дольше считает
Наверное спать хочется, но нипонил зачем вообще так написано
А для пущего ускорения помести лучше условие на вхождение в список внутрь ВТ
  

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


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #9 - 30. Ноября 2007 :: 01:03
Печать  
Добавила  в
|WHERE 
| ТовРодитель.Code = '"+ВыбКод+"' 

работает, заменила на
| ТовРодитель.Code IN (SELECT Val FROM #СписРодителей)

РС.УложитьСписокОбъектов13(СписРодителей, "#СписРодителей");

где СписРодителей - список значений со списком кодов родителей

не работает, хотя ошибок не выдает, просто пустая ТЗ Печаль
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Код товара в запросе
Ответ #10 - 30. Ноября 2007 :: 04:50
Печать  
сделай так:
Код
Выбрать все
Where Тов.ParentId in (Select Val From #СзРодителей) 


а в СзРодителей положи список не кодов а самих родителейи уложи вот так:
Код
Выбрать все
РС.УложитьСписокОбъектов(СписРодителей,"#СзРодителей","Номенклатура") 

  
Наверх
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #11 - 30. Ноября 2007 :: 05:18
Печать  
Закинула в СЗ именно коды потому что пользуюсь ПрисоединитьИБ(), коды в обеих базах уникальные , а вот ИД у товаров разные,
т.е. если я закину в СЗ товары первой базы, то в второй базе это будет совсем другие товары ....

Вот код целиком :


     ИБ = СоздатьОбъект("ODBCDataBase");
     ИБ.ПрисоединитьИБ("\...\");
     РС = СоздатьОбъект("ODBCRecordSet");
     РС.УстБД(ИБ);
                 
     ТекстЗапроса = "
     
     |SELECT

     |  Спр.Code as Код,    

     |  ТовРодитель.Code as КодРодитель ,
     
     |  Спр.Descr as Наименование,
             
     |  Рег.Товар as [Товар $Справочник.Товары],
     
     |  Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
     
     |  Рег.КоличествоПриход as КоличествоПриход,
     
     |  Рег.КоличествоРасход as КоличествоРасход,
     
     |  Рег.КоличествоКонечныйОстаток as КоличествоКонОст
           
     |FROM  

     |  $РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~,,,,
     
     |                                                ,
     
               |                               (Товар), (Количество)) as Рег
     
     | INNER JOIN

     | $Справочник.Товары as Спр ON

     | Спр.ID = Рег.Товар

     | LEFT JOIN

     | $Справочник.Товары as ТовРодитель ON

     | ТовРодитель.ID = Спр.ParentID                                                          
     
     |WHERE  

              | ТовРодитель.Code = '"+ВыбКод+"'    
        //    | ТовРодитель.Code IN (SELECT Val FROM #СписРодителей)
   
     |ORDER BY
     
     |  Спр.Code
     
     |";
     

     РС.УложитьСписокОбъектов(СписРодителей, "#СписРодителей");
     РС.УстановитьТекстовыйПараметр("НачДата", НачДата);
               РС.УстановитьТекстовыйПараметр("КонДата", КонДата);
           
//      РС.Отладка(1);
     ТЗ = РС.ВыполнитьИнструкцию(ТекстЗапроса);
     ТЗ.ВыбратьСтроку();


Вообщем нужно взять список групп из первой базы и получить обороты и остатки по товарам этих групп из второй базы....
  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #12 - 30. Ноября 2007 :: 05:28
Печать  
>> а в СзРодителей положи список не кодов а самих родителейи уложи вот так:

Попробовала, не получилось, ТЗ пустая  Печаль
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Код товара в запросе
Ответ #13 - 30. Ноября 2007 :: 05:54
Печать  
boks писал(а) 30. Ноября 2007 :: 05:18:
     РС.УложитьСписокОбъектов(СписРодителей, "#СписРодителей");

УложитьСписокОбъектов имеет не два а три параметра. Третий параметр тип справочника.
Этот метод применяется Только для помещения во временную таблицу ID
конкретного справочника.
boks писал(а) 30. Ноября 2007 :: 05:18:
Закинула в СЗ именно коды потому что пользуюсь ПрисоединитьИБ(), коды в обеих базах уникальные , а вот ИД у товаров разные,
т.е. если я закину в СЗ товары первой базы, то в второй базе это будет совсем другие товары ....

Для твоей задачи надо самостоятельно создать временную таблицу
самостоятельно заполнить ее кодама товаров и далее использовать ее.
Второй способ из первой таблицы создаем строку с кодами типа
'код1  ','код2  ' , 'кодn '
каждый код должен быть по длине совпадать с длиной поля code
и далее в окончательном sql запросе должен быть текст
Код
Выбрать все
ТовРодитель.Code IN ('код1  ','код2  ' , 'кодn ')
 

  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #14 - 30. Ноября 2007 :: 06:16
Печать  
>>ТовРодитель.Code IN ('код1  ','код2  ' , 'кодn ')

Z1, действительно все заработало, УРА! Очень довольный
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать