{ ------------------------------------------------------------------------------- PROGRAMA : COPRRP018 OBJETIVO : Ordenes de compras pendientes con las llegadas del material a planta por orden. PROGRAMADOR : Ing. Juan F. Soto FECHA REALIZACION : Noviembre, 1997. DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO ------------------------------------------------------------------------------- } GLOBALS "coprgb000.4gl" MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL coprrp018() END MAIN FUNCTION coprrp018() DEFINE p_ordenes RECORD LIKE cotb00014.*, movimientos RECORD LIKE iptb00006.*, k_ordenes RECORD LIKE cotb00015.*, orden SMALLINT DEFINE p_num_oc INTEGER, codigo CHAR(25), salir CHAR(1) DEFINE registros RECORD cod_n LIKE cotb00025.cod_n, cod_grupo LIKE cotb00025.cod_grupo, cod_tipo LIKE cotb00025.cod_grupo, cod_sec LIKE cotb00025.cod_grupo, fecha_entrega DATE, fecha_embarque DATE, fecha DATE, cantidad_o LIKE cotb00025.cantidad, cantidad_r LIKE iptb00006.cantidad_2, cod_sp LIKE cotb00014.cod_sp, cod_sp_sec LIKE cotb00014.cod_sp, tipo LIKE cotb00014.tipo, fecha_p DATE END RECORD #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM cofmrp018 FROM "cofmrp018" DISPLAY FORM cofmrp018 # CALL pantalla() DISPLAY "coprrp018" AT 4,3 DISPLAY "Ordenes de Compras Con Entradas" AT 6,24 # Desplega en la pantalla el tipo de papel que se debe utilizar para el reporte LET tipo_papel = 1 CALL msgrp000(tipo_papel) # Captura del rango de fecha para la impresion del reporte INPUT BY NAME rango.* BEFORE FIELD fech_fi LET rango.fech_fi = TODAY DISPLAY BY NAME rango.fech_fi AFTER FIELD fech_in IF rango.fech_in is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF AFTER FIELD fech_fi IF rango.fech_fi is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fi END IF AFTER INPUT # Control interrupcion del programa IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF EXIT INPUT END INPUT # Hace un criterio de seleccion de las informaciones que el usuario # quiera, los campos que se pueden listar son : # tipo de la orden, numero de la orden, codigo del material CONSTRUCT criterio ON a.num_oc,a.tipo,b.cod_sp,b.cod_sp_sec,a.cod_n,a.cod_grupo, a.cod_tipo,a.cod_sec FROM num_oc,tipo,cod_sp,cod_sp_sec,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 CALL seleccionarsalida() RETURNING r_output CALL configureoutput(r_output) RETURNING HANDLER START REPORT ordenar1 TO XML HANDLER HANDLER # Busca Las Ordenes de Compras LET selec = "SELECT CONVERT(CHAR(10),b.fech_oc,103),b.tipo,b.num_oc,b.cod_sp,b.cod_sp_Sec,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.cantidad,a.precio FROM cotb00014 b,cotb00015 a ", "WHERE b.status_t is null AND b.cierre = 'N' AND ", " (b.fech_oc BETWEEN ? AND ? ) AND (b.num_oc = a.num_oc AND ", " b.tipo = a.tipo) AND ( ",criterio clipped," ) " DISPLAY "<< Buscando Ordenes De Compras... Espere Por Favor >> " AT 17,14 PREPARE comando FROM selec DECLARE busca CURSOR FOR comando OPEN busca USING rango.fech_in,rango.fech_fi DISPLAY " " AT 17,14 LET salir = "S" WHILE salir != "N" FETCH busca INTO p_ordenes.fech_oc,p_ordenes.tipo,p_ordenes.num_oc,p_ordenes.cod_sp,p_ordenes.cod_sp_sec,k_ordenes.cod_n, k_ordenes.cod_grupo,k_ordenes.cod_tipo,k_ordenes.cod_sec,k_ordenes.cantidad,k_ordenes.precio IF STATUS = NOTFOUND THEN LET salir = "S" EXIT WHILE END IF LET registros.cod_sp = p_ordenes.cod_sp LET registros.cod_sp_sec = p_ordenes.cod_sp_sec LET registros.fecha_p = p_ordenes.fech_oc LET registros.cod_n = k_ordenes.cod_n LET registros.cod_grupo = k_ordenes.cod_grupo LET registros.cod_tipo = k_ordenes.cod_tipo LET registros.cod_sec = k_ordenes.cod_sec LET p_num_oc = p_ordenes.num_oc LET registros.tipo = p_ordenes.tipo LET registros.cantidad_o = k_ordenes.cantidad LET codigo = NULL LET codigo = registros.cod_n USING "&&&&&",registros.cod_grupo USING "&&&&&", registros.cod_tipo USING "&&&&&",registros.cod_sec USING "&&&&&" LET orden = 1 OUTPUT TO REPORT ordenar1(orden,p_num_oc,codigo,registros.*) DISPLAY "<< Buscando Reportes De Entrada.. Espere Por Favor >> " AT 17,14 IF p_ordenes.tipo = "01" THEN LET selec1 = "SELECT CONVERT(char(10),a.fecha,103),a.cantidad_2,a.tipo FROM intb00006 a ", "WHERE a.orden_compra = '",p_ordenes.num_oc," '"," AND a.tipo = '", p_ordenes.tipo," '"," AND (a.cod_n = '",k_ordenes.cod_n," '", " AND a.cod_grupo = '",k_ordenes.cod_grupo," '"," AND a.cod_tipo = '", k_ordenes.cod_tipo," '"," AND a.cod_sec = '",k_ordenes.cod_sec," '", " ) AND a.status_t is null " END IF IF p_ordenes.tipo = "02" THEN LET selec1 = "SELECT CONVERT(char(10),a.fecha,103),a.cantidad_2,a.tipo FROM iptb00006 a ", "WHERE a.orden_compra = '",p_ordenes.num_oc," '"," AND a.tipo = '", p_ordenes.tipo," '"," AND (a.cod_n = '",k_ordenes.cod_n," '", " AND a.cod_grupo = '",k_ordenes.cod_grupo," '"," AND a.cod_tipo = '", k_ordenes.cod_tipo," '"," AND a.cod_sec = '",k_ordenes.cod_sec," '", " ) AND a.status_t is null " END IF IF p_ordenes.tipo = "03" THEN LET selec1 = "SELECT CONVERT(char(10),a.fecha,103),a.cantidad_2,a.tipo FROM irtb00006 a ", "WHERE a.orden_compra = '",p_ordenes.num_oc," '"," AND a.tipo = '", p_ordenes.tipo," '"," AND (a.cod_n = '",k_ordenes.cod_n," '", " AND a.cod_grupo = '",k_ordenes.cod_grupo," '"," AND a.cod_tipo = '", k_ordenes.cod_tipo," '"," AND a.cod_sec = '",k_ordenes.cod_sec," '", " ) AND a.status_t is null " END IF IF p_ordenes.tipo = "04" THEN LET selec1 = "SELECT CONVERT(char(10),a.fecha,103),a.cantidad_2,a.tipo FROM istb00006 a ", "WHERE a.orden_compra = '",p_ordenes.num_oc," '"," AND a.tipo = '", p_ordenes.tipo," '"," AND (a.cod_n = '",k_ordenes.cod_n," '", " AND a.cod_grupo = '",k_ordenes.cod_grupo," '"," AND a.cod_tipo = '", k_ordenes.cod_tipo," '"," AND a.cod_sec = '",k_ordenes.cod_sec," '", " ) AND a.status_t is null " END IF PREPARE comando2 FROM selec1 DECLARE busca2 CURSOR FOR comando2 FOREACH busca2 INTO movimientos.fecha,movimientos.cantidad_2,movimientos.tipo LET p_num_oc = p_ordenes.num_oc LET registros.cod_n = k_ordenes.cod_n LET registros.cod_grupo = k_ordenes.cod_grupo LET registros.cod_tipo = k_ordenes.cod_tipo LET registros.cod_sec = k_ordenes.cod_sec LET registros.fecha = movimientos.fecha LET registros.cantidad_r = movimientos.cantidad_2 LET registros.tipo = movimientos.tipo LET orden = 2 IF registros.cantidad_r IS NOT NULL THEN OUTPUT TO REPORT ordenar1(orden,p_num_oc,codigo,registros.*) END IF END FOREACH END WHILE FINISH REPORT ordenar1 #RUN "type C:\\archivo > %USPRINT%" END FUNCTION # Rutina para la impresion de las ordenes REPORT ordenar1(x_ord,x_num_oc,x_codigo,x) DEFINE x RECORD cod_n LIKE cotb00025.cod_n, cod_grupo LIKE cotb00025.cod_grupo, cod_tipo LIKE cotb00025.cod_grupo, cod_sec LIKE cotb00025.cod_grupo, fecha_entrega DATE, fecha_embarque DATE, fecha DATE, cantidad_o LIKE cotb00025.cantidad, cantidad_r LIKE iptb00006.cantidad_2, cod_sp LIKE cotb00014.cod_sp, cod_sp_sec LIKE cotb00014.cod_sp, tipo LIKE cotb00014.tipo, fecha_p DATE END RECORD DEFINE x_num_oc INTEGER, x_codigo CHAR(25), x_ord SMALLINT # Bandera para la impresion del codigo una sola vez DEFINE bandera CHAR(1) DEFINE descrip CHAR(10) DEFINE varia CHAR(12) DEFINE total_rec,total_ord DECIMAL(14,3) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(2) DEFINE negrillas_off CHAR(2) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE hora CHAR(5), descrip1,descripcion,nom_supli CHAR(30), unidad CHAR(4) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 PAGE LENGTH 100 ORDER BY x_num_oc,x_codigo,x_ord FORMAT PAGE HEADER # Asignacion de los caracters ASCII para imprimir en las diferentes # opciones { LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80} LET hora = time LET l = (143 - LENGTH(p_companias.nombre CLIPPED))/2 # Encabezados del reporte con nombre de compania PRINT COLUMN 1, comp_on,negrillas_on PRINT COLUMN 1, "coprrp018", COLUMN l, p_companias.nombre CLIPPED, COLUMN 136, "Pag. ",pageno using "###" PRINT COLUMN 49, " Sistema de Compras", COLUMN 136, today using "dd/mm/yy" PRINT COLUMN 49, " Ordenes de Compras Pendientes ", COLUMN 139, hora PRINT COLUMN 1, "Desde ",rango.fech_in using "dd/mm/yy", " Hasta ",rango.fech_fi using "dd/mm/yy" PRINT negrillas_off BEFORE GROUP OF x_num_oc # Validacion de la variable DESCRIP para imprimir la etiqueta que clasifica # las ordenes IF x.tipo = "01" THEN LET descrip = "MAT. PRIMA" END IF IF x.tipo = "02" THEN LET descrip = "PROD. TERM." END IF IF x.tipo = "03" THEN LET descrip = "MISCELANEAS" END IF # Busqueda del nombre del suplidor e impresion del suplidor SELECT a.nom_sp INTO nom_supli FROM cotb00001 a WHERE a.cod_sp = x.cod_sp and a.cod_sp_sec = x.cod_sp_sec PRINT "------------------------------------------------------------------------------", "--------------------------------------------------" PRINT COLUMN 1, negrillas_on, COLUMN 3, "Orden No.: ",x_num_oc using "######", COLUMN 22, "Tipo: ",x.tipo, COLUMN 20, "Suplidor: ",x.cod_sp USING "<<","-"," ", COLUMN 31, x.cod_sp_sec USING "<<<<"," ", COLUMN 35, nom_supli ," ", COLUMN 66, "Fecha Pedido: ",x.fecha_p USING "dd/mm/yyyy", negrillas_off PRINT "------------------------------------------------------------------------------", "--------------------------------------------------" #----------------------------------------------------------------------- PRINT COLUMN 8, "Codigo", COLUMN 20, "Descripcion", COLUMN 87, "Ordenada", COLUMN 104, "Recibida", COLUMN 116, "Diferencia" PRINT "------------------------------------------------------------------------------", "--------------------------------------------------" # Aqui se controla por medio a una bandera si el codigo va a imprimirse una # sola vez o varias veces BEFORE GROUP OF x_codigo LET total_ord = 0 LET total_rec = 0 SKIP 1 LINE LET descripcion = NULL LET unidad = NULL IF x.tipo = "01" THEN SELECT a.descrip_esp,a.unidad_med INTO descripcion,unidad FROM intb00001 a WHERE a.cod_n = x.cod_n and a.cod_grupo = x.cod_grupo and a.cod_tipo = x.cod_tipo and a.cod_sec = x.cod_sec END IF IF x.tipo = "02" THEN SELECT a.descrip_esp,a.unidad_med INTO descripcion,unidad FROM iptb00002 a WHERE a.cod_n = x.cod_n and a.cod_grupo = x.cod_grupo and a.cod_tipo = x.cod_tipo and a.cod_sec = x.cod_sec END IF IF x.tipo = "03" THEN SELECT a.descrip_esp,a.unidad_med INTO descripcion,unidad FROM irtb00002 a WHERE a.cod_n = x.cod_n and a.cod_grupo = x.cod_grupo and a.cod_tipo = x.cod_tipo and a.cod_sec = x.cod_sec END IF IF x.tipo = "04" THEN SELECT a.descrip_esp,a.unidad_med INTO descripcion,unidad FROM istb00002 a WHERE a.cod_n = x.cod_n and a.cod_grupo = x.cod_grupo and a.cod_tipo = x.cod_tipo and a.cod_sec = x.cod_sec END IF PRINT COLUMN 8, x.cod_n USING "&&&&&","-", x.cod_grupo USING "&&&&&","-", x.cod_tipo USING "&&&&&","-", x.cod_sec USING "&&&&&", " ",descripcion CLIPPED," ",nombre_m CLIPPED," ", descrip1 CLIPPED," ",unidad; ON EVERY ROW IF x_ord = 1 THEN IF total_ord IS NULL THEN LET total_ord = 0 END IF PRINT COLUMN 79, x.cantidad_o USING "###,###,###.##" LET total_ord = total_ord + x.cantidad_o END IF IF x_ord = 2 THEN IF total_rec IS NULL THEN LET total_rec = 0 END IF PRINT COLUMN 55, x.fecha using "dd/mm/yyyy", COLUMN 98, x.cantidad_r using "###,###,###.##" LET total_rec = total_rec + x.cantidad_r END IF # Totaliza la cantidad pendiente de la orden AFTER GROUP OF x_codigo PRINT COLUMN 81,"--------------", COLUMN 98,"--------------" PRINT COLUMN 79,total_ord using "###,###,###.##", COLUMN 98, total_rec using "###,###,###.##", COLUMN 103, negrillas_on, total_ord - total_rec USING "((((,(((,(((.##)",negrillas_off ON LAST ROW PRINT comp_off END REPORT