[ОТВЕТИТЬ]
Опции темы
16.06.2008 06:56  
dmware
Здравствуйте!
Делаю запрос, который должен выдавать информацию о доходности и марже за некий промежуток времени по указанному месту продажи.
Взял за основу таблицу FFMAPREP, про которую в документации говорится буквально следующее: "Результаты расчета товародвижения в удобном для отчетов виде".
Поступаю следующим образом: выбираю продажи по кассе (CS), возвраты по кассе (CR), объединяю результаты с разным знаком (UNION ALL) - это у меня подзапрос. Внешним запросом произвожу рассчеты: себестоимость (сумма), доход и т.д.
Собственно вопрос... Сверяю результаты с тем, что мне показывает отчет "Доходность по товарам" в Супермаге.. Вроде как значения те же, но не для всех артикулов... по некоторым реализация без налогов отлична от того, что я получаю в супермажном отчете в меньшую сторону. При этом поднимаю документы по данному артикулу - вижу, что вроде как все должно быть так, как у меня.
Подскажите, пожалуйста, что я мог не учесть... или возможно делаю не так?
 
16.06.2008 07:44  
Mtirt
Честно говоря, будет проще, если ты приведешь здесь свой запрос...
 
16.06.2008 07:56  
dmware
Цитата:
Сообщение от Mtirt
Честно говоря, будет проще, если ты приведешь здесь свой запрос...
Конечно, вот он:
Код:
SELECT    SACARDCLASS.TREE SACARDCLASS_TREE, 
          SACARDCLASS.NAME SACARDCLASS_NAME,
          SMCARD.ARTICLE SMCARD_ARTICLE, 
          SMCARD.NAME SMCARD_NAME,  
          SUM(V1.SALENOVAT) as "Реализация без налогов", 
          SUM(V1.PRIMECOSTNOVAT) as "Себестоимость без НДС",
          SUM(V1.SALENOVAT) - SUM(V1.PRIMECOSTNOVAT) as "Доход",
          ROUND(
             ((SUM(V1.SALENOVAT) - SUM(V1.PRIMECOSTNOVAT))*100/SUM_SALENOVAT),
             3
          ) as "Доля в общем доходе, %",
          ROUND(
             ((SUM(V1.SALENOVAT) - SUM(V1.PRIMECOSTNOVAT))*100/SUM(V1.SALENOVAT)), 
             3
          ) as "Маржа, %",
          SUM_SALENOVAT as "Общий доход",
          SUM(QUANTITY) as "Количество"
FROM     (
          SELECT    ARTICLE,
                    SALELOCATIONFROM,
                    SALELOCATIONTO,
                    SALEDATE,
                    SALEID,
                    SALETYPE,
                    SALEOP,
                    SALEQ,
                    SALESUM,
                    SALENOVAT,
                    SALENOTAX,
                    SALESUMCUR,
                    
                    QUANTITY,                    
                    
                    PRIMECOST,
                    PRIMECOSTNOVAT,
                    
                    INCOMEID,
                    INCOMETYPE,
                    INCOMEQ,
                    INCOMESUM,
                    INCOMENOVAT,
                    INCOMEVATRATE,
                    INCOMEDATE,
                    SUM(SALENOVAT) OVER () - 
                           SUM(PRIMECOSTNOVAT) OVER () SUM_SALENOVAT
          FROM      FVMAPREP
          WHERE     SALETYPE IN('CS')
                    AND SALEDATE >= to_date('01.06.2008', 'DD.MM.YYYY')
                    AND SALEDATE <= to_date('06.06.2008', 'DD.MM.YYYY')
                    AND SALELOCATIONFROM IN(2)
                    
                    AND ARTICLE  IN(
                        SELECT     SMCARD.ARTICLE 
                        FROM       SMCARD, SACARDCLASS 
                        WHERE      SMCARD.IDCLASS = SACARDCLASS.ID 
                                   AND SACARDCLASS.TREE LIKE '1.%' 
                        ) 
                    AND FORCEDMAPPING = 0
                    AND SALELOCATIONFROM IS NOT NULL
                    AND SALEOP IN(1)
           
          UNION ALL   
          SELECT    ARTICLE,
                    SALELOCATIONFROM,
                    SALELOCATIONTO,
                    SALEDATE,
                    SALEID,
                    SALETYPE,
                    SALEOP,
                    SALEQ,
                    -SALESUM,
                    -SALENOVAT,
                    SALENOTAX,
                    SALESUMCUR,
                    
                    -QUANTITY,                    
                    
                    -PRIMECOST,
                    -PRIMECOSTNOVAT,
                    
                    INCOMEID,
                    INCOMETYPE,
                    INCOMEQ,
                    INCOMESUM,
                    INCOMENOVAT,
                    INCOMEVATRATE,
                    INCOMEDATE,                    
                    - SUM(SALENOVAT) OVER () - 
                           SUM(PRIMECOSTNOVAT) OVER () SUM_SALENOVAT
          FROM      FVMAPREP
          WHERE     SALETYPE IN('CR')
                    AND SALEDATE >= to_date('01.06.2008', 'DD.MM.YYYY')
                    AND SALEDATE <= to_date('06.06.2008', 'DD.MM.YYYY')
                    AND SALELOCATIONTO IN(2)
                    AND ARTICLE  IN(
                        SELECT     SMCARD.ARTICLE 
                        FROM       SMCARD, SACARDCLASS 
                        WHERE      SMCARD.IDCLASS = SACARDCLASS.ID 
                                   AND SACARDCLASS.TREE LIKE '1.%' 
                        ) 
                    AND FORCEDMAPPING = 0 
                    AND SALELOCATIONTO IS NOT NULL
                    AND SALEOP IN(3) 
         ) V1,
         SACARDCLASS, 
         SMCARD
WHERE    SACARDCLASS.ID = SMCARD.IDCLASS
         AND SMCARD.ARTICLE = V1.ARTICLE
GROUP BY SACARDCLASS.TREE, 
         SACARDCLASS.NAME,
         SMCARD.ARTICLE, 
         SMCARD.NAME,
         SUM_SALENOVAT
 
16.06.2008 08:19  
Mtirt
Проанализируй FVMAPREP. Несколько строк по реализации.
Сравни Quantity, IncomeQ и SaleQ. Я думаю, тебе удастся после этого найти свою ошибку.
 
16.06.2008 08:56  
mighty
ты забыл про поле RECTYPE в таблице FFMAPREP его надо обязательно в условии прописывать
WHERE RECTYPE=1, иначе он тебе отберет хрень..
 
16.06.2008 09:28  
dmware
Цитата:
Сообщение от Mtirt
Проанализируй FVMAPREP. Несколько строк по реализации.
Сравни Quantity, IncomeQ и SaleQ. Я думаю, тебе удастся после этого найти свою ошибку.
Цитата:
Сообщение от mighty
ты забыл про поле RECTYPE в таблице FFMAPREP его надо обязательно в условии прописывать
WHERE RECTYPE=1, иначе он тебе отберет хрень..
Спасибо вам большое за помощь.
Да, так оно и есть, если игнорировать поле RECTYPE со значением 0, то данные в точности совпадают с теми, что выдает нам отчет супермага.
Из описания: тип записи см.файл MAPREPTYPE в FIFO.h - мда, легче не стало:) Анализирую те данные, что содержатся в таблице и вижу, что у записи, которая имеет RECTYPE со значением 0, нет данных о полной себестоимости. Просто хотелось бы знать, что конкретно характеризует данное поле?
 
16.06.2008 09:31  
dmware
Цитата:
Сообщение от Andrew_Konev
дату не пробовал двигать? тип date содержит еще и время
SALEDATE <= to_date('06.06.2008', 'DD.MM.YYYY')
дата-время меньше или равно 06.06.2008 00:00
последний день выпадает из выборки.
Нет, с датами здесь все вроде в порядке. Причина получения различных данных именно в том, что я не ограничивал выборку по значению поля RECTYPE. По крайней мере, именно так у меня сейчас и получилось
 
16.06.2008 09:34  
akonev
Цитата:
Сообщение от dmware
Нет, с датами здесь все вроде в порядке. Причина получения различных данных именно в том, что я не ограничивал выборку по значению поля RECTYPE. По крайней мере, именно так у меня сейчас и получилось
ага. я уже посмотрел тока что. в saledate время везде нулевое.
так что конкретно здесь это не критично.
 
 
Опции темы



Часовой пояс GMT +3, время: 01:15.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.