-1

請求書システムに変更を保存して、アカウント システム (サード パーティのアプリ) にエクスポートする必要があります。

私がやろうとしているのは、2 つのトリガーを追加することです。

  1. ON INSERT : 新しい請求書が追加され、別のテーブルで新規としてマークする必要があるため、次の移行で適切な ASCII を生成して会計システムにインポートします。

  2. 更新時: これはもう少し複雑です。これは、請求書が変更されたとき、または請求書が支払われたときに発生する可能性があります。

両方のトリガーが同じプロシージャを呼び出します。

DROP PROCEDURE IF EXISTS `marca_factura_modificada`;
DELIMITER |
CREATE PROCEDURE `marca_factura_modificada`( IN nempresa_in int, IN nfactura_in int, IN cany_in char(2), IN cobrada boolean  )
BEGIN
    DECLARE existeix_factura INT;
    DECLARE abans_afegir_factura INT;
    DECLARE abans_afegir_cobrament INT;

    SELECT NFactura,afegir_factura,afegir_cobrament 
               INTO existeix_factura,abans_afegir_factura,abans_afegir_cobrament 
               FROM factures_modificades 
               WHERE NEmpresa = nempresa_in 
                     AND NFactura = nfactura_in 
                     AND CAny = cany_in 
                     LIMIT 1;
    IF existeix_factura IS NULL THEN
        IF new.DataFactura = CURDATE() THEN
            IF (new.LComptat = 1 OR new.LCreditCobrat = 1) THEN
                INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) 
                    VALUES (nempresa_in, nfactura_in, cany_in,1,1);
            ELSE
                INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) 
                    VALUES (nempresa_in, nfactura_in, cany_in,1,0);
            END IF
        ELSE
            /* Si no és d'avui i no hi ha registre es que ja es va afegir la factura en el seu dia */
            INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) 
            VALUES (nempresa_in, nfactura_in, cany_in,0,1);
        END IF
    ELSE
        IF(cobrada = 0 AND abans_afegir_factura = 0) THEN
            DELETE FROM factures_modificades WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in LIMIT 1;
        ELSEIF (cobrada = 1 AND abans_afegir_cobrament = 0) THEN
            UPDATE factures_modificades SET afegir_cobrament =  1 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
        ELSEIF (cobrada = 0 AND abans_afegir_cobrament = 1) THEN
            UPDATE factures_modificades SET afegir_cobrament = 0 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
        END IF
    END IF
END
|
DELIMITER ;

しかし、これはmysql 5.5では機能しません(IF THEN ELSEコードに問題があると思いますが、どこにあるのかわかりません.

4

1 に答える 1

4

解決しました!

今では動作します。問題は END IF が ; を望んでいました。最終的には。

DROP PROCEDURE IF EXISTS `marca_factura_modificada`;
DELIMITER |
CREATE PROCEDURE `marca_factura_modificada`( IN nempresa_in int, IN nfactura_in int, IN cany_in char(2), IN cobrada boolean,IN DataFactura date  )
BEGIN
    DECLARE existeix_factura INT;
    DECLARE abans_afegir_factura INT;
    DECLARE abans_afegir_cobrament INT;
    SELECT NFactura,afegir_factura,afegir_cobrament 
               INTO existeix_factura,abans_afegir_factura,abans_afegir_cobrament 
               FROM factures_modificades 
               WHERE NEmpresa = nempresa_in 
                     AND NFactura = nfactura_in 
                     AND CAny = cany_in 
                     LIMIT 1;
    IF (existeix_factura) IS NULL THEN 
            IF (DataFactura = CURDATE()) THEN 
                IF (cobrada) THEN INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) VALUES (nempresa_in, nfactura_in, cany_in,1,1);
                ELSE INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament ) VALUES (nempresa_in, nfactura_in, cany_in,1,0);
                END IF;
            ELSE INSERT INTO factures_modificades (NEmpresa, NFactura, CAny,afegir_factura,afegir_cobrament )  VALUES (nempresa_in, nfactura_in, cany_in,0,1);
            END IF;
    ELSE
        IF(cobrada = 0 AND abans_afegir_factura = 0) THEN DELETE FROM factures_modificades WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in LIMIT 1;
        ELSEIF (cobrada = 1 AND abans_afegir_cobrament = 0) THEN UPDATE factures_modificades SET afegir_cobrament =  1 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
        ELSEIF (cobrada = 0 AND abans_afegir_cobrament = 1) THEN UPDATE factures_modificades SET afegir_cobrament = 0 WHERE NEmpresa = nempresa_in AND NFactura = nfactura_in AND CAny = cany_in;
        END IF;
    END IF;
END
|
DELIMITER ;
于 2012-09-01T22:42:46.517 に答える