Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Помогите с прямым запросом. База DBF (число прочтений - 4041 )
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Помогите с прямым запросом. База DBF
05. Мая 2011 :: 11:07
Печать  
Есть запрос, который выводит остатки на дату. Требуется его доработать.
1. Сделать чтоб выводил остатки и обороты за период (начост, приход, расход, коност)
[code]      |SELECT
     |      Рег.Товар as [Номенклатура $Справочник.Номенклатура],
     |      Рег.ПолнНаименование ПолнНаименование,                                 
     |      Рег.Склад as [Склад $Справочник.Склады],
     |      SUM(Рег.КоличествоОстаток) as Количество
     |FROM
     |      (SELECT
     |            $Р.Номенклатура AS Товар,
     |            $Р.Фирма AS Фирма,
     |            $Р.Склад AS Склад,
     |            СпрН.Descr AS ПолнНаименование, 
     |            $Р.Количество AS КоличествоОстаток
     |      FROM
     |            $РегистрИтоги.ОстаткиТМЦ as Р

     |INNER JOIN
     |            $Справочник.Номенклатура СпрН ON $Р.Номенклатура=СпрН.ID
     |      WHERE Р.period = :ПредМесяц~~
     
     |UNION ALL
     |
     |      SELECT
     |            $Р.Номенклатура AS Товар,
     |            $Р.Фирма AS Фирма,
     |            $Р.Склад AS Склад,
     |            СпрН.Descr AS ПолнНаименование, 
     |            $Р.Количество * (1 - Р.debkred * 2) AS КоличествоОстаток
     |      FROM
     |            $Регистр.ОстаткиТМЦ AS Р
     |      INNER JOIN
     |            1sjourn jr ON Р.iddoc = jr.iddoc
     |                  AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
     |                  AND ($ФлагРегистра.ОстаткиТМЦ = 1)


     |INNER JOIN
     |            $Справочник.Номенклатура СпрН ON $Р.Номенклатура=СпрН.ID
     |      ) Рег
     

     |HAVING SUM(Рег.КоличествоОстаток)<>0

     |GROUP BY
     |      Рег.Товар,                              
     |      ПолнНаименование,      
     |      Рег.Склад                
     |";       
[/code]
  
Наверх
 
IP записан
 
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #1 - 05. Мая 2011 :: 11:07
Печать  
Всех приветствую и прошу помощи!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите с прямым запросом. База DBF
Ответ #2 - 05. Мая 2011 :: 11:26
Печать  
вот тут есть пример получения итогов и оборотов:
http://www.1cpp.ru/forumfiles/Attachments/mod_002.zip

но для того, чтоб было быстро фоксе, придётся постараться и почитать это сперва:
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705

ЗЫ: и на будущее - лучше не пиши НачМесяца, ибо если будет другая периодичность хранения останков, то твой запрос коту под хвост.
Используй методы метадатаворк для определения границ периодичности хранения останков.


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


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #3 - 05. Мая 2011 :: 12:35
Печать  
пытаюсь разобрать обороты, выдает ошибку.
[code]      |SELECT
     |      Рег.Товар as [Товар $Справочник.Номенклатура],
     |      SUM(Рег.КоличествоНачОст) AS КоличествоНачОст,
     |      SUM(Рег.КоличествоПриход) AS КоличествоПриход,
     |      SUM(Рег.КоличествоРасход) AS КоличествоРасход,
     |      SUM(Рег.КоличествоНачОст) + SUM(Рег.КоличествоПриход) - SUM(Рег.КоличествоРасход) AS КоличествоКонОст
     |FROM
     |      (SELECT
     |            $Р.Номенклатура AS Товар,
     |            $Р.Количество AS КоличествоНачОст,
     |            $0 AS КоличествоПриход,
     |            $0 AS КоличествоРасход
     |      FROM
     |            $РегистрИтоги.ОстаткиТМЦ as Р
     |      WHERE
     |            (period = :ПредМесяц~~)
     |            AND($Р.Склад=:Склад)
     |
     |      UNION ALL
     |
     |      SELECT
     |            $Р.Номенклатура AS Товар,
     |            $Р.Количество * (1 - Р.debkred * 2) AS КоличествоНачОст,
     |            $0 AS КоличествоПриход,
     |            $0 AS КоличествоРасход
     |      FROM
     |            $Регистр.ОстаткиТМЦ AS Р
     |      INNER JOIN
     |            1sjourn jr ON (Р.iddoc = jr.iddoc)
     |                  AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
     |                  AND ($ФлагРегистра.ОстаткиТМЦ = 1)
     |      WHERE
     |            ($Р.Склад=:Склад)
     |
     |      UNION ALL
     |
     |      SELECT
     |            $Р.Номенклатура AS Товар,
     |            $0 AS КоличествоНачОст,
     |            (1-Р.debkred)* $Р.Количество AS КоличествоПриход,
     |            (Р.debkred)      * $Р.Количество AS КоличествоРасход
     |      FROM
     |            $Регистр.ОстаткиТМЦ AS Р
     |      INNER JOIN
     |            1sjourn jr ON (Р.iddoc = jr.iddoc)
     |                  AND (jr.date BETWEEN : НачДата~~ AND : КонДата~~)
     |                  AND ($ФлагРегистра.ОстаткиТМЦ = 1)
     |      WHERE
     |            ($.Р.Склад=:Склад)
     |      ) Рег
     |GROUP BY
     |      Товар
     |    ";

     ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "$0", "000000000000000.000");

[/code]

Meta name parser error: неизвестное метаимя или алиас "$"
Что не правильно делаю? Запрос из примера...
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Помогите с прямым запросом. База DBF
Ответ #4 - 05. Мая 2011 :: 12:44
Печать  
присмотрись
Код
Выбрать все
($.Р.Склад=:Склад) 

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


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #5 - 05. Мая 2011 :: 12:46
Печать  
Подскажите как должно быть? Я это скопировал из примера...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите с прямым запросом. База DBF
Ответ #6 - 05. Мая 2011 :: 12:51
Печать  
($.Р.Склад=:Склад)

вот тут ошибка
  
Наверх
 
IP записан
 
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #7 - 05. Мая 2011 :: 12:54
Печать  
ну блин я слепень... Теперь Syntax error пишет...
  
Наверх
 
IP записан
 
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #8 - 05. Мая 2011 :: 13:00
Печать  
Они что издеваются? Пример бы хоть проверили... Или я опять чего то не вижу..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите с прямым запросом. База DBF
Ответ #9 - 05. Мая 2011 :: 13:01
Печать  
напиши Запрос.Отладка(1) .. и всё сразу видно и где ошибка тоже.
  
Наверх
 
IP записан
 
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #10 - 06. Мая 2011 :: 05:44
Печать  
Подсказывайте... не вижу я синтакс ошибки.
[code]SELECT
     Рег.Товар as [Товар_1c_type_Справочник_Номенклатура],
     SUM(Рег.КоличествоНачОст) AS КоличествоНачОст,
     SUM(Рег.КоличествоПриход) AS КоличествоПриход,
     SUM(Рег.КоличествоРасход) AS КоличествоРасход,
     SUM(Рег.КоличествоНачОст) + SUM(Рег.КоличествоПриход) - SUM(Рег.КоличествоРасход) AS КоличествоКонОст
FROM
     (SELECT
           Р.sp408 AS Товар,
           Р.sp411 AS КоличествоНачОст,
           000000000000000.000 AS КоличествоПриход,
           000000000000000.000 AS КоличествоРасход
     FROM
           rg405 as Р
     WHERE
           (period = {d '2010-12-01'})
           AND(Р.sp418='     1   ')

     UNION ALL

     SELECT
           Р.sp408 AS Товар,
           Р.sp411 * (1 - Р.debkred * 2) AS КоличествоНачОст,
           000000000000000.000 AS КоличествоПриход,
           000000000000000.000 AS КоличествоРасход
     FROM
           ra405 AS Р
     INNER JOIN
           1sjourn jr ON (Р.iddoc = jr.iddoc)
                 AND (jr.date BETWEEN {d '2011-01-01'} AND {d '2011-01-31'})
                 AND (rf405 = 1)
     WHERE
           (Р.sp418='     1   ')

     UNION ALL

     SELECT
           Р.sp408 AS Товар,
           000000000000000.000 AS КоличествоНачОст,
           (1-Р.debkred)* Р.sp411 AS КоличествоПриход,
           (Р.debkred)      * Р.sp411 AS КоличествоРасход
     FROM
           ra405 AS Р
     INNER JOIN
           1sjourn jr ON (Р.iddoc = jr.iddoc)
                 AND (jr.date BETWEEN : НачДата~~ AND : КонДата~~)
                 AND (rf405 = 1)
     WHERE
           (Р.sp418='     1   ')
     ) Рег
GROUP BY
     Товар[/code]
  
Наверх
 
IP записан
 
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #11 - 06. Мая 2011 :: 06:20
Печать  
нашел место где ошибка методом коментариев)
[code]      |                  AND (jr.date BETWEEN : НачДата~~ AND : КонДата~~)
[/code]
Теперь не могу понять что конкретно здесь неверно...
  
Наверх
 
IP записан
 
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #12 - 06. Мая 2011 :: 06:24
Печать  
угу, нашел, пробелы...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите с прямым запросом. База DBF
Ответ #13 - 06. Мая 2011 :: 06:26
Печать  
Теперь читай про использования индексов и переписывай весь текст запроса.
ЗЫ: устанавливать нуль в качестве параметра нет необходимости, просто 0 пишешь и усё.
  
Наверх
 
IP записан
 
Dannilka
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 05. Мая 2011
Re: Помогите с прямым запросом. База DBF
Ответ #14 - 06. Мая 2011 :: 06:36
Печать  
про индексы читал. Этот запрос и так в разы быстрее работает чем стандартный. Так что пока нарно так и оставлю) Про 0 я так и думал, не понял только зачем в примере сделали это.. Наверно для того чтоб запрос красиво выглядел
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать