/* integer overflow en salidas consumo * cantidad */
SET TERM ^ ;

CREATE OR ALTER procedure REP_COMPROBANTES_INV (
    TIPO integer,
    DETALLE char(1),
    FECINI date,
    FECFIN date,
    PREFIJO varchar(4),
    ANULADOS char(1),
    SUBEMPRESA integer)
returns (
    NOMTIPO varchar(30),
    ID integer,
    PREF varchar(4),
    NUMERO varchar(6),
    FECHA date,
    VENCE date,
    CONCEPTO varchar(60),
    REFER varchar(60),
    CODBODORI varchar(2),
    NOMBODORI varchar(30),
    CODBODDES varchar(2),
    NOMBODDES varchar(30),
    NOMTERCERO varchar(60),
    PRODCODBAR varchar(15),
    PRODDES varchar(60),
    PRODCANT numeric(18,4),
    PRODUNIDAD varchar(8),
    PRODLOTE varchar(15),
    NIT varchar(20),
    TURNO varchar(60),
    OPERARIO varchar(60),
    MAQUINA varchar(60),
    OBS blob sub_type BINARY segment size 80,
    ITEM integer,
    ARTICULO varchar(15),
    CODBAR varchar(15),
    ARTIDES varchar(60),
    CANT numeric(18,4),
    EXANT numeric(18,4),
    UNIDAD varchar(8),
    BODITEM varchar(2),
    COSTO numeric(18,2),
    ULTCOSTO numeric(18,2),
    PRECIO numeric(18,2),
    DTOPORC numeric(9,2),
    DTOMONTO numeric(18,2),
    IVAPORC numeric(9,2),
    IVAMONTO numeric(18,2),
    CONSUMO numeric(18,2),
    SUBTOTAL numeric(18,2),
    SUBTOTALU numeric(18,2),
    SUBTOTALPR numeric(18,2),
    TOTAL numeric(18,2),
    TOTALPR numeric(18,2),
    LOTE varchar(15),
    CONFIRMADO char(1),
    ANULADO char(1),
    OBSITEM blob sub_type BINARY segment size 80)
as
declare variable IMPTOS CHAR(1);
declare variable ICOINC CHAR(2);
declare variable FACTOR NUMERIC(18,2);
declare variable SUMSUBT NUMERIC(18,2);
declare variable SUMIVA NUMERIC(18,2);
declare variable SUMCONS NUMERIC(18,2);
declare variable SUMTOT NUMERIC(18,2);
declare variable LISTA INTEGER;
declare variable LISTACL INTEGER;
declare variable CANTAUX NUMERIC(18, 4);
BEGIN
EXECUTE PROCEDURE LEE_CONFIGURACION('INVENTARIO','DOCUMENTOS','CODIGO DE LISTA DE PRECIOS A IMPRIMIR EN DOCUMENTOS') returning_values (:LISTA);
EXECUTE PROCEDURE LEE_CONFIGURACION('FACTURACION', 'ARTICULOS', 'IMPOCONSUMO INCLUIDO EN EL PRECIO BASE DE VENTA ANTES DE IVA') returning_values (ICOINC);
/* DETERMINE LA TABLA A EXAMINAR */
CONFIRMADO = 'S';
if (BIN_AND(TIPO, 1) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 11 INTO :NOMTIPO;
    FOR SELECT ENTR_ID, E.PREF_PRE, ENTR_NUMERO, ENTR_FECHA, ENTR_CONC, ENTR_REFER, E.BODE_COD, BODE_NOM, ENTR_NOMTERC, ENTR_OBS, ENTR_ANULADO, E.terc_nit
    FROM ENTRADAS E, BODEGA B, PREFIJOS P
    WHERE E.BODE_COD = B.BODE_COD AND ENTR_FECHA >= :FECINI AND ENTR_FECHA <= :FECFIN
     AND P.PREF_PRE = E.PREF_PRE AND P.TIDO_COD = 11 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
    ORDER BY ENTR_FECHA, ENTR_ID
    INTO :ID, :PREF, :NUMERO, :FECHA, :CONCEPTO, :REFER, :CODBODORI, :NOMBODORI, :NOMTERCERO, :OBS, :ANULADO, :NIT
    DO
        BEGIN
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (anulado = 'S') then
             BEGIN
              ITEM = 0;
              ARTICULO = '';
              CODBAR = '';
              ARTIDES = '';
              CANT = 0;
              UNIDAD = '';
              BODITEM = '';
              lote = '';
              costo = 0;
              DTOPORC = 0;
              DTOMONTO = 0;
              IVAPORC = 0;
              IVAMONTO = 0;
              CONSUMO = 0;
              TOTAL = 0;
              OBSITEM = null;
              SUBTOTAL = 0;
              SUSPEND;
             END
            ELSE
             BEGIN
             select c.lipr_cod from clientes c WHERE TERC_NIT = :NIT INTO :LISTACL;
             if (DETALLE = 'S') then
                FOR SELECT ENDE_ITEM, A.ARTI_COD, ENDE_CODBAR, ENDE_DESC, ENDE_CANT, ENDE_UNIDAD, ENDE_FACTOR, BODE_COD, ENDE_COSTO, ENDE_DTOPORC, ENDE_DTOMONTO, ENDE_IVAPORC, ENDE_IVAMONTO, ENDE_CONSUMO, ENDE_TOTAL, ENDE_LOTE, ENDE_OBS
                    FROM ENTRADAS_DETALLE D, ARTICULO A WHERE D.ARTI_COD = A.ARTI_COD AND D.ENTR_ID = :ID INTO
                    :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :FACTOR, :BODITEM, :COSTO, :DTOPORC, :DTOMONTO, :IVAPORC, :IVAMONTO, :CONSUMO, :TOTAL, :LOTE, :OBSITEM
                    DO
                    BEGIN
                    if (LISTACL IS NOT NULL) then
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTACL INTO :PRECIO;
                    else
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTA INTO :PRECIO;
                    CANTAUX = CANT * FACTOR;
                    SUBTOTALPR = PRECIO * CANTAUX;
                    TOTALPR = SUBTOTALPR * (1 + (IVAPORC/100));
                    SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                    SUSPEND;
                    END
              ELSE
                BEGIN
                SELECT SUM(ENDE_IVAMONTO), SUM(ENDE_CONSUMO), SUM(ENDE_TOTAL)
                    FROM ENTRADAS_DETALLE D WHERE D.ENTR_ID = :ID INTO
                    :IVAMONTO, :CONSUMO, :TOTAL;
                SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                SUSPEND;
                END
             END
            END
        END
    END
if (BIN_AND(TIPO, 2) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 12 INTO :NOMTIPO;
    FOR SELECT SALI_ID, S.PREF_PRE, SALI_NUMERO, SALI_FECHA, SALI_CONC, SALI_REFER, S.BODE_COD, BODE_NOM, SALI_NOMTERC, SALI_OBS, SALI_ANULADO, SALI_IMPTOS, S.terc_nit
    FROM SALIDAS S, BODEGA B, PREFIJOS P
    WHERE S.BODE_COD = B.BODE_COD AND SALI_FECHA >= :FECINI AND SALI_FECHA <= :FECFIN 
     AND P.PREF_PRE = S.PREF_PRE AND P.TIDO_COD = 12 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
    ORDER BY SALI_FECHA, SALI_ID
    into :ID, :PREF, :NUMERO, :FECHA, :CONCEPTO, :REFER, :CODBODORI, :NOMBODORI, :NOMTERCERO, :OBS, :ANULADO, :imptos, :NIT
    DO
        BEGIN
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (anulado = 'S') then
             BEGIN
              ITEM = 0;
              ARTICULO = '';
              CODBAR = '';
              ARTIDES = '';
              CANT = 0;
              UNIDAD = '';
              BODITEM = '';
              lote = '';
              costo = 0;
              DTOPORC = 0;
              DTOMONTO = 0;
              IVAPORC = 0;
              IVAMONTO = 0;
              CONSUMO = 0;
              EXANT = 0;
              TOTAL = 0;
              OBSITEM = null;
              SUBTOTAL = 0;
              SUSPEND;
             END
            ELSE
              BEGIN
              select c.lipr_cod from clientes c WHERE TERC_NIT = :NIT INTO :LISTACL;
              SUMSUBT = 0;
              SUMIVA = 0;
              SUMCONS = 0;
              SUMTOT = 0;
              FOR SELECT SADE_ITEM, A.ARTI_COD, SADE_CODBAR, SADE_DESC, SADE_CANT, SADE_UNIDAD, BODE_COD, SADE_COSTO, SADE_IVAPORC, SADE_IVAMONTO, SADE_CONSUMO, SADE_TOTAL, SADE_LOTE, SADE_OBS, SADE_FACTOR
                FROM SALIDAS_DETALLE D, ARTICULO A WHERE D.ARTI_COD = A.ARTI_COD AND D.SALI_ID = :ID INTO
                :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :BODITEM, :COSTO, :IVAPORC, :IVAMONTO, :CONSUMO, :TOTAL, :LOTE, :OBSITEM, :FACTOR
                DO
                BEGIN
                execute procedure costo_promedio_y_ultimo_unidad(:articulo, :fecha,  :unidad) returning_values (:costo, :ultcosto);
                Subtotal = CANT * COSTO;
                subtotalu = CANT * ultcosto;
                if (IMPTOS = 'S') Then
                    begin
                    COSTO = COSTO * ( 1 + IVAPORC / 100);
                    if (ICOINC = 'SI') Then
                      BEGIN
                      COSTO = COSTO + (CONSUMO * FACTOR);
                      Subtotal = CANT * COSTO;
                      TOTAL = Subtotal;
                      IVAMONTO = (Subtotal - (cast(CONSUMO as double precision) * cast(CANT * FACTOR as double precision)))  / (100 + IVAPORC) * IVAPORC;
                      END
                    else
                      begin
                      IVAMONTO = Subtotal / (100 + IVAPORC) * IVAPORC;
                      TOTAL = Subtotal + CONSUMO * CANT;
                      end
                    end
                ELSE
                    BEGIN
                    IVAMONTO = (Subtotal - (cast(CONSUMO as double precision) * cast(CANT * FACTOR as double precision))) * IVAPORC / 100;
                    TOTAL = Subtotal + IVAMONTO;
                    END
                if (DETALLE = 'S') then
                    BEGIN
                    if (LISTACL IS NOT NULL) then
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTACL INTO :PRECIO;
                    else
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTA INTO :PRECIO;
                    CANTAUX = CANT * FACTOR;
                    SUBTOTALPR = PRECIO * CANTAUX;
                    TOTALPR = SUBTOTALPR * (1 + (IVAPORC/100));
                    SUSPEND;
                    END
                ELSE
                    BEGIN
                    SUMSUBT = sumsubt + SUBTOTAL;
                    SUMIVA = SUMIVA + IVAMONTO;
                    SUMCONS = sumCONS + CONSUMO;
                    SUMTOT = sumtot + TOTAL;
                    END
                END
              if (DETALLE = 'N') then
                SUSPEND;
              END
            END
        END
    END
if (BIN_AND(TIPO, 4) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 13 INTO :NOMTIPO;
    FOR SELECT TRAN_ID, T.PREF_PRE, TRAN_NUMERO, TRAN_FECHA, TRAN_CONC, TRAN_REFER, T.BODE_COD, BO.BODE_NOM, TRAN_BODDES, BD.BODE_NOM, TRAN_OBS, TRAN_ANULADO, TRAN_CONFIRMA, T.terc_nit
    FROM TRASFERENCIAS T, BODEGA BO, BODEGA BD, PREFIJOS P
    WHERE T.BODE_COD = BO.BODE_COD AND T.TRAN_BODDES = BD.BODE_COD AND TRAN_FECHA >= :FECINI AND TRAN_FECHA <= :FECFIN 
     AND P.PREF_PRE = T.PREF_PRE AND P.TIDO_COD = 13 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
    ORDER BY TRAN_FECHA, TRAN_ID
    into :ID, :PREF, :NUMERO, :FECHA, :CONCEPTO, :REFER, :CODBODORI, :NOMBODORI, :CODBODDES, :NOMBODDES, :OBS, :ANULADO, :confirmado, :NIT
    DO
        BEGIN
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (anulado = 'S') then
             BEGIN
              ITEM = 0;
              ARTICULO = '';
              CODBAR = '';
              ARTIDES = '';
              CANT = 0;
              UNIDAD = '';
              BODITEM = '';
              lote = '';
              costo = 0;
              DTOPORC = 0;
              DTOMONTO = 0;
              IVAPORC = 0;
              IVAMONTO = 0;
              CONSUMO = 0;
              EXANT = 0;
              TOTAL = 0;
              OBSITEM = null;
              SUBTOTAL = 0;
              SUSPEND;
              END
            ELSE
              BEGIN
              select c.lipr_cod from clientes c WHERE TERC_NIT = :NIT INTO :LISTACL;
              SUMSUBT = 0;
              SUMIVA = 0;
              SUMCONS = 0;
              SUMTOT = 0;
              FOR SELECT TRAS_ITEM, A.ARTI_COD, TRAS_CODBAR, TRAS_DESC, TRAS_CANT, TRAS_UNIDAD, TRAS_FACTOR, TRAS_COSTO, TRAS_IVAPORC, TRAS_IVAMONTO, TRAS_CONSUMO, TRAS_TOTAL, TRAS_LOTE, TRAS_OBS
                FROM TRASFERENCIAS_DETALLE D, ARTICULO A
                WHERE D.ARTI_COD = A.ARTI_COD AND D.TRAN_ID = :ID
                ORDER BY TRAS_ITEM
                INTO :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :FACTOR, :COSTO, :IVAPORC, :IVAMONTO, :CONSUMO, :TOTAL, :LOTE, :OBSITEM
                    DO
                    BEGIN
                    execute procedure costo_promedio_y_ultimo_unidad(:articulo, :fecha,  :unidad) returning_values (:costo, :ultcosto);
                    Subtotal = CANT * COSTO;
                    subtotalu = CANT * ultcosto;
                    CONSUMO = CONSUMO * CANT * FACTOR;
                    if (IMPTOS = 'S') Then
                        begin
                        TOTAL = Subtotal;
                        IVAMONTO = (Subtotal - CONSUMO) / (100 + IVAPORC) * IVAPORC;
                        end
                    ELSE
                        BEGIN
                        IVAMONTO = (Subtotal - CONSUMO) * IVAPORC / 100;
                        TOTAL = Subtotal + IVAMONTO;
                        END
                    if (DETALLE = 'S') then
                        BEGIN
                        if (LISTACL IS NOT NULL) then
                            SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTACL INTO :PRECIO;
                        else
                            SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTA INTO :PRECIO;
                        CANTAUX = CANT * FACTOR;
                        SUBTOTALPR = PRECIO * CANTAUX;
                        TOTALPR = SUBTOTALPR * (1 + (IVAPORC/100));
                        SUSPEND;
                        END
                    ELSE
                        BEGIN
                        SUMSUBT = sumsubt + SUBTOTAL;
                        SUMIVA = SUMIVA + IVAMONTO;
                        SUMCONS = sumCONS + CONSUMO;
                        SUMTOT = sumtot + TOTAL;
                        END
                    END
              if (DETALLE = 'N') then
                SUSPEND;
              END
            END
        END
    END
  if (BIN_AND(TIPO, 8) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 14 INTO :NOMTIPO;
    FOR SELECT AJUS_ID, A.PREF_PRE, AJUS_NUMERO, AJUS_FECHA, AJUS_CONC, A.BODE_COD, BODE_NOM, AJUS_OBS, AJUS_ANULADO, A.ajus_stand || ' PASADA ' || A.ajus_pasada, A.ajus_noajustar
    FROM AJUSTES A, BODEGA B, PREFIJOS P
    WHERE A.BODE_COD = B.BODE_COD AND AJUS_FECHA >= :FECINI AND AJUS_FECHA <= :FECFIN 
     AND P.PREF_PRE = A.PREF_PRE AND P.TIDO_COD = 14 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
    ORDER BY AJUS_FECHA, AJUS_ID
    into :ID, :PREF, :NUMERO, :FECHA, :CONCEPTO, :CODBODORI, :NOMBODORI, :OBS, :ANULADO, :nomtercero, :confirmado
    DO
        BEGIN
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (DETALLE = 'S') then
                BEGIN
                FOR SELECT AJUS_ITEM, A.ARTI_COD, AJUS_CODBAR, AJDE_DESC, AJUS_EXANT, AJUS_UNIDAD, BODE_COD, AJUS_EXNUE, AJUS_LOTE, AJDE_OBS
                    FROM AJUSTES_DETALLE D, ARTICULO A WHERE D.ARTI_COD = A.ARTI_COD AND D.AJUS_ID = :ID INTO
                    :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :EXANT, :UNIDAD, :BODITEM, :CANT, :LOTE, :OBSITEM
                    DO
                      BEGIN
                      if (anulado = 'S') then
                          BEGIN
                          costo = 0;
                          DTOPORC = 0;
                          DTOMONTO = 0;
                          IVAPORC = 0;
                          IVAMONTO = 0;
                          CONSUMO = 0;
                          TOTAL = 0;
                          SUBTOTAL = 0;
                          SUSPEND;
                          END
                      else
                          BEGIN
                          EXECUTE PROCEDURE costo_promedio_y_ultimo(:ARTICULO, :FECHA) returning_values (:COSTO, :ultcosto);
                          TOTAL = (CANT - EXANT) * COSTO;
                          SUBTOTAL = TOTAL;
                          SUBTOTALU = (CANT - EXANT) * ultcosto;
                          SUSPEND;
                          END
                      END
                END
              ELSE
                BEGIN
                TOTAL = 0;
                subtotalu = 0;
                FOR SELECT ARTI_COD, AJUS_EXNUE, AJUS_EXANT FROM AJUSTES_DETALLE D WHERE D.AJUS_ID = :ID INTO
                    :ARTICULO, :CANT, :EXANT
                    DO
                      BEGIN
                      EXECUTE PROCEDURE costo_promedio_y_ultimo(:ARTICULO, :FECHA) returning_values (:COSTO, :ultcosto);
                      TOTAL = TOTAL + ((CANT - EXANT) * COSTO);
                      SUBTOTAL = TOTAL;
                      SUBTOTALU = SUBTOTALU + ((CANT - EXANT) * ultcosto);
                      END
                SUSPEND;
                END
             END
        END
    END
  if (BIN_AND(TIPO, 16) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 15 INTO :NOMTIPO;
    FOR SELECT ENSA_ID, E.PREF_PRE, ENSA_NUMERO, ENSA_FECHA, ENSA_CONC, ENSA_REFER, E.BODE_COD, BODE_NOM, ENSA_CODBAR, ENSA_DESC, ENSA_CANT, ENSA_UNIDAD, ENSA_LOTE, ENSA_OBS, ENSA_ANULADO, ENSA_MAQUINA, ENSA_TURNO, ENSA_OPER
    FROM ENSAMBLES E, BODEGA B, PREFIJOS P
    WHERE E.BODE_COD = B.BODE_COD AND E.ENSA_FECHA >= :FECINI AND E.ENSA_FECHA <= :FECFIN
     AND P.PREF_PRE = E.PREF_PRE AND P.TIDO_COD = 15 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
    ORDER BY ENSA_FECHA, ENSA_ID
    into :ID, :PREF, :NUMERO, :FECHA, :CONCEPTO, :REFER, :CODBODORI, :NOMBODORI, :PRODCODBAR, :PRODDES, :PRODCANT, :PRODUNIDAD, :PRODLOTE, :OBS, :ANULADO, :MAQUINA, :TURNO, :OPERARIO
    DO
        BEGIN
        SELECT ENSA_NOMBRE FROM ENSAMBLE_TURNO WHERE ENSA_TURNO = :turno INTO :turno;
        SELECT ENOP_NOMBRE FROM ENSAMBLE_OPERARIO WHERE ENOP_ID = :OPERARIO INTO :OPERARIO;
        SELECT ENMA_NOMBRE FROM ensamble_maquina WHERE ENMA_ID = :MAQUINA INTO :MAQUINA;
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (anulado = 'S') then
             BEGIN
              ITEM = 0;
              ARTICULO = '';
              CODBAR = '';
              ARTIDES = '';
              CANT = 0;
              UNIDAD = '';
              BODITEM = '';
              lote = '';
              costo = 0;
              DTOPORC = 0;
              DTOMONTO = 0;
              IVAPORC = 0;
              IVAMONTO = 0;
              CONSUMO = 0;
              EXANT = 0;
              TOTAL = 0;
              OBSITEM = null;
              SUBTOTAL = 0;
              SUSPEND;
             END
            ELSE
             BEGIN
              if (DETALLE = 'S') then
                FOR SELECT ESDE_ITEM, A.ARTI_COD, ESDE_CODBAR, ESDE_DESC, ESDE_CANT, ESDE_UNIDAD, BODE_COD, ESDE_COSTO, ESDE_IVAPORC, ESDE_IVAMONTO, ESDE_CONSUMO, ESDE_TOTAL, ESDE_LOTE, ESDE_OBS
                    FROM ensambles_detalle D, ARTICULO A WHERE D.ARTI_COD = A.ARTI_COD AND D.ENSA_ID = :ID INTO
                    :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :BODITEM, :COSTO, :IVAPORC, :IVAMONTO, :CONSUMO, :TOTAL, :LOTE, :OBSITEM
                    DO
                    BEGIN
                    SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                    SUSPEND;
                    END
              ELSE
                BEGIN
                SELECT SUM(ESDE_IVAMONTO), SUM(ESDE_CONSUMO), SUM(ESDE_TOTAL) FROM ENSAMBLES_detalle D WHERE D.ENSA_ID = :ID INTO
                    :IVAMONTO, :CONSUMO, :TOTAL;
                SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                SUSPEND;
                END
             END
            END
        END
    END
  if (BIN_AND(TIPO, 32) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 16 INTO :NOMTIPO;
    FOR SELECT DESE_ID, E.PREF_PRE, DESE_NUMERO, DESE_FECHA, DESE_CONC, DESE_REFER, E.BODE_COD, BODE_NOM, DESE_CODBAR, DESE_DESC, DESE_CANT, DESE_UNIDAD, DESE_LOTE, DESE_OBS, DESE_ANULADO
    FROM DESENSAMBLES E, BODEGA B, PREFIJOS P
    WHERE E.BODE_COD = B.BODE_COD AND DESE_FECHA >= :FECINI AND DESE_FECHA <= :FECFIN 
     AND P.PREF_PRE = E.PREF_PRE AND P.TIDO_COD = 16 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
    ORDER BY DESE_FECHA, DESE_ID
    into :ID, PREF, :NUMERO, :FECHA, :CONCEPTO, :REFER, :CODBODORI, :NOMBODORI, :PRODCODBAR, :PRODDES, :PRODCANT, :PRODUNIDAD, :PRODLOTE, :OBS, :ANULADO
    DO
        BEGIN
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (anulado = 'S') then
             BEGIN
              ITEM = 0;
              ARTICULO = '';
              CODBAR = '';
              ARTIDES = '';
              CANT = 0;
              UNIDAD = '';
              BODITEM = '';
              lote = '';
              costo = 0;
              DTOPORC = 0;
              DTOMONTO = 0;
              IVAPORC = 0;
              IVAMONTO = 0;
              CONSUMO = 0;
              EXANT = 0;
              TOTAL = 0;
              OBSITEM = null;
              SUBTOTAL = 0;
              SUSPEND;
             END
            ELSE
             BEGIN
              if (DETALLE = 'S') then
                FOR SELECT DESE_ITEM, A.ARTI_COD, DEDE_CODBAR, DEDE_DESC, DEDE_CANT, DEDE_UNIDAD, BODE_COD, DEDE_COSTO, DEDE_IVAPORC, DEDE_IVAMONTO, DEDE_CONSUMO, DEDE_TOTAL, DEDE_LOTE, DEDE_OBS
                    FROM desensambles_detalle D, ARTICULO A WHERE D.ARTI_COD = A.ARTI_COD AND D.DESE_ID = :ID INTO
                    :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :BODITEM, :COSTO, :IVAPORC, :IVAMONTO, :CONSUMO, :TOTAL, :LOTE, :OBSITEM
                    DO
                    BEGIN
                    SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                    SUSPEND;
                    END
              ELSE
                BEGIN
                SELECT SUM(DEDE_IVAMONTO), SUM(DEDE_CONSUMO), SUM(DEDE_TOTAL) FROM DESENSAMBLES_detalle D WHERE D.DESE_ID = :ID INTO
                    :IVAMONTO, :CONSUMO, :TOTAL;
                SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                SUSPEND;
                END
             END
            END
        END
    END
  if (BIN_AND(TIPO, 64) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 17 INTO :NOMTIPO;
    FOR SELECT RESE_ID, R.PREF_PRE, RESE_NUMERO, RESE_FECHA, RESE_CONC, RESE_REFER, R.BODE_COD, BODE_NOM, RESE_NOMTERC, RESE_OBS, RESE_ANULADO, R.terc_nit
    FROM RESERVAS R, BODEGA B, PREFIJOS P
    WHERE R.BODE_COD = B.BODE_COD AND R.RESE_FECHA >= :FECINI AND R.RESE_FECHA <= :FECFIN 
     AND P.PREF_PRE = R.PREF_PRE AND P.TIDO_COD = 17 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
    ORDER BY RESE_FECHA, RESE_ID
    into :ID, :PREF, :NUMERO, :FECHA, :CONCEPTO, :REFER, :CODBODORI, :NOMBODORI, :NOMTERCERO, :OBS, :ANULADO, :NIT
    DO
        BEGIN
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (anulado = 'S') then
             BEGIN
              ITEM = 0;
              ARTICULO = '';
              CODBAR = '';
              ARTIDES = '';
              CANT = 0;
              UNIDAD = '';
              BODITEM = '';
              lote = '';
              costo = 0;
              DTOPORC = 0;
              DTOMONTO = 0;
              IVAPORC = 0;
              IVAMONTO = 0;
              CONSUMO = 0;
              EXANT = 0;
              TOTAL = 0;
              OBSITEM = null;
              SUBTOTAL = 0;
              SUSPEND;
             END
            ELSE
              BEGIN
              if (DETALLE = 'S') then
                BEGIN
                select c.lipr_cod from clientes c WHERE TERC_NIT = :NIT INTO :LISTACL;
                FOR SELECT RSDE_ITEM, A.ARTI_COD, RSDE_CODBAR, RSDE_DESC, RDSE_CANT, RSDE_UNIDAD, RSDE_FACTOR, BODE_COD, RSDE_OBS
                    FROM RESERVAS_DETALLE D, ARTICULO A WHERE D.ARTI_COD = A.ARTI_COD AND D.RESE_ID = :ID INTO
                    :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :FACTOR, :BODITEM, :OBSITEM
                    DO
                    BEGIN
                    if (LISTACL IS NOT NULL) then
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTACL INTO :PRECIO;
                    else
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTA INTO :PRECIO;
                    CANTAUX = CANT * FACTOR;
                    SUBTOTALPR = PRECIO * CANTAUX;
                    TOTALPR = SUBTOTALPR * (1 + (IVAPORC/100));
                    SUSPEND;
                    END
                END
              ELSE
                BEGIN
                SELECT SUM(RDSE_CANT) FROM RESERVAS_detalle D WHERE D.RESE_ID = :ID INTO
                    :CANT;
                SUSPEND;
                END
             END
            END
        END
    END
  if (BIN_AND(TIPO, 128) <> 0) then
    BEGIN
    SELECT TIDO_NOMLARGO FROM TIPO_DOCUMENTO WHERE TIDO_COD = 18 INTO :NOMTIPO;
    FOR SELECT ORIN_ID, O.PREF_PRE, ORIN_NUMERO, ORIN_FECHA, ORIN_FECLLEGA, ORIN_CONC, ORIN_REFER, ORIN_NOMTERC, ORIN_OBS, ORIN_ANULADO, O.terc_nit
        FROM ORDENES_INVENTARIO O, PREFIJOS P
        WHERE ORIN_FECHA >= :FECINI AND ORIN_FECHA <= :FECFIN 
        AND P.PREF_PRE = O.PREF_PRE AND P.TIDO_COD = 18 AND ((P.SUCU_ID = :SUBEMPRESA) or (:SUBEMPRESA = 0))
        ORDER BY ORIN_FECHA, ORIN_ID
        into :ID, PREF, :NUMERO, :FECHA, :VENCE, :CONCEPTO, :REFER, :NOMTERCERO, :OBS, :ANULADO, :NIT
        DO
        BEGIN
        if (((:PREFIJO = '') or (:PREF = :PREFIJO)) AND ((:ANULADOS = 'S') or (:ANULADO = 'N'))) then
            BEGIN
            if (anulado = 'S') then
             BEGIN
              ITEM = 0;
              ARTICULO = '';
              CODBAR = '';
              ARTIDES = '';
              CANT = 0;
              UNIDAD = '';
              BODITEM = '';
              lote = '';
              costo = 0;
              DTOPORC = 0;
              DTOMONTO = 0;
              IVAPORC = 0;
              IVAMONTO = 0;
              CONSUMO = 0;
              EXANT = 0;
              TOTAL = 0;
              OBSITEM = null;
              SUBTOTAL = 0;
              SUSPEND;
             END
            ELSE
              BEGIN
              if (DETALLE = 'S') then
                BEGIN
                select c.lipr_cod from clientes c WHERE TERC_NIT = :NIT INTO :LISTACL;
                FOR SELECT ORID_ITEM, A.ARTI_COD, ORID_CODBAR, ORID_DESC, ORID_CANT, ORID_UNIDAD, ORID_FACTOR, ORIN_COSTO, ORID_DTOPORC, ORID_DTOMONTO, ORID_IVAPORC, ORID_IVAMONTO, ORID_CONSUMO, ORID_TOTAL, ORID_OBS, ORID_LOTE
                    FROM ORDENINVENTARIO_DETALLE D, ARTICULO A WHERE D.ARTI_COD = A.ARTI_COD AND D.ORIN_ID = :ID INTO
                    :ITEM, :ARTICULO, :CODBAR, :ARTIDES, :CANT, :UNIDAD, :FACTOR, :COSTO, :DTOPORC, :DTOMONTO, :IVAPORC, :IVAMONTO, :CONSUMO, :TOTAL, :OBSITEM, :LOTE
                    DO
                    BEGIN
                    SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                    if (LISTACL IS NOT NULL) then
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTACL INTO :PRECIO;
                    else
                        SELECT PRAR_FIJO FROM PRECIOS_ARTICULO P WHERE ARTI_COD = :ARTICULO AND LIPR_COD = :LISTA INTO :PRECIO;
                    CANTAUX = CANT * FACTOR;
                    SUBTOTALPR = PRECIO * CANTAUX;
                    TOTALPR = SUBTOTALPR * (1 + (IVAPORC/100));
                    SUSPEND;
                    END
                END
              ELSE
                BEGIN
                SELECT SUM(ORID_IVAMONTO), SUM(ORID_CONSUMO), SUM(ORID_TOTAL) FROM ordeninventario_detalle D WHERE D.ORIN_ID = :ID INTO
                    :IVAMONTO, :CONSUMO, :TOTAL;
                SUBTOTAL = TOTAL - IVAMONTO - CONSUMO;
                SUSPEND;
                END
              END
          END
        END
    END
END^

SET TERM ; ^



