Procedura-GetDocsForCashBookReportRCR

Popis:
Vrací doklady pro pokladní knihu - vrácení pokladních příjmů

Parametry:

NázevPopisDatový typ
IN_DATE_FROM$DATEFloat(0, 0)
IN_DATE_TO$DATEFloat(0, 0)
IN_CASHDESK_IDChar(10)
InDivisionSelIDChar(10)
IN_DOCQUEUE_SEL_IDChar(10)
IN_FIRM_SEL_IDChar(10)
InBusOrderSelIDChar(10)
In_BusTransactionSelIDChar(10)
InBusProjectSelIDChar(10)
IN_CREATEDBY_SEL_IDChar(10)
IN_CORRECTEDBY_SEL_IDChar(10)
IN_ACCOUNTINGChar(1)
InDivisionsWithChildsChar(1)
InBusOrdersWithChildsChar(1)
InBusTransactionsWithChildsChar(1)
InBusProjectsWithChildsChar(1)

Návratové hodnoty:

NázevPopisDatový typ
OUT_DOC_DATE$DATEFloat(0, 0)
OUT_DISPLAYNAMEVarChar(24)
OUT_DOCUMENT_DESCRIPTIONVarChar(50)
OUT_AMOUNTNumeric(15, 2)
OUT_LOCALAMOUNTNumeric(15, 2)
OUT_ORDER_KINDInteger
OUT_FIRM_NAMEVarChar(220)
OUT_BOOKENTRY_DISPLAYNAMEVarChar(24)
OUT_DQCodeVarChar(10)
OUT_OrdNumberInteger
OUT_PCodeVarChar(4)
OUT_DOCUMENT_IDChar(10)

Závislosti:

NázevPopisTřída
init_floatVrací číslo na vstupu, v případě null vrací defaultní hodnotu ze vstupu, pokud je i ta null, tak nulu. Používá se interně v některých procedurách.Procedures
LocateBookEntryVrací zápisy z účetního deníku pro doklad a vazbuProcedures

Tělo:

BEGIN
  /* Vrácení pokladních príjmu */
  mRELDEF = 9;
  FOR
    SELECT
      A.id, A.docdate$date,
      DQ.Code || '-' || A.OrdNumber || '/' || P.Code,
      A.description, F.name, A.RoundingAmount, A.LocalRoundingAmount,
      DQ.Code, A.OrdNumber, P.Code
    FROM
      refundedcashreceived A
      JOIN Periods P ON P.ID = A.Period_ID
      JOIN DocQueues DQ ON DQ.ID = A.DocQueue_ID
      JOIN firms F ON F.ID = A.Firm_ID
    WHERE
      ( (:IN_DATE_FROM$DATE <= A.docdate$date) AND (A.docdate$date < :IN_DATE_TO$DATE) ) AND
      (A.cashdesk_id = :IN_CASHDESK_ID) AND
      ( (:IN_DOCQUEUE_SEL_ID = '') OR
        (A.docqueue_id IN (SELECT obj_id FROM SELDAT WHERE sel_id = :IN_DOCQUEUE_SEL_ID)) ) AND
      (((A.Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :In_Firm_Sel_ID))
        or
      (A.Firm_ID in (SELECT ID FROM Firms WHERE Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :In_Firm_Sel_ID))))
        OR
      :In_Firm_Sel_ID = '')
      and
      ( (:IN_CREATEDBY_SEL_ID = '') OR
        (A.createdby_id IN (SELECT obj_id FROM SELDAT WHERE sel_id = :IN_CREATEDBY_SEL_ID)) ) AND
      ( (:IN_CORRECTEDBY_SEL_ID = '') OR
        (A.correctedby_id IN (SELECT obj_id FROM SELDAT WHERE sel_id = :IN_CORRECTEDBY_SEL_ID)) ) AND
      ( (:IN_ACCOUNTING = '.') OR
        ((:IN_ACCOUNTING = '<') AND (0 < (SELECT COUNT(*) FROM locatebookentry(:mRELDEF, A.id))) ) OR
        ((:IN_ACCOUNTING = '=') AND (0 = (SELECT COUNT(*) FROM locatebookentry(:mRELDEF, A.id))) ) )
    INTO
      OUT_DOCUMENT_ID, OUT_DOC_DATE$DATE, OUT_DISPLAYNAME, OUT_DOCUMENT_DESCRIPTION,
      OUT_FIRM_NAME, mRoundingAmount, mLocalRoundingAmount, OUT_DQCode, OUT_OrdNumber, OUT_PCode
  DO BEGIN
    /* príznak pro správné razení dokladu typu príjem - výdej */
    OUT_ORDER_KIND = 2;
    /* Získáme cenu z rádek... */
    SELECT
      SUM(A2.tamount) * (-1), SUM(A2.localtamount) * (-1)
    FROM
      refundedcashreceived2 A2
    WHERE
      (A2.parent_id = :OUT_DOCUMENT_ID) AND
      (:InDivisionSelID = '' or
        A2.Division_ID in
        (
          SELECT Bx.ID FROM Divisions Bx WHERE Bx.Hidden = 'N' AND
            ( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :InDivisionSelID)) OR
              ((:InDivisionsWithChilds in ('1', 'A')) and (Bx.ID in (select ID from Sys$Divisions2 where Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :InDivisionSelID)))))
        )
      ) and
      (:InBusOrderSelID = '' or
        A2.BusOrder_ID in
        (
          SELECT Bx.ID FROM BusOrders Bx WHERE Bx.Hidden = 'N' AND
            ( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusOrderSelID)) OR
              ((:InBusOrdersWithChilds in ('1', 'A')) and (Bx.ID in (select X.ID from Sys$BusOrders2 X where X.Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusOrderSelID)))))
        )
      ) and
      (:In_BusTransactionSelID = '' or
        A2.BusTransaction_ID in
        (
          SELECT Bx.ID FROM BusTransactions Bx WHERE Bx.Hidden = 'N' AND
            ( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :In_BusTransactionSelID)) OR
              ((:InBusTransactionsWithChilds in ('1', 'A')) and (Bx.ID in (select X.ID from Sys$BusTransactions2 X where X.Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :In_BusTransactionSelID)))))
        )
      ) and
      (:InBusProjectSelID = '' or
        A2.BusProject_ID in
        (
          SELECT Bx.ID FROM BusProjects Bx WHERE Bx.Hidden = 'N' AND
            ( (Bx.ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusProjectSelID)) OR
              ((:InBusProjectsWithChilds in ('1', 'A')) and (Bx.ID in (select X.ID from Sys$BusProjects2 X where X.Superior_ID in (select OBJ_ID from SELDAT where SEL_ID = :InBusProjectSelID)))))
        )
      ) 
    INTO
      mAMOUNT, mLOCAL_AMOUNT;
    EXECUTE PROCEDURE init_float :mAMOUNT, 0 RETURNING_VALUES :OUT_AMOUNT;
    EXECUTE PROCEDURE init_float :mLOCAL_AMOUNT, 0 RETURNING_VALUES :OUT_LOCALAMOUNT;
    IF ((OUT_AMOUNT <> 0) OR (OUT_LOCALAMOUNT <> 0)) THEN BEGIN
      /* Pokud je vrácen císelný výsledek a ten ješte je ruzný od nuly, pak
         je nalezena veta urcená ke vrácení z procedury. */
      SELECT
        MAX(out_displayname)
      FROM
        locatebookentry(:mRELDEF, :OUT_DOCUMENT_ID)
      INTO
        OUT_BOOKENTRY_DISPLAYNAME;
      IF (OUT_AMOUNT <> 0) THEN
        OUT_AMOUNT = OUT_AMOUNT - mRoundingAmount;
      IF (OUT_LOCALAMOUNT <> 0) THEN
        OUT_LOCALAMOUNT = OUT_LOCALAMOUNT - mLocalRoundingAmount;
      SUSPEND;
    END
  END
END;

Generated by ABRA Software a.s. 27.10.2021 16:34:15