/* 20110919 labels no imprimia si cantidad 1 */
SET TERM ^ ;

CREATE OR ALTER procedure IMPR_ARTICULO (
    CODINI varchar(20),
    CODFIN varchar(20),
    CANT integer)
returns (
    ARTICULO varchar(15),
    DESCRIPCION varchar(60),
    PRECIO numeric(18,2),
    CODGRP varchar(2),
    NOMGRP varchar(30),
    COSUBG varchar(3),
    NOMSUBG varchar(30),
    CODMARC varchar(3),
    NOMMARC varchar(30),
    PESO numeric(18,4),
    PUM numeric(18,2),
    LISTA integer,
    NOMLISTA varchar(30),
    FECHA date)
AS
declare variable I INTEGER;
begin
EXECUTE PROCEDURE lee_configuracion('FACTURACION', 'FACTURAS', 'CODIGO DE LA LISTA DE PRECIOS A MOSTRAR EN ARTICULOS') returning_values (LISTA);
for select a.arti_cod, arti_des, a.grup_cod, a.subg_cod, a.marc_cod, arti_peso, p.lipr_cod, p.prar_fijo, grup_nom, lipr_nom
    from articulo a, precios_articulo p, grupo g, lista_precios l
    where a.arti_cod = p.arti_cod and a.grup_cod = g.grup_cod and l.lipr_cod = p.lipr_cod AND a.arti_cod >= :codini AND a.arti_cod <= :codfin AND P.lipr_cod = :LISTA
    into :articulo, :descripcion, :codgrp, :cosubg, :codmarc, :peso, :lista, :precio, :nomgrp, :nomlista
    do
    begin
    if (cosubg <> '') then
        select subg_nom from subgrupo where grup_cod = :codgrp and subg_cod = :cosubg into :nomsubg;
    if (codmarc <> '') then
        select marc_nom from marcas where marc_cod = :codmarc into :nommarc;
    if ((PESO <> 0) AND (PESO IS NOT NULL)) then
        PUM = PRECIO / PESO;
    ELSE
        PUM = 0;
    SELECT MAX(AUDI_FECHA) FROM AUDITORIA WHERE TIDO_COD = 126 AND AUDI_COD = :articulo AND AUDI_OPER <> 'D' INTO :fecha;
    if (cant = 0) then
        execute procedure saldo_total_inventario(:articulo, cast('now' as DATE)) returning_values (CANT);
    I = 0;
    WHILE (I < CANT) DO
        BEGIN
        SUSPEND;
        I = I + 1;
        END
    end
end
^

SET TERM ; ^


/* 20110922 */
/* dto x item = total no debe contabilizarse ya que esta descontado del subtotal */

SET TERM ^ ;

CREATE OR ALTER procedure CONTABIL_FACTURA (
    IDDOC integer,
    IDINTER integer)
returns (
    ERROR integer,
    VER char(1),
    IDC integer)
AS
declare variable pref varchar(4);
declare variable num varchar(6);
declare variable numero varchar(10);
declare variable fecaux date;
declare variable fecha char(8);
declare variable conc varchar(60);
declare variable venceaux date;
declare variable vence char(8);
declare variable vrdto numeric(18,2);
declare variable vradic numeric(18,2);
declare variable vrsubt numeric(18,2);
declare variable vriva numeric(18,2);
declare variable prtfte numeric(9,2);
declare variable vrrtfte numeric(18,2);
declare variable vrrtiva numeric(18,2);
declare variable prtica numeric(9,2);
declare variable vrrtica numeric(18,2);
declare variable vrtotal numeric(18,2);
declare variable vrextra numeric(18,2);
declare variable tipocomp varchar(3);
declare variable prefcont varchar(4);
declare variable ventas char(1);
declare variable ctaventas varchar(20);
declare variable iva char(1);
declare variable ctaiva varchar(20);
declare variable ctadtoiva varchar(20);
declare variable consumo char(1);
declare variable ctaconsumo varchar(20);
declare variable cartera char(1);
declare variable ctacartera varchar(20);
declare variable rtfte char(1);
declare variable ctartfte varchar(20);
declare variable rtiva char(1);
declare variable ctartiva varchar(20);
declare variable rtica char(1);
declare variable ctartica varchar(20);
declare variable inven char(1);
declare variable ctainven varchar(20);
declare variable costos char(1);
declare variable ctacostos varchar(20);
declare variable ctadto varchar(20);
declare variable ctaadic varchar(20);
declare variable ctaextra varchar(20);
declare variable existe char(1);
declare variable cuenta varchar(20);
declare variable monto numeric(18,2);
declare variable tipocuen char(1);
declare variable nit varchar(20);
declare variable nombre varchar(60);
declare variable proy varchar(4);
declare variable centro varchar(4);
declare variable porc numeric(5,2);
declare variable debito numeric(18,2);
declare variable credito numeric(18,2);
declare variable nroi integer;
declare variable art varchar(15);
declare variable impinc char(1);
declare variable imptos numeric(18,2);
declare variable suma numeric(18,2);
declare variable tctaclien varchar(20);
declare variable tctaventa varchar(20);
declare variable tctartfte varchar(20);
declare variable tctartiva varchar(20);
declare variable tctartica varchar(20);
declare variable ctadic varchar(20);
declare variable baseadic varchar(20);
declare variable porcadic numeric(5,2);
declare variable valoradic numeric(18,2);
declare variable dbadic char(1);
declare variable ptovta integer;
declare variable anulado char(1);
declare variable dig integer;
declare variable mercancia numeric(18,2);
declare variable fomento varchar(2);
declare variable vrconsumo numeric(18,2);
declare variable factor double precision;
declare variable cent char(1);
declare variable AUTORET VARCHAR(10);
declare variable FAUTORET DATE;
declare variable DEC2799 char(2);
declare variable ERRORC INTEGER;
declare variable DTOXIT varchar(2);
BEGIN
EXECUTE PROCEDURE lee_configuracion ('FACTURACION', 'FACTURAS', 'DESCONTAR IVA DE PRODUCTOS DECRETO 2799') returning_values (:DEC2799);
EXECUTE PROCEDURE LEE_CONFIGURACION('COMPRAS', 'FACTURAS', 'USAR IMPOCONSUMO COMO PORCENTAJE DE FOMENTO') returning_values (FOMENTO);
EXECUTE PROCEDURE LEE_CONFIGURACION('CARTERA', 'SALDOS', 'FECHA AUTORETENEDOR NO DESCONTAR RETENCIONES DEL SALDO PERO SI CONTABILIZARLAS') returning_values (AUTORET);
if (AUTORET <> '') then
    FAUTORET = CAST(AUTORET AS DATE);
else
    FAUTORET = '9999/12/31';
/* BUSQUE LA INTERFACE */
EXISTE = 'N';
SELECT 'S', TICO_COD, PRCO_PRE, INVE_VENTAS, INVE_IVA, INVE_CONSUMO, INVE_CARTERA, INVE_RTFTE, INVE_RTIVA, INVE_RTICA, INVE_COSTO, INVE_INVEN, INVE_CTAVENTAS, INVE_CTAIVA, INVE_CTACONSUMO, INVE_CTADTO, INVE_CTAADIC, INVE_CTAEXTRA, INVE_CTACARTERA, INVE_CTARTFTE, INVE_CTARTIVA, INVE_CTARTICA, INVE_CTAINVEN, INVE_CTACOSTOS, INVE_CONFIRMAR, INVE_CENTRO
    FROM INTERFAZ_VENTAS
    WHERE INVE_ID = :IDINTER
    INTO :EXISTE, :TIPOCOMP, :PREFCONT, :VENTAS, :IVA, :CONSUMO, :CARTERA, :RTFTE, :RTIVA, :RTICA, :COSTOS, :INVEN, :CTAVENTAS, :CTAIVA, :CTACONSUMO, :CTADTO, :CTAADIC, :CTAEXTRA, :CTACARTERA, :CTARTFTE, :CTARTIVA, :CTARTICA, :CTAINVEN, :CTACOSTOS, :VER, :CENT;
if (EXISTE = 'S') then
  BEGIN
    /* BORRE CUALQUEIR CONTABILIZACION PREVIA */
    DELETE FROM CONTABILIZACION WHERE CNTB_TIPOREF = 31 AND CNTB_IDREF = :IDDOC;

  /* TRAIGA EL ENCABEZADO DE LA FACTURA */
  SELECT PREF_PRE, FACT_NUMERO, FACT_FECHA, F.TERC_NIT, FACT_IVAINC, PTVT_ID, FACT_VENCE, FACT_DTOMONTO, FACT_ADICIONAL, FACT_IVAMONTO, FACT_EXTRA, FACT_TOTAL, FACT_RTFTEPOR, FACT_RTFTEMONTO, FACT_RTIVAPOR, FACT_RTIVAMONTO, FACT_RTICAPOR, FACT_RTICAMONTO, FACT_NOMCLIENTE, TERC_CTARTFTE, TERC_CTARTIVA, TERC_CTARTICA, TERC_CTAVENTA, TERC_CTACLIENTE, FACT_ANULADO
        FROM FACTURAS F, TERCEROS T
        WHERE FACT_ID = :IDDOC AND F.TERC_NIT = T.TERC_NIT
        INTO :PREF, :NUM, :FECAUX, :NIT, :IMPINC, :PTOVTA, :VENCEAUX, :VRDTO, :VRADIC, :VRIVA, :VREXTRA, :VRTOTAL, :PRTFTE, :VRRTFTE, :PORC, :VRRTIVA, :PRTICA, :VRRTICA, :NOMBRE, TCTARTFTE, TCTARTIVA, TCTARTICA, TCTAVENTA, TCTACLIEN, ANULADO;
  if (ANULADO = 'N') then
    BEGIN
    /* BUSQUE EL CENTRO DEL PUNTO, LA BODEGA, O EL PREFIJO  */
    IF (CENT = 'B') THEN
        SELECT B.BODE_CENTRO, B.BODE_PROY FROM BODEGA B, FACTURAS F
            WHERE B.BODE_COD = F.BODE_COD AND F.FACT_ID = :IDDOC INTO :CENTRO, :PROY;
    IF (CENT = 'V') THEN
        SELECT V.CENT_COD, V.PROY_COD FROM VENDEDORES V, FACTURAS F
            WHERE V.VEND_COD = F.VEND_COD AND F.FACT_ID = :IDDOC INTO :CENTRO, :PROY;
    IF (CENT = 'P') THEN
        SELECT P.PREF_CENTRO,P.PREF_PROY  FROM PREFIJOS P, FACTURAS F
            WHERE P.PREF_PRE = F.PREF_PRE AND F.FACT_ID = :IDDOC AND P.TIDO_COD = 31 INTO :CENTRO, :PROY;
    NUMERO = PREF || NUM;
    SELECT SUM (FADE_CONSUMO) FROM FACTURAS_DETALLE WHERE FACT_ID = :IDDOC INTO MERCANCIA;
    VRSUBT = VRTOTAL - VREXTRA - VRIVA - MERCANCIA; /* BASE DE RETEFTE Y RETEICA */
    EXECUTE PROCEDURE lee_configuracion ('FACTURACION', 'FACTURAS', 'DESCUENTO PIE FACTURA IGUAL A SUMA DE DESCUENTOS POR ITEM') returning_values (:DTOXIT);
    if (DTOXIT = 'SI') then
        VRDTO = 0;
    MERCANCIA = VRSUBT - VRADIC + VRDTO;
    EXECUTE PROCEDURE FECHA_A_CONTA(:FECAUX) returning_values (:FECHA);
    EXECUTE PROCEDURE FECHA_A_CONTA(:VENCEAUX) returning_values (:VENCE);
    /* REGISTRE EL ENCABEZADO CONTABLE */
    IDC = GEN_ID(ID_CONTABILIZA, 1);
    if (STRLEN(NOMBRE)> 43 ) then
      CONC = 'FV No.' || NUMERO || '-' || SUBSTR(NOMBRE,1,43);
    ELSE
      CONC = 'FV No.' || NUMERO || '-' || NOMBRE;
    INSERT INTO CONTABILIZACION (CNTB_ID, CNTB_TIPOCOMP, CNTB_PREFCNT, CNTB_NUMERO, CNTB_FECHA, CNTB_CONCEPTO, CNTB_REF, CNTB_TIPOREF, CNTB_IDREF, CNTB_PREFREF, CNTB_NUMREF, CNTB_PROCESADO)
        VALUES (:IDC, :TIPOCOMP, :PREFCONT, :NUM, :FECHA, :CONC, '', 31, :IDDOC, :PREF, :NUM, 'N');
    NROI = 0;
    SUMA = 0;
    ERROR = 0;
    /* SI NO HAY CUENTA DE DESCUENTO NI ADICIONAL CALCULE UN FACTOR PARA LAS VENTAS Y EL IVA */
    if (MERCANCIA <> 0) then
        FACTOR = CAST(VRSUBT AS DOUBLE PRECISION) / CAST(MERCANCIA AS DOUBLE PRECISION);
    ELSE
        FACTOR = 1;
    /* TRAIGA EL NUMERO DE DIGITOS PARA EL REDONDEO */
    SELECT CAST(CONF_VALOR AS INTEGER) FROM CONFIGURACION WHERE CONF_MODULO = 'FACTURACION' AND
        CONF_CATEGORIA = 'GENERAL' AND CONF_PROPIEDAD = 'REDONDEO AL MULTIPLO DE DIEZ EN TOTALES' INTO :DIG;
    /* CUENTAS DE VENTAS */
    if (VENTAS = 'A') then
        BEGIN
        FOR SELECT MAX(COAR_CTAVNT), SUM(FADE_TOTAL-FADE_IVAMONTO-FADE_CONSUMO), SUM(FADE_IVAMONTO), SUM(FADE_CONSUMO)
            FROM ARTICULO A, CONTABIL_ARTICULO C, FACTURAS_DETALLE F
            WHERE F.FACT_ID = :IDDOC AND F.ARTI_COD = A.ARTI_COD AND A.ARTI_COD = C.ARTI_COD
            GROUP BY COAR_CTAVNT
            INTO :CTAVENTAS, :MONTO, :IMPTOS, :VRCONSUMO
            DO
            BEGIN
            if (FOMENTO = 'SI') then
                MONTO = MONTO + VRCONSUMO;
            if ((CTADTO IS NULL) OR (CTADTO = '')) then
                MONTO = MONTO * FACTOR;
            execute procedure redondee(MONTO, DIG) returning_values (MONTO);
            if (MONTO <> 0) then
                BEGIN
                CUENTA = NULL;
                SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                    WHERE CUEN_COD = :CTAVENTAS INTO :CUENTA, :TIPOCUEN;
                if (CUENTA IS NULL) then
                    begin
                    EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAVENTAS, 2);
                    CUENTA = CTAVENTAS;
                    TIPOCUEN = 'N';
                    ERROR = ERROR + 1;
                    end
                if (TIPOCUEN = 'C') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                    NROI = NROI + 1;
                    SUMA = SUMA - MONTO;
                    END
                if (TIPOCUEN = 'N') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                    NROI = NROI + 1;
                    SUMA = SUMA - MONTO;
                    END
                END /* MONTO <> 0 */
            END /* FOR */
        END /* VENTAS X ARTICULO */
     IF ((VENTAS = 'C') OR (VENTAS = 'K')) THEN
        BEGIN
        IF (VENTAS = 'C') THEN
            CTAVENTAS = TCTAVENTA;
        SELECT SUM(FADE_TOTAL-FADE_IVAMONTO-FADE_CONSUMO), SUM(FADE_IVAMONTO), SUM (FADE_CONSUMO)
            FROM FACTURAS_DETALLE F
            WHERE F.FACT_ID = :IDDOC 
            INTO :MONTO, :IMPTOS, :VRCONSUMO;
        if (FOMENTO = 'SI') then
            MONTO = MONTO + VRCONSUMO;
        if ((CTADTO IS NULL) OR (CTADTO = '')) then
            MONTO = MONTO * FACTOR;
        execute procedure redondee(MONTO, DIG) returning_values (MONTO);
        if (MONTO <> 0) then
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTAVENTAS INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAVENTAS, 2);
                CUENTA = CTAVENTAS;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - MONTO;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                NROI = NROI + 1;
                SUMA = SUMA - MONTO;
                END
            END /* MONTO <> 0 */
        END /* VENTAS DE CLIENTE O CONSTANTE */
    /* EL IVA EN VENTAS */
    if (IVA = 'A') then
        BEGIN
        FOR SELECT MAX(COAR_CTAIVAV), SUM(FADE_IVAMONTO), SUM(FADE_TOTAL-FADE_IVAMONTO-FADE_CONSUMO), sum(FADE_CONSUMO)
            FROM ARTICULO A, CONTABIL_ARTICULO C, FACTURAS_DETALLE F
            WHERE F.FACT_ID = :IDDOC AND F.ARTI_COD = A.ARTI_COD AND A.ARTI_COD = C.ARTI_COD
            GROUP BY COAR_CTAIVAV
            INTO :CTAIVA, :IMPTOS, :MONTO, :VALORADIC
        DO
            BEGIN
            if (FOMENTO = 'SI') then
                MONTO = MONTO + VALORADIC;
            MONTO = MONTO * -1;
            MONTO = MONTO * FACTOR;
            IMPTOS = IMPTOS * FACTOR;
            execute procedure redondee(IMPTOS, DIG) returning_values (IMPTOS);
            execute procedure redondee(MONTO, DIG) returning_values (MONTO);
            if (IMPTOS <> 0) then
                BEGIN
                CUENTA = NULL;
                SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                    WHERE CUEN_COD = :CTAIVA INTO :CUENTA, :TIPOCUEN;
                if (CUENTA IS NULL) then
                    begin
                    EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAIVA, 2);
                    CUENTA = CTAIVA;
                    TIPOCUEN = 'N';
                    ERROR = ERROR + 1;
                    end
                if (TIPOCUEN = 'C') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :IMPTOS, :MONTO, ABS(:IMPTOS*100/:MONTO), :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                    NROI = NROI + 1;
                    SUMA = SUMA - IMPTOS;
                    END
                if (TIPOCUEN = 'N') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :IMPTOS, :MONTO, ABS(:IMPTOS*100/:MONTO), :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                    NROI = NROI + 1;
                    SUMA = SUMA - IMPTOS;
                    END
                END   /* IMPTOS <> 0 */
            END /* FOR */
        if (DEC2799 = 'SI') then
            BEGIN
            FOR SELECT MAX(COAR_CTAIVADEC), SUM(FADE_IVAMONTO), SUM(FADE_TOTAL-FADE_IVAMONTO-FADE_CONSUMO), sum(FADE_CONSUMO)
                FROM ARTICULO A, CONTABIL_ARTICULO C, FACTURAS_DETALLE F
                WHERE F.FACT_ID = :IDDOC AND F.ARTI_COD = A.ARTI_COD AND A.ARTI_COD = C.ARTI_COD
                    AND A.arti_dec2799 = 'S'
                GROUP BY COAR_CTAIVADEC
                INTO :CTADTOIVA, :IMPTOS, :MONTO, :VALORADIC
                DO
                BEGIN
                if (FOMENTO = 'SI') then
                    MONTO = MONTO + VALORADIC;
                MONTO = MONTO * -1;
                MONTO = MONTO * FACTOR;
                IMPTOS = IMPTOS * FACTOR;
                execute procedure redondee(IMPTOS, DIG) returning_values (IMPTOS);
                execute procedure redondee(MONTO, DIG) returning_values (MONTO);
                if (IMPTOS <> 0) then
                    BEGIN
                    EXECUTE PROCEDURE CUENTA_INTERFAZ(31, :IDDOC, :CTADTOIVA, 'S') returning_values (CUENTA, TIPOCUEN, ERRORC);
                    if (ERRORC <> 0) then
                        ERROR = ERROR + 1;
                    if (TIPOCUEN = 'N') then
                        BEGIN
                        INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                            VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :IMPTOS, 0, :MONTO, ABS(:IMPTOS*100/:MONTO), :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                        NROI = NROI + 1;
                        SUMA = SUMA + IMPTOS;
                        END
                    END   /* IMPTOS <> 0 */
                END
            END
        END /* IVA X ARTICULO */
    if (IVA = 'K') then /* IVA EN CTA CONSTANTE */
        BEGIN
        SELECT SUM(FADE_IVAMONTO), SUM(FADE_TOTAL-FADE_IVAMONTO-FADE_CONSUMO), SUM(FADE_CONSUMO)
            FROM FACTURAS_DETALLE F
            WHERE F.FACT_ID = :IDDOC and FADE_IVAMONTO <> 0
            INTO :IMPTOS, :MONTO, :valoradic;
        if (FOMENTO = 'S') then
            MONTO = MONTO + VALORADIC;
        MONTO = MONTO * -1;
        MONTO = MONTO * FACTOR;
        IMPTOS = IMPTOS * FACTOR;
        execute procedure redondee(MONTO, DIG) returning_values (MONTO);
        execute procedure redondee(IMPTOS, DIG) returning_values (IMPTOS);
        if (IMPTOS <> 0) then
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTAIVA INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAIVA, 2);
                CUENTA = CTAIVA;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTAIVA, :CONC, '', 0, :IMPTOS, :MONTO, ABS(:IMPTOS*100/:MONTO), :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - IMPTOS;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTAIVA, :CONC, '', 0, :IMPTOS, :MONTO, ABS(:IMPTOS*100/:MONTO), :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                NROI = NROI + 1;
                SUMA = SUMA - IMPTOS;
                END
            END /* IMPTOS <> 0 */
        if (DEC2799 = 'SI') then
            BEGIN
            SELECT SUM(FADE_IVAMONTO), SUM(FADE_TOTAL-FADE_IVAMONTO-FADE_CONSUMO), SUM(FADE_CONSUMO)
                FROM FACTURAS_DETALLE F, ARTICULO A
                WHERE F.FACT_ID = :IDDOC and FADE_IVAMONTO <> 0 AND F.arti_cod = A.arti_cod AND A.arti_dec2799 = 'S'
                INTO :IMPTOS, :MONTO, :valoradic;
            if (FOMENTO = 'SI') then
                MONTO = MONTO + VALORADIC;
            MONTO = MONTO * -1;
            MONTO = MONTO * FACTOR;
            IMPTOS = IMPTOS * FACTOR;
            execute procedure redondee(IMPTOS, DIG) returning_values (IMPTOS);
            execute procedure redondee(MONTO, DIG) returning_values (MONTO);
            if (IMPTOS <> 0) then
                BEGIN
                EXECUTE PROCEDURE CUENTA_INTERFAZ(31, :IDDOC, :CTADTOIVA, 'S') returning_values (CUENTA, TIPOCUEN, ERRORC);
                if (ERRORC <> 0) then
                    ERROR = ERROR + 1;
                if (TIPOCUEN = 'N') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :IMPTOS, 0, :MONTO, ABS(:IMPTOS*100/:MONTO), :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                    NROI = NROI + 1;
                    SUMA = SUMA + IMPTOS;
                    END
                END   /* IMPTOS <> 0 */
            END
        END /* IVA EN CTA CONSTANTE */
    /* EL IMPOCONSUMO */
    if (CONSUMO = 'A') then
        BEGIN
        FOR SELECT MAX(COAR_CTACONS), SUM(FADE_CONSUMO)
            FROM ARTICULO A, CONTABIL_ARTICULO C, FACTURAS_DETALLE F
            WHERE F.FACT_ID = :IDDOC AND F.ARTI_COD = A.ARTI_COD AND A.ARTI_COD = C.ARTI_COD
            GROUP BY COAR_CTACONS
            INTO :CTACONSUMO, :IMPTOS
        DO
            BEGIN
            execute procedure redondee(IMPTOS, DIG) returning_values (IMPTOS);
            if (IMPTOS <> 0) then
                BEGIN
                CUENTA = NULL;
                SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                    WHERE CUEN_COD = :CTACONSUMO INTO :CUENTA, :TIPOCUEN;
                if (CUENTA IS NULL) then
                    begin
                    EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTACONSUMO, 2);
                    CUENTA = CTACONSUMO;
                    TIPOCUEN = 'N';
                    ERROR = ERROR + 1;
                    end
                if (TIPOCUEN = 'C') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :IMPTOS, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                    NROI = NROI + 1;
                    SUMA = SUMA - IMPTOS;
                    END
                if (TIPOCUEN = 'N') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :IMPTOS, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                    NROI = NROI + 1;
                    SUMA = SUMA - CREDITO;
                    END
                END /* IMPTOS <> 0 */
            END /* FOR */
        END /* CONSUMO X ARTICULO */
    if (CONSUMO = 'K') then /* CONSUMO EN CTA CONSTANTE */
        BEGIN
        SELECT SUM(FADE_CONSUMO)
            FROM FACTURAS_DETALLE F
            WHERE F.FACT_ID = :IDDOC 
            INTO :IMPTOS;
        execute procedure redondee(IMPTOS, DIG) returning_values (IMPTOS);
        if (IMPTOS <> 0) then
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTACONSUMO INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTACONSUMO, 2);
                CUENTA = CTACONSUMO;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTACONSUMO, :CONC, '', 0, :IMPTOS, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - IMPTOS;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTACONSUMO, :CONC, '', 0, :IMPTOS, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                NROI = NROI + 1;
                SUMA = SUMA - IMPTOS;
                END
            END /* IMPTOS <> 0 */
        END /* CONSUMO EN CTA CONSTANTE */
    /* DESCUENTO */
    if ((CTADTO IS NOT NULL) AND (CTADTO <> '')) then
        BEGIN
        execute procedure redondee(VRDTO, DIG) returning_values (VRDTO);
        if (VRDTO <> 0) then
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTADTO INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTADTO, 2);
                CUENTA = CTADTO;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'I') then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRDTO, 0, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA + VRDTO;
                END
            if (TIPOCUEN = 'N') then
                    BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRDTO, 0, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA + VRDTO;
                END
            END
        END /* DESCUENTO */
    /* VALOR ADIC */
    if ((CTAADIC IS NOT NULL) AND (CTAADIC <> '')) then
        BEGIN
        execute procedure redondee(VRADIC, DIG) returning_values (VRADIC);
        if (VRADIC <> 0) THEN
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTAADIC INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAADIC, 2);
                CUENTA = CTAADIC;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'I') then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :VRADIC, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - VRADIC;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :VRADIC, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - VRADIC;
                END
            END
        END /* VR. ADIC */
    /* VALOR EXTRA */
    if ((CTAEXTRA IS NOT NULL) AND (CTAEXTRA <> '')) THEN
        BEGIN
        execute procedure redondee(VREXTRA, DIG) returning_values (VREXTRA);
        if (VREXTRA <> 0) THEN
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTAEXTRA INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAEXTRA, 2);
                CUENTA = CTAEXTRA;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'I') then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :VREXTRA, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - VREXTRA;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :VREXTRA, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - VREXTRA;
                END
            END
        END /* VR. EXTRA */
    /* DESCUENTE EL IMPOCONSUMO */
    SELECT SUM(FADE_CONSUMO)
        FROM FACTURAS_DETALLE F WHERE F.FACT_ID = :IDDOC INTO :IMPTOS;
    vrsubt = vrsubt - IMPTOS;
    /* RETENCION FUENTE */
    if ((RTFTE = 'C') or (RTFTE = 'K')) then
      BEGIN
      execute procedure redondee(VRRTFTE, DIG) returning_values (VRRTFTE);
      if (VRRTFTE <> 0) then
        BEGIN
        if (RTFTE = 'C') then
            CTARTFTE = TCTARTFTE;
        CUENTA = NULL;
        SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
            WHERE CUEN_COD = :CTARTFTE INTO :CUENTA, :TIPOCUEN;
        if (CUENTA IS NULL) then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTARTFTE, 2);
            CUENTA = CTARTFTE;
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'I') then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'C') then
            BEGIN
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRRTFTE, 0, :VRSUBT, :PRTFTE, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
            NROI = NROI + 1;
            SUMA = SUMA + VRRTFTE;
            END
        if (TIPOCUEN = 'N') then
            BEGIN
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRRTFTE, 0, :VRSUBT, :PRTFTE, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
            NROI = NROI + 1;
            SUMA = SUMA + VRRTFTE;
            END
        /* AUTORETENCION */
        if (FAUTORET <= fecaux) then
            BEGIN
            EXECUTE PROCEDURE LEE_CONFIGURACION('CARTERA', 'SALDOS', 'CUENTA DE AUTORETENCION EN LA FUENTE') returning_values (CTARTFTE);
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTARTFTE INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTARTFTE, 2);
                CUENTA = CTARTFTE;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'I') then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :VRRTFTE, (:VRSUBT*-1), :PRTFTE, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                SUMA = SUMA - VRRTFTE;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :VRRTFTE, (:VRSUBT*-1), :PRTFTE, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                NROI = NROI + 1;
                SUMA = SUMA - VRRTFTE;
                END
            END
        END /* RTFTE */
      END
    /* RETENCION IVA */
    if ((RTIVA = 'C') or (RTIVA = 'K')) then
      BEGIN
      execute procedure redondee(VRRTIVA, DIG) returning_values (VRRTIVA);
      if (VRRTIVA <> 0) then
        BEGIN
        if (RTIVA = 'C') then
            CTARTIVA = TCTARTIVA;
        CUENTA = NULL;
        SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
            WHERE CUEN_COD = :CTARTIVA INTO :CUENTA, :TIPOCUEN;
        if (CUENTA IS NULL) then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTARTIVA, 2);
            CUENTA = CTARTIVA;
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'I') then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'C') then
            BEGIN
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRRTIVA, 0, :VRIVA, :PORC, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
            NROI = NROI + 1;
            SUMA = SUMA + VRRTIVA;
            END
        if (TIPOCUEN = 'N') then
            BEGIN
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRRTIVA, 0, :VRIVA, :PORC, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
            NROI = NROI + 1;
            SUMA = SUMA + VRRTIVA;
            END
        END /* RTIVA */
      END
    /* RETENCION DE ICA */
    if ((RTICA = 'C') or (RTICA = 'K')) then
      BEGIN
      execute procedure redondee(VRRTICA, DIG) returning_values (VRRTICA);
      if (VRRTICA <> 0) then
        BEGIN
        if (RTICA = 'C') then
            CTARTICA = TCTARTICA;
        CUENTA = NULL;
        SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
            WHERE CUEN_COD = :CTARTICA INTO :CUENTA, :TIPOCUEN;
        if (CUENTA IS NULL) then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTARTICA, 2);
            CUENTA = CTARTICA;
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'I') then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'C') then
            BEGIN
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRRTICA, 0, :VRSUBT, :PRTICA, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
            NROI = NROI + 1;
            SUMA = SUMA + VRRTICA;
            END
        if (TIPOCUEN = 'N') then
            BEGIN
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :VRRTICA, 0, :VRSUBT, :PRTICA, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
            NROI = NROI + 1;
            SUMA = SUMA + VRRTICA;
            END
        END /* RTICA */
      END
    /* CIERRE EL COMPROBANTE CONTRA LA CUENTA DEL TERCERO O LA CONSTANTE */
    if ((SUMA <> 0) and ((CARTERA = 'C') or (CARTERA = 'K') or (CARTERA = 'J'))) then
        BEGIN
        if (SUMA < 0) then
            BEGIN
            DEBITO = SUMA * -1;
            CREDITO = 0;
            END
        ELSE
            BEGIN
            DEBITO = 0;
            CREDITO = SUMA;
            END
        if (CARTERA = 'C') then
            CTACARTERA = TCTACLIEN;
        if (CARTERA = 'J') then
            BEGIN
            /* BUSQUE LA CUENTA DE LA CAJA */
            SELECT CAJA_CUENTA FROM CAJAS C, PUNTO_VENTA P
                WHERE P.CAJA_ID = C.CAJA_ID AND PTVT_ID = :PTOVTA
                INTO :CTACARTERA;
            END
        CUENTA = NULL;
        SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
            WHERE CUEN_COD = :CTACARTERA INTO :CUENTA, :TIPOCUEN;
        if (CUENTA IS NULL) then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTACARTERA, 2);
            CUENTA = CTACARTERA;
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'I') then
            begin
            EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
            TIPOCUEN = 'N';
            ERROR = ERROR + 1;
            end
        if (TIPOCUEN = 'C') then
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :DEBITO, :CREDITO, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
        if (TIPOCUEN = 'N') then
            INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :DEBITO, :CREDITO, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
        NROI = NROI + 1;
        END /* SUMA EN CARTERA */
    /* CALCULE COSTOS EN VENTAS */
    EXECUTE PROCEDURE COSTO_EN_VENTAS(31, :IDDOC);
    if (COSTOS = 'A') then
        BEGIN
        FOR SELECT MAX(CTACOS), SUM(CAST(CANT AS DOUBLE PRECISION) * COSTO)
            FROM COSTO_VENTAS
            GROUP BY CTACOS
            INTO :CTACOSTOS, :MONTO
        DO
            BEGIN
            if (MONTO <> 0) then
                BEGIN
                CUENTA = NULL;
                SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                    WHERE CUEN_COD = :CTACOSTOS INTO :CUENTA, :TIPOCUEN;
                IF (CUENTA IS NULL) THEN
                    begin
                    EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTACOSTOS, 2);
                    CUENTA = CTACOSTOS;
                    TIPOCUEN = 'N';
                    ERROR = ERROR + 1;
                    end
                if (TIPOCUEN = 'I') then
                    BEGIN
                    /* ES UNA CUENTA DE INVENTARIO, RESGISTRE UNO A UNO LOS ARTICULOS */
                    FOR SELECT ARTI_COD, CANT * COSTO
                        FROM COSTO_VENTAS
                        WHERE CTACOS = :CUENTA
                        INTO :ART, :MONTO
                    DO
                        BEGIN
                        INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                            VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :MONTO, 0, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, :ART, 0, 0);
                        NROI = NROI + 1;
                        END
                    END
                if (TIPOCUEN = 'C') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :MONTO, 0, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                    NROI = NROI + 1;
                    END
                if (TIPOCUEN = 'N') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', :MONTO, 0, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                    NROI = NROI + 1;
                    END
                END /* MONTO <> 0 */
            END /* FOR */
        END /* COSTOS */
    if (COSTOS = 'K') then
        BEGIN
        SELECT SUM(CAST(CANT AS DOUBLE PRECISION) * COSTO)
            FROM COSTO_VENTAS
            INTO :MONTO;
        if (MONTO <> 0) then
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTACOSTOS INTO :CUENTA, :TIPOCUEN;
            IF (CUENTA IS NULL) THEN
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTACOSTOS, 2);
                CUENTA = CTACOSTOS;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'I') then
                BEGIN
                /* ES UNA CUENTA DE INVENTARIO, REGISTRE UNO A UNO LOS ARTICULOS */
                FOR SELECT ARTI_COD, CANT * COSTO
                    FROM COSTO_VENTAS
                    INTO :ART, :MONTO
                DO
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CTACOSTOS, :CONC, '', :MONTO, 0, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, :ART, 0, 0);
                    NROI = NROI + 1;
                    END
                END
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTACOSTOS, :CONC, '', :MONTO, 0, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTACOSTOS, :CONC, '', :MONTO, 0, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                NROI = NROI + 1;
                END
            END /* MONTO <> 0 */
        END /* COSTOS = K */
    if (INVEN = 'A') then
        BEGIN
        FOR SELECT MAX(CTAINV), SUM(CAST(CANT AS DOUBLE PRECISION) * COSTO)
            FROM COSTO_VENTAS
            GROUP BY CTAINV
            INTO :CTAINVEN, :MONTO
        DO
            BEGIN
            if (MONTO <> 0) then
                BEGIN
                CUENTA = NULL;
                SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                    WHERE CUEN_COD = :CTAINVEN INTO :CUENTA, :TIPOCUEN;
                IF (CUENTA IS NULL) THEN
                    begin
                    EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAINVEN, 2);
                    CUENTA = CTAINVEN;
                    TIPOCUEN = 'N';
                    ERROR = ERROR + 1;
                    end
                if (TIPOCUEN = 'I') then
                    BEGIN
                    /* ES UNA CUENTA DE INVENTARIO, REGISTRE UNO A UNO LOS ARTICULOS */
                    FOR SELECT ARTI_COD, CANT * COSTO
                        FROM COSTO_VENTAS
                        WHERE CTAINV = :CUENTA
                        INTO :ART, :MONTO
                    DO
                        BEGIN
                        INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                            VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, :ART, 0, 0);
                        NROI = NROI + 1;
                        END
                    END
                if (TIPOCUEN = 'C') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                    NROI = NROI + 1;
                    END
                if (TIPOCUEN = 'N') then
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CUENTA, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                    NROI = NROI + 1;
                    END
                END /* MONTO <> 0 */
            END /* FOR */
        END /* INVEN = A */
    if (INVEN = 'K') then
        BEGIN
        SELECT SUM(CAST(CANT AS DOUBLE PRECISION) * COSTO)
            FROM COSTO_VENTAS
            INTO :MONTO;
        if (MONTO <> 0) then
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTAINVEN INTO :CUENTA, :TIPOCUEN;
            IF (CUENTA IS NULL) THEN
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTAINVEN, 2);
                CUENTA = CTAINVEN;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'I') then
                BEGIN
                /* ES UNA CUENTA DE INVENTARIO, RESGISTRE UNO A UNO LOS ARTICULOS */
                FOR SELECT ARTI_COD, CANT * COSTO
                    FROM COSTO_VENTAS
                    INTO :ART, :MONTO
                DO
                    BEGIN
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CTAINVEN, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, :ART, 0, 0);
                    NROI = NROI + 1;
                    END
                END
            if (TIPOCUEN = 'C') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTAINVEN, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                    VALUES (:IDC, :NROI, :CTAINVEN, :CONC, '', 0, :MONTO, 0, 0, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                NROI = NROI + 1;
                END
            END /* MONTO <> 0 */
        END /* INVEN = K */
    /* recorra las cuentas adicionales */
    FOR SELECT INVC_CUENTA, INVC_BASE, INVC_PORC, INVC_VALOR, INVC_DB
        FROM INTERFAZ_VENTAS_CTAS
        WHERE INVE_ID = :IDINTER
        INTO :CTADIC, :BASEADIC, :PORCADIC, :VALORADIC, :DBADIC
        DO
        BEGIN
        if (VALORADIC <> 0) then
            MONTO = VALORADIC;
        ELSE
            BEGIN
            if (:BASEADIC = 'SUBTOTAL') then
                VALORADIC = vrsubt;
            if (:BASEADIC = 'DESCUENTO') then
                VALORADIC = VRDTO;
            if (:BASEADIC = 'IVA') then
                VALORADIC = VRIVA;
            if (:BASEADIC = 'ADICIONAL') then
                VALORADIC = VRADIC;
            if (:BASEADIC = 'EXTRA') then
                VALORADIC = VREXTRA;
            if (:BASEADIC = 'TOTAL') then
                VALORADIC = VRTOTAL;
            MONTO = VALORADIC * PORCADIC / 100;
            END
        if (MONTO <> 0) then
            BEGIN
            CUENTA = NULL;
            SELECT CUEN_COD, CUEN_TIPO FROM CUENTAS
                WHERE CUEN_COD = :CTADIC INTO :CUENTA, :TIPOCUEN;
            if (CUENTA IS NULL) then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CTADIC, 2);
                CUENTA = CTADIC;
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'I') then
                begin
                EXECUTE PROCEDURE ERROR (31, :IDDOC, :CUENTA, 3);
                TIPOCUEN = 'N';
                ERROR = ERROR + 1;
                end
            if (TIPOCUEN = 'C') then
                BEGIN
                if (DBADIC = 'S') then
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CTADIC, :CONC, '', :MONTO, 0, :VALORADIC, :PORCADIC, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                ELSE
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CTADIC, :CONC, '', 0, :MONTO, :VALORADIC, :PORCADIC, :NIT, :PROY, :CENTRO, :NUMERO, NULL, :VENCE, NULL, 0, 31);
                NROI = NROI + 1;
                END
            if (TIPOCUEN = 'N') then
                BEGIN
                if (DBADIC = 'S') then
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CTADIC, :CONC, '', :MONTO, 0, :VALORADIC, :PORCADIC, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                ELSE
                    INSERT INTO CONTABILIZACION_DET (CNTB_ID, CNDE_ITEM, CNDE_CUENTA, CNDE_CONC, CNDE_REF, CNDE_DEBITOS, CNDE_CREDITOS, CNDE_BASE, CNDE_PORC, CNDE_TERC, CNDE_PROY, CNDE_CENTRO, CNDE_DOCNUMERO, CNDE_DOCAPLICAR, CNDE_DOCVENCE, CNDE_ARTICULO, CNDE_DOCTIPOA, CNDE_DOCTIPON)
                        VALUES (:IDC, :NROI, :CTADIC, :CONC, '', 0, :MONTO, :VALORADIC, :PORCADIC, :NIT, :PROY, :CENTRO, NULL, NULL, NULL, NULL, 0, 0);
                NROI = NROI + 1;
                END
            NROI = NROI + 1;
            END
        END
    if (ERROR > 0) then
        VER = 'S';
    SUSPEND;
    END /* NO ANULADO */
  END /* EXISTE LA INTERFAZ */
ELSE
    BEGIN
    EXECUTE PROCEDURE ERROR (31, :IDDOC, :PREF, 1);
    ERROR = ERROR + 1;
    VER = 'S';
    SUSPEND;
    END
END
^

SET TERM ; ^

SET TERM ^ ;

ALTER PROCEDURE FACTURAS_SIN_CONTABILIDAD(
    FECINI DATE,
    FECFIN DATE)
RETURNS (
    ID INTEGER,
    PREF VARCHAR(4),
    NUMERO VARCHAR(6),
    ESTADO VARCHAR(20),
    IDI INTEGER,
    IDC INTEGER)
AS
DECLARE VARIABLE VER CHAR(2);
declare variable FECICNT VARCHAR(10);
declare variable FECFCNT VARCHAR(10);
declare variable ERROR INTEGER;
declare variable idref INTEGER;
BEGIN
EXECUTE PROCEDURE fecha_a_conta(FECINI) returning_values (FECICNT);
EXECUTE PROCEDURE fecha_a_conta(FECFIN) returning_values (FECFCNT);
FOR SELECT FACT_ID, PREF_PRE, FACT_NUMERO FROM FACTURAS WHERE FACT_ANULADO = 'N' AND
    FACT_FECHA >= :FECINI AND FACT_FECHA <= :FECFIN INTO :ID, :PREF, :NUMERO
DO
  BEGIN
  idref = null;
  SELECT ENCO_IDREF FROM COMPROBANTE_ENCABEZADO WHERE ENCO_TIPOREF = 31 AND ENCO_FECHA >= :FECICNT AND ENCO_FECHA <= :FECFCNT and ENCO_IDREF = :ID into :idref;
  if (idref IS NULL) then
  begin
   ESTADO = 'PROCESANDO';
   ERROR = NULL;
   SUSPEND;
   SELECT MAX(INVE_ID) FROM INTERFAZ_VENTAS WHERE PREF_PRE = :PREF AND TIDO_COD = 31 INTO :IDI;
   EXECUTE PROCEDURE CONTABIL_FACTURA (:ID, :IDI) RETURNING_VALUES (:ERROR, VER, :IDC);
   if ((ERROR = 0) or (error IS NULL)) then
    BEGIN
    EXECUTE PROCEDURE CONTABILIZA_PENDIENTE (:IDC);
    ESTADO = 'OK';
    END
   ELSE
    ESTADO = 'ERROR';
   suspend;
  end
  END
END

^

SET TERM ; ^

/* 20111101 */
/* NO PERMITA EGRESOS SIN TERCERO */
SET TERM ^ ;

CREATE OR ALTER TRIGGER EGRESOS_BI FOR EGRESOS
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable NUMERO VARCHAR(6);
declare variable AUTOM CHAR(1);
declare variable EXISTE CHAR(1);
BEGIN
if (new.terc_nit is null) then
    exception tercero_no_existe 'Debe indicar un tercero para el egreso.';
if (NEW.numok = 'N') then
  BEGIN
  /* Actualice el contador del prefijo */
  SELECT PREF_ACTUAL, PREF_AUTO FROM PREFIJOS WHERE TIDO_COD = 62 AND PREF_PRE = NEW.PREF_PRE INTO :NUMERO, :AUTOM;
  /* ACTUALICE EL NUMERO EN COMPROBANTE_ENCABEZADO  */
  if (AUTOM = 'S') then
    BEGIN
    NEW.EGRE_NUMERO = NUMERO;
    NUMERO = CAST((CAST(NUMERO AS INTEGER) + 1) AS CHAR(6));
    UPDATE PREFIJOS
      SET PREF_ACTUAL = :NUMERO
    WHERE TIDO_COD = 62 AND PREF_PRE = NEW.PREF_PRE;
    END
  ELSE
    BEGIN
    if (CAST(NUMERO AS INTEGER) = CAST(NEW.EGRE_NUMERO AS INTEGER)) then
        UPDATE PREFIJOS
          SET PREF_ACTUAL = CAST((CAST(PREF_ACTUAL AS INTEGER) + 1) AS CHAR(6))
        WHERE TIDO_COD = 62 AND PREF_PRE = NEW.PREF_PRE;
    END
  EXECUTE PROCEDURE COMPLETA_CEROS (NEW.EGRE_numero) returning_values (NEW.EGRE_numero);
  NEW.numok = 'S';
  END
/* Verifique que el numero no existe previamente */
EXISTE = 'N';
SELECT 'S' FROM EGRESOS WHERE PREF_PRE = NEW.PREF_PRE AND EGRE_NUMERO = NEW.EGRE_NUMERO INTO :EXISTE;
if (EXISTE = 'S') then
    EXCEPTION DOCUMENTO_REGISTRADO;
if (new.cleg_id is null) then
    new.cleg_id = 0;
if (NEW.terc_nit IS NULL) then
    exception tercero_no_existe 'DEBE INDICAR UN TERCERO PARA EL EGRESO';
END
^

SET TERM ; ^



/* 20120227 */

INSERT INTO TIPO_DOCUMENTO (TIDO_COD, TIDO_NOMCORTO, TIDO_NOMLARGO, TIDO_MODULO, TIDO_INVE, TIDO_CART, TIDO_CXP, TIDO_CAJA, TIDO_BCOS) VALUES (120, 'CIERRFAC', 'CIERRE FACTURACION', 'VENTAS', 'N', 'N', 'N', 'N', 'N');
commit work;


/* 20120306 */
/* MARCAR MOVIMIENTOS COMO DESCONTABLES */

ALTER TABLE COMPROBANTE_ENCABEZADO
ADD ENCO_DESCONTABLE T_BOOLEANO;

ALTER TRIGGER COMPROBANTE_ENCABEZADO_AU INACTIVE;

UPDATE COMPROBANTE_ENCABEZADO SET ENCO_DESCONTABLE = 'S' WHERE ENCO_DESCONTABLE IS NULL;
COMMIT WORK;

ALTER TRIGGER COMPROBANTE_ENCABEZADO_AU ACTIVE;

ALTER TABLE COMPROBANTE_DETALLE 
ADD CODE_DESCONTABLE T_BOOLEANO;

ALTER TRIGGER COMPROBANTE_DETALLE_AU INACTIVE;

UPDATE COMPROBANTE_DETALLE SET CODE_DESCONTABLE = 'S' WHERE CODE_DESCONTABLE IS NULL;
COMMIT WORK;

ALTER TRIGGER COMPROBANTE_DETALLE_AU ACTIVE;

/* 20120106 */
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_VALOR3 VARCHAR(30);
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_VALOR4 VARCHAR(30);
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_VALOR5 VARCHAR(30);
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_VALOR6 VARCHAR(30);
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_VALOR7 VARCHAR(30);
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_VALOR8 VARCHAR(30);
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_VALOR9 VARCHAR(30);
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_PROCEDIMIENTO T_CONCEPTO;
ALTER TABLE MEDIOSMAG_ARCHIVOS
ADD MEDM_ORDEN SMALLINT;

ALTER TABLE MEDIOS_MAGNETICOS_DATOS
ADD MEMG_PAGOND T_MONTO;
ALTER TABLE MEDIOS_MAGNETICOS_DATOS
ADD MEMG_IVA T_MONTO;
ALTER TABLE MEDIOS_MAGNETICOS_DATOS
ADD MEMG_IVAND T_MONTO;
ALTER TABLE MEDIOS_MAGNETICOS_DATOS
ADD MEMG_RETEASUM T_MONTO;
ALTER TABLE MEDIOS_MAGNETICOS_DATOS
ADD MEMG_RETIVACOMUN T_MONTO;
ALTER TABLE MEDIOS_MAGNETICOS_DATOS
ADD MEMG_RETIVASIMP T_MONTO;
ALTER TABLE MEDIOS_MAGNETICOS_DATOS
ADD MEMG_RETIVAND T_MONTO;

ALTER TABLE MEDIOSMAG_CUENTAS
ADD MMCU_CTARTF T_CTA_CONTABLE;
ALTER TABLE MEDIOSMAG_CUENTAS
ADD MMCU_CTAIVA T_CTA_CONTABLE;
ALTER TABLE MEDIOSMAG_CUENTAS
ADD MMCU_CTARTIVA T_CTA_CONTABLE;

ALTER TABLE TERCEROS
ADD TERC_SIMPLIFICA T_BOOLEANO;

ALTER TRIGGER TERCEROS_AU INACTIVE;

update terceros set terc_simplifica = 'N';
update terceros t set terc_simplifica = 'S' where exists (select terc_nit from proveedores p where p.terc_nit = t.terc_nit and p.prov_simplificado = 'S');

ALTER TRIGGER TERCEROS_AU ACTIVE;

UPDATE configura_mediosmag SET COME_FORMATO = 10017 WHERE COME_FORMATO = 1001;
UPDATE configura_mediosmag SET COME_FORMATO = 10027 WHERE COME_FORMATO = 1002;
UPDATE configura_mediosmag SET COME_FORMATO = 10036 WHERE COME_FORMATO = 1003;
UPDATE configura_mediosmag SET COME_FORMATO = 10056 WHERE COME_FORMATO = 1005;
UPDATE configura_mediosmag SET COME_FORMATO = 10066 WHERE COME_FORMATO = 1006;
UPDATE configura_mediosmag SET COME_FORMATO = 10077 WHERE COME_FORMATO = 1007;
UPDATE configura_mediosmag SET COME_FORMATO = 10087 WHERE COME_FORMATO = 1008;
UPDATE configura_mediosmag SET COME_FORMATO = 10097 WHERE COME_FORMATO = 1009;
UPDATE configura_mediosmag SET COME_FORMATO = 10107 WHERE COME_FORMATO = 1010;
UPDATE configura_mediosmag SET COME_FORMATO = 10116 WHERE COME_FORMATO = 1011;
UPDATE configura_mediosmag SET COME_FORMATO = 10127 WHERE COME_FORMATO = 1012;
COMMIT WORK;

INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100181, 'CONCEPTO PAGOS POR SALARIOS', '5001', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100182, 'CONCEPTO PAGOS HONORARIOS', '5002', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100183, 'CONCEPTO PAGOS COMISIONES', '5003', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100184, 'CONCEPTO PAGOS SERVICIOS', '5004', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100185, 'CONCEPTO PAGOS ARRENDAMIENTOS', '5005', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100186, 'CONCEPTO PAGOS INTERESES Y RENDIMIENTOS', '5006', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100187, 'CONCEPTO PAGOS COMPRA ACTIVOS MOVILES', '5007', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100188, 'CONCEPTO PAGOS COMPRA ACTIVOS FIJOS', '5008', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001810, 'CONCEPTO PAGOS APORTES SENA,ICBF,CAJA COMPENSACION', '5010', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001811, 'CONCEPTO PAGOS APORTES EPS-ISS-ARP', '5011', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001812, 'CONCEPTO PAGOS APORTES FONDOS PENSIONES', '5012', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001813, 'CONCEPTO PAGOS DONACIONES EN DINERO', '5013', '53952505', 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001814, 'CONCEPTO PAGOS DONACIONES EN OTROS ACTIVOS', '5014', '53952510', 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001815, 'CONCEPTO PAGOS IMPUESTOS', '5015', '1000000', 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001816, 'CONCEPTO OTROS COSTOS Y DEDUCCIONES', '5016', '1000000', 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001818, 'CONCEPTO PATA VIATICOS', '5055', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001819, 'CONCEPTO AMORTIZACION PAGOS DIFERIDOS', '5019', NULL, 10018, 500000, 'C');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001820, 'CONCEPTO DEDUCCION COMPRA DE ACTIVOS ART. 158-3', '5020', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001821, 'CONCEPTO DEDUCCION MEDIO AMBIENTE', '5021', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001822, 'CONCEPTO PAGOS PENSIONES', '5022', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001823, 'CONCEPTO PAGOS ASISTENCIA TECNICA AL EXTERIOR', '5023', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001824, 'CONCEPTO PAGOS POR MARCAS AL EXTERIOR', '5024', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001825, 'CONCEPTO PAGOS POR PATENTES AL EXTERIOR', '5025', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001826, 'CONCEPTO PAGOS POR REGALIAS AL EXTERIOR', '5026', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001827, 'CONCEPTO PAGOS SERVICIOS TECNICOS AL EXTERIOR', '5027', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001828, 'DEVOLUCIONES DE PAGOS Y RETENCIONES DE AŅOS ANTERIORES', '5028', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001829, 'PAGOS DIFERIDOS Y GASTOS POR ANTICIPADO HONORARIOS', '5030', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001830, 'PAGOS DIFERIDOS Y GASTOS POR ANTICIPADO COMPRAS', '5029', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001831, 'PAGOS DIFERIDOS Y GASTOS POR ANTICIPADO COMISIONES', '5031', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001832, 'PAGOS DIFERIDOS Y GASTOS POR ANTICIPADO SERVICIOS', '5032', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001833, 'PAGOS DIFERIDOS Y GASTOS POR ANTICIPADO ARRIENDOS', '5033', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001834, 'PAGOS DIFERIDOS Y GASTOS POR ANTICIPADO RENDIMIENTOS', '5034', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001835, 'PAGOS DIFERIDOS Y GASTOS POR ANTICIPADO OTROS CONCEPTOS', '5035', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001836, 'INVERSIONES CONTROL MEJORAMIENTO MEDIO AMBIENTE COMPRAS', '5036', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001837, 'INVERSIONES CONTROL MEJORAMIENTO MEDIO AMBIENTE HONORARIOS', '5037', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001838, 'INVERSIONES CONTROL MEJORAMIENTO MEDIO AMBIENTE COMISIONES', '5038', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001839, 'INVERSIONES CONTROL MEJORAMIENTO MEDIO AMBIENTE SERVICIOS', '5039', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001840, 'INVERSIONES CONTROL MEJORAMIENTO MEDIO AMBIENTE ARRIENDOS', '5040', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001841, 'INVERSIONES CONTROL MEJORAMIENTO MEDIO AMBIENTE RENDIMIENTOS', '5041', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001842, 'INVERSIONES CONTROL MEJORAMIENTO MEDIO AMBIENTE OTROS CONC', '5042', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001843, 'DIVIDENDOS O PARTICIPACIONES EXIGIBLES EN EL ANO FISCAL', '5043', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001844, 'LOTERIAS, RIFAS O APUESTAS', '5044', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001845, 'RETENCION SOBRE INGRESOS DE TARJETAS DEBITO CREDITO', '5045', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001846, 'ENAJENACION DE ACTIVOS FIJOS A PERS. NATURALES', '5046', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001849, 'AUTORRETENCIONES POR VENTAS', '5049', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001850, 'AUTORRETENCIONES POR SERVICIOS', '5050', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001851, 'AUTORRETENCIONES POR RENDIMIENTOS', '5051', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001852, 'AUTORRETENCIONES POR OTROS CONCEPTOS', '5052', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001853, 'RETENCIONES EFECTUADAS A TITULO DE TIMBRE', '5053', NULL, 10018, 500000, 'D');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001856, 'CONCEPTO PARA GASTOS DE REPRESENTACION', '5056', NULL, 10018, 500000, 'N');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001857, 'AMORTIZACION PAGOS DIFERIDOS RELATIVOS IMP. PATRIMONIO', '5057', NULL, 10018, 500000, 'C');
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (1001859, 'PAGO COOPERADOS FONDO PROTECCION DE APORTES', '5059', NULL, 10018, 500000, 'D');
COMMIT WORK;

SET TERM ^ ;

create or alter procedure MM_1001_8 (
    INICIO char(8),
    FINAL char(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable SIMPLIFICA CHAR(1) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAIS CHAR(3) CHARACTER SET NONE;
declare variable PAGO NUMERIC(18,0);
declare variable PAGOND NUMERIC(18,0);
declare variable IVA NUMERIC(18,0);
declare variable IVAND NUMERIC(18,0);
declare variable RTFTE NUMERIC(18,0);
declare variable RTFTEA NUMERIC(18,0);
declare variable RTIVAC NUMERIC(18,0);
declare variable RTIVAS NUMERIC(18,0);
declare variable RTIVAND NUMERIC(18,0);
declare variable DEBITOS NUMERIC(18,2);
declare variable CREDITOS NUMERIC(18,2);
declare variable MINIMO NUMERIC(18,2);
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable MENORPAGOND NUMERIC(18,2);
declare variable MENORRTF NUMERIC(18,2);
declare variable MENORRTFA NUMERIC(18,2);
declare variable MENORIVA NUMERIC(18,2);
declare variable MENORIVAND NUMERIC(18,2);
declare variable MENORRTIVAC NUMERIC(18,2);
declare variable MENORRTIVAS NUMERIC(18,2);
declare variable MENORRTIVAN NUMERIC(18,2);
declare variable TOTALTERC NUMERIC(18,2);
declare variable ITEM integer;
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable NATUR CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor, :paismenor;
ITEM = 0;
FOR SELECT COME_ITEM, COME_RESPUESTA, COME_MINIMO, COME_NATUR FROM CONFIGURA_MEDIOSMAG
    WHERE COME_FORMATO = '10018' ORDER BY COME_ITEM INTO :idconc, :CONCEPTO , :MINIMO, :NATUR
    DO
    BEGIN
    MENORCUANTIA = 0;
    MENORPAGOND = 0;
    MENORRTF = 0;
    MENORRTFA = 0;
    MENORIVA = 0;
    MENORIVAND = 0;
    MENORRTIVAC = 0;
    MENORRTIVAS = 0;
    MENORRTIVAN = 0;
    FOR SELECT MAX(D.TERC_NIT), SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
        FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND m.mmcu_cuenta <> '' AND
        E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND
        ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0))
        GROUP BY D.TERC_NIT
        INTO :NIT, :PAGO, :debitos, :creditos
        DO
        BEGIN
        /* TOTAL POR TERCERO */
        SELECT SUM(CODE_DEBITO-CODE_CREDITO) FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M, configura_mediosmag C
            WHERE C.come_formato = 10018 AND C.come_item = M.mmcu_item AND SUBSTR(D.CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :inicio AND ENCO_FECHA <= :final AND
            D.TERC_NIT = :NIT INTO :TOTALTERC;

        if (NATUR = 'D') then
            pago = debitos;
        if (NATUR = 'C') then
            pago = creditos;
        if ((TOTALTERC >= :MINIMO) AND (PAGO > 0)) then
            BEGIN
            SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO, TERC_SIMPLIFICA,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :SIMPLIFICA,
                :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :PAIS;
            /* LOS NO DEDUCIBLES */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) AND D.code_descontable = 'N' INTO :PAGOND, :debitos, :creditos;
            if (PAGOND IS NULL) then
                PAGOND = 0;
            if (NATUR = 'D') then
                pagond = debitos;
            if (NATUR = 'C') then
                pagond = creditos;
            PAGO = PAGO - PAGOND;
            /* EL IVA DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :iva, :debitos, :creditos;
            if (NATUR = 'D') then
                IVA = debitos;
            if (NATUR = 'C') then
                IVA = creditos;
            if (IVA IS NULL) then
                IVA = 0;
            /* EL IVA NO DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :ivand, :debitos, :creditos;
            if (NATUR = 'D') then
                IVAND = debitos;
            if (NATUR = 'C') then
                IVAND = creditos;
            if (IVAND IS NULL) then
                IVAND = 0;
            /* LAS RETENCIONES RENTA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTE, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTE = debitos;
            if (NATUR = 'C') then
                RTFTE = creditos;
            if (RTFTE IS NULL) then
                RTFTE = 0;
            /* LAS RETENCIONES RENTA ASUMIDAS */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTEA, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTEA = debitos;
            if (NATUR = 'C') then
                RTFTEA = creditos;
            if (RTFTEA IS NULL) then
                RTFTEA = 0;
            /* LAS RETENCIONES IVA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartiva AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTIVAC, :debitos, :creditos;
            if (NATUR = 'D') then
                RTIVAC = debitos;
            if (NATUR = 'C') then
                RTIVAC = creditos;
            if (RTIVAC IS NULL) then
                RTIVAC = 0;
            if (SIMPLIFICA = 'S') then
                BEGIN
                RTIVAS = RTIVAC;
                RTIVAC = 0;
                rtivand = 0;
                END
            ELSE
                if (pais <> '169') then
                    BEGIN
                    rtivand = RTIVAC;
                    RTIVAC = 0;
                    RTIVAS = 0;
                    END
                ELSE
                    begin
                    RTIVAS = 0;
                    rtivand = 0;
                    end

            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais, memg_pagond,
                memg_iva, memg_ivand, memg_retencion, memg_reteasum, memg_retivacomun, memg_retivasimp, memg_retivand)
                values (10018, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :pago, :pais, :pagond,
                :iva, :ivand, :rtfte, :rtftea, :rtivac, :rtivas, :rtivand);
            END
        ELSE
            BEGIN
            /* LOS NO DEDUCIBLES */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) AND D.code_descontable = 'N' INTO :PAGOND, :debitos, :creditos;
            if (PAGOND IS NULL) then
                PAGOND = 0;
            if (NATUR = 'D') then
                pagond = debitos;
            if (NATUR = 'C') then
                pagond = creditos;
            PAGO = PAGO - PAGOND;
            MENORCUANTIA = MENORCUANTIA + PAGO;
            MENORPAGOND = MENORPAGOND + PAGOND;
            /* EL IVA DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :iva, :debitos, :creditos;
            if (NATUR = 'D') then
                IVA = debitos;
            if (NATUR = 'C') then
                IVA = creditos;
            if (IVA IS NULL) then
                IVA = 0;
            MENORIVA = MENORIVA + IVA;
            /* EL IVA NO DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :ivand, :debitos, :creditos;
            if (NATUR = 'D') then
                IVAND = debitos;
            if (NATUR = 'C') then
                IVAND = creditos;
            if (IVAND IS NULL) then
                IVAND = 0;
            MENORIVAND = MENORIVAND + IVAND;
            /* LAS RETENCIONES RENTA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTE, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTE = debitos;
            if (NATUR = 'C') then
                RTFTE = creditos;
            if (RTFTE IS NULL) then
                RTFTE = 0;
            MENORRTF = MENORRTF + RTFTE;
            /* LAS RETENCIONES RENTA ASUMIDAS */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTEA, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTEA = debitos;
            if (NATUR = 'C') then
                RTFTEA = creditos;
            if (RTFTEA IS NULL) then
                RTFTEA = 0;
            MENORRTFA = MENORRTFA + RTFTEA;
            /* LAS RETENCIONES IVA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartiva AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTIVAC, :debitos, :creditos;
            if (NATUR = 'D') then
                RTIVAC = debitos;
            if (NATUR = 'C') then
                RTIVAC = creditos;
            if (RTIVAC IS NULL) then
                RTIVAC = 0;
            if (SIMPLIFICA = 'S') then
                BEGIN
                RTIVAS = RTIVAC;
                RTIVAC = 0;
                rtivand = 0;
                END
            ELSE
                if (pais <> '169') then
                    BEGIN
                    rtivand = RTIVAC;
                    RTIVAC = 0;
                    RTIVAS = 0;
                    END
                ELSE
                    begin
                    RTIVAS = 0;
                    rtivand = 0;
                    end
            MENORRTIVAC = MENORIVA + RTIVAC;
            MENORRTIVAS = MENORIVA + RTIVAS;
            MENORRTIVAN = MENORIVA + RTIVAND;
            END
        END
    if (MENORCUANTIA <> 0) then
        BEGIN
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais, memg_pagond,
            memg_iva, memg_ivand, memg_retencion, memg_reteasum, memg_retivacomun, memg_retivasimp, memg_retivand)
            values (1001, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
            '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, :paismenor, :menorpagond,
            :menoriva, :menorivand, :menorrtf, :menorrtfa, :menorrtivac, :menorrtivas, :menorrtivan);
        END
    END

end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE MM_1001_8 TO SYSDBA;

DELETE FROM mediosmag_archivos;
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10017, '1001-V7 PAGOS O ABONOS EN CUENTA 2010', '07', 'PAGO', 'NO DEDUC', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1001', 12);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10018, '1001-V8 PAGOS O ABONOS EN CUENTA Y RETENCIONES PRACTICADAS', '08', 'PAGO DEDUCIBLE', 'PAGO NO DED', 'IVA DEDUCIBLE', 'IVA NO DED', 'RTEFTE', 'RTEFTE ASUMIDA', 'RTFTE R.COMUN', 'RTFTE ASUMIDA R.COMUN', 'RTFTE IVA NO DOM', 'MM_1001_8', 1);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10027, '1002-V7 RETENCIONES EN LA FUENTE PRACTICADAS', '07', 'BASE', 'RETENCION', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1002', 2);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10036, '1003-V6 RETENCIONES EN LA FUENTE QUE LE PRACTICARON', '06', 'RETENCION', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1003', 3);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10056, '1005-V6 IMPUESTO A LAS VENTAS DESCONTABLE', '06', 'VR.IMPUESTO', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1005', 4);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10066, '1006-V6 IMPUESTO A LAS VENTAS GENERADO', '06', 'VR.IMPUESTO', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1006', 5);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10077, '1007-V7 INGRESOS RECIBIDOS', '07', 'INGRESOS', 'DEVOLUCIONES', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1007', 6);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10087, '1008-V7 SALDOS DE CUENTAS POR COBRAR A DIC.31', '07', 'SALDO', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1008', 7);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10097, '1009-V7 SALDOS DE CUENTAS POR PAGAR A DIC.31', '07', 'SALDO', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1009', 8);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10107, '1010-V7 INFORMACION DE SOCIOS Y ACCIONISTAS', '07', 'VR.PATRIMONIAL', 'VR.DIVIDENDOS', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1010', 9);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10116, '1011-V6 INFORMACION DE LAS DECLARACIONES TRIBUTARIAS', '06', 'SALDO', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1011', 10);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10127, '1012-V7 INF. DEC. TRIBUTARIAS-ACCIONES,INVERSIONES,BANCOS', '07', 'VALOR', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_1012', 11);
COMMIT WORK;

/* 20120207B */
SET TERM ^ ;

CREATE OR ALTER procedure MM_1001_8 (
    INICIO char(8),
    FINAL char(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable SIMPLIFICA CHAR(1) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAIS CHAR(3) CHARACTER SET NONE;
declare variable PAGO NUMERIC(18,0);
declare variable PAGOND NUMERIC(18,0);
declare variable IVA NUMERIC(18,0);
declare variable IVAND NUMERIC(18,0);
declare variable RTFTE NUMERIC(18,0);
declare variable RTFTEA NUMERIC(18,0);
declare variable RTIVAC NUMERIC(18,0);
declare variable RTIVAS NUMERIC(18,0);
declare variable RTIVAND NUMERIC(18,0);
declare variable DEBITOS NUMERIC(18,2);
declare variable CREDITOS NUMERIC(18,2);
declare variable MINIMO NUMERIC(18,2);
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable MENORPAGOND NUMERIC(18,2);
declare variable MENORRTF NUMERIC(18,2);
declare variable MENORRTFA NUMERIC(18,2);
declare variable MENORIVA NUMERIC(18,2);
declare variable MENORIVAND NUMERIC(18,2);
declare variable MENORRTIVAC NUMERIC(18,2);
declare variable MENORRTIVAS NUMERIC(18,2);
declare variable MENORRTIVAN NUMERIC(18,2);
declare variable TOTALTERC NUMERIC(18,2);
declare variable ITEM integer;
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable NATUR CHAR(1);
declare variable TIPOID CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor, :paismenor;
ITEM = 0;
FOR SELECT COME_ITEM, COME_RESPUESTA, COME_MINIMO, COME_NATUR FROM CONFIGURA_MEDIOSMAG
    WHERE COME_FORMATO = '10018' ORDER BY COME_ITEM INTO :idconc, :CONCEPTO , :MINIMO, :NATUR
    DO
    BEGIN
    MENORCUANTIA = 0;
    MENORPAGOND = 0;
    MENORRTF = 0;
    MENORRTFA = 0;
    MENORIVA = 0;
    MENORIVAND = 0;
    MENORRTIVAC = 0;
    MENORRTIVAS = 0;
    MENORRTIVAN = 0;
    FOR SELECT MAX(D.TERC_NIT), SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
        FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND m.mmcu_cuenta <> '' AND
        E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND
        ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0))
        GROUP BY D.TERC_NIT
        INTO :NIT, :PAGO, :debitos, :creditos
        DO
        BEGIN
        /* TOTAL POR TERCERO */
        SELECT SUM(CODE_DEBITO-CODE_CREDITO) FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M, configura_mediosmag C
            WHERE C.come_formato = 10018 AND C.come_item = M.mmcu_item AND SUBSTR(D.CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :inicio AND ENCO_FECHA <= :final AND
            D.TERC_NIT = :NIT INTO :TOTALTERC;
        if (totalterc is null) then
            totalterc = 0;
        if (NATUR = 'D') then
            pago = debitos;
        if (NATUR = 'C') then
            pago = creditos;
        if ((TOTALTERC >= :MINIMO) AND (PAGO > 0)) then
            BEGIN
            SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO, TERC_SIMPLIFICA,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID, IT.tiid_cod
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :SIMPLIFICA,
                :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :PAIS, :TIPOID;
            if (:TIPOID <> 'J') then
                RAZONSOCIAL = '';
            /* LOS NO DEDUCIBLES */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) AND D.code_descontable = 'N' INTO :PAGOND, :debitos, :creditos;
            if (NATUR = 'D') then
                pagond = debitos;
            if (NATUR = 'C') then
                pagond = creditos;
            if (PAGOND IS NULL) then
                PAGOND = 0;
            PAGO = PAGO - PAGOND;
            /* EL IVA DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :iva, :debitos, :creditos;
            if (NATUR = 'D') then
                IVA = debitos;
            if (NATUR = 'C') then
                IVA = creditos;
            if (IVA IS NULL) then
                IVA = 0;
            /* EL IVA NO DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :ivand, :debitos, :creditos;
            if (NATUR = 'D') then
                IVAND = debitos;
            if (NATUR = 'C') then
                IVAND = creditos;
            if (IVAND IS NULL) then
                IVAND = 0;
            /* LAS RETENCIONES RENTA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTE, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTE = debitos;
            if (NATUR = 'C') then
                RTFTE = creditos;
            if (RTFTE IS NULL) then
                RTFTE = 0;
            /* LAS RETENCIONES RENTA ASUMIDAS */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTEA, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTEA = debitos;
            if (NATUR = 'C') then
                RTFTEA = creditos;
            if (RTFTEA IS NULL) then
                RTFTEA = 0;
            /* LAS RETENCIONES IVA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartiva AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTIVAC, :debitos, :creditos;
            if (NATUR = 'D') then
                RTIVAC = debitos;
            if (NATUR = 'C') then
                RTIVAC = creditos;
            if (RTIVAC IS NULL) then
                RTIVAC = 0;
            if (SIMPLIFICA = 'S') then
                BEGIN
                RTIVAS = RTIVAC;
                RTIVAC = 0;
                rtivand = 0;
                END
            ELSE
                if (pais <> '169') then
                    BEGIN
                    rtivand = RTIVAC;
                    RTIVAC = 0;
                    RTIVAS = 0;
                    END
                ELSE
                    begin
                    RTIVAS = 0;
                    rtivand = 0;
                    end

            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais, memg_pagond,
                memg_iva, memg_ivand, memg_retencion, memg_reteasum, memg_retivacomun, memg_retivasimp, memg_retivand)
                values (10018, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :pago, :pais, :pagond,
                :iva, :ivand, :rtfte, :rtftea, :rtivac, :rtivas, :rtivand);
            END
        ELSE
            BEGIN
            /* LOS NO DEDUCIBLES */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) AND D.code_descontable = 'N' INTO :PAGOND, :debitos, :creditos;
            if (PAGOND IS NULL) then
                PAGOND = 0;
            if (NATUR = 'D') then
                pagond = debitos;
            if (NATUR = 'C') then
                pagond = creditos;
            PAGO = PAGO - PAGOND;
            MENORCUANTIA = MENORCUANTIA + PAGO;
            MENORPAGOND = MENORPAGOND + PAGOND;
            /* EL IVA DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :iva, :debitos, :creditos;
            if (NATUR = 'D') then
                IVA = debitos;
            if (NATUR = 'C') then
                IVA = creditos;
            if (IVA IS NULL) then
                IVA = 0;
            MENORIVA = MENORIVA + IVA;
            /* EL IVA NO DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctaiva AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :ivand, :debitos, :creditos;
            if (NATUR = 'D') then
                IVAND = debitos;
            if (NATUR = 'C') then
                IVAND = creditos;
            if (IVAND IS NULL) then
                IVAND = 0;
            MENORIVAND = MENORIVAND + IVAND;
            /* LAS RETENCIONES RENTA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'S' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTE, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTE = debitos;
            if (NATUR = 'C') then
                RTFTE = creditos;
            if (RTFTE IS NULL) then
                RTFTE = 0;
            MENORRTF = MENORRTF + RTFTE;
            /* LAS RETENCIONES RENTA ASUMIDAS */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartf AND D.code_descontable = 'N' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTEA, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTEA = debitos;
            if (NATUR = 'C') then
                RTFTEA = creditos;
            if (RTFTEA IS NULL) then
                RTFTEA = 0;
            MENORRTFA = MENORRTFA + RTFTEA;
            /* LAS RETENCIONES IVA */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_ctartiva AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTIVAC, :debitos, :creditos;
            if (NATUR = 'D') then
                RTIVAC = debitos;
            if (NATUR = 'C') then
                RTIVAC = creditos;
            if (RTIVAC IS NULL) then
                RTIVAC = 0;
            if (SIMPLIFICA = 'S') then
                BEGIN
                RTIVAS = RTIVAC;
                RTIVAC = 0;
                rtivand = 0;
                END
            ELSE
                if (pais <> '169') then
                    BEGIN
                    rtivand = RTIVAC;
                    RTIVAC = 0;
                    RTIVAS = 0;
                    END
                ELSE
                    begin
                    RTIVAS = 0;
                    rtivand = 0;
                    end
            MENORRTIVAC = MENORIVA + RTIVAC;
            MENORRTIVAS = MENORIVA + RTIVAS;
            MENORRTIVAN = MENORIVA + RTIVAND;
            END
        END
    if (MENORCUANTIA <> 0) then
        BEGIN
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais, memg_pagond,
            memg_iva, memg_ivand, memg_retencion, memg_reteasum, memg_retivacomun, memg_retivasimp, memg_retivand)
            values (10018, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
            '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, :paismenor, :menorpagond,
            :menoriva, :menorivand, :menorrtf, :menorrtfa, :menorrtivac, :menorrtivas, :menorrtivan);
        END
    END

end^

SET TERM ; ^


SET TERM ^ ;

create or alter procedure SALDO_CUENTAF (
    CUENTA varchar(20),
    FECHA char(8))
returns (
    SALDO numeric(18,2))
AS
DECLARE VARIABLE AUX VARCHAR(20);
DECLARE VARIABLE SALDOAUX numeric(18,2);
declare variable FEC CHAR(8);
declare variable CTAFIN VARCHAR(20);
BEGIN
/* Busca la fecha del último movimiento de la cuenta antes de la fecha */
SELECT  MAX(SACU_FECHA) FROM SALDOS_CUENTAS
  WHERE (CUEN_COD = :CUENTA) AND (SACU_FECHA <= :FECHA) INTO :FEC;
IF (FEC IS NULL) THEN
  SALDO = 0;
ELSE
  /* Con la fecha máxima calcule el nuevo saldo */
  SELECT (SACU_SALDO + SACU_DEBITO - SACU_CREDITO) FROM SALDOS_CUENTAS
    WHERE (CUEN_COD = :CUENTA) AND (SACU_FECHA = :FEC) INTO :SALDO;
SUSPEND;
END^

SET TERM ; ^

/* Following GRANT statetements are generated automatically */

GRANT SELECT ON CUENTAS TO PROCEDURE SALDO_CUENTAF;
GRANT SELECT ON SALDOS_CUENTAS TO PROCEDURE SALDO_CUENTAF;

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE SALDO_CUENTAF TO "PUBLIC";

/* 20120208B */
/* RETENCIONES E IVA DEBEN SER POSITIVOS */
/* CUENTA APARTE PARA EL IVA NO DESCONTABLE */
ALTER TABLE MEDIOSMAG_CUENTAS
ADD MMCU_CTAIVAND T_CTA_CONTABLE;

SET TERM ^ ;

CREATE OR ALTER procedure MM_1001_8 (
    INICIO char(8),
    FINAL char(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable SIMPLIFICA CHAR(1) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAIS CHAR(3) CHARACTER SET NONE;
declare variable PAGO NUMERIC(18,0);
declare variable PAGOND NUMERIC(18,0);
declare variable IVA NUMERIC(18,0);
declare variable IVAND NUMERIC(18,0);
declare variable RTFTE NUMERIC(18,0);
declare variable RTFTEA NUMERIC(18,0);
declare variable RTIVAC NUMERIC(18,0);
declare variable RTIVAS NUMERIC(18,0);
declare variable RTIVAND NUMERIC(18,0);
declare variable DEBITOS NUMERIC(18,2);
declare variable CREDITOS NUMERIC(18,2);
declare variable MINIMO NUMERIC(18,2);
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable MENORPAGOND NUMERIC(18,2);
declare variable MENORRTF NUMERIC(18,2);
declare variable MENORRTFA NUMERIC(18,2);
declare variable MENORIVA NUMERIC(18,2);
declare variable MENORIVAND NUMERIC(18,2);
declare variable MENORRTIVAC NUMERIC(18,2);
declare variable MENORRTIVAS NUMERIC(18,2);
declare variable MENORRTIVAN NUMERIC(18,2);
declare variable TOTALTERC NUMERIC(18,2);
declare variable ITEM integer;
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable NATUR CHAR(1);
declare variable TIPOID CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor, :paismenor;
ITEM = 0;
FOR SELECT COME_ITEM, COME_RESPUESTA, COME_MINIMO, COME_NATUR FROM CONFIGURA_MEDIOSMAG
    WHERE COME_FORMATO = '10018' ORDER BY COME_ITEM INTO :idconc, :CONCEPTO , :MINIMO, :NATUR
    DO
    BEGIN
    MENORCUANTIA = 0;
    MENORPAGOND = 0;
    MENORRTF = 0;
    MENORRTFA = 0;
    MENORIVA = 0;
    MENORIVAND = 0;
    MENORRTIVAC = 0;
    MENORRTIVAS = 0;
    MENORRTIVAN = 0;
    FOR SELECT MAX(D.TERC_NIT), SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
        FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND m.mmcu_cuenta <> '' AND
        E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND
        ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0))
        GROUP BY D.TERC_NIT
        INTO :NIT, :PAGO, :debitos, :creditos
        DO
        BEGIN
        /* TOTAL POR TERCERO */
        SELECT SUM(CODE_DEBITO-CODE_CREDITO) FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M, configura_mediosmag C
            WHERE C.come_formato = 10018 AND C.come_item = M.mmcu_item AND SUBSTR(D.CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND m.mmcu_cuenta <> '' AND 
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :inicio AND ENCO_FECHA <= :final AND
            D.TERC_NIT = :NIT INTO :TOTALTERC;
        if (totalterc is null) then
            totalterc = 0;
        if (NATUR = 'D') then
            pago = debitos;
        if (NATUR = 'C') then
            pago = creditos;
        if ((TOTALTERC >= :MINIMO) AND (PAGO > 0)) then
            BEGIN
            SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO, TERC_SIMPLIFICA,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID, IT.tiid_cod
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :SIMPLIFICA,
                :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :PAIS, :TIPOID;
            if (:TIPOID <> 'J') then
                RAZONSOCIAL = '';
            /* LOS NO DEDUCIBLES */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND m.mmcu_cuenta <> '' AND 
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) AND D.code_descontable = 'N' INTO :PAGOND, :debitos, :creditos;
            if (NATUR = 'D') then
                pagond = debitos;
            if (NATUR = 'C') then
                pagond = creditos;
            if (PAGOND IS NULL) then
                PAGOND = 0;
            PAGO = PAGO - PAGOND;
            /* EL IVA DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctaiva)) = M.mmcu_ctaiva AND D.code_descontable = 'S' AND m.mmcu_ctaiva <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :iva, :debitos, :creditos;
            if (NATUR = 'D') then
                IVA = debitos;
            if (NATUR = 'C') then
                IVA = creditos;
            if (IVA IS NULL) then
                IVA = 0;
            /* EL IVA NO DESCONTABLE */
            SELECT SUM(-CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctaivand)) = M.mmcu_ctaivand AND D.code_descontable = 'N' AND m.mmcu_ctaivand <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :ivand, :debitos, :creditos;
            if (NATUR = 'D') then
                IVAND = debitos;
            if (NATUR = 'C') then
                IVAND = creditos;
            if (IVAND IS NULL) then
                IVAND = 0;
            /* LAS RETENCIONES RENTA */
            SELECT SUM(CODE_CREDITO-CODE_DEBITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctartf)) = M.mmcu_ctartf AND D.code_descontable = 'S' AND m.mmcu_ctartf <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTE, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTE = debitos;
            if (NATUR = 'C') then
                RTFTE = creditos;
            if (RTFTE IS NULL) then
                RTFTE = 0;
            /* LAS RETENCIONES RENTA ASUMIDAS */
            SELECT SUM(CODE_CREDITO-CODE_DEBITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctartf)) = M.mmcu_ctartf AND D.code_descontable = 'N' AND m.mmcu_ctartf <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTEA, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTEA = debitos;
            if (NATUR = 'C') then
                RTFTEA = creditos;
            if (RTFTEA IS NULL) then
                RTFTEA = 0;
            /* LAS RETENCIONES IVA */
            SELECT SUM(CODE_CREDITO-CODE_DEBITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctaiva)) = M.mmcu_ctartiva AND m.mmcu_ctaiva <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTIVAC, :debitos, :creditos;
            if (NATUR = 'D') then
                RTIVAC = debitos;
            if (NATUR = 'C') then
                RTIVAC = creditos;
            if (RTIVAC IS NULL) then
                RTIVAC = 0;
            if (SIMPLIFICA = 'S') then
                BEGIN
                RTIVAS = RTIVAC;
                RTIVAC = 0;
                rtivand = 0;
                END
            ELSE
                if (pais <> '169') then
                    BEGIN
                    rtivand = RTIVAC;
                    RTIVAC = 0;
                    RTIVAS = 0;
                    END
                ELSE
                    begin
                    RTIVAS = 0;
                    rtivand = 0;
                    end

            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais, memg_pagond,
                memg_iva, memg_ivand, memg_retencion, memg_reteasum, memg_retivacomun, memg_retivasimp, memg_retivand)
                values (10018, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :pago, :pais, :pagond,
                :iva, :ivand, :rtfte, :rtftea, :rtivac, :rtivas, :rtivand);
            END
        ELSE
            BEGIN
            /* LAS CUANTIAS MENORES */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND m.mmcu_cuenta <> '' AND 
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) AND D.code_descontable = 'N' INTO :PAGOND, :debitos, :creditos;
            if (PAGOND IS NULL) then
                PAGOND = 0;
            if (NATUR = 'D') then
                pagond = debitos;
            if (NATUR = 'C') then
                pagond = creditos;
            PAGO = PAGO - PAGOND;
            MENORCUANTIA = MENORCUANTIA + PAGO;
            MENORPAGOND = MENORPAGOND + PAGOND;
            /* EL IVA DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctaiva)) = M.mmcu_ctaiva AND D.code_descontable = 'S' AND m.mmcu_ctaiva <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :iva, :debitos, :creditos;
            if (NATUR = 'D') then
                IVA = debitos;
            if (NATUR = 'C') then
                IVA = creditos;
            if (IVA IS NULL) then
                IVA = 0;
            MENORIVA = MENORIVA + IVA;
            /* EL IVA NO DESCONTABLE */
            SELECT SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctaivand)) = M.mmcu_ctaivand AND D.code_descontable = 'N' AND m.mmcu_ctaivand <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :ivand, :debitos, :creditos;
            if (NATUR = 'D') then
                IVAND = debitos;
            if (NATUR = 'C') then
                IVAND = creditos;
            if (IVAND IS NULL) then
                IVAND = 0;
            MENORIVAND = MENORIVAND + IVAND;
            /* LAS RETENCIONES RENTA */
            SELECT SUM(CODE_CREDITO-CODE_DEBITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctartf)) = M.mmcu_ctartf AND D.code_descontable = 'S' AND m.mmcu_ctartf <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTE, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTE = debitos;
            if (NATUR = 'C') then
                RTFTE = creditos;
            if (RTFTE IS NULL) then
                RTFTE = 0;
            MENORRTF = MENORRTF + RTFTE;
            /* LAS RETENCIONES RENTA ASUMIDAS */
            SELECT SUM(CODE_CREDITO-CODE_DEBITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctartf)) = M.mmcu_ctartf AND D.code_descontable = 'N' AND m.mmcu_ctartf <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTFTEA, :debitos, :creditos;
            if (NATUR = 'D') then
                RTFTEA = debitos;
            if (NATUR = 'C') then
                RTFTEA = creditos;
            if (RTFTEA IS NULL) then
                RTFTEA = 0;
            MENORRTFA = MENORRTFA + RTFTEA;
            /* LAS RETENCIONES IVA */
            SELECT SUM(CODE_CREDITO-CODE_DEBITO), SUM(CODE_DEBITO), SUM(CODE_CREDITO)
            FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_ctartiva)) = M.mmcu_ctartiva AND m.mmcu_ctartiva <> '' AND
            E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND D.TERC_NIT = :NIT AND
            ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0)) INTO :RTIVAC, :debitos, :creditos;
            if (NATUR = 'D') then
                RTIVAC = debitos;
            if (NATUR = 'C') then
                RTIVAC = creditos;
            if (RTIVAC IS NULL) then
                RTIVAC = 0;
            if (SIMPLIFICA = 'S') then
                BEGIN
                RTIVAS = RTIVAC;
                RTIVAC = 0;
                rtivand = 0;
                END
            ELSE
                if (pais <> '169') then
                    BEGIN
                    rtivand = RTIVAC;
                    RTIVAC = 0;
                    RTIVAS = 0;
                    END
                ELSE
                    begin
                    RTIVAS = 0;
                    rtivand = 0;
                    end
            MENORRTIVAC = MENORIVA + RTIVAC;
            MENORRTIVAS = MENORIVA + RTIVAS;
            MENORRTIVAN = MENORIVA + RTIVAND;
            END
        END
    if (MENORCUANTIA <> 0) then
        BEGIN
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais, memg_pagond,
            memg_iva, memg_ivand, memg_retencion, memg_reteasum, memg_retivacomun, memg_retivasimp, memg_retivand)
            values (10018, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
            '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, :paismenor, :menorpagond,
            :menoriva, :menorivand, :menorrtf, :menorrtfa, :menorrtivac, :menorrtivas, :menorrtivan);
        END
    END

end^

SET TERM ; ^

UPDATE MEDIOSMAG_ARCHIVOS
SET MEDM_NOMBRE = '1001-V8 PAGOS O ABONOS EN CUENTA Y RETENCIONES PRACTICADAS',
    MEDM_VERSION = '08',
    MEDM_VALOR1 = 'PAGO DEDUCIBLE',
    MEDM_VALOR2 = 'PAGO NO DED',
    MEDM_VALOR3 = 'IVA DEDUCIBLE',
    MEDM_VALOR4 = 'IVA NO DED',
    MEDM_VALOR5 = 'RTEFTE',
    MEDM_VALOR6 = 'RTEFTE ASUMIDA',
    MEDM_VALOR7 = 'RTIVA R.COMUN',
    MEDM_VALOR8 = 'RTIVA ASUMIDA R.SIMP.',
    MEDM_VALOR9 = 'RTIVA NO DOM',
    MEDM_PROCEDIMIENTO = 'MM_1001_8',
    MEDM_ORDEN = 1
WHERE (MEDM_FORMATO = 10018);
COMMIT WORK;


/* 20120208C */

UPDATE MEDIOSMAG_ARCHIVOS
SET MEDM_FORMATO = 10037,
    MEDM_NOMBRE = '1003-V7 RETENCIONES EN LA FUENTE QUE LE PRACTICARON',
    MEDM_VERSION = '07',
    MEDM_VALOR1 = 'PAGADO',
    MEDM_VALOR2 = NULL,
    MEDM_VALOR3 = NULL,
    MEDM_VALOR4 = NULL,
    MEDM_VALOR5 = 'RETENCION',
    MEDM_VALOR6 = NULL,
    MEDM_VALOR7 = NULL,
    MEDM_VALOR8 = NULL,
    MEDM_VALOR9 = NULL,
    MEDM_PROCEDIMIENTO = 'MM_1003',
    MEDM_ORDEN = 3
WHERE (MEDM_FORMATO = 10036);


SET TERM ^ ;

CREATE OR ALTER PROCEDURE MM_1003(
    INICIO CHAR(8),
    FINAL CHAR(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAGO NUMERIC(18,0);
declare variable RETENCION NUMERIC(18,0);
declare variable ITEM INTEGER;
declare variable TIPOID CHAR(1);
begin
ITEM = 0;
FOR select COME_ITEM, COME_RESPUESTA FROM configura_mediosmag WHERE COME_FORMATO = 10037
    INTO :idconc, :CONCEPTO
    DO
    BEGIN
    FOR SELECT MAX(D.TERC_NIT), SUM(CODE_DEBITO-CODE_CREDITO), SUM(CODE_BASE)
        FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
        E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND
        ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0))
        GROUP BY D.TERC_NIT
        INTO :NIT, :RETENCION, :PAGO
        DO
        BEGIN
        if (RETENCION > 0) then
            BEGIN
            SELECT TERC_NIT, TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), IT.tiid_cod
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :NIT, :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :TIPOID;
            if (:TIPOID <> 'J') then
                RAZONSOCIAL = '';
            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2, 
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_retencion)
                values (10037, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :pago, :retencion);
            END
        END
    END
end
^

SET TERM ; ^


/* 20120208D */

INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10078, '1007-V8 INGRESOS RECIBIDOS', '08', 'INGRESOS', 'ING CONSORCIOS', 'ING MANDATO', 'ING MINERALES', 'ING FIDUCIA', 'ING TERCEROS', 'DEVOLUCIONES', NULL, NULL, 'MM_10078', 6);
COMMIT WORK;

SET TERM ^ ;

CREATE OR ALTER PROCEDURE MM_10078(
    INICIO CHAR(8),
    FINAL CHAR(8))
AS
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable PAIS VARCHAR(3) CHARACTER SET NONE;
declare variable INGRESO NUMERIC(18,0);
declare variable DEVOLUCION NUMERIC(18,0);
declare variable ITEM INTEGER;
declare variable MINIMO NUMERIC(18,2);
declare variable MENORCUANTIAI NUMERIC(18,2);
declare variable MENORCUANTIAD NUMERIC(18,2);
declare variable TOTALTERC NUMERIC(18,2);
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable TIPOID CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT INTO :paismenor;
ITEM = 0;
MENORCUANTIAI = 0;
MENORCUANTIAD = 0;
/* INGRESOS OPERACIONALES */
select COME_RESPUESTA, COME_MINIMO FROM configura_mediosmag WHERE COME_ITEM = 51 INTO :CONCEPTO, :MINIMO;
FOR SELECT MAX(D.TERC_NIT), SUM(CODE_CREDITO), SUM(CODE_DEBITO)
    FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
    WHERE M.mmcu_item = 51 AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
    E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND
    ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0))
    GROUP BY D.TERC_NIT
    INTO :NIT, :ingreso, :devolucion
    DO
    BEGIN
    SELECT SUM(CODE_CREDITO-CODE_DEBITO) FROM comprobante_detalle D WHERE TERC_NIT = :NIT AND
        SUBSTR(CUEN_COD,1,1) = '4' AND EXISTS (SELECT ENCO_CONSEC FROM comprobante_encabezado WHERE
        ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND ENCO_CONSEC = D.enco_consec)
        INTO TOTALTERC;
    if (INGRESO IS NULL) then
        INGRESO = 0;
    if (DEVOLUCION IS NULL) then
        DEVOLUCION = 0;
    if ((TOTALTERC >= MINIMO) AND ((INGRESO > 0) or (DEVOLUCION > 0))) then
        BEGIN
        SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO, PAIS_ID, IT.tiid_cod
            FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
            INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :PAIS, :TIPOID;
        if (:TIPOID <> 'J') then
            RAZONSOCIAL = '';
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2, 
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retivacomun, memg_pais)
            values (10078, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
            :nombre1, :nombre2, :razonsocial, :ingreso, :devolucion, :pais);
        END
    ELSE
        BEGIN
        MENORCUANTIAI = MENORCUANTIAI + INGRESO;
        MENORCUANTIAD = MENORCUANTIAD + DEVOLUCION;
        END
    END
if ((MENORCUANTIAI > 0) or (MENORCUANTIAD > 0)) then
    BEGIN
    ITEM = ITEM + 1;
    insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
        memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retivacomun, memg_pais)
        values (10078, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
        '', '', 'CUANTIAS MENORES', :menorcuantiai, :menorcuantiad, :paismenor);
    END
/* INGRESOS NO-OPERACIONALES */
MENORCUANTIAI = 0;
MENORCUANTIAD = 0;
select COME_RESPUESTA, COME_MINIMO FROM configura_mediosmag WHERE COME_ITEM = 52 INTO :CONCEPTO, :MINIMO;
FOR SELECT MAX(D.TERC_NIT), SUM(CODE_CREDITO), SUM(CODE_DEBITO)
    FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
    WHERE M.mmcu_item = 52 AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
    E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND
    ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0))
    GROUP BY D.TERC_NIT
    INTO :NIT, :ingreso,  :devolucion
    DO
    BEGIN
    SELECT SUM(CODE_CREDITO-CODE_DEBITO) FROM comprobante_detalle D WHERE TERC_NIT = :NIT AND
        SUBSTR(CUEN_COD,1,1) = '4' AND EXISTS (SELECT ENCO_CONSEC FROM comprobante_encabezado WHERE
        ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND ENCO_CONSEC = D.enco_consec)
        INTO TOTALTERC;
    if (INGRESO IS NULL) then
        INGRESO = 0;
    if (DEVOLUCION IS NULL) then
        DEVOLUCION = 0;
    if ((TOTALTERC >= MINIMO) AND ((INGRESO > 0) or (DEVOLUCION > 0))) then
        BEGIN
        SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO, PAIS_ID, IT.tiid_cod
            FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
            INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :PAIS, :TIPOID;
        if (:TIPOID <> 'J') then
            RAZONSOCIAL = '';
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2, 
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retivacomun, memg_pais)
            values (10078, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
            :nombre1, :nombre2, :razonsocial, :ingreso, :devolucion, :pais);
        END
    ELSE
        BEGIN
        MENORCUANTIAI = MENORCUANTIAI + INGRESO;
        MENORCUANTIAD = MENORCUANTIAD + DEVOLUCION;
        END
    END
if ((MENORCUANTIAI > 0) or (MENORCUANTIAD > 0)) then
    BEGIN
    ITEM = ITEM + 1;
    insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
        memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retivacomun, memg_pais)
        values (10078, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
        '', '', 'CUANTIAS MENORES', :menorcuantiai, :menorcuantiad, :paismenor);
    END
/* INGRESOS FINANCIEROS*/
MENORCUANTIAI = 0;
MENORCUANTIAD = 0;
select COME_RESPUESTA, COME_MINIMO FROM configura_mediosmag WHERE COME_ITEM = 53 INTO :CONCEPTO, :MINIMO;
FOR SELECT MAX(D.TERC_NIT), SUM(CODE_CREDITO), SUM(CODE_DEBITO)
    FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
    WHERE M.mmcu_item = 53 AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
    E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND
    ((CODE_CREDITO <> 0) or (CODE_DEBITO <> 0))
    GROUP BY D.TERC_NIT
    INTO :NIT, :ingreso,  :devolucion
    DO
    BEGIN
    SELECT SUM(CODE_CREDITO-CODE_DEBITO) FROM comprobante_detalle D WHERE TERC_NIT = :NIT AND
        SUBSTR(CUEN_COD,1,1) = '4' AND EXISTS (SELECT ENCO_CONSEC FROM comprobante_encabezado WHERE
        ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL AND ENCO_CONSEC = D.enco_consec)
        INTO TOTALTERC;
    if (INGRESO IS NULL) then
        INGRESO = 0;
    if (DEVOLUCION IS NULL) then
        DEVOLUCION = 0;
    if ((TOTALTERC >= MINIMO) AND ((INGRESO > 0) or (DEVOLUCION > 0))) then
        BEGIN
        SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO, PAIS_ID, IT.tiid_cod
            FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
            INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :PAIS, :TIPOID;
        if (:TIPOID <> 'J') then
            RAZONSOCIAL = '';
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2, 
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retivacomun, memg_pais)
            values (10078, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
            :nombre1, :nombre2, :razonsocial, :ingreso, :devolucion, :pais);
        END
    ELSE
        BEGIN
        MENORCUANTIAI = MENORCUANTIAI + INGRESO;
        MENORCUANTIAD = MENORCUANTIAD + DEVOLUCION;
        END
    END
if ((MENORCUANTIAI > 0) or (MENORCUANTIAD > 0)) then
    BEGIN
    ITEM = ITEM + 1;
    insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
        memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retivacomun, memg_pais)
        values (10078, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
        '', '', 'CUANTIAS MENORES', :menorcuantiai, :menorcuantiad, :paismenor);
    END
end
^

SET TERM ; ^

INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100781, 'CONCEPTO INGRESOS OPERACIONALES', '4001', NULL, 10078, 1000000, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100782, 'CONCEPTO INGRESOS NO OPERACIONALES', '4002', NULL, 10078, 1000000, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100783, 'CONCEPTO INGRESOS POR INTERESES Y RENDIMIENTOS', '4003', NULL, 10078, 1000000, NULL);
COMMIT WORK;

GRANT EXECUTE ON PROCEDURE MM_10078 TO PUBLIC;

/* 20120208E */
CREATE INDEX SALDOS_TERCEROS_IDX1
ON SALDOS_TERCEROS (TERC_NIT);

SET TERM ^ ;

CREATE OR ALTER PROCEDURE MM_1009(
    INICIO CHAR(8),
    FINAL CHAR(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAIS CHAR(3) CHARACTER SET NONE;
declare variable SALDO NUMERIC(18,0);
declare variable SALDOAUX NUMERIC(18,0);
declare variable CUENTA VARCHAR(20);
declare variable MINIMO NUMERIC(18,0);
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable ITEM INTEGER;
declare variable ANO CHAR(4);
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable TIPOID CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor, :paismenor;
ITEM = 0;
ANO = SUBSTR(INICIO,1,4);
FOR SELECT COME_ITEM, COME_RESPUESTA, COME_MINIMO FROM configura_mediosmag
    WHERE COME_FORMATO = 10097 INTO :idconc, :CONCEPTO, :MINIMO
    DO
    BEGIN
    MENORCUANTIA = 0;
    FOR SELECT distinct TERC_NIT FROM SALDOS_TERCEROS S, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta
        ORDER BY TERC_NIT INTO :NIT
        do
        BEGIN
        SALDO = 0;
        FOR SELECT DISTINCT CUEN_COD FROM SALDOS_TERCEROS S, mediosmag_cuentas M
            WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND TERC_NIT = :NIT INTO :CUENTA
            DO
            BEGIN
            EXECUTE PROCEDURE SALDO_TERCERO_MES(CUENTA, NIT, ANO, 12, 'N') RETURNING_VALUES (SALDOAUX);
            SALDO = SALDO + SALDOAUX;
            END
        SALDO = SALDO * -1;
        if (SALDO >= :MINIMO) then
            BEGIN
            SELECT TERC_NIT, TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID, IT.tiid_cod
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :NIT, :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :PAIS, :TIPOID;
            if (:TIPOID <> 'J') then
                RAZONSOCIAL = '';
            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
                values (10097, :ANO, :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :SALDO, :pais);
            END
        ELSE
            MENORCUANTIA = MENORCUANTIA + SALDO;
        END
    if (MENORCUANTIA <> 0) then
        BEGIN
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
            values (10097, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
                '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, :paismenor);
        END
    END
end
^

SET TERM ; ^


/* 20120208F */
SET TERM ^ ;

CREATE OR ALTER PROCEDURE MM_1008(
    INICIO CHAR(8),
    FINAL CHAR(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAIS CHAR(3) CHARACTER SET NONE;
declare variable SALDO NUMERIC(18,0);
declare variable SALDOAUX NUMERIC(18,0);
declare variable CUENTA VARCHAR(20);
declare variable MINIMO NUMERIC(18,0);
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable ITEM INTEGER;
declare variable ANO CHAR(4);
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable TIPOID CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor, :paismenor;
ITEM = 0;
ANO = SUBSTR(INICIO,1,4);
/* CXC CLIENTES */
FOR select COME_ITEM, COME_RESPUESTA, COME_MINIMO
    FROM configura_mediosmag WHERE COME_FORMATO = 10087 INTO :idconc, :CONCEPTO, :MINIMO
    DO
    BEGIN
    MENORCUANTIA = 0;
    FOR SELECT distinct TERC_NIT FROM SALDOS_TERCEROS S, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta
        ORDER BY TERC_NIT INTO :NIT
        do
        BEGIN
        SALDO = 0;
        FOR SELECT DISTINCT CUEN_COD FROM SALDOS_TERCEROS S, mediosmag_cuentas M
            WHERE TERC_NIT = :NIT AND M.mmcu_item = :idconc AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta
            INTO :CUENTA
            DO
            BEGIN
            EXECUTE PROCEDURE SALDO_TERCERO_MES(CUENTA, NIT, ANO, 12, 'N') RETURNING_VALUES (SALDOAUX);
            SALDO = SALDO + SALDOAUX;
            END
        if (SALDO >= MINIMO) then
            BEGIN
            SELECT TERC_NIT, TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID, IT.tiid_cod
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :NIT, :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :PAIS, :TIPOID;
            if (:TIPOID <> 'J') then
                RAZONSOCIAL = '';
            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
                values (10087, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :SALDO, :pais);
            END
        ELSE
            MENORCUANTIA = MENORCUANTIA + SALDO;
        END
    if (MENORCUANTIA <> 0) then
        BEGIN
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
            values (10087, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
            '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, :paismenor);
        END
    END
end
^

SET TERM ; ^


/* 20120208G */
/* MM 1011 */

INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8004, 'VR SOLICITADO PRIMA COLOCACION DE ACCIONES', '8004', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8005, 'VR SOLICITADO POR ENAJENACION DE ACCIONES', '8005', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8006, 'VR SOLICITADO POR ENAJENACION DE DERIVADOS VALORES', '8006', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8007, 'VR SOLICITADO CAPITALIZACION REVALORIZACION PATRIMONIO', '8007', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8008, 'VR SOLICITADO INDEMNIZACIONES SEGUROS DE DAŅO', '8008', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8009, 'VR SOLICITADO DESTRUCCION/RENOVACION CULTIVOS', '8009', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8010, 'VR SOLICITADO APORTS A SISTEMAS TRANSPORTE', '8010', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8011, 'VR SOLICITADO INGRESOS COMISION NAL TV', '8011', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8012, 'VR SOLICITADO DISTRIBUCION DE UTILIDADES', '8012', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8013, 'VR SOLICITADO LIBERACION RESERVAS', '8013', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8014, 'VR SOLICITADO INCENTIVO CAPITALIZACION RURAL', '8014', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8015, 'VR SOLICITADO UTILIDAD EN VENTA CASA HABITACION', '8015', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8016, 'VR SOLICITADO RETRIBUCION RECOMPENSA', '8016', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8017, 'VR SOLICITADO ENAJENACION VOLUNTARIA BINES EXPROPIADOS', '8017', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8018, 'VR SOLICITADO UTIIDFAD EN PRIMAS DE LOCALIZACION VIV.', '8018', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8019, 'VR SOLICITADO APORTES OBLIGATORIOS A FONDOS DE PENSIONES', '8019', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8020, 'VR SOLICITADO APORTES VOLUNTARIOS A FONDOS DE PENSIONES', '8020', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8021, 'VR SOLICITADO AHORRO LAGO PLAZO CONSTRUCCION', '8021', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8022, 'VR SOLICITADO APORTES A FONDOS DE CESANTIAS', '8022', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8023, 'VR SOLICITADO SUBSIDIOS AGRO INGRESO SEGURO', '8023', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8024, 'VR SOLICITADO DIVIDENDOS EMPRESAS EDITORIALES', '8024', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8025, 'VR SOLICITADO LIQUIDACION SOCIEDADES LIMITADAS', '8025', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8026, 'VR SOLICITADO DONCIONES RECIBIDAS PARA MOV. POLITICOS', '8026', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8027, 'VR SOLICITADO UTILIDAD ENAJENACION VENTAS INMUEBLES', '8027', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8028, 'VR SOLICITADO UTILIDAD EN PROCESOS DE CAPITALIZACION', '8028', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8029, 'VR SOLICITADO INGRESOS DESARROLLOS CIENTIFICOS', '8029', NULL, 10116, 0, NULL);

INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8121, 'RENTA EXENTA POR DERCHOS DE AUTOR', '8004', NULL, 10116, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (8124, 'RENTA EXENTA POR INVERSION VIVIENDA ARRENDAR', '8004', NULL, 10116, 0, NULL);
COMMIT WORK;

SET TERM ^ ;

CREATE OR ALTER PROCEDURE MM_1011(
    INICIO CHAR(8),
    FINAL CHAR(8))
AS
declare variable CONCEPTO INTEGER;
declare variable SALDO NUMERIC(18,0);
declare variable SALDOAUX NUMERIC(18,0);
declare variable ITEM INTEGER;
declare variable ANO CHAR(4);
declare variable CUENTA VARCHAR(20);
begin
ITEM = 1;
ANO = SUBSTR(INICIO,1,4);
FOR SELECT COME_ITEM, COME_RESPUESTA FROM CONFIGURA_MEDIOSMAG
    WHERE COME_FORMATO = 10116
    ORDER BY COME_RESPUESTA INTO :ITEM, :CONCEPTO
    DO
    BEGIN
    SALDO = 0;
    FOR SELECT mmcu_cuenta FROM mediosmag_cuentas
        WHERE mmcu_item = :item INTO :cuenta
        DO
        BEGIN
        EXECUTE PROCEDURE saldo_cuentaf (CUENTA, FINAL) returning_values (SALDOAUX);
        SALDO = SALDO + SALDOAUX;
        END
    if (saldo <> 0) then
        begin
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_pago)
            values (10116, :ANO, :item,  :concepto, ABS(:SALDO));
        ITEM = ITEM + 1;
        end
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER TRIGGER COMPROBANTE_ENCABEZADO_BI FOR COMPROBANTE_ENCABEZADO
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE FECBLO CHAR(8);
declare variable ANO INTEGER;
declare variable mes INTEGER;
declare variable dia INTEGER;
declare variable DIASMAX INTEGER;
declare variable EXISTE INTEGER;
declare variable NUMERO CHAR(8);
declare variable AUTOM CHAR(1);
declare variable ANOINI CHAR(4);
declare variable MESINI CHAR(2);
declare variable VALFECHA CHAR(1);
BEGIN
if (new.enco_descontable is null) then
    new.enco_descontable = 'S';
/* VERIFIQUE QUE LA FECHA SEA VALIDA (POSTERIOR AL BLOQUEO) */
EXECUTE PROCEDURE LEE_CONFIGURACION ('CONTABILIDAD', 'GENERAL', 'FECHA DE BLOQUEO') RETURNING_VALUES (:FECBLO); 
IF (NEW.ENCO_FECHA < FECBLO) THEN
    EXCEPTION CONTABILIDAD_BLOQUEADA;
ELSE
    BEGIN
    /* VERIFIQUE QUE SEA UN DIA VALIDO (P.E. RECHACE FEBRERO 30) */
    ANO = CAST(SUBSTR(NEW.ENCO_FECHA,  1, 4) AS INTEGER);
    MES = CAST(SUBSTR(NEW.ENCO_FECHA,  5, 6) AS INTEGER);
    DIA = CAST(SUBSTR(NEW.ENCO_FECHA,  7, 8) AS INTEGER);
    execute procedure dias_mes(MES, ANO) returning_values (DIASMAX);
    if (DIA > DIASMAX) then
        EXCEPTION FECHA_NO_VALIDA;
    ELSE
        BEGIN
        /* VALIDE QUE NO SE ANTERIOR AL INICIO DE LA COMPANIA */
        VALFECHA = 'N';
        EXECUTE PROCEDURE LEE_CONFIGURACION ('CONTABILIDAD', 'GENERAL', 'AŅO DE INICIO') RETURNING_VALUES (:ANOINI);
        if (CAST(ANOINI AS INTEGER) < ANO) then
            VALFECHA = 'S';
        else
            if (CAST(ANOINI AS INTEGER) = ANO) then
                BEGIN
                EXECUTE PROCEDURE LEE_CONFIGURACION ('CONTABILIDAD', 'GENERAL', 'MES DE INICIO') RETURNING_VALUES (:MESINI);
                if (CAST(MESINI AS INTEGER) <= MES) then
                    VALFECHA = 'S';
                END
        if (VALFECHA = 'N') then
            EXCEPTION fecha_anterior_inicio;

        /* ACTUALICE EL PREFIJO */
        SELECT PREF_NUMERO, PRCO_AUTO FROM PREFIJOS_CONTA WHERE TICO_COD = NEW.TICO_COD AND PRCO_PREF = NEW.PRCO_PREF INTO :NUMERO, :AUTOM;
        if ((AUTOM = 'S') or (CAST(NUMERO AS INTEGER) = CAST(NEW.ENCO_NUMERO AS INTEGER))) then
            BEGIN
            NEW.ENCO_NUMERO = :NUMERO;
            NUMERO = CAST((CAST(NUMERO AS INTEGER) + 1) AS CHAR(6));
            EXECUTE PROCEDURE COMPLETA_CEROS (NUMERO) returning_values(NUMERO);
            UPDATE PREFIJOS_CONTA
                SET PREF_NUMERO = :NUMERO
                WHERE TICO_COD = NEW.TICO_COD AND PRCO_PREF = NEW.PRCO_PREF;
            END
        /* Verifique que el numero no existe previamente */
        SELECT COUNT(*) FROM comprobante_encabezado WHERE TICO_COD = NEW.tico_cod AND PRCO_PREF = NEW.prco_pref AND ENCO_NUMERO = NEW.enco_numero INTO :EXISTE;
        if (EXISTE > 0) then
            EXCEPTION COMPROBANTE_REGISTRADO;
        END
    END
END^

SET TERM ; ^

CREATE INDEX CONFIGURA_MEDIOSMAG_IDX1
ON CONFIGURA_MEDIOSMAG (COME_FORMATO);


SET TERM ^ ;

CREATE OR ALTER procedure MM_1008 (
    INICIO char(8),
    FINAL char(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAIS CHAR(3) CHARACTER SET NONE;
declare variable SALDO NUMERIC(18,0);
declare variable SALDOAUX NUMERIC(18,0);
declare variable CUENTA VARCHAR(20);
declare variable MINIMO NUMERIC(18,0);
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable ITEM INTEGER;
declare variable ANO CHAR(4);
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable TIPOID CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor, :paismenor;
ITEM = 0;
ANO = SUBSTR(INICIO,1,4);
/* CXC CLIENTES */
FOR select COME_ITEM, COME_RESPUESTA, COME_MINIMO
    FROM configura_mediosmag WHERE COME_FORMATO = 10087 INTO :idconc, :CONCEPTO, :MINIMO
    DO
    BEGIN
    MENORCUANTIA = 0;
    FOR SELECT distinct TERC_NIT FROM SALDOS_TERCEROS S, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND CUEN_COD >= M.mmcu_cuenta AND CUEN_COD <= M.mmcu_cuenta || '999999'
        ORDER BY TERC_NIT INTO :NIT
        do
        BEGIN
        SALDO = 0;
        FOR SELECT DISTINCT CUEN_COD FROM SALDOS_TERCEROS S, mediosmag_cuentas M
            WHERE TERC_NIT = :NIT AND M.mmcu_item = :IDCONC AND CUEN_COD >= M.mmcu_cuenta AND CUEN_COD <= M.mmcu_cuenta || '999999'
            INTO :CUENTA
            DO
            BEGIN
            EXECUTE PROCEDURE SALDO_TERCERO_MES(CUENTA, NIT, ANO, 12, 'N') RETURNING_VALUES (SALDOAUX);
            SALDO = SALDO + SALDOAUX;
            END
        if (SALDO >= MINIMO) then
            BEGIN
            SELECT TERC_NIT, TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID, IT.tiid_cod
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :NIT, :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :PAIS, :TIPOID;
            if (:TIPOID <> 'J') then
                RAZONSOCIAL = '';
            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
                values (10087, substr(:inicio,1,4), :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :SALDO, :pais);
            END
        ELSE
            MENORCUANTIA = MENORCUANTIA + SALDO;
        END
    if (MENORCUANTIA <> 0) then
        BEGIN
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
            values (10087, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
            '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, :paismenor);
        END
    END
end^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER procedure MM_1009 (
    INICIO char(8),
    FINAL char(8))
AS
declare variable IDCONC INTEGER;
declare variable CONCEPTO INTEGER;
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable DIRECCION VARCHAR(200) CHARACTER SET NONE;
declare variable DEPARTAMENTO CHAR(2) CHARACTER SET NONE;
declare variable MUNICIPIO CHAR(3) CHARACTER SET NONE;
declare variable PAIS CHAR(3) CHARACTER SET NONE;
declare variable SALDO NUMERIC(18,0);
declare variable SALDOAUX NUMERIC(18,0);
declare variable CUENTA VARCHAR(20);
declare variable MINIMO NUMERIC(18,0);
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable ITEM INTEGER;
declare variable ANO CHAR(4);
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable PAISMENOR CHAR(3) CHARACTER SET NONE;
declare variable TIPOID CHAR(1);
begin
EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor, :paismenor;
ITEM = 0;
ANO = SUBSTR(INICIO,1,4);
FOR SELECT COME_ITEM, COME_RESPUESTA, COME_MINIMO FROM configura_mediosmag
    WHERE COME_FORMATO = 10097 INTO :idconc, :CONCEPTO, :MINIMO
    DO
    BEGIN
    MENORCUANTIA = 0;
    FOR SELECT distinct TERC_NIT FROM SALDOS_TERCEROS S, mediosmag_cuentas M
        WHERE M.mmcu_item = :idconc AND CUEN_COD >= M.mmcu_cuenta AND CUEN_COD <= M.mmcu_cuenta || '999999'
        ORDER BY TERC_NIT INTO :NIT
        do
        BEGIN
        SALDO = 0;
        FOR SELECT DISTINCT CUEN_COD FROM SALDOS_TERCEROS S, mediosmag_cuentas M
            WHERE TERC_NIT = :NIT AND M.mmcu_item = :IDCONC AND CUEN_COD >= M.mmcu_cuenta AND CUEN_COD <= M.mmcu_cuenta || '999999'
            INTO :CUENTA
            DO
            BEGIN
            EXECUTE PROCEDURE SALDO_TERCERO_MES(CUENTA, NIT, ANO, 12, 'N') RETURNING_VALUES (SALDOAUX);
            SALDO = SALDO + SALDOAUX;
            END
        SALDO = SALDO * -1;
        if (SALDO >= :MINIMO) then
            BEGIN
            SELECT TERC_NIT, TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO,
                TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5), PAIS_ID, IT.tiid_cod
                FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
                INTO :NIT, :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC, :DIRECCION, :DEPARTAMENTO, :MUNICIPIO, :PAIS, :TIPOID;
            if (:TIPOID <> 'J') then
                RAZONSOCIAL = '';
            ITEM = ITEM + 1;
            insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
                memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
                values (10097, :ANO, :item,  :concepto, :tipodoc, :nit, :dv, :apellido1, :apellido2,
                :nombre1, :nombre2, :razonsocial, :direccion, :departamento, :municipio, :SALDO, :pais);
            END
        ELSE
            MENORCUANTIA = MENORCUANTIA + SALDO;
        END
    if (MENORCUANTIA <> 0) then
        BEGIN
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_concepto, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_pais)
            values (10097, substr(:inicio,1,4), :item,  :concepto, 43, '222222222', '', '', '',
                '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, :paismenor);
        END
    END
end^

SET TERM ; ^


/* mm1005 y 1006 v. 7 */

INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10057, '1005-V7 IMPUESTO A LAS VENTAS DESCONTABLE', '07', 'VR.IMPUESTO', 'IVA DEVOL.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_10057', 4);
INSERT INTO MEDIOSMAG_ARCHIVOS (MEDM_FORMATO, MEDM_NOMBRE, MEDM_VERSION, MEDM_VALOR1, MEDM_VALOR2, MEDM_VALOR3, MEDM_VALOR4, MEDM_VALOR5, MEDM_VALOR6, MEDM_VALOR7, MEDM_VALOR8, MEDM_VALOR9, MEDM_PROCEDIMIENTO, MEDM_ORDEN) VALUES (10067, '1006-V7 IMPUESTO A LAS VENTAS GENERADO', '07', 'IAV GENERADO', 'IVA RECUPERADO', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'MM_10067', 5);

INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100571, '1005v7 - IMPUESTO A LAS VENTAS DESCONTABLE', '', NULL, 10057, 0, NULL);
INSERT INTO CONFIGURA_MEDIOSMAG (COME_ITEM, COME_DESCRIPCION, COME_RESPUESTA, COME_CUENTA, COME_FORMATO, COME_MINIMO, COME_NATUR) VALUES (100671, '1006v7 - IMPUESTO A LAS VENTAS GENERADO', '', NULL, 10067, 137900, NULL);


INSERT INTO MEDIOSMAG_CUENTAS (MMCU_ITEM, MMCU_CUENTA, MMCU_CONS, MMCU_CTARTF, MMCU_CTAIVA, MMCU_CTARTIVA, MMCU_CTAIVAND) VALUES (100571, '240810', 51, NULL, NULL, NULL, NULL);
INSERT INTO MEDIOSMAG_CUENTAS (MMCU_ITEM, MMCU_CUENTA, MMCU_CONS, MMCU_CTARTF, MMCU_CTAIVA, MMCU_CTARTIVA, MMCU_CTAIVAND) VALUES (100671, '240805', 52, NULL, NULL, NULL, NULL);
commit work;

SET TERM ^ ;

CREATE OR ALTER procedure MM_10057 (
    INICIO char(8),
    FINAL char(8))
AS
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable IVA NUMERIC(18,0);
declare variable IVADE NUMERIC(18,0);
declare variable ITEM INTEGER;
begin
ITEM = 0;
/* IVA DESCONTABLE */
FOR SELECT MAX(D.TERC_NIT), SUM(CODE_DEBITO), sum(CODE_CREDITO)
    FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
    WHERE M.mmcu_item = 100571 AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
    E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL
    GROUP BY D.TERC_NIT
    INTO :NIT, :IVA, :IVADE
    DO
    BEGIN
    if (IVA IS NULL) then
        IVA = 0;
    if (IVADE IS NULL) then
        IVADE = 0;
    if ((IVA > 0) or (IVADE > 0)) then
        BEGIN
        SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO
            FROM TERCEROS T, TIPO_ID IT WHERE TERC_NIT = :NIT AND T.TERC_TIPOID = IT.TIID_COD
            INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC;
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retencion)
            values (10057, substr(:inicio,1,4), :item, :tipodoc, :nit, :dv, :apellido1, :apellido2,
            :nombre1, :nombre2, :razonsocial, :iva, :ivade);
        END
    END
end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE mm_10057 TO PUBLIC;

SET TERM ^ ;

create or alter procedure MM_10067 (
    INICIO char(8),
    FINAL char(8))
AS
declare variable TIPODOC INTEGER;
declare variable NIT VARCHAR(15) CHARACTER SET NONE;
declare variable DV CHAR(1) CHARACTER SET NONE;
declare variable APELLIDO1 VARCHAR(60) CHARACTER SET NONE;
declare variable APELLIDO2 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE1 VARCHAR(60) CHARACTER SET NONE;
declare variable NOMBRE2 VARCHAR(60) CHARACTER SET NONE;
declare variable RAZONSOCIAL VARCHAR(450) CHARACTER SET NONE;
declare variable IVA NUMERIC(18,0);
declare variable IVADE NUMERIC(18,0);
declare variable ITEM INTEGER;
declare variable DIRMENOR VARCHAR(200) CHARACTER SET NONE;
declare variable DEPMENOR CHAR(2) CHARACTER SET NONE;
declare variable MUNMENOR CHAR(3) CHARACTER SET NONE;
declare variable MENORCUANTIA NUMERIC(18,2);
declare variable MINIMO NUMERIC(18,2);
begin
ITEM = 0;
MENORCUANTIA = 0;
SELECT COME_MINIMO FROM configura_mediosmag WHERE COME_ITEM = 100671 INTO :MINIMO;
/* IVA GENERADO */
FOR SELECT MAX(D.TERC_NIT), SUM(CODE_CREDITO), SUM(CODE_DEBITO)
    FROM COMPROBANTE_DETALLE D, COMPROBANTE_ENCABEZADO E, mediosmag_cuentas M
    WHERE M.mmcu_item = 100671 AND SUBSTR(CUEN_COD,1,STRLEN(M.mmcu_cuenta)) = M.mmcu_cuenta AND
    E.ENCO_CONSEC = D.ENCO_CONSEC AND ENCO_FECHA >= :INICIO AND ENCO_FECHA <= :FINAL
    GROUP BY D.TERC_NIT
    INTO :NIT, :IVA, :IVADE
    DO
    BEGIN
    if (IVA IS NULL) then
        IVA = 0;
    if (IVADE IS NULL) then
        IVADE = 0;
    if ((IVA > MINIMO) or (IVADE > 0)) then
        BEGIN
        SELECT TERC_NOM, TERC_NOMBRE1, TERC_NOMBRE2, TERC_APELLIDO1, TERC_APELLIDO2, TERC_DV, TIID_CODIGO
            FROM TERCEROS T left outer join TIPO_ID IT on (T.TERC_TIPOID = IT.TIID_COD) WHERE TERC_NIT = :NIT
            INTO :RAZONSOCIAL, :NOMBRE1, :NOMBRE2, :APELLIDO1, :APELLIDO2, :DV, :TIPODOC;
        ITEM = ITEM + 1;
        insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
            memg_nombre1, memg_nombre2, memg_razonsocial, memg_pago, memg_retencion)
            values (1006, substr(:inicio,1,4), :item, :tipodoc, :nit, :dv, :apellido1, :apellido2,
            :nombre1, :nombre2, :razonsocial, :iva, :ivade);
        END
     ELSE
        MENORCUANTIA = MENORCUANTIA + iva;
    END
if (MENORCUANTIA > 0) then
    BEGIN
    EXECUTE PROCEDURE lee_configuracion('CONTABILIDAD', 'GENERAL', 'NIT COMPAŅIA') returning_values (:NIT);
    SELECT TERC_DIR, SUBSTR(CIUD_COD,1,2), SUBSTR(CIUD_COD,3,5) FROM TERCEROS WHERE TERC_NIT = :NIT
    INTO :dirmenor, :depmenor, :munmenor;
    ITEM = ITEM + 1;
    insert into medios_magneticos_datos (memg_formato, memg_ano, memg_item, memg_tipodoc, memg_nit, memg_dv,memg_apellido1, memg_apellido2,
        memg_nombre1, memg_nombre2, memg_razonsocial, memg_direccion, memg_departamento, memg_municipio, memg_pago, memg_retencion)
        values (10067, substr(:inicio,1,4), :item,  43, '222222222', '', '', '',
        '', '', 'CUANTIAS MENORES', :dirmenor, :depmenor, :munmenor, :menorcuantia, 0);
    END
end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE mm_10067 TO PUBLIC;

update revision r set r.revi_fecha = '2012/03/05';
COMMIT WORK;

