Procedura-GetFirstPeriodByDates

Popis:
Vrátí první možné období dle zadaných datumů. Zohledňuje první možné období kvůli pokladnám (které začínají od určitého období)

Parametry:

NázevPopisDatový typ
ADateFromFloat(0, 0)
ADateToFloat(0, 0)
IN_FIRST_POSSIBLE_PERIODChar(10)

Návratové hodnoty:

NázevPopisDatový typ
RPeriod_IDChar(10)

Tělo:

BEGIN
  /* zjistime zacatek a konec casoveho intervalu vsech zapsanych period */
  SELECT
    MIN(DateFrom$Date), MAX(DateTo$Date)
  FROM
    Periods
  INTO
    mMin, mMax;
/* Plati ze kdyz je vstupni "Datum od" az za rozsahem intervalu vratime posledni obdobi */
  BOOL = 0;
  IF (ADateFrom > mMax) THEN BEGIN
    /* datum je az za vsemi definovanymi obdobimy, vrati se posledni obdobi */
    SELECT
      id
    FROM
      Periods
    WHERE
      DateTo$Date = :mMax
    INTO
      RPeriod_ID;
    BOOL = 1;
  END
  ELSE BEGIN
    IF (ADateTo > mMin) THEN BEGIN
      /* zadany interval od..do lezi v definvanych obdobich. */
      SELECT
        ID
      FROM
        Periods
      WHERE
        DateFrom$DATE = (SELECT MIN(DateFrom$DATE) FROM Periods WHERE DateTo$DATE > :ADateFrom)
      INTO
        RPeriod_ID;
      BOOL = 1;
    END
  END
/* Pokud je zadáno minimální možné období, tak to musíme ověřit a případně nastavit */
  IF ( (IN_FIRST_POSSIBLE_PERIOD IS NOT NULL) AND
    (IN_FIRST_POSSIBLE_PERIOD <> '') AND
    (IN_FIRST_POSSIBLE_PERIOD <> '0000000000') AND
    (BOOL <> 0) )
  THEN BEGIN
    /* Bylo zadáno minimální počáteční období */
    /* Pořadové číslo vypočítaného období */
    SELECT sequencenumber FROM periods WHERE id = :RPeriod_ID INTO mSEQUENCE_NUMBER;
    /* Pořadové číslo předaného období */
    SELECT sequencenumber, datefrom$date
    FROM periods
    WHERE id = :IN_FIRST_POSSIBLE_PERIOD
    INTO mSEQUENCE_NUMBER2, mMIN;
    IF (ADateTo <= mMIN) THEN BEGIN
    /* */
      BOOL = 0;
    END
    IF (mSEQUENCE_NUMBER < mSEQUENCE_NUMBER2) THEN BEGIN
      /* Vrácené období bude předané období */
      RPeriod_ID = IN_FIRST_POSSIBLE_PERIOD;
    END
  END
/* Na závěr provést SUSPEND */
  IF (BOOL <> 0) THEN
    SUSPEND;
END;

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