{ ------------------------------------------------------------------------- PROGRAMA : ALPRMT006 OBJETIVO : Programa Captura Documento Movimiento:REPORTE ENTRADA Nota: No utilice los PREPARE porque utilizaria todas las tablas de los sistemas de inventarios. PROGRAMADOR : Juan Fco. Soto (Johnny) FECHA REALIZACION : Octubre 21,1993. MODIFICADOR : Tadeo A. Ferreras F. FECHA REALIZACION : Marzo 05, 1996 OBJETIVO : Impresion de la Cantidad Pendiente Por Enregar en la Orden de Compra ------------------------------------------------------------------------- } DATABASE marmotech GLOBALS DEFINE etiqueta CHAR(20) DEFINE descrip_espa CHAR(35) DEFINE fecha,p_fechas,fecha_c DATE DEFINE ip_ultimo,ir_ultimo,ih_ultimo,is_ultimo,in_ultimo, l,bandera,numero_msg INTEGER DEFINE documento ARRAY[50] OF INTEGER DEFINE dia,idx,p_act,scr_l,cod_mov_ant SMALLINT DEFINE primera,opc1,verdad,opc CHAR (1) DEFINE unidad CHAR(4) DEFINE inv1,inv2,inv3,inv4,inv5 CHAR(500) DEFINE tipo1,tipo2,tipo3,tipo4,tipo5 CHAR(200) DEFINE recibida,f_cantidad,factor DECIMAL(12,3), descripcion_f CHAR(100), nombre_m CHAR(20), descrip CHAR(15) DEFINE datos_gen RECORD num_doc LIKE iptb00006.num_doc, tipo LIKE iptb00006.tipo, orden_compra LIKE iptb00006.orden_compra, cod_sp LIKE iptb00006.cod_sp, cod_sp_sec LIKE iptb00006.cod_sp_sec, conduce_no LIKE iptb00006.conduce_no, fact_no LIKE iptb00006.fact_no, fecha LIKE iptb00006.fecha, bodega LIKE iptb00006.bodega, nom_sp LIKE cotb00001.nom_sp, descrip_mov LIKE intb00005.descrip_mov END RECORD DEFINE movi ARRAY[200] OF RECORD cod_n LIKE iptb00006.cod_n, cod_grupo LIKE iptb00006.cod_grupo, cod_tipo LIKE iptb00006.cod_tipo, cod_sec LIKE iptb00006.cod_sec, cantidad_1 DECIMAL(12,3), cantidad_2 DECIMAL(12,3), cod_mov SMALLINT, no_embarque CHAR(08), pendiente DECIMAL(12,3) END RECORD, p_companias RECORD LIKE companias.* END GLOBALS MAIN DEFINE fecha CHAR(8) DEFER INTERRUPT CLEAR SCREEN OPTIONS ERROR LINE 24, FORM LINE 4, COMMENT LINE 22, PROMPT LINE 23 SELECT * INTO p_companias.* FROM companias LET l = (80 - LENGTH(p_companias.nombre CLIPPED))/2 LET fecha = today USING "dd/mm/yy" DISPLAY p_companias.nombre CLIPPED AT 1,l ATTRIBUTE (REVERSE,YELLOW) DISPLAY fecha AT 1,70 ATTRIBUTE (YELLOW) DISPLAY "Reporte De Entrada" AT 2,29 DISPLAY " Adiciona Registro" AT 3,2 ATTRIBUTE (YELLOW,REVERSE) DISPLAY " Cancela Operacion" AT 3,57 ATTRIBUTE (YELLOW,REVERSE) DISPLAY "alprmt006" AT 1,3 ATTRIBUTE (YELLOW) OPEN FORM alfmmt006 FROM "alfmmt006" DISPLAY FORM alfmmt006 CALL inpcad006() END MAIN FUNCTION inpcad006() DEFINE nombre_s CHAR(20) DEFINE cerrada CHAR(1) # Variable para actualizar el cierre de una orden DEFINE total_cantidad,porciento,ordenada,r_cantidad1,r_cantidad, mp_recibida,is_recibida,ip_recibida,ir_recibida,ih_recibida DECIMAL(12,3) # WHENEVER ERROR CONTINUE LET int_flag = FALSE INITIALIZE datos_gen.* TO NULL LET datos_gen.fecha = today USING "dd/mm/yy" LABEL otra_vez: IF (OPC = "S" OR OPC = "s") OR opc IS NULL THEN INITIALIZE datos_gen.* TO NULL END IF LET cerrada = "N" LET total_cantidad = 0 LET is_ultimo = null LET ir_ultimo = null LET ip_ultimo = null LET ih_ultimo = null LET in_ultimo = null # Captura de informacion del reporte de entrada INPUT BY NAME datos_gen.num_doc THRU datos_gen.bodega WITHOUT DEFAULTS AFTER FIELD num_doc # Estas asignaciones es para que cuando se le digite el numero del documento # no busque el ultimo numero en las correspondientes tablas IF datos_gen.num_doc IS NOT NULL THEN LET is_ultimo = datos_gen.num_doc LET ir_ultimo = datos_gen.num_doc LET ip_ultimo = datos_gen.num_doc LET ih_ultimo = datos_gen.num_doc LET in_ultimo = datos_gen.num_doc END IF { SELECT UNIQUE a.num_doc FROM iptb00006 a WHERE a.cod_mov = 10 AND a.num_doc = datos_gen.num_doc IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD num_doc END IF } # Control de la fecha del documento para que el usuario no pueda introducir # un documento con fecha atrasada AFTER FIELD fecha IF datos_gen.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF IF datos_gen.fecha > TODAY THEN LET numero_msg = 160 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = datos_gen.fecha USING "ddmmyy" SELECT MIN(fecha_corte) INTO fecha_c FROM prdtable WHERE fecha_corte >= p_fechas IF STATUS = NOTFOUND THEN LET numero_msg = 58 CALL msg(numero_msg) SLEEP 3 RETURN END IF LET dia = 0 SELECT MIN(dias_gracia) INTO dia FROM prdtable WHERE fecha_corte = fecha_c IF dia IS NULL THEN LET dia = 0 END IF SELECT a.usuario FROM seg0003 a WHERE a.usuario = USER IF STATUS != NOTFOUND THEN LET fecha_c = fecha_c + dia END IF IF fecha_c < TODAY THEN LET numero_msg = 57 CALL msg(numero_msg) #NEXT FIELD fecha END IF AFTER FIELD bodega IF datos_gen.bodega IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD bodega END IF SELECT a.* FROM intb00009 a WHERE a.cod_bodega = datos_gen.bodega IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD bodega END IF BEFORE FIELD num_doc LET datos_gen.bodega = 1 DISPLAY BY NAME datos_gen.bodega ATTRIBUTE (CYAN) LET datos_gen.fecha = today DISPLAY BY NAME datos_gen.fecha ATTRIBUTE (CYAN) AFTER FIELD orden_compra # Verifica que la orden de compra este en el archivo y # ademas obliga a que el usuario tenga que digitar este campo IF datos_gen.orden_compra IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD orden_compra ELSE SELECT a.cod_sp,a.cod_sp_sec,a.cierre INTO datos_gen.cod_sp,datos_gen.cod_sp_sec,cerrada FROM cotb00014 a WHERE a.tipo = datos_gen.tipo AND a.num_oc = datos_gen.orden_compra AND a.status_t IS null IF STATUS >= 0 THEN IF cerrada = "S" THEN LET numero_msg = 74 CALL msg(numero_msg) NEXT FIELD tipo END IF IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF SELECT UNIQUE nom_sp INTO datos_gen.nom_sp FROM cotb00001 WHERE cod_sp=datos_gen.cod_sp and cod_sp_sec = datos_gen.cod_sp_sec and status_t IS null DISPLAY BY NAME datos_gen.nom_sp,datos_gen.cod_sp,datos_gen.cod_sp_sec ATTRIBUTE (CYAN) END IF IF cerrada IS NULL THEN LET cerrada = "N" END IF AFTER FIELD fact_no # Verifica que el numero de la factura no se repita con el mismo numero de # documento. IF datos_gen.conduce_no IS NULL AND datos_gen.fact_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD conduce_no END IF IF datos_gen.conduce_no IS NOT NULL AND datos_gen.fact_no IS NOT NULL THEN LET numero_msg = 29 CALL msg(numero_msg) NEXT FIELD conduce_no END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE # Valida en nulo las variables del arreglo para desplegar FOR idx = 1 to arr_count() LET movi[idx].cod_n = null LET movi[idx].cod_grupo = null LET movi[idx].cod_tipo = null LET movi[idx].cod_sec = null LET movi[idx].cantidad_1 = null LET movi[idx].cantidad_2 = null LET movi[idx].no_embarque = null END FOR SLEEP 2 RETURN END IF # Chequea que el conduce y la factura no este en blanco IF datos_gen.conduce_no IS NULL AND datos_gen.fact_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD conduce_no END IF EXIT INPUT END INPUT IF opc = "S" or opc = "s" OR opc IS NULL THEN FOR idx = 1 to arr_count() LET movi[idx].cod_n = null LET movi[idx].cod_grupo = null LET movi[idx].cod_tipo = null LET movi[idx].cod_sec = null LET movi[idx].cantidad_2 = null LET movi[idx].cantidad_1 = null LET movi[idx].no_embarque = null END FOR END IF # Si las informaciones estan correctas cuando se digite el proximo documento # busca la orden especificada IF opc = "S" or opc = "s" or opc IS NULL THEN DECLARE locales CURSOR FOR SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad, a.cod_n," ",a.cod_n FROM cotb00015 a WHERE a.tipo = datos_gen.tipo and a.num_oc = datos_gen.orden_compra ORDER BY 1,2,3,4,8 LET idx = 1 FOREACH locales INTO movi[idx].* IF idx = 1 THEN IF datos_gen.tipo = "01" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM intb00001 WHERE cod_n=movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec END IF IF datos_gen.tipo = "02" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM iptb00002 WHERE cod_n=movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec END IF LET descripcion_f = descrip_espa clipped," ",unidad clipped DISPLAY BY NAME descripcion_f ATTRIBUTE (CYAN) END IF IF datos_gen.tipo = "01" THEN SELECT sum(a.cantidad_2) INTO recibida FROM intb00006 a WHERE (a.orden_compra =datos_gen.orden_compra) and (a.cod_n = movi[idx].cod_n) and (a.cod_grupo = movi[idx].cod_grupo) and (a.cod_tipo=movi[idx].cod_tipo) and (a.cod_sec=movi[idx].cod_sec) and a.status_t IS null END IF IF datos_gen.tipo = "02" THEN SELECT sum(a.cantidad_2) INTO recibida FROM iptb00006 a WHERE (a.orden_compra =datos_gen.orden_compra) and (a.cod_n = movi[idx].cod_n) and (a.cod_grupo = movi[idx].cod_grupo) and (a.cod_tipo=movi[idx].cod_tipo) and (a.cod_sec=movi[idx].cod_sec) and a.status_t IS null END IF IF recibida IS NULL THEN LET recibida = 0 END IF LET movi[idx].cod_mov = null LET movi[idx].cantidad_2 = null LET movi[idx].pendiente = movi[idx].cantidad_1 - recibida LET idx = idx + 1 END FOREACH END IF # CAPTURA ARREGLO DE LOS CODIGOS DE MATERIA PRIMA LET primera = "S" CALL set_count(idx - 1) INPUT ARRAY movi WITHOUT DEFAULTS FROM s_movi1.* BEFORE ROW LET p_act = arr_curr() LET scr_l = scr_line() AFTER FIELD cantidad_2 # Verifica que la cantidad recibida mas las que se han recibida de # la orden no exceda de un 10% de la cantidad total de la orden IF movi[p_act].cantidad_2 IS NOT NULL THEN IF movi[p_act].cantidad_2 < 0 THEN LET movi[p_act].cantidad_2 = 0 END IF IF datos_gen.tipo = "01" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM intb00001 WHERE cod_n = movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec END IF IF datos_gen.tipo = "02" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM iptb00002 WHERE cod_n = movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec END IF LET descripcion_f = descrip_espa clipped," ",unidad clipped LET recibida = 0 IF datos_gen.tipo = "01" THEN SELECT SUM(cantidad_2) INTO recibida FROM intb00006 WHERE orden_compra =datos_gen.orden_compra and cod_n=movi[p_act].cod_n and cod_grupo=movi[p_act].cod_grupo and cod_tipo=movi[p_act].cod_tipo and cod_sec=movi[p_act].cod_sec and status_t IS null END IF IF datos_gen.tipo = "02" THEN SELECT SUM(cantidad_2) INTO recibida FROM iptb00006 WHERE orden_compra =datos_gen.orden_compra and cod_n=movi[p_act].cod_n and cod_grupo=movi[p_act].cod_grupo and cod_tipo=movi[p_act].cod_tipo and cod_sec=movi[p_act].cod_sec and status_t IS null END IF SELECT sum(cantidad) INTO ordenada FROM cotb00015 WHERE num_oc = datos_gen.orden_compra and tipo = datos_gen.tipo and cod_n=movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo=movi[p_act].cod_tipo and cod_sec=movi[p_act].cod_sec and status_t IS null IF recibida IS NULL THEN LET recibida = 0 END IF IF ordenada IS NULL THEN LET ordenada = 0 END IF LET porciento = ordenada * 0.10 IF movi[p_act].cantidad_2 IS NOT NULL THEN LET recibida = recibida + movi[p_act].cantidad_2 END IF LET r_cantidad = ordenada + porciento IF recibida > (movi[p_act].cantidad_1*1.10) THEN LET numero_msg = 28 CALL msg(numero_msg) #NEXT FIELD cantidad_2 END IF END IF AFTER FIELD cod_mov IF movi[p_act].cantidad_2 IS NOT NULL THEN IF movi[p_act].cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF # Busqueda en la tabla movimientos de productos terminados IF datos_gen.tipo = "01" THEN LET etiqueta = "MATERIAS PRIMAS" SELECT a.descrip_mov INTO datos_gen.descrip_mov FROM intb00005 a WHERE a.cod_mov = movi[p_act].cod_mov AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF IF primera = "S" THEN LET primera = "N" SELECT UNIQUE a.num_doc INTO in_ultimo FROM intb00023 a WHERE a.cod_mov = movi[p_act].cod_mov LET in_ultimo = in_ultimo + 1 LET datos_gen.num_doc = in_ultimo LET documento[p_act] = in_ultimo SELECT UNIQUE num_doc FROM intb00006 WHERE num_doc=datos_gen.num_doc and cod_mov=movi[p_act].cod_mov IF STATUS != NOTFOUND THEN LET numero_msg = 128 CALL msg(numero_msg) RETURN END IF END IF END IF IF datos_gen.tipo = "02" THEN LET etiqueta = "PROD. TERMINADOS" SELECT a.descrip_mov INTO datos_gen.descrip_mov FROM iptb00005 a WHERE a.cod_mov = movi[p_act].cod_mov AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF IF primera = "S" THEN LET primera = "N" SELECT UNIQUE a.num_doc INTO ip_ultimo FROM iptb00007 a WHERE a.cod_mov = movi[p_act].cod_mov LET ip_ultimo = ip_ultimo + 1 LET datos_gen.num_doc = ip_ultimo LET documento[p_act] = ip_ultimo SELECT UNIQUE num_doc FROM iptb00006 WHERE num_doc=datos_gen.num_doc and cod_mov=movi[p_act].cod_mov IF STATUS != NOTFOUND THEN LET numero_msg = 128 CALL msg(numero_msg) RETURN END IF END IF END IF # Busqueda del ultimo numero del reporte de entrada de Producto Terminados DISPLAY BY NAME datos_gen.num_doc,datos_gen.descrip_mov ATTRIBUTE(CYAN) END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false FOR idx = 1 to arr_count() LET movi[idx].cod_n = null LET movi[idx].cod_grupo = null LET movi[idx].cod_tipo = null LET movi[idx].cod_sec = null LET movi[idx].cantidad_1 = null LET movi[idx].cantidad_2 = null LET movi[idx].no_embarque = null END FOR SLEEP 2 RETURN END IF IF datos_gen.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) GOTO otra_vez END IF FOR idx = 1 to arr_count() IF movi[idx].cantidad_2 IS NOT NULL THEN LET total_cantidad = movi[idx].cantidad_2 + total_cantidad END IF END FOR EXIT INPUT END INPUT LET recibida = 0 LET ordenada = 0 PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc IF OPC = "S" or OPC = "s" THEN PROMPT "Desea Imprimir Este Documento? (S/N)" FOR CHAR opc1 LET opc1 = upshift(opc1) IF opc1 = "S" THEN START REPORT entrada_imp TO "c:\\almt6" END IF # Busca la cantidad recibida de la orden especificada IF datos_gen.tipo = "01" THEN SELECT sum(cantidad_2) INTO ip_recibida FROM intb00006 WHERE orden_compra=datos_gen.orden_compra and tipo=datos_gen.tipo and status_t IS null END IF IF datos_gen.tipo = "02" THEN SELECT sum(cantidad_2) INTO ip_recibida FROM iptb00006 WHERE orden_compra=datos_gen.orden_compra and tipo=datos_gen.tipo and status_t IS null END IF LET recibida = ip_recibida # Busca la cantidad ordenada de la orden especificada SELECT sum(a.cantidad) INTO ordenada FROM cotb00015 a WHERE a.num_oc = datos_gen.orden_compra and a.tipo = datos_gen.tipo and a.status_t IS null IF recibida IS NULL THEN LET recibida = 0 END IF IF ordenada IS NULL THEN LET ordenada = 0 END IF # Calculo de los porcentaje limites de las ordenes LET porciento = ordenada * 0.10 LET recibida = recibida + total_cantidad LET r_cantidad = ordenada - porciento LET r_cantidad1 = ordenada + porciento # Si la cantidad recibida producto de la sumatoria y subtracion del 10% # es mayor o igual a la cantidad recibida y menor o igual a la cantidad de # la orden cierra la orden IF recibida >= r_cantidad and recibida <= r_cantidad1 THEN LET cerrada = "S" END IF LET primera = "S" FOR idx = 1 TO arr_count() IF movi[idx].cantidad_2 IS NOT NULL AND movi[idx].cantidad_2 <> 0 THEN # Actualizacion de las tablas de Productos terminados IF datos_gen.tipo = "02" THEN INSERT INTO iptb00006 VALUES ("1",datos_gen.num_doc,datos_gen.fecha,datos_gen.fact_no, datos_gen.conduce_no,datos_gen.tipo,datos_gen.orden_compra, datos_gen.cod_sp, datos_gen.cod_sp_sec,null,null,null,null, movi[idx].cod_mov,null,movi[idx].cod_n,movi[idx].cod_grupo, movi[idx].cod_tipo,movi[idx].cod_sec,movi[idx].cantidad_1, movi[idx].cantidad_2,null,null,datos_gen.bodega, null,user,current,null,null) SELECT a.num_doc FROM iptb00007 a WHERE a.cod_mov = movi[idx].cod_mov IF status != notfound THEN UPDATE iptb00007 set num_doc = datos_gen.num_doc WHERE cod_mov = movi[idx].cod_mov ELSE INSERT INTO iptb00007 VALUES (datos_gen.num_doc,movi[idx].cod_mov,null,user,current, null,null) END IF END IF IF datos_gen.tipo = "01" THEN INSERT INTO intb00006 VALUES (datos_gen.num_doc,datos_gen.fecha,datos_gen.fact_no, datos_gen.conduce_no,datos_gen.orden_compra,datos_gen.tipo, datos_gen.cod_sp, datos_gen.cod_sp_sec,movi[idx].cod_mov, movi[idx].cod_n,movi[idx].cod_grupo, movi[idx].cod_tipo,movi[idx].cod_sec, movi[idx].cantidad_1, movi[idx].cantidad_2,null,null,null,null,null, datos_gen.bodega, null,user,current,null,null) SELECT a.num_doc FROM intb00023 a WHERE a.cod_mov = movi[idx].cod_mov IF status != notfound THEN UPDATE intb00023 set num_doc = datos_gen.num_doc WHERE cod_mov = movi[idx].cod_mov ELSE INSERT INTO intb00023 VALUES (datos_gen.num_doc,movi[idx].cod_mov,null,user,current, null,null) END IF END IF END IF IF opc1 = "S" THEN OUTPUT TO REPORT entrada_imp(movi[idx].*) END IF END FOR IF opc1 = "S" THEN FINISH REPORT entrada_imp END IF RUN "type c:\\almt6 > %USPRINT%" # Actualiza la tabla de ordenes para cerrarla si la variable cerrada = "S" IF cerrada = "S" THEN UPDATE cotb00014 set cierre = cerrada WHERE num_oc = datos_gen.orden_compra and tipo = datos_gen.tipo END IF FOR idx = 1 to 5 LET movi[idx].cod_n = null LET movi[idx].cod_grupo = null LET movi[idx].cod_tipo = null LET movi[idx].cod_sec = null LET movi[idx].cantidad_1 = null LET movi[idx].cantidad_2 = null LET movi[idx].no_embarque = null DISPLAY movi[idx].cod_n to s_movi1[idx].cod_n DISPLAY movi[idx].cod_grupo to s_movi1[idx].cod_grupo DISPLAY movi[idx].cod_tipo to s_movi1[idx].cod_tipo DISPLAY movi[idx].cod_sec to s_movi1[idx].cod_sec DISPLAY movi[idx].no_embarque to s_movi1[idx].no_embarque END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM END IF GOTO otra_vez END FUNCTION { ---------------------------------------------------------------------------- PROGRAMA : PRD OBJETIVO : Controlar las operaciones que se hagan anterior a una fecha de corte. REALIZADO POR : Ing. Juan Fco. Soto. FECHA : Noviembre 4, 1992. --------------------------------------------------------------------------- } FUNCTION prd(p_fechas) DEFINE p_fechas CHAR(6) DEFINE comp_fech,comp_fech1 DATE DEFINE mes_control CHAR(2) DEFINE mes_calc SMALLINT DEFINE fecha_c CHAR(6) DEFINE c_ano,a_ano CHAR(4) LET a_ano = year(p_fechas) LET mes_control = MONTH(today) LET mes_calc = mes_control IF mes_calc = 01 THEN LET mes_calc = 13 LET a_ano = year(today - 32) END IF LET mes_calc = mes_calc - 2 IF mes_calc <= 0 THEN LET mes_calc = 12 LET a_ano = year(today) - 1 END IF LET c_ano = year(today) {IF a_ano != c_ano THEN LET numero_msg = 59 CALL msg(numero_msg) LET bandera = 1 RETURN END IF} SELECT fecha_corte INTO fecha_c FROM prdtable WHERE mes = mes_calc AND ano = a_ano IF STATUS = NOTFOUND THEN LET numero_msg = 58 CALL msg(numero_msg) LET bandera = 1 END IF LET comp_fech1 = fecha_c LET comp_fech = p_fechas { IF comp_fech < comp_fech1 THEN LET numero_msg = 57 CALL msg(numero_msg) LET bandera = 1 END IF } END FUNCTION { Esta funcion se utiliza para desplegar mensajes de errores en todos los sistemas de Ray-O-Vac Dominicana. Esta funcion busca el mensaje deseado en la tabla "msgtable" y lo despliega en la linea de mensajes } FUNCTION msg(numero_msg) DEFINE numero_msg SMALLINT DEFINE descripcion CHAR (60) SELECT desc_msg INTO descripcion FROM msgtable WHERE cod_msg = numero_msg IF STATUS = NOTFOUND THEN LET numero_msg = 22 SELECT desc_msg INTO descripcion FROM msgtable WHERE cod_msg = numero_msg ERROR descripcion attribute (bold) ELSE ERROR descripcion attribute (bold) LET numero_msg = 0 END IF END FUNCTION FUNCTION integridad() IF sqlca.sqlcode < 0 THEN LET numero_msg = sqlca.sqlcode CALL msg(numero_msg) DISPLAY numero_msg AT 23,70 LET bandera = 1 SLEEP 2 RETURN END IF END FUNCTION FUNCTION no_existe() IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) LET verdad = "S" END IF CALL integridad() END FUNCTION REPORT entrada_imp(z) DEFINE x RECORD num_doc LIKE iptb00006.num_doc, tipo LIKE iptb00006.tipo, orden_compra LIKE iptb00006.orden_compra, cod_sp LIKE iptb00006.cod_sp, cod_sp_sec LIKE iptb00006.cod_sp_sec, conduce_no LIKE iptb00006.conduce_no, fact_no LIKE iptb00006.fact_no, fecha LIKE iptb00006.fecha, bodega LIKE iptb00006.bodega, nom_sp LIKE cotb00001.nom_sp, descrip_mov LIKE iptb00005.descrip_mov END RECORD DEFINE z RECORD cod_n LIKE iptb00006.cod_n, cod_grupo LIKE iptb00006.cod_grupo, cod_tipo LIKE iptb00006.cod_tipo, cod_sec LIKE iptb00006.cod_sec, cantidad_1 LIKE iptb00006.cantidad_1, cantidad_2 LIKE iptb00006.cantidad_2, cod_mov SMALLINT, no_embarque CHAR(8), pendiente DECIMAL(12,3) END RECORD DEFINE etiq, unidad CHAR(20) DEFINE doc INTEGER DEFINE recibida1 DECIMAL(12,3) DEFINE l SMALLINT DEFINE comp_on,comp_off,doce,normal,negras_of,negras_on,doble_on,doble_of CHAR(2) DEFINE unidades INTEGER OUTPUT TOP MARGIN 0 BOTTOM MARGIN 0 LEFT MARGIN 0 FORMAT #BEFORE GROUP OF doc PAGE HEADER LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET negras_on = ASCII 27, ASCII 69 LET negras_of = ASCII 27, ASCII 70 LET doble_on = ASCII 14 LET doble_of = ASCII 20 LET normal = ASCII 27, ASCII 80 LET doce = ASCII 27, ASCII 77 PRINT normal PRINT COLUMN 1,negras_on,doble_on, COLUMN 1,p_companias.nombre CLIPPED," RNC. ", p_companias.rnc CLIPPED,doble_of,negras_of PRINT COLUMN 58, "REPORTE DE ENTRADA" LET etiq = etiqueta clipped LET l = (80 - LENGTH(etiq))/2 PRINT COLUMN 58, "No.",doble_on,datos_gen.num_doc USING "&&&&&&" LET l = (80 - LENGTH(datos_gen.descrip_mov))/2 PRINT COLUMN l, negras_on,datos_gen.descrip_mov,negras_of SKIP 1 LINE PRINT COLUMN 1, "Fecha : ",datos_gen.fecha USING "dd/mm/yy", COLUMN 49, "Orden de Compra: ",datos_gen.tipo,"-", datos_gen.orden_compra USING "&&&&&&" PRINT COLUMN 1, "Proveedor : ",datos_gen.cod_sp USING "&&","-", datos_gen.cod_sp_sec USING "&&&&"," ", datos_gen.nom_sp[1,30] PRINT COLUMN 1, "Conduce : ",datos_gen.conduce_no clipped, COLUMN 49, "Factura : ",datos_gen.fact_no clipped PRINT COLUMN 1, "=====================================================", "===========================" PRINT COLUMN 1, doce, COLUMN 23, "CANTIDAD", COLUMN 38, "CANTIDAD", COLUMN 53, "CANTIDAD" PRINT COLUMN 1, "CODIGO", COLUMN 21, "ORDENADA", COLUMN 36, "RECIBIDA", COLUMN 51, "PENDIENTE", COLUMN 61, "D E S C R I P C I O N" PRINT COLUMN 36, "EN DOCUM.", COLUMN 51, "ORDEN",normal PRINT COLUMN 1, "=====================================================", "===========================" PRINT doce ON EVERY ROW LET recibida1 = 0 LET descrip_espa = " " SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM intb00001 WHERE cod_n = z.cod_n and cod_grupo = z.cod_grupo and cod_tipo = z.cod_tipo and cod_sec = z.cod_sec LET descripcion_f = descrip_espa clipped," ",unidad clipped PRINT COLUMN 1, z.cod_n USING "&","-",z.cod_grupo USING "&","-", z.cod_tipo USING "&&","-",z.cod_sec USING "&&&", COLUMN 16, z.cantidad_1 USING "##,###,###.###", COLUMN 31, z.cantidad_2 USING "##,###,###.###", COLUMN 47, z.pendiente-z.cantidad_2 USING "--,---,---.###", COLUMN 63, comp_on,descripcion_f,comp_off PAGE TRAILER PRINT normal PRINT COLUMN 1,"OBSERVACION :" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" SKIP 3 LINE ON LAST ROW PRINT normal END REPORT