Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Запрос к регистрам по дням в разрезе складов. (число прочтений - 5329 )
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Запрос к регистрам по дням в разрезе складов.
02. Августа 2013 :: 13:33
Печать  
Люди, помогите кто может. Пришла необходимость для прямых запросов.
У меня файловый вариант БД 1С 7.7. Раньше извращался через OLE для выборки из удаленной бд нужного мне массива.
Использую компоненту 1SQLITE.dll. Элементарные выборки делать могу, а вот более сложные запросы - не хватает знаний.
Мой запрос, который нуно перегнать в sqlite
"//{{ЗАПРОС(Сформировать)
     |Период с ДатаС по ДатаПо;
     |ОбрабатыватьДокументы Проведенные;
     |УпрАналитика      = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика;
     |Номенклатура      = Регистр.ОстаткиТМЦ.Номенклатура;
     |Склад                  = Регистр.ОстаткиТМЦ.Склад;
     |КолВо                  = Регистр.ОстаткиТМЦ.Количество;
     |Группировка день;
     |Группировка Склад;
     |Группировка Номенклатура без Групп;
     |Условие (УпрАналитика = выбУпрАналитика);
     |Условие (Склад в СЗФильтрСклады);
     |Условие (Номенклатура в ВыбГруппыТоваров);
     |Функция ИтогоКонКолВо = КонОст(КолВо);
     |Функция ИтогоНачКолВо = НачОст(КолВо);
     |Функция ИтогоПриход = Приход(КолВо);
     |Функция ИтогоРасход = Расход(КолВо);
     |"//}}ЗАПРОС
     ;
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #1 - 02. Августа 2013 :: 13:52
Печать  
на вот, занимайся
  

_____________________Sqllite.ert ( 103 KB | Загрузки )
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #2 - 02. Августа 2013 :: 14:01
Печать  
Спасибо, то что нуно.
  
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов(1sqlite).
Ответ #3 - 02. Августа 2013 :: 14:14
Печать  
Eprst писал(а) 02. Августа 2013 :: 13:52:
на вот, занимайся

Еще вопрос. Позволяет ли данная компонента подключиться к другой, удаленной, бд (БД 1С  7.7 фаловая)???

Я так понимаю, что в этом месте БазаДанных.Открыть(":memory:");
должно использоватья что то типа
База.Открыть(ПутьБазы);
подскажите строку подключения для 1с 7.7 бд файловая подключаемая.   
« Последняя редакция: 03. Августа 2013 :: 06:39 - Pumbaznak »  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #4 - 03. Августа 2013 :: 19:25
Печать  
Нет.
Используй фоксовый провайдер. Там всё можно.
  
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #5 - 05. Августа 2013 :: 05:35
Печать  
Спасибо за помощь и совет. Скорей всего так и поступлю.
  
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #6 - 05. Августа 2013 :: 07:46
Печать  
Похоже еще не все:

ТекстЗапроса="
|Select
|   Рег.Номенклатура [Номенклатура :Справочник.Номенклатура]
|   ,Рег.Док [Док :Документ]
|   ,SUM(Рег.НачОст) [НачОст $Число]
|   ,SUM(Рег.Приход) [Приход $Число]
|   ,SUM(Рег.Расход) [Расход $Число]
|   ,SUM(Рег.НачОст+Рег.Приход-Рег.Расход) [КонОст $Число]
|From
|      (
|      SELECT
|        Итоги.Номенклатура Номенклатура
|     ,null Док
|        ,Итоги.Количество НачОст
|        ,0 Приход
|        ,0 Расход
|      FROM
|            [РегистрИтоги.ОстаткиТМЦ] as Итоги
|
|      WHERE
|            (Итоги.period = :ПредПериод)
|        
|   UNION ALL
|      SELECT
|             Движения.Номенклатура
|       ,null
|            ,Движения.Количество * (1 - Движения.debkred * 2)
|            ,0
|            ,0
|      FROM
|            [Регистр.ОстаткиТМЦ] AS Движения
| Движения.iddoc and Жур.date BETWEEN :НачПериод And :КонПериод
|      WHERE --это если есть галка быстрая обработка движений
|             Движения.date BETWEEN :НачПериод And :КонПериод
|      UNION ALL
|      SELECT
|             Движения2.Номенклатура
|       ,Движения2.iddocDef||Движения2.iddoc
|            ,0
|            ,Движения2.Количество*(1-Движения2.Debkred)
|            ,Движения2.Количество*Движения2.Debkred
|      FROM
|            [Регистр.ОстаткиТМЦ] Движения2
| Движения2.iddoc and Жур2.date BETWEEN :Дата1 And :Дата2
|
|      WHERE --это если есть галка быстрая обработка движений
|            Движения2.date BETWEEN :Дата1 And :Дата2
|) Рег
|
|Group by Рег.Номенклатура,Рег.Док
|";

Запрос.Подставлять("Товар",ВыбГруппыТоваров);

Есть СЗ по товару - ВыбГруппыТоваров, в каком месте его запихнуть в запрос?

|      WHERE
|            (Итоги.period = :ПредПериод) and (Рег.Номенклатура=:товар)

Знаю что ошибочно. Помогите подправить? Плиз.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #7 - 05. Августа 2013 :: 08:02
Печать  
Код
Выбрать все
 WHERE
|	     Итоги.period = :ПредПериод and Итоги.Номенклатура in (select val from СписокТоваров)
.............
 FROM
|		[Регистр.ОстаткиТМЦ] AS Движения
|WHERE
|	     Движения.Номенклатура in (select val from СписокТоваров)
................
 FROM
|		[Регистр.ОстаткиТМЦ] AS Движения2
|WHERE
|	     Движения2.Номенклатура in (select val from СписокТоваров)

..........

база.УложитьОбъекты(ВыбГруппыТоваров,"СписокТоваров",0,"Номенклатура"); 

  
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #8 - 05. Августа 2013 :: 08:32
Печать  
почему то выдает пустой список
ТекстЗапроса="
     |Select
     |   Рег.Номенклатура [Номенклатура :Справочник.Номенклатура]
     |   ,Рег.Док [Док :Документ]
     |   ,SUM(Рег.НачОст) [НачОст $Число]
     |   ,SUM(Рег.Приход) [Приход $Число]
     |   ,SUM(Рег.Расход) [Расход $Число]
     |   ,SUM(Рег.НачОст+Рег.Приход-Рег.Расход) [КонОст $Число]
     |From
     |      (
     |      SELECT
     |        Итоги.Номенклатура Номенклатура
     |     ,null Док
     |        ,Итоги.Количество НачОст
     |        ,0 Приход
     |        ,0 Расход
     |      FROM
     |            [РегистрИтоги.ОстаткиТМЦ] as Итоги
     |
     |      WHERE
     |            (Итоги.period = :ПредПериод) and (Итоги.Номенклатура in (select val from СписокТоваров))
     |       
     |   UNION ALL
     |      SELECT
     |             Движения.Номенклатура
     |       ,null
     |            ,Движения.Количество * (1 - Движения.debkred * 2)
     |            ,0
     |            ,0
     |      FROM
     |            [Регистр.ОстаткиТМЦ] AS Движения
     //|   -- это расскоментить, если нет галки
     //|   --INNER Join [Журнал] Жур ON Жур.iddoc = Движения.iddoc and Жур.date BETWEEN :НачПериод And :КонПериод
     |      WHERE --это если есть галка быстрая обработка движений
     |             Движения.date BETWEEN :НачПериод And :КонПериод  and
     |        Движения.Номенклатура in (select val from СписокТоваров)
     |      UNION ALL
     |      SELECT
     |             Движения2.Номенклатура
     |       ,Движения2.iddocDef||Движения2.iddoc
     |            ,0
     |            ,Движения2.Количество*(1-Движения2.Debkred)
     |            ,Движения2.Количество*Движения2.Debkred
     |      FROM
     |            [Регистр.ОстаткиТМЦ] Движения2
     //|   --INNER Join [Журнал] Жур2 ON Жур2.iddoc = Движения2.iddoc and Жур2.date BETWEEN :Дата1 And :Дата2
     |
     |      WHERE --это если есть галка быстрая обработка движений
     |            Движения2.date BETWEEN :Дата1 And :Дата2 and   
     |       Движения2.Номенклатура in (select val from СписокТоваров)
     |) Рег
     |
     |Group by Рег.Номенклатура,Рег.Док
     |";
  
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #9 - 05. Августа 2013 :: 08:35
Печать  
Извиняюсь, все, разобрался, мой косяк. Не так свернул.
Респект и уважуха за оперативность и терпение Улыбка.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #10 - 05. Августа 2013 :: 08:35
Печать  
Значит, в списокТоваров не элементы справочника номенклатура.
  
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #11 - 05. Августа 2013 :: 10:20
Печать  
Тьфу, блин. На этот раз что у меня не  то????????????

     ТекстЗапроса="
     |Select
     |   Рег.Номенклатура [Номенклатура :Справочник.Номенклатура]
     |   ,Рег.Склады [Склады :Справочник.Склады]
     |   ,Рег.Док [Док :Документ]
     |   ,SUM(Рег.НачОст) [НачОст $Число]
     |   ,SUM(Рег.Приход) [Приход $Число]
     |   ,SUM(Рег.Расход) [Расход $Число]
     |   ,SUM(Рег.НачОст+Рег.Приход-Рег.Расход) [КонОст $Число]
     |From
     |      (
     |      SELECT
     |        Итоги.Номенклатура Номенклатура   
     |     ,Итоги.Склады Склады   
     |     ,null Док
     |        ,Итоги.Количество НачОст
     |        ,0 Приход
     |        ,0 Расход
     |      FROM
     |            [РегистрИтоги.ОстаткиТМЦ] as Итоги
     |
     |      WHERE
     |            Итоги.period = :ПредПериод and Итоги.Номенклатура in (select val from СписокТоваров)  and Итоги.Склады in (select val from СписокСкладов)
     |       
     |   UNION ALL
     |      SELECT
     |             Движения.Номенклатура
     |       ,Движения.Склады
     |       ,null
     |            ,Движения.Количество * (1 - Движения.debkred * 2)
     |            ,0
     |            ,0
     |      FROM
     |            [Регистр.ОстаткиТМЦ] AS Движения
     |      WHERE --это если есть галка быстрая обработка движений
     |             Движения.date BETWEEN :НачПериод And :КонПериод  and
     |        Движения.Номенклатура in (select val from СписокТоваров) and
     |        Движения.Склады in (select val from СписокСкладов)
     |      UNION ALL
     |      SELECT
     |             Движения2.Номенклатура
     |       ,Движения2.Склады
     |       ,Движения2.iddocDef||Движения2.iddoc
     |            ,0
     |            ,Движения2.Количество*(1-Движения2.Debkred)
     |            ,Движения2.Количество*Движения2.Debkred
     |      FROM
     |            [Регистр.ОстаткиТМЦ] Движения2
     |
     |      WHERE
     |            Движения2.date BETWEEN :Дата1 And :Дата2 and   
     |       Движения2.Номенклатура in (select val from СписокТоваров) and
     |       Движения2.Склады in (select val from СписокСкладов)
     |) Рег
     |
     |Group by Рег.Номенклатура,Рег.Док
     |";
     
       база.УложитьОбъекты(ВыбГруппыТоваров,"СписокТоваров",0,"Номенклатура");
     база.УложитьОбъекты(СЗФильтрСклады,"СписокСкладов",,);

пишет "no such column: Движения2.Склады "


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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #12 - 05. Августа 2013 :: 10:24
Печать  
Нет измерения Склады в регистре, есть Склад

Ну и ежели нужен склад, то в конце в group by его тоже надо добавить
  
Наверх
 
IP записан
 
Pumbaznak
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 02. Августа 2013
Re: Запрос к регистрам по дням в разрезе складов.
Ответ #13 - 05. Августа 2013 :: 10:27
Печать  
тьфу, блин. Слона то и не заметил.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать