Procedura-GroupedVATRevCharge

Parametry:

NázevPopisDatový typ
AFirmSelIDChar(10)
ADivisionsSelIDChar(10)
ABusOrdersSelIDChar(10)
ABusTransactionsSelIDChar(10)
ABusProjectsSelIDChar(10)
AVATDateFromFloat(0, 0)
AVATDateToFloat(0, 0)
ADivisionsWithChildsChar(1)
ABusOrdersWithChildsChar(1)
ABusTransactionsWithChildsChar(1)
ABusProjectsWithChildsChar(1)
AVATCountry_IDChar(10)

Návratové hodnoty:

NázevPopisDatový typ
VATIndex_IDChar(10)
TAmountWithoutVATNumeric(15, 2)
TAmountNumeric(15, 2)
ForeignTAmountWithoutVATNumeric(15, 2)
ForeignTAmountNumeric(15, 2)

Závislosti:

NázevPopisTřída
CheckDivisionAndBusXProcedures

Tělo:

BEGIN
  /* radky DRC - z FP, PV a DZP*/
  FOR
    SELECT
      A.VATIndex_ID, A.Division_ID, A.BusOrder_ID, A.BusTransaction_ID, A.BusProject_ID,
      A.LocalBaseAmount,
      A.LocalBaseAmount + A.LocalVATAmount,
      A.BaseAmount,
      A.BaseAmount + A.VATAmount,
      V.AllowanceVATIndex_ID,
      B.VATDate$DATE, B.VATDeductionDate$DATE
    FROM
      ReverseChargeDeclarations2 A
      join ReverseChargeDeclarations B ON A.Parent_ID = B.ID
      join VATIndexes V ON A.VATIndex_ID = V.ID
    WHERE
      ((B.SDocumentType = '04') or (B.SDocumentType = '06')
      or (B.SDocumentType = '64') or (B.SDocumentType = '12')) and
      (
      (B.VATDate$Date >= :AVATDateFrom AND B.VATDate$Date < :AVATDateTo) OR
      (V.AllowanceVATIndex_ID IS NOT NULL AND B.VATDeductionDate$Date >= :AVATDateFrom AND B.VATDeductionDate$Date < :AVATDateTo)
      ) AND
      B.VATCountry_ID=:AVATCountry_ID AND
      ((  :AFirmSelID = '' OR
          (B.Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :AFirmSelID)) OR
          (B.Firm_ID in (SELECT ID FROM Firms WHERE Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :AFirmSelID))) ))
    INTO
      :VATIndex_ID, :mDivision_ID, :mBusOrder_ID, :mBusTransaction_ID, :mBusProject_ID,
      :TAmountWithoutVAT, :TAmount, :ForeignTAmountWithoutVAT, :ForeignTAmount,
      :mAllowanceVATIndex_ID, :mVATDate, :mVATDeductionDate
  DO BEGIN
    EXECUTE PROCEDURE CheckDivisionAndBusX
      :mDivision_ID, :ADivisionsSelID, :ADivisionsWithChilds,
      :mBusOrder_ID, :ABusOrdersSelID, :ABusOrdersWithChilds,
      :mBusTransaction_ID, :ABusTransactionsSelID, :ABusTransactionsWithChilds,
      :mBusProject_ID, :ABusProjectsSelID, :ABusProjectsWithChilds
    RETURNING_VALUES
      :mSuspend;
    IF (mSuspend > 0) THEN BEGIN
      IF (mVATDate >= :AVATDateFrom AND mVATDate < :AVATDateTo) THEN
        SUSPEND;
      IF ((mAllowanceVATIndex_ID IS NOT NULL) AND
        (mVATDeductionDate >= :AVATDateFrom AND mVATDeductionDate < :AVATDateTo))
      THEN BEGIN
        VATIndex_ID = mAllowanceVATIndex_ID;
        SUSPEND;
      END
    END
  END
  /* radky DRC - z DP, VV a DDZP*/
  FOR
    SELECT
      A.VATIndex_ID, A.Division_ID, A.BusOrder_ID, A.BusTransaction_ID, A.BusProject_ID,
      -1 * A.LocalBaseAmount,
      -1 * (A.LocalBaseAmount + A.LocalVATAmount),
      -1 * A.BaseAmount,
      -1 * (A.BaseAmount + A.VATAmount),
      V.AllowanceVATIndex_ID,
      B.VATDate$DATE, B.VATDeductionDate$DATE
    FROM
      ReverseChargeDeclarations2 A
      join ReverseChargeDeclarations B ON A.Parent_ID = B.ID
      join VATIndexes V ON A.VATIndex_ID = V.ID
    WHERE
      ((B.SDocumentType = '61') or (B.SDocumentType = '08') or (B.SDocumentType = '65')) and
      (
      (B.VATDate$Date >= :AVATDateFrom AND B.VATDate$Date < :AVATDateTo) OR
      (V.AllowanceVATIndex_ID IS NOT NULL AND B.VATDeductionDate$Date >= :AVATDateFrom AND B.VATDeductionDate$Date < :AVATDateTo)
      ) AND
      B.VATCountry_ID=:AVATCountry_ID AND
      ((  :AFirmSelID = '' OR
          (B.Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :AFirmSelID)) OR
          (B.Firm_ID in (SELECT ID FROM Firms WHERE Firm_ID in (select OBJ_ID from SELDAT where SEL_ID = :AFirmSelID))) ))
    INTO
      :VATIndex_ID, :mDivision_ID, :mBusOrder_ID, :mBusTransaction_ID, :mBusProject_ID,
      :TAmountWithoutVAT, :TAmount, :ForeignTAmountWithoutVAT, :ForeignTAmount,
      :mAllowanceVATIndex_ID, :mVATDate, :mVATDeductionDate
  DO BEGIN
    EXECUTE PROCEDURE CheckDivisionAndBusX
      :mDivision_ID, :ADivisionsSelID, :ADivisionsWithChilds,
      :mBusOrder_ID, :ABusOrdersSelID, :ABusOrdersWithChilds,
      :mBusTransaction_ID, :ABusTransactionsSelID, :ABusTransactionsWithChilds,
      :mBusProject_ID, :ABusProjectsSelID, :ABusProjectsWithChilds
    RETURNING_VALUES
      :mSuspend;
    IF (mSuspend > 0) THEN BEGIN
      IF (mVATDate >= :AVATDateFrom AND mVATDate < :AVATDateTo) THEN
        SUSPEND;
      IF ((mAllowanceVATIndex_ID IS NOT NULL) AND
        (mVATDeductionDate >= :AVATDateFrom AND mVATDeductionDate < :AVATDateTo))
      THEN BEGIN
        VATIndex_ID = mAllowanceVATIndex_ID;
        SUSPEND;
      END
    END
  END
END;

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