CREATE FUNCTION [dbo].[_Brk_Eds_Muavin]
(
    @bastar DATETIME,
    @bittar DATETIME
)
RETURNS @table TABLE
(
    tarih DATETIME,
    fatno VARCHAR(50),
    fisno VARCHAR(50),
    aciklama VARCHAR(100),
    carikod VARCHAR(100),
    caritutar FLOAT,
    digerkod VARCHAR(200),
    digertutar FLOAT,
    kdvkod VARCHAR(100),
    kdvtutar FLOAT
)
AS
BEGIN
    DECLARE @fisno VARCHAR(20);
    DECLARE @aykodu SMALLINT;
    DECLARE @subekodu SMALLINT;
    DECLARE @say SMALLINT = 0;
    DECLARE @tarih DATETIME;
    DECLARE @fatno VARCHAR(16);
    DECLARE CRSBORC CURSOR FOR
    SELECT DISTINCT
           FISNO,
           AY_KODU,
           MF.SUBE_KODU,
           MF.TARIH,
           BELGE_NO
    FROM TBLMUHFIS (NOLOCK) MF
        LEFT JOIN TBLMUHFISEK MFE (NOLOCK)
            ON MFE.MUHAY_KODU = MF.AY_KODU
               AND MFE.MUHYIL_KODU = MF.YIL_KODU
               AND MFE.MUHFISNO = MF.FISNO
               AND MFE.MUHSIRA = MF.SIRA
    WHERE FISNO + CAST(AY_KODU AS VARCHAR(5))IN
          (
              SELECT DISTINCT
                     FISNO + CAST(AY_KODU AS VARCHAR(5))
              FROM TBLMUHFIS
              WHERE HES_KOD LIKE '191%'
                    OR HES_KOD LIKE '391%'
          )
          AND MF.TARIH
          BETWEEN @bastar AND @bittar;
    OPEN CRSBORC;
    FETCH NEXT FROM CRSBORC
    INTO @fisno,
         @aykodu,
         @subekodu,
         @tarih,
         @fatno;
    WHILE @@FETCH_STATUS <> -1
    BEGIN
        SET @say =
        (
            SELECT TOP 1
                   COUNT(HES_KOD)
            FROM TBLMUHFIS (NOLOCK)
            WHERE FISNO = @fisno
                  AND AY_KODU = @aykodu
                  AND SUBE_KODU = @subekodu
                  AND HES_KOD LIKE '191%'
        );
        IF @say = 0
        BEGIN
            INSERT INTO @table
            (
                kdvkod,
                kdvtutar,
                fisno,
                tarih,
                fatno,
                aciklama
            )
            SELECT
                (
                    SELECT dbo.[_Brk_Eds_Muavin_Kod_Birlestir_Kdv](FISNO, AY_KODU, SUBE_KODU, '391')
                ),
                SUM(TUTAR),
                @fisno,
                @tarih,
                @fatno,
                (
                    SELECT TOP 1
                           dbo.TRK(ACIKLAMA) AS ACIKLAMA
                    FROM TBLMUHFIS (NOLOCK)
                    WHERE FISNO = @fisno
                          AND AY_KODU = @aykodu
                          AND SUBE_KODU = @subekodu
                          AND LEFT(HES_KOD, 3) = '391'
                )
            FROM TBLMUHFIS (NOLOCK)
            WHERE FISNO = @fisno
                  AND AY_KODU = @aykodu
                  AND SUBE_KODU = @subekodu
                  AND LEFT(HES_KOD, 3) = '391'
            GROUP BY FISNO,
                     AY_KODU,
                     SUBE_KODU,
                     LEFT(HES_KOD, 3);

            UPDATE @table
            SET digerkod =
                (
                    SELECT dbo.[_Brk_Eds_Muavin_Kod_Birlestir](@fisno, @aykodu, @subekodu, '2')
                ),
                digertutar =
                (
                    SELECT SUM(TUTAR)
                    FROM TBLMUHFIS (NOLOCK)
                    WHERE FISNO = @fisno
                          AND AY_KODU = @aykodu
                          AND SUBE_KODU = @subekodu
                          AND BA = 2
                          AND LEFT(HES_KOD, 3) <> '391'
                    GROUP BY FISNO,
                             AY_KODU,
                             SUBE_KODU
                )
            FROM @table
            WHERE fisno = @fisno
                  AND tarih = @tarih;

            UPDATE @table
            SET carikod =
                (
                    SELECT dbo.[_Brk_Eds_Muavin_Kod_Birlestir](@fisno, @aykodu, @subekodu, '1')
                ),
                caritutar =
                (
                    SELECT SUM(TUTAR)
                    FROM TBLMUHFIS (NOLOCK)
                    WHERE FISNO = @fisno
                          AND AY_KODU = @aykodu
                          AND SUBE_KODU = @subekodu
                          AND BA = 1
                          AND LEFT(HES_KOD, 3) <> '391'
                    GROUP BY FISNO,
                             AY_KODU,
                             SUBE_KODU
                )
            FROM @table
            WHERE fisno = @fisno
                  AND tarih = @tarih;
        END;
        IF @say > 0
        BEGIN
            INSERT INTO @table
            (
                kdvkod,
                kdvtutar,
                fisno,
                tarih,
                fatno,
                aciklama
            )
            SELECT
                (
                    SELECT dbo.[_Brk_Eds_Muavin_Kod_Birlestir_Kdv](FISNO, AY_KODU, SUBE_KODU, '191')
                ),
                SUM(TUTAR),
                @fisno,
                @tarih,
                @fatno,
                (
                    SELECT TOP 1
                           dbo.TRK(ACIKLAMA) AS ACIKLAMA
                    FROM TBLMUHFIS (NOLOCK)
                    WHERE FISNO = @fisno
                          AND AY_KODU = @aykodu
                          AND SUBE_KODU = @subekodu
                          AND LEFT(HES_KOD, 3) = '191'
                )
            FROM TBLMUHFIS (NOLOCK)
            WHERE FISNO = @fisno
                  AND AY_KODU = @aykodu
                  AND SUBE_KODU = @subekodu
                  AND LEFT(HES_KOD, 3) = '191'
            GROUP BY FISNO,
                     AY_KODU,
                     SUBE_KODU,
                     LEFT(HES_KOD, 3);
            UPDATE @table
            SET digerkod =
                (
                    SELECT dbo.[_Brk_Eds_Muavin_Kod_Birlestir](@fisno, @aykodu, @subekodu, '1')
                ),
                digertutar =
                (
                    SELECT SUM(TUTAR)
                    FROM TBLMUHFIS (NOLOCK)
                    WHERE FISNO = @fisno
                          AND AY_KODU = @aykodu
                          AND SUBE_KODU = @subekodu
                          AND BA = 1
                          AND LEFT(HES_KOD, 3) <> '191'
                    GROUP BY FISNO,
                             AY_KODU,
                             SUBE_KODU
                )
            FROM @table
            WHERE fisno = @fisno
                  AND tarih = @tarih;

            UPDATE @table
            SET carikod =
                (
                    SELECT dbo.[_Brk_Eds_Muavin_Kod_Birlestir](@fisno, @aykodu, @subekodu, '2')
                ),
                caritutar =
                (
                    SELECT SUM(TUTAR)
                    FROM TBLMUHFIS (NOLOCK)
                    WHERE FISNO = @fisno
                          AND AY_KODU = @aykodu
                          AND SUBE_KODU = @subekodu
                          AND BA = 2
                          AND LEFT(HES_KOD, 3) <> '191'
                    GROUP BY FISNO,
                             AY_KODU,
                             SUBE_KODU
                )
            FROM @table
            WHERE fisno = @fisno
                  AND tarih = @tarih;
        END;
        FETCH NEXT FROM CRSBORC
        INTO @fisno,
             @aykodu,
             @subekodu,
             @tarih,
             @fatno;
    END;
    CLOSE CRSBORC;
    DEALLOCATE CRSBORC;
    RETURN;
END;