{ ------------------------------------------------------------------------- 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 ------------------------------------------------------------------------- } SCHEMA smarmotech GLOBALS DEFINE etiqueta CHAR(20) , selec,criterio STRING, opt CHAR(10) DEFINE descrip_espa CHAR(100) 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 DYNAMIC ARRAY 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 tasa,precio_compra,recibida,f_cantidad,factor DECIMAL(12,3), descripcion_f CHAR(100), nombre_m CHAR(20), descrip CHAR(15), USUARIOS, CLAVE,descripcion_bodega CHAR(50) DEFINE normal,negrilla_on,negrillas_of,comp_on,comp_off,doce,doble_on,doble_off CHAR(3) DEFINE cmd,imprime,copia CHAR(150),archivo CHAR(80),impresor,xcod_mov SMALLINT DEFINE datos_gen RECORD num_doc LIKE iptb00006.num_doc, tipo CHAR(2), 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 DYNAMIC ARRAY 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 CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias 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/yyyy" OPEN FORM alfmmt006 FROM "alfmmt006" DISPLAY FORM alfmmt006 MENU ON ACTION nuevo CALL inpcad006() ON ACTION buscar CALL inpcmf006() ON ACTION salir EXIT MENU END MENU 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 BEFORE INPUT CALL bodegas('1') SELECT a.bodega INTO datos_gen.bodega FROM seg0001 a WHERE a.usuario = usuarios DISPLAY BY NAME datos_gen.bodega 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 = SUSER_SNAME() 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 LET descripcion_bodega = NULL SELECT UNIQUE a.usuario,b.descripcion INTO descripcion_bodega FROM iptb00048 a,intb00009 b WHERE a.bodega = datos_gen.bodega AND a.usuario = usuarios AND a.bodega = b.cod_bodega IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO TIENE PERMISOS PARA UTILIZAR BODEGA","INFO") 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 = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo 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 ="S" THEN CALL fgl_winmessage("ERROR","ORDEN CERRADA, NO PUEDES RECIBIR MERCANCIAS","INFO") NEXT FIELD orden_compra 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 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 # bodegas IF datos_gen.bodega IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD bodega END IF LET descripcion_bodega = NULL SELECT UNIQUE a.usuario FROM iptb00048 a WHERE a.bodega = datos_gen.bodega AND a.usuario = usuarios IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO TIENE PERMISOS PARA UTILIZAR BODEGA","INFO") NEXT FIELD bodega END IF EXIT INPUT END INPUT IF opc = "S" or opc = "s" OR opc IS NULL THEN CALL movi.clear() 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 IF datos_gen.tipo = "04" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM istb00002 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 LET movi[idx].cod_mov = 34 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 LET movi[idx].cod_mov=10 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 IF datos_gen.tipo = "04" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM istb00002 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 LET p_act = arr_curr() 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 LET xcod_mov = movi[p_act].cod_mov # 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 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 a.num_doc INTO ip_ultimo FROM iptb00007 a WHERE a.cod_mov = movi[arr_curr()].cod_mov AND a.bodega = datos_gen.bodega 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 AND bodega = datos_gen.bodega 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 RETURN 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 CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT entrada_imp TO archivo END IF LET primera = "S" # 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 SELECT a.num_doc INTO ip_ultimo FROM iptb00007 a WHERE a.cod_mov = xcod_mov AND a.bodega = datos_gen.bodega IF status != notfound THEN LET datos_gen.num_doc = ip_ultimo +1 UPDATE iptb00007 set num_doc = datos_gen.num_doc WHERE cod_mov = xcod_mov AND bodega = datos_Gen.bodega ELSE LET datos_gen.num_doc = 1 INSERT INTO iptb00007 (num_doc,cod_mov,bodega,us_crea,fech_crea) VALUES (datos_gen.num_doc,xcod_mov,datos_gen.bodega,usuarios,GETDATE()) END IF END IF IF datos_gen.tipo = "04" THEN SELECT sum(cantidad_2) INTO ip_recibida FROM istb00006 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" # INFORMACION REPORTE ENTRADA { BEGIN WORK DELETE FROM altbm00001 WHERE num_doc = datos_gen.num_doc AND orden_compra = datos_gen.orden_compra INSERT INTO altbm00001 (num_doc,fecha,tipo,orden_compra,cod_sp,cod_sp_sec,conduce_no,fact_no, bodega,us_crea,fech_crea) VALUES (datos_gen.num_doc,datos_gen.fecha,datos_gen.orden_compra,datos_gen.cod_sp, datos_gen.cod_sp_Sec,datos_gen.conduce_no,datos_gen.fact_no,datos_gen.bodega, SUSER_SNAME(),GETDATE()) IF STATUS < 0 THEN LET numero_msg =-300 CALL msg(numero_msg) ROLLBACK WORK ELSE COMMIT WORK END IF BEGIN WORK} BEGIN WORK IF datos_gen.tipo = "01" THEN SELECT UNIQUE a.num_doc INTO in_ultimo FROM intb00023 a WHERE a.cod_mov = xcod_mov AND bodega = datos_gen.bodega IF STATUS = NOTFOUND THEN LET datos_gen.num_doc = 1 INSERT INTO intb00023 (num_doc,cod_mov,us_crea,fech_crea,bodega) VALUES (datos_gen.num_doc,xcod_mov,usuarios,GETDATE(),datos_gen.bodega) END IF LET in_ultimo = in_ultimo + 1 LET datos_gen.num_doc = in_ultimo DISPLAY BY NAME datos_gen.num_doc SELECT UNIQUE num_doc FROM intb00006 WHERE num_doc=datos_gen.num_doc and cod_mov=xcod_mov IF STATUS != NOTFOUND THEN LET numero_msg = 128 CALL msg(numero_msg) END IF UPDATE intb00023 SET num_doc=DATOS_GEN.num_doc WHERE cod_mov=xcod_mov END IF FOR idx = 1 TO arr_count() IF movi[idx].cantidad_2 IS NOT NULL AND movi[idx].cantidad_2 <> 0 THEN IF datos_gen.tipo = "04" THEN INSERT INTO istb00006 (num_doc,fecha,fact_no,conduce_no,orden_compra,tipo,cod_sp,cod_sp_sec, cod_mov,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad_1,cantidad_2,bodega, us_crea,fech_crea) 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, datos_gen.bodega, usuarios,GETDATE()) END IF # 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,'1',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,SUSER_SNAME(),GETDATE(),null,null,0,' ','0',' ','0','1','0',null,0,NULL,0,0,0,0) END IF IF datos_gen.tipo = "01" THEN INSERT INTO intb00006 (num_doc,fecha,fact_no,conduce_no,orden_compra,tipo,cod_sp,cod_sp_sec, cod_mov,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad_1,cantidad_2,bodega, us_crea,fech_crea) 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, datos_gen.bodega, SUSER_SNAME(),GETDATE()) END IF IF opc1 = "S" THEN OUTPUT TO REPORT entrada_imp(datos_Gen.*,movi[idx].*) END IF END IF END FOR COMMIT WORK IF opc1 = "S" THEN FINISH REPORT entrada_imp END IF RUN imprime # 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 CALL movi.clear() 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(x,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 recibida1 DECIMAL(12,3) DEFINE l SMALLINT DEFINE comp_on,comp_off,doce,normal,negras_of,negras_on,doble_on,doble_of CHAR(2) 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,comp_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,"(",z.cod_mov USING "<<<",")", datos_gen.descrip_mov,negras_of PRINT comp_on SELECT a.descripcion INTO descripcion_bodega FROM intb00009 a WHERE a.cod_bodega = datos_gen.bodega 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, "BODEGA : (",datos_gen.bodega USING "<<<",")",descripcion_bodega 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 71, "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 = " " IF x.tipo = 1 THEN 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 END IF IF x.tipo = 2 THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM iptb00002 WHERE cod_n = z.cod_n and cod_grupo = z.cod_grupo and cod_tipo = z.cod_tipo and cod_sec = z.cod_sec END IF 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 20, z.cantidad_1 USING "##,###,###.###", COLUMN 37, z.cantidad_2 USING "##,###,###.###", COLUMN 53, z.pendiente-z.cantidad_2 USING "---,---.###", descripcion_f CLIPPED PAGE TRAILER PRINT normal PRINT COLUMN 1,"OBSERVACION :" PRINT COLUMN 1, "--------------------------------------------------------------------------" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" SKIP 3 LINE PRINT normal END REPORT FUNCTION inpcmf006() DEFINE query_item CHAR(500) INPUT BY NAME datos_gen.tipo AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF datos_Gen.tipo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo END IF EXIT INPUT END INPUT CONSTRUCT criterio ON a.bodega,a.num_doc,a.cod_mov,a.orden_compra,a.cod_sp,a.cod_sp_sec,a.fecha FROM bodega,num_doc,cod_mov,orden_compra,cod_sp,cod_Sp_Sec,fecha BEFORE CONSTRUCT CALL bodegas('1') AFTER CONSTRUCT IF INT_FLAG THEN CALL msg(2) LET INT_FLAG = FALSE RETURN END IF END CONSTRUCT IF datos_gen.tipo = '01' THEN LET selec = "SELECT DISTINCT a.num_doc,a.tipo,a.orden_compra,a.cod_Sp,a.cod_sp_Sec,a.conduce_no, ", " a.fact_no,CONVERT(CHAR(10),a.fecha,103),a.bodega,b.nom_sp ", " FROM intb00006 a,cotb00001 b ", " WHERE a.cod_sp = b.cod_sp and a.cod_sp_Sec = b.cod_sp_Sec and ",criterio CLIPPED, " AND a.status_t is null " END IF IF datos_gen.tipo = "02" THEN LET selec = " SELECT DISTINCT a.num_doc,a.tipo,a.orden_compra,a.cod_Sp,a.cod_sp_Sec,a.conduce_no, ", "a.fact_no,a.fecha,a.bodega,b.nom_sp ", " FROM iptb00006 a,cotb00001 b ", " WHERE a.cod_sp = b.cod_sp and a.cod_Sp_sec = b.cod_sp_sec ", " and ", criterio CLIPPED, " AND a.status_t IS NULL" END IF IF datos_gen.tipo = "04" THEN LET selec = " SELECT DISTINCT a.num_doc,a.tipo,a.orden_compra,a.cod_Sp,a.cod_sp_Sec,a.conduce_no, ", "a.fact_no,a.fecha,a.bodega,b.nom_sp ", " FROM istb00006 a,cotb00001 b ", " WHERE a.cod_sp = b.cod_sp and a.cod_Sp_sec = b.cod_sp_sec ", " and ", criterio CLIPPED, " AND a.status_t IS NULL" END IF PREPARE comando FROM selec DECLARE busca_reporte SCROLL CURSOR FOR comando OPEN busca_reporte FETCH FIRST busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra, datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no, datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega, datos_gen.nom_sp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF DISPLAY BY NAME datos_gen.* MENU "NAVEGACION" COMMAND "SIGUIENTE" FETCH NEXT busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra, datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no, datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega, datos_gen.nom_sp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF COMMAND "ANTERIOR" FETCH PREVIOUS busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra, datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no, datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega, datos_gen.nom_sp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF COMMAND "PRIMERO" FETCH FIRST busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra, datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no, datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega, datos_gen.nom_sp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF COMMAND "ULTIMO" FETCH LAST busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra, datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no, datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega, datos_gen.nom_sp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF COMMAND "ITEMS" CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT entrada_imp TO archivo IF datos_Gen.tipo = '01' THEN LET query_item = " SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.cod_mov,a.cantidad_1,", "a.cantidad_2 FROM intb00006 a ", "WHERE a.tipo = ",datos_gen.tipo, " AND a.orden_compra = '", datos_gen.orden_compra using "&&&&&&","' AND", " a.num_doc = '",datos_gen.num_doc using "&&&&&&","' ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec" ELSE LET query_item = " SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.cod_mov,a.cantidad_1,", "a.cantidad_2 FROM iptb00006 a ", "WHERE a.tipo = ",datos_gen.tipo, " AND a.orden_compra = '", datos_gen.orden_compra using "&&&&&&","' AND", " a.num_doc = '",datos_gen.num_doc using "&&&&&&","' ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec" END IF PREPARE comandoi FROM query_item DECLARE busca_item CURSOR FOR comandoi LET idx = 1 FOREACH busca_item INTO movi[idx].cod_n,movi[idx].cod_grupo, movi[idx].cod_tipo,movi[idx].cod_sec, movi[idx].cod_mov,movi[idx].cantidad_1, movi[idx].cantidad_2 OUTPUT TO REPORT entrada_imp(datos_Gen.*,movi[idx].*) LET idx = idx + 1 END FOREACH FINISH REPORT entrada_imp IF idx = 1 THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT MENU END IF CALL set_count(idx-1) DISPLAY ARRAY movi TO s_movi1.* AFTER ROW LET p_act = arr_curr() IF datos_gen.tipo = "01" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM intb00001 WHERE 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 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 END IF IF datos_gen.tipo = "02" THEN SELECT unidad_med, descrip_esp INTO unidad, descrip_espa FROM iptb00002 WHERE 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 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 END IF LET descripcion_f = descrip_espa clipped," ",unidad clipped DISPLAY BY NAME descripcion_f,datos_gen.descrip_mov AFTER DISPLAY EXIT DISPLAY END DISPLAY IF idx > 1 THEN LET opt = fgl_winquestion("Atencion","Desea Imprimir este Documento?", "cancel","YES|NO|","question",0) IF opt = "YES" THEN RUN imprime END IF END IF COMMAND "RETORNAR" EXIT MENU END MENU END FUNCTION