-- Tamamlanmış hareket belgesinin stoğu belirleyen başlık alanları değiştirilemez (Alımlar, Teslimatlar, İç Transferler ve ortak sekmeleri): -- stok eski konumda kalır, İade Et yeni konumdan düşmeye çalışırdı. Kural ekranın UpdateBeforeCommand'ında değil burada, çünkü durum -- butonları yalnız PendingAction ile aynı güncelleme yolundan yazar. Açıklama, nakliye ve not alanları serbesttir; -- satırların kuralı Transfer Satırları'nın Update/DeleteBeforeCommand'ındadır (50313). CREATE OR REPLACE FUNCTION public."Inv_TR_TransferLock"() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN IF OLD."Status" = 'Done' AND (NEW."Status", NEW."BranchId", NEW."WarehouseId", NEW."OperationTypeId", NEW."OperationKind", NEW."SourceLocationId", NEW."DestinationLocationId", NEW."PartnerId", NEW."IsDeleted") IS DISTINCT FROM (OLD."Status", OLD."BranchId", OLD."WarehouseId", OLD."OperationTypeId", OLD."OperationKind", OLD."SourceLocationId", OLD."DestinationLocationId", OLD."PartnerId", OLD."IsDeleted") THEN RAISE EXCEPTION 'Tamamlanmış belgenin konumu, türü ve durumu değiştirilemez; düzeltme için İade Et kullanın.' USING ERRCODE = 'P0001', DETAIL = '50328'; END IF; RETURN NEW; END; $$; DROP TRIGGER IF EXISTS "Inv_TR_TransferLock" ON public."Inv_T_Transfer"; CREATE TRIGGER "Inv_TR_TransferLock" BEFORE UPDATE ON public."Inv_T_Transfer" FOR EACH ROW EXECUTE FUNCTION public."Inv_TR_TransferLock"();