- Öncelikle triggerları kapatıp satış durdurulur.
ALTER TRIGGER STOKMIKTAR_ANA_STOK_GUNCELLE INACTIVE
ALTER TRIGGER STOKMIKTAR_UST_KONUM_GUNCELLE INACTIVE
ALTER TRIGGER STOKMIKTAR_MIKTAR_GUNCELLE INACTIVE
- Script çalıştırılır
EXECUTE BLOCK
AS
DECLARE VARIABLE XSTOK_K INTEGER;
DECLARE VARIABLE XKONUM_K INTEGER;
DECLARE VARIABLE XUST_KONUM_K INTEGER;
DECLARE VARIABLE XGIRIS NUMERIC(15,4);
DECLARE VARIABLE XCIKIS NUMERIC(15,4);
DECLARE VARIABLE XBEKLEYENGIRIS NUMERIC(15,4);
DECLARE VARIABLE XBEKLEYENCIKIS NUMERIC(15,4);
BEGIN
UPDATE STOKMIKTAR SET
GIRIS = 0,
CIKIS = 0,
BEKLEYENGIRIS = 0,
BEKLEYENCIKIS = 0,
MIKTAR = 0,
BEKLEYENMIKTAR = 0,
TOPLAMGIRIS = 0,
TOPLAMCIKIS = 0,
TOPLAMMIKTAR = 0;
FOR
SELECT
VSBB.STOK_K,
B.KONUM_K,
SUM(CASE WHEN BT.STOKGIRIS = 1 AND B.BELGEDURUM_K = 2 THEN BD.BIRIMMIKTAR ELSE 0 END) AS GIRIS,
SUM(CASE WHEN BT.STOKCIKIS = 1 AND B.BELGEDURUM_K = 2 THEN BD.BIRIMMIKTAR ELSE 0 END) AS CIKIS,
SUM(CASE WHEN BT.STOKGIRIS = 1 AND B.BELGEDURUM_K = 4 THEN BD.BIRIMMIKTAR ELSE 0 END) AS BEK_GIRIS,
SUM(CASE WHEN BT.STOKCIKIS = 1 AND B.BELGEDURUM_K = 4 THEN BD.BIRIMMIKTAR ELSE 0 END) AS BEK_CIKIS
FROM BELGEDETAY BD
JOIN BELGE B ON B.K = BD.BELGE_K
JOIN BELGETUR BT ON BT.K = B.BELGETUR_K
JOIN VSTOKBIRIMBARKOD VSBB ON VSBB.BARKOD=BD.BARKOD
WHERE
COALESCE(B.ETKISIZ, 0) = 0
AND BD.IPTAL = 0
AND COALESCE(B.IRSALIYEDENHAZIRLANMIS, 0) = 0
AND B.BELGEDURUM_K IN (2, 4)
AND (BT.STOKGIRIS = 1 OR BT.STOKCIKIS = 1)
GROUP BY VSBB.STOK_K, B.KONUM_K
INTO :XSTOK_K, :XKONUM_K, :XGIRIS, :XCIKIS, :XBEKLEYENGIRIS, :XBEKLEYENCIKIS
DO
BEGIN
-- Mevcut Konumu Güncelle
IF (EXISTS(SELECT K FROM STOKMIKTAR WHERE STOK_K = :XSTOK_K AND KONUM_K = :XKONUM_K)) THEN
BEGIN
UPDATE STOKMIKTAR SET
GIRIS = :XGIRIS,
CIKIS = :XCIKIS,
MIKTAR = :XGIRIS - :XCIKIS,
TOPLAMGIRIS = :XGIRIS,
TOPLAMCIKIS = :XCIKIS,
TOPLAMMIKTAR = :XGIRIS - :XCIKIS,
BEKLEYENGIRIS = :XBEKLEYENGIRIS,
BEKLEYENCIKIS = :XBEKLEYENCIKIS
WHERE STOK_K = :XSTOK_K AND KONUM_K = :XKONUM_K;
END
ELSE
BEGIN
INSERT INTO STOKMIKTAR (
STOK_K, KONUM_K,
GIRIS, CIKIS, MIKTAR,
TOPLAMGIRIS, TOPLAMCIKIS, TOPLAMMIKTAR,
BEKLEYENGIRIS, BEKLEYENCIKIS, BEKLEYENMIKTAR,
ASGARIMIKTAR, AZAMIMIKTAR, ASGARININALTINDA
)
VALUES (
:XSTOK_K, :XKONUM_K,
:XGIRIS, :XCIKIS, (:XGIRIS - :XCIKIS),
:XGIRIS, :XCIKIS, (:XGIRIS - :XCIKIS),
:XBEKLEYENGIRIS, :XBEKLEYENCIKIS, (:XBEKLEYENGIRIS - :XBEKLEYENCIKIS),
0, 0, 0
);
END
-- Üst Konumları (Firma Dahil) Güncelle
-- Şu anki konumun üstünü bul
SELECT USTK FROM KONUM WHERE K = :XKONUM_K INTO :XUST_KONUM_K;
WHILE (XUST_KONUM_K IS NOT NULL) DO
BEGIN
-- Üst konum (veya Firma) için kayıt var mı?
IF (EXISTS(SELECT K FROM STOKMIKTAR WHERE STOK_K = :XSTOK_K AND KONUM_K = :XUST_KONUM_K)) THEN
BEGIN
-- Varsa üzerine EKLE
UPDATE STOKMIKTAR SET
GIRIS = GIRIS + :XGIRIS,
CIKIS = CIKIS + :XCIKIS,
MIKTAR = MIKTAR + (:XGIRIS - :XCIKIS),
TOPLAMGIRIS = TOPLAMGIRIS + :XGIRIS,
TOPLAMCIKIS = TOPLAMCIKIS + :XCIKIS,
TOPLAMMIKTAR = TOPLAMMIKTAR + (:XGIRIS - :XCIKIS),
BEKLEYENGIRIS = BEKLEYENGIRIS + :XBEKLEYENGIRIS,
BEKLEYENCIKIS = BEKLEYENCIKIS + :XBEKLEYENCIKIS
WHERE STOK_K = :XSTOK_K AND KONUM_K = :XUST_KONUM_K;
END
ELSE
BEGIN
-- Yoksa oluştur
INSERT INTO STOKMIKTAR (
STOK_K, KONUM_K,
GIRIS, CIKIS, MIKTAR,
TOPLAMGIRIS, TOPLAMCIKIS, TOPLAMMIKTAR,
BEKLEYENGIRIS, BEKLEYENCIKIS, BEKLEYENMIKTAR,
ASGARIMIKTAR, AZAMIMIKTAR, ASGARININALTINDA
)
VALUES (
:XSTOK_K, :XUST_KONUM_K,
:XGIRIS, :XCIKIS, (:XGIRIS - :XCIKIS),
:XGIRIS, :XCIKIS, (:XGIRIS - :XCIKIS),
:XBEKLEYENGIRIS, :XBEKLEYENCIKIS, (:XBEKLEYENGIRIS - :XBEKLEYENCIKIS),
0, 0, 0
);
END
IF (XUST_KONUM_K = 1) THEN LEAVE;
-- Bir üstteki konuma geç
SELECT USTK FROM KONUM WHERE K = :XUST_KONUM_K INTO :XUST_KONUM_K;
END
END
END
- Triggerlar aktifleştirilir
ALTER TRIGGER STOKMIKTAR_ANA_STOK_GUNCELLE ACTIVE
ALTER TRIGGER STOKMIKTAR_UST_KONUM_GUNCELLE ACTIVE
ALTER TRIGGER STOKMIKTAR_MIKTAR_GUNCELLE ACTIVE