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


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #15 - 30. Ноября 2007 :: 07:11
Печать  
И если кто знает, подскажите пожалуйста, где можно почитать о том, как добавить в запрос условие по Клиенту (когда продажи нужны только по определенной группе клиентов, а приходы и остатки в целом)
и о том как можно поделить расход на продажи и списания (у регистра есть реквизит Видоборота)
Заранее спасибо.
  
Наверх
 
IP записан
 
Plumbum
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 9
Зарегистрирован: 26. Октября 2007
Re: Код товара в запросе
Ответ #16 - 30. Ноября 2007 :: 07:57
Печать  
Z1 писал(а) 30. Ноября 2007 :: 05:54:
Для твоей задачи надо самостоятельно создать временную таблицу
самостоятельно заполнить ее кодама товаров и далее использовать ее.

можно пример вот такой вот таблицы и дальнейшего его использования?
  
Наверх
 
IP записан
 
Plumbum
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 9
Зарегистрирован: 26. Октября 2007
Re: Код товара в запросе
Ответ #17 - 30. Ноября 2007 :: 07:59
Печать  
boks писал(а) 30. Ноября 2007 :: 07:11:
И если кто знает, подскажите пожалуйста, где можно почитать о том, как добавить в запрос условие по Клиенту (когда продажи нужны только по определенной группе клиентов, а приходы и остатки в целом)
и о том как можно поделить расход на продажи и списания (у регистра есть реквизит Видоборота)
Заранее спасибо.

в первом Select выбери остатки и приходы по всем, потом присоедини слева продажи по группе клиентов.
  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #18 - 03. Декабря 2007 :: 07:02
Печать  
А как поделить расход на списания и остальное ? По тому же принципу не получается...

+
|  Рег.ВидОборота as ВидОборота,
| LEFT JOIN
| Рег.КоличествоРасход as КоличествоСписание ON Рег.ВидОборота = 3   

= ошибка,

| LEFT JOIN

| $РегистрОстаткиОбороты.КоличествоРасход as КоличествоСписание ON Рег.ВидОборота = 3   

Тоже ошибка.

ВидОборота- реквизит регистра, тип - число. Можно как-нибудь получить движения регистра, когда видоборота = определенному значению, не обращаясь к документам ?




  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Код товара в запросе
Ответ #19 - 03. Декабря 2007 :: 07:59
Печать  
Во-первых странное соединение и вот это "ON Рег.ВидОборота = 3" -  Нерешительный
Во-вторых реквизитов нет в ВТ ОстаткиОбороты, есть в Обороты
Поделить можно с помощью case, если по-простому:
Код
Выбрать все
case when Рег.Реквизит = 1 then Рег.КоличествоРасход else 0 end as Списание
case when Рег.Реквизит <> 1 then 0 else Рег.КоличествоРасход end as ВсеОстальное
 


  

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


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #20 - 03. Декабря 2007 :: 23:09
Печать  
На Рег.ВидОборота и Рег.Клиент ругается "Invalid column name"
Как будто пытается брать данные не с оборотного регистра , а с регистра остатков...
  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

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

| INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON Рег.IDDOC = Журнал.IDDOC   

Опять ошибка Invalid column name 'IDDOC'.  Нерешительный
Тут-то что не так ? Озадачен
А если добавить еще

|AND (Отбор.MDID = $ГрафаОтбора.Клиент)

тогда вообще Meta name parser error: объект не найден "$ГрафаОтбора.Клиент"




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


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #22 - 04. Декабря 2007 :: 00:26
Печать  
Быстрая обработка движений у регистра и отбор движений у Клиента есть...
  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #23 - 04. Декабря 2007 :: 00:30
Печать  
Или просто нельзя связать виртуальную таблицу  $РегистрОстаткиОбороты с Журналом ? И нужно брать сам регистр ?
  
Наверх
 
IP записан
 
boks
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 39
Зарегистрирован: 24. Октября 2007
Re: Код товара в запросе
Ответ #24 - 04. Декабря 2007 :: 01:24
Печать  
Люди, пожалуйста, помогите добавить условие по клиенту в этот чертов запрос! (Крик души  Смущённый)
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Код товара в запросе
Ответ #25 - 04. Декабря 2007 :: 07:52
Печать  
Падчетай внематочно про периодичность, измерения:
http://www.1cpp.ru/docum/html/ODBC.html#id36
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать