{
-------------------------------------------------------------------------------
PROGRAMA             :  INPRRP042
OBJETIVO             :  REPORTE DIAS DE PRODUCCION CON ORDENES
PROGRAMADOR          :  Ing. Juan Francisco Soto   
FECHA REALIZACION    :  Febrero 11, 1997
-------------------------------------------------------------------------------
}
GLOBALS "inprgb000.4gl"

DEFINE sale CHAR(1)
DEFINE p_ano CHAR(4)
DEFINE codigo_act CHAR(10)
DEFINE cons_prom_k,cons_prom,costo_e DECIMAL(12,4)


# Variable que se incrementa para imprimir el arreglo
DEFINE i SMALLINT

# Arreglo Para los equivalentes
DEFINE equivalentes ARRAY[1000] OF RECORD
       codigo_p     CHAR(10),
       descrip_p    CHAR(30),
       unidad_p     CHAR(3),
       existe_p     DECIMAL(12,2),
       consumo_p    DECIMAL(12,2),
       dia_llegada_p SMALLINT,
       fecha_p      DATE,
       num_oc_p     INTEGER,
       cantidad_p   DECIMAL(12,2),
       costo_p      DECIMAL(12,4),
       codigo_e     CHAR(10),
       descrip_e    CHAR(30),
       unidad_e     CHAR(4),
       existe_e     DECIMAL(12,2),
       consumo_e    DECIMAL(12,2),
       dia_llegada_e SMALLINT,
       costo_e      DECIMAL(12,4),
       fecha_e      DATE,
       num_oc_e     INTEGER,
       cantidad_e   DECIMAL(12,2)
END RECORD

    DEFINE valor1 DECIMAL(12,2)

FUNCTION inprrp042()

# Variable que toma el valor de los dias que se va a valorar el reporte

# Variables varias para el control de busqueda de las informaciones
    DEFINE selec1,selec2,selec3,select_bal CHAR(1000)
    DEFINE mes CHAR(2)
    DEFINE tiene,salir,primera CHAR(1)
    DEFINE idx_3,idx_1,idx_b SMALLINT
    DEFINE dias1 SMALLINT

# Record para la validacion de los equivalente
    DEFINE equivale RECORD
           cod_n          LIKE intb00001.cod_n,
           cod_grupo      LIKE intb00001.cod_grupo,
           cod_tipo       LIKE intb00001.cod_tipo,
           cod_sec        LIKE intb00001.cod_sec,
           cod_n_e        LIKE intb00001.cod_n,
           cod_grupo_e    LIKE intb00001.cod_grupo,
           cod_tipo_e     LIKE intb00001.cod_tipo,
           cod_sec_e      LIKE intb00001.cod_sec,
           descrip_e      LIKE intb00001.descrip_esp,
           unidad_e       CHAR(34),
           existe_e       DECIMAL(12,2),
           consumo_e      DECIMAL(12,2),
           dia_llegada_e  INTEGER
    END RECORD

# Record para la validacion de los costos del material
    DEFINE costo RECORD
           mes1         CHAR(2),
           mes2         CHAR(2),
           cod_n        LIKE intb00001.cod_n,
           cod_grupo    LIKE intb00001.cod_grupo,
           cod_tipo     LIKE intb00001.cod_tipo,
           cod_sec      LIKE intb00001.cod_sec,
           costo_st     LIKE intb00013.costo_st
    END RECORD

# Record para el consumo de los materiales
    DEFINE consume RECORD
           cod_n        LIKE intb00001.cod_n,
           cod_grupo    LIKE intb00001.cod_grupo,
           cod_tipo     LIKE intb00001.cod_tipo,
           cod_sec      LIKE intb00001.cod_sec,
           consumo      DECIMAL(14,2)
    END RECORD

# Record para la impresion del reporte, estas variables se validan con el
# select que esta en la variable selec
    DEFINE estadis  RECORD
           cod_n        LIKE intb00001.cod_n,
           cod_grupo    LIKE intb00001.cod_grupo,
           cod_tipo     LIKE intb00001.cod_tipo,
           cod_sec      LIKE intb00001.cod_sec,
           descrip_esp  LIKE intb00001.descrip_esp,
           unidad_med   LIKE intb00001.unidad_med,
           dia_llegada  LIKE intb00002.dia_llegada,
           consumo      LIKE intb00006.cantidad_1,
           existe       LIKE intb00002.existencia,
           valor        DECIMAL(12,4),
           costo        DECIMAL(12,4),
           dias         INTEGER ,
           fecha_llegada DATE,
           cantidad     DECIMAL(12,2),
           num_oc       INTEGER,
           p_cons_prom  DECIMAL(12,2)
    END RECORD

# Record para las existencia de la materia prima
    DEFINE balances RECORD
     cod_n   SMALLINT,
     cod_grupo SMALLINT,
     cod_tipo  SMALLINT,
     cod_sec   SMALLINT,
     balance   LIKE intb00006.cantidad_2
    END RECORD

#     WHENEVER ERROR CONTINUE

    OPTIONS
       FORM LINE 8,
       ERROR LINE 23,
       COMMENT LINE 21

    OPEN FORM infmrp042 FROM "infmrp004"
    DISPLAY FORM infmrp042

    CALL pantalla()
    DISPLAY "inprrp042" AT 4,3
    DISPLAY "Dias de Produccion " AT 6,30
    LET tipo_papel = 1
    CALL msgrp000(tipo_papel)

    INPUT BY NAME datos_cons.fech_in,datos_cons.fech_fi
 
    AFTER FIELD fech_in
    IF datos_cons.fech_in IS NULL THEN
       LET numero_msg = 16
       CALL msg(numero_msg)
       NEXT FIELD fech_in
     END IF

    AFTER FIELD fech_fi
    IF datos_cons.fech_fi IS NULL THEN
       LET numero_msg = 16
       CALL msg(numero_msg)
       NEXT FIELD fech_fi
     END IF
   END INPUT

    IF int_flag THEN
       LET numero_msg = 2
       CALL msg(numero_msg)
       LET int_flag = false
       RETURN
    END IF
   LET dias1 = datos_cons.fech_fi - datos_cons.fech_in
   LET dias1 = dias1 + 1
   LET p_ano = year(datos_cons.fech_fi)

    CONSTRUCT criterio ON b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec
                     FROM cod_n,cod_grupo,cod_tipo,cod_sec

    IF int_flag THEN
      LET numero_msg = 2
      CALL msg(numero_msg)
      LET int_flag = false
      RETURN
    END IF

# Busqueda de los equivalentes
   LET selec2 =
    "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,b.cod_n_e,b.cod_grupo_e,", 
    "       b.cod_tipo_e,b.cod_sec_e ",
    "FROM intb00004 b ",
    "WHERE b.status_t is null and ",criterio clipped,
    "UNION ",
    "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,b.cod_n_s,b.cod_grupo_s,", 
    "       b.cod_tipo_s,b.cod_sec_s ",
    "FROM intb00003 b ",
    "WHERE b.status_t is null and ",criterio clipped," ORDER BY 1,2,3,4 "

    DISPLAY "<< Estoy Buscando Equivalentes... Espere>>" AT 19,14 

   PREPARE comando1 FROM selec2
   DECLARE busca1 SCROLL CURSOR FOR comando1
   OPEN busca1

# Busqueda de los costos de los materiales
   LET selec1 =
       "SELECT b.mes_ini,max(b.mes_fin),b.cod_n,b.cod_grupo,b.cod_tipo, ",
       "       b.cod_sec,b.costo_st ",
       "FROM intb00013 b ",
       "WHERE ",criterio clipped," and ano = ? ",
       "GROUP BY 1,3,4,5,6,7 ORDER BY 3,4,5,6"

    DISPLAY "<< Estoy Buscando Costos... Espere    >>" AT 19,14 

   PREPARE comando FROM selec1
   DECLARE busca3 SCROLL CURSOR FOR comando
   OPEN busca3 USING p_ano

   LET select_bal =
   "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,sum(b.cantidad_2)  ",
   "FROM intb00006 b ",
   "WHERE ", criterio clipped," and b.status_t is null and b.fecha <= ? ",   
   "GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"

    DISPLAY "<< Estoy Buscando Balances Iniciales  >>" AT 19,14 

    PREPARE busca_balan FROM select_bal
    DECLARE material_bal SCROLL CURSOR FOR busca_balan
    OPEN material_bal USING datos_cons.fech_fi

    LET SELEC = 
       "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
       "       a.unidad_med,b.dia_llegada ",
       "FROM intb00001 a,intb00002 b ",
       "WHERE ",criterio clipped," AND a.cod_n = b.cod_n AND ",
       "      a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND ",
       "      a.cod_sec   = b.cod_sec AND a.status_t is null ",
       "GROUP BY 1,2,3,4,5,6,7 ORDER BY 1,2,3,4"

    PREPARE busca  FROM selec
    DECLARE accion CURSOR FOR busca
    OPEN accion 

   LET selec3 =
      "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,sum(b.cantidad_2)  ",
      "FROM intb00006 b ",
      "WHERE ",criterio clipped," AND b.status_t is null AND ",
      "         b.fecha between ? AND ? AND b.cod_mov = 36 ",
      "GROUP BY 1,2,3,4 ORDER BY 1,2,3,4"

    DISPLAY "<< Buscando Consumo Material... Por Favor Espere >>"
            AT 19,14 ATTRIBUTE (REVERSE) 

    PREPARE comando2 FROM selec3     
    DECLARE consu SCROLL CURSOR FOR comando2
    OPEN consu USING datos_cons.fech_in,datos_cons.fech_fi

    DISPLAY "<< Reporte Generandose ...  Por Favor Espere. >>"
            AT 19,14 ATTRIBUTE (REVERSE) 

    START REPORT estadis_oc TO "C:\\archivo"

# Loop principal para la busqueda de la materia prima y el consumo
  LET idx = 1
  LET salir = "N"
  WHILE salir != "S"       
    FETCH   accion INTO estadis.* 
    IF status = notfound THEN
       LET salir = "S"
       EXIT WHILE
    END IF
    IF int_flag THEN
       LET numero_msg = 2
       CALL msg(numero_msg)
       LET int_flag = false
       RETURN
    END IF

     LET estadis.consumo = 0
     LET estadis.existe  = 0
     LET estadis.valor   = 0
     LET estadis.costo   = 0

# Busca el primer registro del record consume
 #FETCH FIRST consu INTO consume.*

 LET idx_b = 1
 LET sale = "N"
 WHILE sale != "S"
 FETCH ABSOLUTE idx_b consu INTO consume.*
 IF status = notfound THEN
    LET sale = "S"
    EXIT WHILE
 END IF
 LET idx_b = idx_b + 1
 IF consume.cod_n = estadis.cod_n AND
    consume.cod_grupo = estadis.cod_grupo AND
    consume.cod_Tipo = estadis.cod_tipo AND
    consume.cod_sec = estadis.cod_sec THEN
  
     LET estadis.consumo = consume.consumo
     LET sale = "S"
     LET idx_b = 1
     EXIT WHILE
 END IF
END WHILE

# Chequea que el codigo buscado no este como equivalente en el arreglo
 LET codigo_act = estadis.cod_n using "&","-",
                  estadis.cod_grupo using "&","-",
                  estadis.cod_tipo using "&&","-",
                  estadis.cod_sec using "&&&"

IF estadis.consumo IS NULL THEN
   LET estadis.consumo = 0
END IF
LET tiene = "N"
FOR i = 1 TO idx

  IF codigo_act = equivalentes[i].codigo_e THEN
     LET tiene = "N"
     CONTINUE WHILE
  END IF
END FOR

# Loop para busqueda del balance de la materia prima
     LET salir = "N"
     LET Idx_b = 1
     WHILE salir != "S"
      FETCH ABSOLUTE idx_b material_bal INTO balances.*
        IF status = notfound THEN
          LET idx_b = 1
          LET salir = "S"
          EXIT WHILE
        END IF

        LET idx_b = idx_b + 1
        IF balances.cod_n = estadis.cod_n AND
           balances.cod_grupo = estadis.cod_grupo AND
           balances.cod_tipo = estadis.cod_tipo AND
           balances.cod_sec  = estadis.cod_sec THEN
           
           IF balances.balance IS NULL THEN
              LET balances.balance = 0
           END IF

           LET estadis.existe = balances.balance
           LET salir = "S"
           LET idx_b = 1
           EXIT WHILE
        END IF
   END WHILE

# Busqueda del costo del material
LET salir = "N"
LET idx_1 = 1
WHILE salir != "S"
FETCH ABSOLUTE idx_1 busca3 INTO costo.*
IF status = notfound THEN
   LET idx_1 = 1
   LET salir = "S"
   EXIT WHILE
END IF
      LET idx_1 = idx_1 + 1

      IF costo.cod_n = estadis.cod_n AND
         costo.cod_grupo = estadis.cod_grupo AND
         costo.cod_tipo = estadis.cod_tipo AND
         costo.cod_sec  = estadis.cod_sec THEN

         LET estadis.costo = costo.costo_st
         LET idx_1 = 1
         LET salir = "S"
         EXIT WHILE
     END IF
END WHILE

# Busqueda de los equivalentes   
LET salir = "N"
LET idx_3 = 1
WHILE salir != "S"
FETCH ABSOLUTE idx_3 busca1 INTO equivale.*

  IF status = notfound THEN
     LET idx_3 = 1
     LET salir = "S"
     EXIT WHILE
  END IF

      LET idx_3 = idx_3 + 1

      LET equivale.descrip_e = null
      LET equivale.unidad_e  = null
      LET equivale.consumo_e = 0
      LET equivale.existe_e  = 0
      LET costo_e            = 0

         DISPLAY estadis.cod_grupo at 20,20
         DISPLAY estadis.cod_tipo  at 20,30
         DISPLAY estadis.cod_sec   at 20,40
           
         DISPLAY equivale.cod_grupo at 21,20
         DISPLAY equivale.cod_tipo  at 21,30
         DISPLAY equivale.cod_sec   at 21,40
#sleep 4
      IF equivale.cod_n = estadis.cod_n AND
         equivale.cod_grupo = estadis.cod_grupo AND
         equivale.cod_tipo = estadis.cod_tipo AND
         equivale.cod_sec  = estadis.cod_sec THEN

       SELECT a.descrip_esp,a.unidad_med,b.dia_llegada
       INTO equivale.descrip_e,equivale.unidad_e,equivale.dia_llegada_e
       FROM intb00001 a,intb00002 b
       WHERE a.cod_n=equivale.cod_n_e and a.cod_grupo=equivale.cod_grupo_e and
             a.cod_tipo=equivale.cod_tipo_e and a.cod_sec=equivale.cod_sec_e and
             b.cod_n=equivale.cod_n_e and b.cod_grupo=equivale.cod_grupo_e and
             b.cod_tipo=equivale.cod_tipo_e and b.cod_sec=equivale.cod_sec_e and
             b.status_t is null
         SELECT SUM(cantidad_2) INTO equivale.consumo_e FROM intb00006 
         WHERE cod_n = equivale.cod_n_e and cod_grupo = equivale.cod_grupo_e and
               cod_tipo=equivale.cod_tipo_e and cod_sec=equivale.cod_sec_e and
               status_t is null and cod_mov = 36 and
               fecha between datos_cons.fech_in and datos_cons.fech_fi
                      
         SELECT SUM(cantidad_2) INTO equivale.existe_e  FROM intb00006 
         WHERE cod_n=equivale.cod_n_e and cod_grupo=equivale.cod_grupo_e and
               cod_tipo=equivale.cod_tipo_e and cod_sec=equivale.cod_sec_e and
               status_t is null and fecha <= datos_cons.fech_fi

# Busca el costo del equivalente
         SELECT costo_st INTO costo_e FROM intb00013
         WHERE cod_n = equivale.cod_n_e and cod_grupo = equivale.cod_grupo_e and
               cod_tipo=equivale.cod_tipo_e and cod_sec=equivale.cod_sec_e and
               status_t is null and ano = p_ano

         IF status = notfound THEN
            LET status = 0
         END IF

         LET equivalentes[idx].codigo_p = estadis.cod_n using "&","-",
                                       estadis.cod_grupo using "&","-",
                                       estadis.cod_tipo using "&&","-",
                                       estadis.cod_sec using "&&&"

         LET equivalentes[idx].codigo_e = equivale.cod_n_e using "&","-",
                                       equivale.cod_grupo_e using "&","-",
                                       equivale.cod_tipo_e using "&&","-",
                                       equivale.cod_sec_e using "&&&"

         LET estadis.fecha_llegada = null
         LET estadis.num_oc = null
         LET estadis.cantidad = null

         SELECT MIN(a.fech_ent)
         INTO estadis.fecha_llegada
         FROM cotb00025 a,cotb00014 b
         WHERE a.cod_n = equivale.cod_n_e AND 
               a.cod_grupo = equivale.cod_grupo_e AND 
               a.cod_tipo = equivale.cod_tipo_e AND
               a.cod_sec = equivale.cod_sec_e  AND 
               a.fech_ent >= TODAY and a.status_t is null AND
               a.num_oc = b.num_oc AND b.cierre = "N"
        
         SELECT MIN(a.num_oc)
         INTO estadis.num_oc       
         FROM cotb00025 a,cotb00014 b
         WHERE a.cod_n = equivale.cod_n_e AND 
               a.cod_grupo = equivale.cod_grupo_e AND 
               a.cod_tipo = equivale.cod_tipo_e AND
               a.cod_sec = equivale.cod_sec_e  AND 
               a.fech_ent = estadis.fecha_llegada and a.status_t is null AND
               a.num_oc = b.num_oc AND b.cierre = "N"

         LET estadis.cantidad = 0
            SELECT AVG(a.cantidad)
            INTO estadis.cantidad     
            FROM cotb00025 a
            WHERE a.cod_n = equivale.cod_n_e AND 
                  a.cod_grupo = equivale.cod_grupo_e AND 
                  a.cod_tipo = equivale.cod_tipo_e AND
                  a.cod_sec = equivale.cod_sec_e  AND 
                  a.fech_ent = estadis.fecha_llegada  AND
                  a.num_oc = estadis.num_oc and a.status_t is null

         
         IF estadis.cantidad = 0 THEN
            LET estadis.num_oc = null
            LET estadis.fecha_llegada = null
         END IF
         LET equivalentes[idx].fecha_e       = estadis.fecha_llegada
         LET equivalentes[idx].num_oc_e = estadis.num_oc
         LET equivalentes[idx].cantidad_e = estadis.cantidad
         LET estadis.fecha_llegada = null
         LET estadis.num_oc = null
         LET estadis.cantidad = null

         SELECT MIN(a.fech_ent)
         INTO estadis.fecha_llegada
         FROM cotb00025 a,cotb00014 b
         WHERE a.cod_n = estadis.cod_n AND 
               a.cod_grupo = estadis.cod_grupo AND 
               a.cod_tipo = estadis.cod_tipo AND
               a.cod_sec = estadis.cod_sec  AND 
               a.fech_ent >= TODAY and a.status_t is null AND
               a.num_oc = b.num_oc AND b.cierre = "N"
         
         SELECT MIN(a.num_oc)
         INTO estadis.num_oc       
         FROM cotb00025 a,cotb00014 b
         WHERE a.cod_n = estadis.cod_n AND 
               a.cod_grupo = estadis.cod_grupo AND 
               a.cod_tipo = estadis.cod_tipo AND
               a.cod_sec = estadis.cod_sec  AND 
               a.fech_ent = estadis.fecha_llegada and a.status_t is null AND
               a.num_oc = b.num_oc AND b.cierre = "N"

         LET estadis.cantidad = 0

            SELECT AVG(a.cantidad)
            INTO estadis.cantidad     
            FROM cotb00025 a
            WHERE a.cod_n = estadis.cod_n AND 
                  a.cod_grupo = estadis.cod_grupo AND 
                  a.cod_tipo = estadis.cod_tipo AND
                  a.cod_sec = estadis.cod_sec  AND 
                  a.fech_ent = estadis.fecha_llegada  AND
                  a.num_oc = estadis.num_oc and a.status_t is null

         IF estadis.cantidad = 0 THEN
            LET estadis.num_oc = null
            LET estadis.fecha_llegada = null
         END IF

         LET equivalentes[idx].fecha_p       = estadis.fecha_llegada
         LET equivalentes[idx].num_oc_p = estadis.num_oc
         LET equivalentes[idx].cantidad_p = estadis.cantidad
   
         LET equivalentes[idx].descrip_p = estadis.descrip_esp
         LET equivalentes[idx].unidad_p = estadis.unidad_med 
         LET equivalentes[idx].existe_p   = estadis.existe
         LET equivalentes[idx].consumo_p  = estadis.consumo
         LET equivalentes[idx].dia_llegada_p = estadis.dia_llegada    
         LET equivalentes[idx].costo_p = estadis.costo

         LET equivalentes[idx].descrip_e = equivale.descrip_e  
         LET equivalentes[idx].unidad_e = equivale.unidad_e
         LET equivalentes[idx].existe_e   = equivale.existe_e
         LET equivalentes[idx].consumo_e  = equivale.consumo_e
         LET equivalentes[idx].dia_llegada_e = equivale.dia_llegada_e
         LET equivalentes[idx].costo_e = costo_e

 
         LET tiene = "S"
         LET idx = idx + 1
         #EXIT WHILE
       END IF
END WHILE

# Se multiplica por -1 por que el movimiento 36 es negativo
     IF estadis.consumo IS NULL THEN
        LET estadis.consumo = 0
     END IF
     LET estadis.consumo = estadis.consumo * -1 

# Calculo para los dias de produccion 
     LET cons_prom = 0 
     IF estadis.consumo > 0 THEN
        LET cons_prom = estadis.consumo / dias1
        LET estadis.dias = (estadis.existe / estadis.consumo) * dias1
     END IF

# Calculo para el exedente de la existencia apartir de los dias de exeso
# especificado


# Control para salir el material, si: tiene = "S" es equivalente
# tiene = "N" es principal

   LET estadis.fecha_llegada = null
   LET estadis.num_oc = null
   LET estadis.cantidad = null

IF tiene = "N" THEN
   SELECT MIN(a.fech_ent)
   INTO estadis.fecha_llegada
   FROM cotb00025 a,cotb00014 b
   WHERE a.cod_n = estadis.cod_n AND 
         a.cod_grupo = estadis.cod_grupo AND 
         a.cod_tipo = estadis.cod_tipo AND
         a.cod_sec = estadis.cod_sec  AND 
         a.fech_ent >= TODAY and
         a.status_t is null AND
         a.num_oc = b.num_oc AND b.cierre = "N"

         SELECT MIN(a.num_oc)
         INTO estadis.num_oc       
         FROM cotb00025 a,cotb00014 b
         WHERE a.cod_n = estadis.cod_n AND 
               a.cod_grupo = estadis.cod_grupo AND 
               a.cod_tipo = estadis.cod_tipo AND
               a.cod_sec = estadis.cod_sec  AND 
               a.fech_ent = estadis.fecha_llegada and
               a.status_t is null AND
               a.num_oc = b.num_oc AND b.cierre = "N"

            SELECT AVG(a.cantidad)
            INTO estadis.cantidad     
            FROM cotb00025 a
            WHERE a.cod_n = estadis.cod_n AND 
                  a.cod_grupo = estadis.cod_grupo AND 
                  a.cod_tipo = estadis.cod_tipo AND
                  a.cod_sec = estadis.cod_sec  AND 
                  a.fech_ent= estadis.fecha_llegada AND
                  a.num_oc = estadis.num_oc and
                  a.status_t is null
      
   IF estadis.cantidad = 0 THEN
      LET estadis.num_oc = null
      LET estadis.fecha_llegada = null
   END IF

   LET estadis.p_cons_prom = cons_prom * 30
   OUTPUT TO REPORT estadis_oc(estadis.*,dias1)
   LET estadis.p_cons_prom = 0
END IF
   LET tiene = "N"
LET salir = "N"
END WHILE  

    FINISH REPORT estadis_oc
    CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION

    REPORT estadis_oc(x,dias2)
       DEFINE x RECORD
          cod_n       LIKE intb00001.cod_n,
          cod_grupo   LIKE intb00001.cod_grupo,
          cod_tipo    LIKE intb00001.cod_tipo,
          cod_sec     LIKE intb00001.cod_sec,
          descrip_esp LIKE intb00001.descrip_esp,
          unidad_med  LIKE intb00001.unidad_med,
          dia_llegada LIKE intb00002.dia_llegada,
          consumo     LIKE intb00006.cantidad_1,
          existe      LIKE intb00002.existencia,
          valor       DECIMAL(12,3),
          costo       DECIMAL(12,4),
          dias        INTEGER ,
          fecha_llegada DATE,
          cantidad     DECIMAL(12,2),
          num_oc       INTEGER,
          p_cons_prom  DECIMAL(12,2)
       END RECORD

    DEFINE primera CHAR(1)
    DEFINE codigo_ant CHAR(10)
    DEFINE consume DECIMAL (12,2)
    DEFINE normal,dsiete,negra,doble,doble_off,borra,comp_off CHAR(2)
    DEFINE promedio DECIMAL(10,2)
    DEFINE doce,comp CHAR(3)
    DEFINE dias,no_r SMALLINT
    DEFINE dias4,dias5,dias3,dias2 SMALLINT
    DEFINE hora CHAR(5)
    DEFINE t_valor,existe_p,consumo_p DECIMAL(12,2)

    OUTPUT
      LEFT MARGIN 1

    FORMAT
      PAGE HEADER
   IF no_r is null THEN
    LET no_r = 0 
 END IF

        LET doble =  ASCII 14
        LET doble_off =  ASCII 20
        LET negra = ASCII 27, ASCII 69
        LET borra = ASCII 27, ASCII 70
        LET comp  =  ASCII 15 
        LET dsiete = ASCII 17
        LET comp_off = ASCII 18
        LET doce =  ASCII 030                
        LET normal = ASCII 27, ASCII 80
        LET hora = time

        LET lj = (126 - LENGTH(p_companias.nombre CLIPPED))/2
           PRINT COLUMN   1, comp 
           PRINT COLUMN   1, "inprrp042",
                 COLUMN  lj, p_companias.nombre CLIPPED,
                 COLUMN 119, "Pag. ", pageno USING "###"
           PRINT COLUMN  40, "    Sistema de Inventario de Materia Prima",
                 COLUMN 119, today using "dd/mm/yyyy"
           PRINT COLUMN  40, "             Dias De Produccion",  
                 COLUMN 122, hora

           SKIP 1 LINES
           PRINT COLUMN 1, "Desde ",datos_cons.fech_in using "dd/mm/yyyy",
                 COLUMN 20, "Hasta ", datos_cons.fech_fi using "dd/mm/yyyy"

           PRINT COLUMN 1, "--------------------------------------------------",
                           "--------------------------------------------------",
                           "-------------------------------------------"
           PRINT COLUMN  50, "Consumo",
                 COLUMN  64, "Consumo",
                 COLUMN  90, "Dias de" ,
                 COLUMN  107, "Dias de",
                 COLUMN 115, "Fecha",
                 COLUMN 138, "Numero"

           PRINT COLUMN   1, "Codigo",
                 COLUMN  14, "Descripcion",
                 COLUMN  50, "Del Periodo",
                 COLUMN  64, "De 30 Dias",
                 COLUMN  79, "Existencia",
                 COLUMN  90, "Inventario",
                 COLUMN  107, "Llegada",
                 COLUMN 115, "Llegada", 
                 COLUMN 128, "Cantidad",
                 COLUMN 138, "Orden"

           PRINT COLUMN 1, "--------------------------------------------------",
                           "--------------------------------------------------",
                           "-------------------------------------------"
          
   skip 1 line
         
      ON EVERY ROW
         LET dias3 = x.fecha_llegada - TODAY
         IF x.consumo = 0 THEN
            LET x.dias = 0
         END IF

         IF x.cantidad = 0 OR
            x.cantidad IS NULL THEN
            LET x.fecha_llegada = null
            LET x.num_oc = null
            LET dias3 = 0
         END IF

         PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-",
                         x.cod_tipo USING "&&","-",x.cod_sec USING "&&&",
               COLUMN 14, x.descrip_esp,
               COLUMN 45, x.unidad_med,
               COLUMN 48, x.consumo USING "##,###,###.##",
               COLUMN 62, x.p_cons_prom USING "#,###,###.##",
               COLUMN 75, x.existe USING "---,---,---.##",
               COLUMN 90, x.dias USING "######"  ,
               COLUMN 107, dias3 using "###",
               COLUMN 114, x.fecha_llegada USING "DD/MM/YY",
               COLUMN 124, x.cantidad USING "##,###,###.##",
               COLUMN 138, x.num_oc USING "&&&&&&"


           LET no_r = no_r + 1
           LET consumo_p = 0
           LET existe_p = 0
     ON LAST ROW
       SKIP 2 LINES
           PRINT COLUMN 1, "==================================================",
                           "==================================================",
                           "======================================"
           PRINT COLUMN 50, "EQUIVALENTES / SUSTITUTOS"

     SKIP 1 LINE
     LET x.dias = 0
     LET existe_p = 0
     LET consumo_p = 0
         FOR i = 1 TO idx
             IF equivalentes[i].codigo_p is not null THEN
                IF codigo_ant != equivalentes[i].codigo_p THEN
                   LET codigo_ant = equivalentes[i].codigo_p
                   LET primera = "S"
                END IF

           IF equivalentes[i].consumo_p is null THEN
              LET equivalentes[i].consumo_p = 0
           END IF

           IF equivalentes[i].consumo_e is null THEN
              LET equivalentes[i].consumo_e = 0
           END IF

           IF equivalentes[i].existe_p is null THEN
              LET equivalentes[i].existe_p = 0
           END IF

           IF equivalentes[i].existe_e is null THEN
              LET equivalentes[i].existe_e = 0
           END IF

           LET existe_p = equivalentes[i].existe_p +
                          equivalentes[i].existe_e 

           LET consumo_p = equivalentes[i].consumo_p +
                           equivalentes[i].consumo_e 

# Calculo para los dias de produccion 
          IF consumo_p < 0 THEN
              LET consumo_p = consumo_p * -1
          END IF
          LET cons_prom_k = 0
          IF  consumo_p > 0 THEN
              LET cons_prom = consumo_p / dias2
              LET x.dias = (existe_p / 
                            consumo_p) * dias2
              LET cons_prom_k = cons_prom * 30
          END IF
# Calculo para el exedente de la existencia apartir de los dias de exeso
# especificado
             LET dias4 = equivalentes[i].fecha_p - TODAY
             LET dias5 = equivalentes[i].fecha_e - TODAY

             IF equivalentes[i].cantidad_p IS NULL OR
                equivalentes[i].cantidad_p = 0 THEN
                LET equivalentes[i].num_oc_p = null
                LET equivalentes[i].fecha_p = null
                LET dias4 = 0
             END IF
             PRINT COLUMN   1, equivalentes[i].codigo_p,
                   COLUMN  14, equivalentes[i].descrip_p,
                   COLUMN  45, equivalentes[i].unidad_p,
                   COLUMN  48, equivalentes[i].consumo_p using "##,###,###.##",
                   COLUMN  75, equivalentes[i].existe_p  using "--,---,---.##",
                   COLUMN  107, dias4 using "####",
                   COLUMN 114, equivalentes[i].fecha_p       USING "DD/MM/YY",
                   COLUMN 124, equivalentes[i].cantidad_p USING "##,###,###.##",
                   COLUMN 138, equivalentes[i].num_oc_p USING "&&&&&&"

             IF equivalentes[i].cantidad_e IS NULL OR
                equivalentes[i].cantidad_e = 0 THEN
                LET equivalentes[i].num_oc_e = null
                LET equivalentes[i].fecha_e = null
                LET dias5 = 0
             END IF
             PRINT COLUMN   1, equivalentes[i].codigo_e,
                   COLUMN  14, equivalentes[i].descrip_e,
                   COLUMN  45, equivalentes[i].unidad_e,
                   COLUMN  48, equivalentes[i].consumo_e using "##,###,###.##",
                   COLUMN  75, equivalentes[i].existe_e  using "--,---,---.##",
                   COLUMN  107, dias5 using "####",
                   COLUMN 114, equivalentes[i].fecha_e       USING "DD/MM/YY",
                   COLUMN 124, equivalentes[i].cantidad_e USING "##,###,###.##",
                   COLUMN 138, equivalentes[i].num_oc_e USING "&&&&&&"

                PRINT COLUMN  48, "--------------",
                      COLUMN  64, "--------------"
                PRINT COLUMN  48, consumo_p using "##,###,###.##",
                      COLUMN  64, cons_prom_k USING "#,###,###.##",
                      COLUMN  75, existe_p using "--,---,---.##",
                      COLUMN  90, x.dias using "####"
                SKIP 1 LINE                     
                LET no_r = no_r + 2
             END IF
         END FOR

         PRINT COLUMN 4, "Total Registros Impresos =", no_r     USING "<<<<"
         PRINT COLUMN 1, normal
         LET t_valor = 0
         LET no_r = 0
     END REPORT
