01.12.2020 13:16
Всем привет! В связи с уходом от ЕНВД начальство хочет получить из Супермага отчет по текущим остаткам в разрезе поставщиков, в котором будут видны собственно остатки, полная сумма в закупочных ценах, суммы НДС по каждой ставке, и все это желательно сгруппировать по поставщикам.

Из имеющихся отчетов в СМ+ есть два похожих - Остатки в закупочных ценах, но он не учитывает поставщиков, и Остатки по поставщикам, но он не выделяет НДС. В идеале бы, к этому отчету добавить колонки НДС 10%, НДС 20% и это бы нас устроило, наверно. Есть ли какие-нибудь варианты/предложения, или надо обращаться в Сервис Плюс за доработкой?

Нажмите на изображение для увеличения
Название: Снимок ост пост.JPG
Просмотров: 32
Размер:	161.4 Кб
ID:	11183
01.12.2020 14:36
>>> Есть ли какие-нибудь варианты/предложения,

Есть. Изучить FastReports и доработать отчет, или просто взять из него запрос и добавить нужную группировку.

Будет _значительно_ дешевле.
01.12.2020 23:09
Цитата:
DMaslov Изучить FastReports
Было бы неплохо, если бы не поджимали сроки.. До отмены ЕНВД остается месяц. Впрочем, попробовать можно, если люди помогут.

Посмотрел на 750 строк кода в файле ostatki_cp.rfx... Ладно, 300 из них - отрисовка таблицы, остается 400. Надо ли оно мне?

В FastReports Designer ситуация не легче. В RepData виден такой запрос
туц:
SQL код:
SELECT 
 '' LocName
, 0 LocID
, '' GroupName
, '' GroupNormTree
, '' Article
, '' CardName
, '' MesName
, 0 QtyArt
, 0 CPArt
, 0 CPNoVATArt
, 0 CPVAT10Art
, 0 CPVAT20Art
, '' DocType
, '' DocID
, '' IsUndef
, 0 Price
, 0 PriceNoVAT
, 0 Qty
, 0 CP
, 0 CPNoVAT
, 0 CPVAT10
, 0 CPVAT20
, 0 UndefQty
, 0 UndefCP
, 0 UndefCPNoVAT
, 0 UndefCPVAT10
, 0 UndefCPVAT20
, 0 ArtCount
FROM dual 
Не настолько хорошо я знаю структуру БД, чтобы понять хотя бы этот последний псевдоним dual. Тем более, что в исходнике есть еще 18 таких же конструкций, и ни одна из них не проливает свет на происходящее.
02.12.2020 10:26
> Надо ли оно мне?

Если вы собираетесь работать в поддержке этой БД, надо.

Если даже dual - проблема, действительно, остается только уповать на помощь коллег.

Можно выцепить запрос и из отчета.

Можно запустить отчет, и поймать конкретный вариант в БД.

Дальше только разбирать, какая часть что означает (в моей БД, например, была проведена обрезка по 31.12.2011, в вашем запросе этого может не быть), и менять нужные параметры и группировку.

Понятно, что этот запрос сделан при вполне конкретных параметрах отчета, при ваших параметрах он будет другим.

+:
SQL код:
INSERT /*+ APPEND NOLOGGING */
INTO TTRemIncome
  (StoreLoc,
   Article,
   DocId,
   DocType,
   SpecItem,
   GoodsOwner,
   ClientIndex,
   VATRate,
   DocQuantity,
   DocSum,
   DocSumNoVAT,
   Forced,
   Quantity)
  (SELECT StoreLoc,
          Article,
          IncomeId,
          IncomeType,
          IncomeSpecItem,
          min(GoodsOwner) KEEP(DENSE_RANK FIRST ORDER BY Range) GoodsOwner,
          min(IncomeClientIndex) KEEP(DENSE_RANK FIRST ORDER BY Range) ClientIndex,
          min(IncomeVatRate) KEEP(DENSE_RANK FIRST ORDER BY Range) VatRate,
          min(IncomeQ) KEEP(DENSE_RANK FIRST ORDER BY Range) DocQuantity,
          min(IncomeSum) KEEP(DENSE_RANK FIRST ORDER BY Range) DocSum,
          min(IncomeNoVat) KEEP(DENSE_RANK FIRST ORDER BY Range) DocSumNoVat,
          ForcedMapping,
          sum(Quantity) Quantity
     FROM (SELECT decode(SaleLocationTo, -2, to_number(null), SaleLocationTo) StoreLoc,
                  Article,
                  IncomeId,
                  IncomeType,
                  decode(IncomeSpecItem, -1, to_number(null), IncomeSpecItem) IncomeSpecItem,
                  GoodsOwner,
                  decode(IncomeClientIndex,
                         0,
                         to_number(null),
                         IncomeClientIndex) IncomeClientIndex,
                  nvl(IncomeVATRate, 0) IncomeVatRate,
                  nvl(IncomeQ, 0) IncomeQ,
                  nvl(IncomeSum, 0) IncomeSum,
                  nvl(IncomeNoVAT, 0) IncomeNoVat,
                  nvl(ForcedMapping, 0) ForcedMapping,
                  Quantity,
                  1 Range
             FROM FFMapRep
            WHERE decode(SaleLocationTo, -2, to_number(null), SaleLocationTo) is not NULL
              and SaleDate between to_date('01.01.2012', 'DD.MM.YYYY') and
                  to_date('25.11.2020', 'DD.MM.YYYY')
           UNION ALL
           SELECT decode(SaleLocationFrom,
                         -2,
                         to_number(null),
                         SaleLocationFrom) StoreLoc,
                  Article,
                  IncomeId,
                  IncomeType,
                  decode(IncomeSpecItem, -1, to_number(null), IncomeSpecItem) IncomeSpecItem,
                  GoodsOwner,
                  decode(IncomeClientIndex,
                         0,
                         to_number(null),
                         IncomeClientIndex) IncomeClientIndex,
                  nvl(IncomeVATRate, 0) IncomeVatRate,
                  nvl(IncomeQ, 0) IncomeQ,
                  nvl(IncomeSum, 0) IncomeSum,
                  nvl(IncomeNoVAT, 0) IncomeNoVat,
                  nvl(ForcedMapping, 0) ForcedMapping,
                  -Quantity,
                  1 Range
             FROM FFMapRep
            WHERE decode(SaleLocationFrom,
                         -2,
                         to_number(null),
                         SaleLocationFrom) is not NULL
              and SaleDate between to_date('01.01.2012', 'DD.MM.YYYY') and
                  to_date('25.11.2020', 'DD.MM.YYYY')
           UNION ALL
           SELECT M.SaleLocationTo StoreLoc,
                  M.Article,
                  M.IncomeId,
                  M.IncomeType,
                  decode(M.IncomeSpecItem,
                         -1,
                         to_number(null),
                         M.IncomeSpecItem) IncomeSpecItem,
                  M.GoodsOwner,
                  decode(M.IncomeClientIndex,
                         0,
                         to_number(null),
                         M.IncomeClientIndex) IncomeClientIndex,
                  nvl(M.IncomeVATRate, 0) IncomeVatRate,
                  nvl(M.IncomeQ, 0) IncomeQ,
                  nvl(M.IncomeSum, 0) IncomeSum,
                  nvl(M.IncomeNoVAT, 0) IncomeNoVat,
                  '0' ForcedMapping,
                  M.Quantity,
                  3 Range
             FROM FFMapRep_ M
            WHERE M.SaleDate = to_date('31.12.2011', 'DD.MM.YYYY')
              and M.SaleType = 'WI'
              and exists (select *
                     from TTRemDocList TD
                    where TD.DocType = M.SaleType
                      and TD.ID = M.SaleId)
           UNION ALL
           SELECT StoreLoc,
                  Article,
                  to_char(NULL) IncomeId,
                  to_char(NULL) IncomeType,
                  to_number(NULL) IncomeSpecItem,
                  0 GoodsOwner,
                  to_number(NULL) IncomeClientIndex,
                  0 IncomeVatRate,
                  0 IncomeQ,
                  0 IncomeSum,
                  0 IncomeNoVat,
                  '1' ForcedMapping,
                  SUM(Quantity) Quantity,
                  3 Range
             FROM FFRemains_
            WHERE RemDate = to_date('31.12.2011', 'DD.MM.YYYY')
            GROUP BY StoreLoc, Article
           HAVING SUM(Quantity) < 0)
    GROUP BY StoreLoc,
             Article,
             IncomeId,
             IncomeType,
             IncomeSpecItem,
             ForcedMapping
   HAVING ROUND(sum(Quantity), 3) <> 0 or (IncomeType = 'BR' and (ROUND(SUM(IncomeNoVat), 4) <> 0 or ROUND(SUM(IncomeSum), 4) <> 0))) 
02.12.2020 12:30
Цитата:
DMaslov Если вы собираетесь работать в поддержке этой БД, надо.
...
остается только уповать на помощь коллег.
В мои задачи не входит разборка запросов и доработка отчетов. Хотя бы по той банальной причине, что для этого нет времени и места среди остальных задач, которые генерируются в двадцати магазинах, пятидесяти кассах, принтерах, бесперебойниках, и попутных вопросах по всяким экселям/мессенджерам/маркировкам/ключам и т.д.). И сидеть разбирать хоть что-то, даже более-менее понятное, под постоянные звонки телефона довольно сложно. Коллег выделяют в количестве одного человека, да еще и меняют по мере того, как они хоть чему-нибудь обучатся. Поэтому с ораклом в этой организации никто лучше меня не знаком, как бы печально это не звучало.

Но это ладно, лирика. За образец запроса спасибо. Исправил для себя дату, попробовал выполнить, он сработал. Но куда он это вставил, я не понимаю, и из TTRemIncome отбирается пустота. Тем более в этом отчете вообще нет INSERT'ов, из TTRemIncome выполняется только SELECT.

В общем, если и начинать разбираться с отчетами, то не с таких дебрей. Сейчас я не буду сам за это браться. Хотят отчёт - пусть заплатят тем, кто знает эту кухню. Еще раз спасибо за участие.
02.12.2020 12:42
Есть вариант - разместить объявление на форуме и попросить откликнуться участников форума за деньги.
Обычно, речь идет о меньших суммах, чем просит С+.
Такой вариант вы не рассматриваете?
Или к Олегу сюда: https://olegon.ru/showthread.php?t=14698
02.12.2020 14:19
Попробовать можно, конечно. Если фирма согласится оплатить работу частному лицу.

Закинул удочку https://olegon.ru/showthread.php?p=359850
Часовой пояс GMT +3, время: 22:41.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.