{ -------------------------------------------------------------------------- PROGRAMA : IPPRMT044 OBJETIVO : Programa Captura Documento Otros Movimientos de Inventario de Producto Terminados. PROGRAMADOR : Juan Soto. FECHA REALIZACION : AGOSTO 1997. ASESOR : JOSE ALFREDO PAULINO ALEJO -------------------------------------------------------------------------- } GLOBALS "ipprgb000.4gl" DEFINE selec_pt CHAR(1000) DEFINE num_row,cuenta1,cuenta INTEGER DEFINE cant_ant ARRAY[50] OF INTEGER DEFINE factor_conv ARRAY[200] OF DECIMAL(12,5) DEFINE status_mo,ac_cli,opc4 CHAR(1) DEFINE usuario CHAR(9) DEFINE descrip_mov CHAR(30) DEFINE canti34 LIKE iptb00006.cantidad_2 DEFINE busca_v RECORD cod_sp_sec INTEGER, nombre CHAR(30) END RECORD DEFINE busca_p RECORD cod_n INTEGER, cod_grupo INTEGER, cod_tipo INTEGER, cod_sec INTEGER, descrip_esp CHAR(30), unidad_med CHAR(5) END RECORD FUNCTION ipprmt044() DEFINE fecha CHAR(8) DEFINE hora CHAR(5) CLEAR SCREEN OPTIONS ERROR LINE 24, FORM LINE 4, COMMENT LINE 22, PROMPT LINE 23 LET fecha = today USING "dd/mm/yy" LET hora = time LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2 DISPLAY p_companias.nombre CLIPPED AT 1,lj ATTRIBUTE (REVERSE,YELLOW) DISPLAY fecha AT 1,70 ATTRIBUTE (YELLOW) DISPLAY hora AT 2,73 ATTRIBUTE (YELLOW) DISPLAY "ipprmt044" AT 1,3 ATTRIBUTE (YELLOW) DISPLAY "Otros Movimientos" AT 2,30 DISPLAY " Adiciona Registro" AT 3,2 ATTRIBUTE (YELLOW,REVERSE) DISPLAY " Cancela Operacion" AT 3,54 ATTRIBUTE (YELLOW,REVERSE) OPEN FORM ipfmmt044 FROM "ipfmmt044" DISPLAY FORM ipfmmt044 CALL ipprad44() END FUNCTION FUNCTION ipprad44() DEFINE cajas ARRAY[200] OF INTEGER # WHENEVER ERROR CONTINUE LET int_flag = FALSE INITIALIZE otros_mov.* TO NULL LABEL otra_vez: LABEL vuelve: IF (OPC = "S" OR OPC = "s") OR opc is null THEN INITIALIZE otros_mov.* TO NULL END IF IF otros_mov.num_doc is null THEN LET otros_mov.num_doc = 0 END IF LET p_fechas = otros_mov.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 RETURN END IF INPUT BY NAME otros_mov.* WITHOUT DEFAULTS ON KEY(CONTROL-W) IF INFIELD(cod_sp_sec) OR INFIELD(cod_sp) THEN CALL busca_cliente() LET otros_mov.cod_sp = clientes[idx].tipo_cliente LET otros_mov.cod_sp_sec = clientes[idx].sec_cliente LET otros_mov.descrip4 = clientes[idx].nombre DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.descrip4 EXIT INPUT END IF AFTER FIELD cod_cia IF otros_mov.cod_cia IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_cia END IF IF otros_mov.cod_cia = 1 THEN LET nombre_cia = "MARMOTECH" ELSE LET nombre_cia = "" END IF DISPLAY BY NAME nombre_cia BEFORE FIELD bodega LET otros_mov.bodega = 1 DISPLAY BY NAME otros_mov.bodega AFTER FIELD fecha IF otros_mov.fecha < "310394" THEN LET numero_msg = 58 CALL msg(numero_msg) RETURN END IF IF otros_mov.fecha > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = otros_mov.fecha CALL prd() LET otros_mov.fecha = p_fechas DISPLAY BY NAME otros_mov.fecha IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF AFTER FIELD fact_no LET otros_mov.cod_sp = null LET otros_mov.cod_sp_sec = null IF otros_mov.cod_mov = 12 THEN IF otros_mov.fact_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD fact_no END IF END IF IF otros_mov.fact_no is not null THEN IF otros_mov.cod_mov = 32 THEN SELECT unique cod_n FROM iptb00006 WHERE fact_no = otros_mov.fact_no and cod_mov = otros_mov.cod_mov and fecha >= "010194" AND status_t is null IF status != NOTFOUND THEN LET numero_msg = 103 CALL msg(numero_msg) #NEXT FIELD fact_no END IF END IF ELSE IF otros_mov.cod_mov = 12 THEN SELECT UNIQUE cod_sp,cod_sp_sec INTO otros_mov.cod_sp,otros_mov.cod_sp_sec FROM vetb00002 WHERE factura=otros_mov.fact_no and status_t is null AND fecha_factura >= "010194" IF status = NOTFOUND THEN LET numero_msg = 102 CALL msg(numero_msg) #NEXT FIELD fact_no END IF END IF END IF DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_sec AFTER FIELD cod_transp IF otros_mov.cod_transp is null THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD cod_transp END IF AFTER FIELD sec_transp IF otros_mov.sec_transp is null THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD cod_transp END IF SELECT nombre INTO descrip2 FROM vetb00015 WHERE cod_transp=otros_mov.cod_transp and sec_transp=otros_mov.sec_transp and status_t is null IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) # NEXT FIELD cod_transp END IF DISPLAY BY NAME descrip2 AFTER FIELD cod_tarifa IF otros_mov.cod_tarifa is null THEN LET numero_msg = 16 CALL msg(numero_msg) # NEXT FIELD cod_tarifa END IF SELECT descrip INTO descrip1 FROM vetb00023 WHERE cod_tarifa = otros_mov.cod_tarifa and status_t is null IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) #NEXT FIELD cod_tarifa END IF DISPLAY BY NAME descrip1 AFTER FIELD bodega SELECT *FROM intb00009 WHERE cod_bodega = otros_mov.bodega IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD bodega END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF BEFORE FIELD num_doc LET otros_mov.fecha = today DISPLAY BY NAME otros_mov.fecha AFTER FIELD cod_mov IF (otros_mov.cod_mov IS NULL OR otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31) THEN LET numero_msg = 1660 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT a.descrip_mov,a.status_mov INTO otros_mov.descrip_mov,status_m FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov AND a.status_t is null IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF ELSE CALL integridad() if bandera = 1 THEN LET bandera = 0 RETURN end if END IF DISPLAY BY NAME otros_mov.descrip_mov { CHEQUEO DE PERMISOS PARA EL USUARIO SELECT * FROM iptb00005 where cod_mov = otros_mov.cod_mov and us_crea = user IF status = notfound THEN LET numero_msg = 139 CALL msg(numero_msg) NEXT FIELD cod_mov END IF } IF otros_mov.cod_mov = 32 or otros_mov.cod_mov = 12 THEN NEXT FIELD fact_no ELSE NEXT FIELD fecha END IF BEFORE FIELD cod_sp IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN CALL busca_vend() LET otros_mov.cod_sp = 12 LET otros_mov.cod_sp_sec= busca_v.cod_sp_sec LET otros_mov.descrip4 = busca_v.nombre DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.descrip4 NEXT FIELD cod_sp_sec END IF AFTER FIELD cod_sp IF ac_cli = "S" AND otros_mov.cod_sp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF AFTER FIELD cod_sp_sec IF ac_cli = "S" AND otros_mov.cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF IF otros_mov.cod_mov = 12 THEN IF otros_mov.cod_sp_sec is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF END IF IF otros_mov.cod_sp_sec is not null THEN SELECT nombre INTO otros_mov.descrip4 FROM vetb00004 WHERE tipo_cliente = otros_mov.cod_sp and sec_cliente = otros_mov.cod_sp_sec and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF DISPLAY BY NAME otros_mov.descrip4 { IF otros_mov.fact_no is not null THEN SELECT a.tipo_cliente FROM vetb00002 a WHERE a.factura = otros_mov.fact_no and a.tipo_cliente = otros_mov.cod_sp_sec IF status = notfound THEN LET numero_msg = 237 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF END IF } END IF IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN SELECT unique cod_sp_sec FROM vetb00033 WHERE cod_sp_sec = otros_mov.cod_sp_sec IF STATUS = NOTFOUND THEN LET numero_msg = -1301 CALL msg(numero_msg) NEXT FIELD cod_sp END IF END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE FOR idx = 1 to arr_count() LET movi2[idx].cod_n = null LET movi2[idx].cod_grupo = null LET movi2[idx].cod_tipo = null LET movi2[idx].cod_sec = null LET movi2[idx].cantidad_1 = null LET movi2[idx].cantidad_2 = null LET movi2[idx].unidad_med = null LET movi2[idx].descrip_esp = null END FOR END IF IF opc = "S" or opc = "s" OR opc IS NULL THEN FOR idx = 1 to arr_count() LET movi2[idx].cod_n = null LET movi2[idx].cod_grupo = null LET movi2[idx].cod_tipo = null LET movi2[idx].cod_sec = null LET movi2[idx].cantidad_2 = null LET movi2[idx].cantidad_1 = null LET movi2[idx].unidad_med = null LET movi2[idx].descrip_esp = null END FOR END IF INITIALIZE ant_art.* TO NULL IF status_m = "S" THEN PREPARE b_fact FROM selec2 DECLARE facturas CURSOR FOR b_fact OPEN facturas USING otros_mov.fact_no LET idx = 1 FOREACH facturas INTO movi2[idx].*,cajas[idx],cant_ant[idx] IF status = notfound THEN EXIT FOREACH END IF LET idx = idx + 1 END FOREACH END IF LET decide = null CALL set_count(idx - 1) INPUT ARRAY movi2 WITHOUT DEFAULTS FROM s_movi1.* ON KEY(CONTROL-W) CALL busca_pt1() LET movi2[p_act].cod_n = pilas[curr1].cod_n LET movi2[p_act].cod_grupo = pilas[curr1].cod_grupo LET movi2[p_act].cod_tipo = pilas[curr1].cod_tipo LET movi2[p_act].cod_sec = pilas[curr1].cod_sec LET movi2[p_act].descrip_esp = pilas[curr1].descrip_esp DISPLAY movi2[p_act].cod_n TO s_movi1.cod_n DISPLAY movi2[p_act].cod_grupo TO s_movi1.cod_grupo DISPLAY movi2[p_act].cod_tipo TO s_movi1.cod_tipo DISPLAY movi2[p_act].cod_sec TO s_movi1.cod_sec DISPLAY movi2[p_act].descrip_esp TO s_movi1.descrip_esp BEFORE ROW LET p_act = arr_curr() LET scr_l = scr_line() ON KEY(CONTROL-W) CASE WHEN INFIELD (cod_n) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp= busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo,movi2[p_act].cod_sec, movi2[p_act].descrip_esp,movi2[p_act].unidad_med TO s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo, s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec, s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med WHEN INFIELD (cod_grupo) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp= busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo,movi2[p_act].cod_sec, movi2[p_act].descrip_esp,movi2[p_act].unidad_med TO s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo, s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec, s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med WHEN INFIELD (cod_tipo) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp= busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo,movi2[p_act].cod_sec, movi2[p_act].descrip_esp,movi2[p_act].unidad_med TO s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo, s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec, s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med WHEN INFIELD (cod_sec) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp= busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo,movi2[p_act].cod_sec, movi2[p_act].descrip_esp,movi2[p_act].unidad_med TO s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo, s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec, s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med END CASE CALL integridad() if bandera = 1 THEN LET bandera = 0 RETURN end if AFTER ROW LET p_act = arr_curr() IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null then LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) LET p_act = p_act - 1 NEXT FIELD cod_n END IF END IF END FOR END IF AFTER FIELD cod_n LET p_act = arr_curr() IF movi2[p_act].cod_n is not null then LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET p_act = p_act - 1 NEXT FIELD cod_grupo END IF END IF END FOR END IF AFTER FIELD cod_grupo LET p_act = arr_curr() IF movi2[p_act].cod_grupo is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET p_act = p_act - 1 NEXT FIELD cod_tipo END IF END IF END FOR AFTER FIELD cod_tipo LET p_act = arr_curr() IF movi2[p_act].cod_tipo is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET p_act = p_act - 1 NEXT FIELD cod_sec END IF END IF END FOR AFTER FIELD cod_sec LET p_act = arr_curr() IF movi2[p_act].cod_sec is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi2[p_act].cod_n is null AND movi2[p_act].cod_sec is not null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null then SELECT * INTO p_iptb02.* FROM iptb00002 WHERE cod_n=movi2[p_act].cod_n and cod_grupo = movi2[p_act].cod_grupo and cod_tipo=movi2[p_act].cod_tipo and cod_sec = movi2[p_act].cod_sec and status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF SELECT UNIQUE a.factor_conv INTO factor_conv[p_act] FROM iptb00001 a WHERE a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec and a.status_t IS NULL IF STATUS = NOTFOUND THEN ERROR "NO EXISTE FACTOR DE CONVERSION" NEXT FIELD cod_n END IF LET movi2[p_act].descrip_esp = p_iptb02.descrip_esp CLIPPED LET movi2[p_act].unidad_med = p_iptb02.unidad_med CLIPPED DISPLAY movi2[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp ATTRIBUTE(CYAN) DISPLAY movi2[p_act].unidad_med TO s_movi1[scr_l].unidad_med ATTRIBUTE(CYAN) LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END FOR END IF AFTER FIELD cantidad_1 LET p_act = arr_curr() IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null THEN IF movi2[p_act].cantidad_1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad_1 END IF LET movi2[p_act].cantidad_2=movi2[p_act].cantidad_1*factor_conv[p_act] DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 LET p_iptb06.cantidad_2 = 0 IF status_m = "2" THEN # BUSCA LA EXISTENCIA SELECT SUM(a.cantidad_2) INTO p_iptb06.cantidad_2 FROM iptb00006 a WHERE a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec and a.status_t IS NULL IF p_iptb06.cantidad_2 IS NULL THEN LET p_iptb06.cantidad_2 = 0 END IF IF movi2[p_act].cantidad_2 > p_iptb06.cantidad_2 THEN LET numero_msg = 30 CALL msg(numero_msg) NEXT FIELD cantidad_2 END IF END IF LET movi3[p_act].cantidad_2 = movi2[p_act].cantidad_2 END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF END INPUT LABEL sale_boni: PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc SELECT num_doc INTO otros_mov.num_doc FROM iptb00007 WHERE cod_mov = otros_mov.cod_mov IF status = notfound THEN LET otros_mov.num_doc = 0 INSERT INTO iptb00007 values (1,otros_mov.cod_mov,null,user,current,null,null) END IF LET otros_mov.num_doc = otros_mov.num_doc + 1 IF OPC = "S" or OPC = "s" THEN FOR idx = 1 TO arr_count() IF movi2[idx].cod_n is not null and movi2[idx].cod_grupo is not null and movi2[idx].cod_tipo is not null and movi2[idx].cod_sec is not null THEN IF movi2[idx].cantidad_2 is not null THEN IF status_m = "2" THEN LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1 END IF INSERT INTO iptb00006 VALUES (otros_mov.cod_cia,otros_mov.num_doc,otros_mov.fecha, otros_mov.fact_no,null,null,null,otros_mov.cod_sp, otros_mov.cod_sp_sec,otros_mov.cod_transp, otros_mov.sec_transp,otros_mov.placa,otros_mov.cod_tarifa, otros_mov.cod_mov,otros_mov.detalle,movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo,movi2[idx].cod_sec, movi2[idx].cantidad_1,movi2[idx].cantidad_2, null,null,otros_mov.bodega,null,user,current,null,null) CALL integridad() if bandera = 1 THEN LET bandera = 0 RETURN end if #---------------------------------------------------------------- # Insertar registro en la IPTB00017 cuando COD_MOV sea igual a 34 # osea transferencia de inventarios a la bodega del Vendedor #---------------------------------------------------------------- IF otros_mov.cod_mov = 34 OR otros_mov.cod_mov = 33 THEN LET canti34 = movi2[idx].cantidad_2 * -1 {INSERT INTO iptb00017 VALUES (otros_mov.cod_cia,otros_mov.num_doc,otros_mov.fecha, otros_mov.fact_no,null,null,null,otros_mov.cod_sp, otros_mov.cod_sp_sec,otros_mov.cod_transp, otros_mov.sec_transp,otros_mov.placa,otros_mov.cod_tarifa, otros_mov.cod_mov,otros_mov.detalle,movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo,movi2[idx].cod_sec, movi2[idx].cantidad_1,canti34, null,null,otros_mov.bodega,null,user,current,null,null) } CALL integridad() if bandera = 1 THEN LET bandera = 0 RETURN end if END IF { if de mov 34 y 33 } END IF { if de cantidad_2 no NULL } END IF { if de opc = s } END FOR # Actualiza tabla control ultimo documento UPDATE iptb00007 set num_doc = otros_mov.num_doc, us_crea = user, fech_crea = current WHERE cod_mov = otros_mov.cod_mov DISPLAY BY NAME otros_mov.num_doc ATTRIBUTE (YELLOW) PROMPT "Desea Imprimir Formulario Ahora? (S/N)" FOR CHAR opt2 IF opt2 = "S" OR opt2 = "s" THEN START REPORT formu4 TO PRINTER LET ya = null FOR idx = 1 TO arr_count() IF movi2[idx].cod_sec IS NOT NULL THEN OUTPUT TO REPORT formu4(otros_mov.*,movi2[idx].*) END IF END FOR FINISH REPORT formu4 END IF LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM FOR idx = 1 to 6 LET movi2[idx].cod_n = null LET movi2[idx].cod_grupo = null LET movi2[idx].cod_tipo = null LET movi2[idx].cod_sec = null LET movi2[idx].cantidad_2 = null LET movi2[idx].unidad_med = null LET movi2[idx].descrip_esp = null DISPLAY movi2[idx].cod_n to s_movi1[idx].cod_n DISPLAY movi2[idx].cod_grupo to s_movi1[idx].cod_grupo DISPLAY movi2[idx].cod_tipo to s_movi1[idx].cod_tipo DISPLAY movi2[idx].cod_sec to s_movi1[idx].cod_sec DISPLAY movi2[idx].descrip_esp to s_movi1[idx].descrip_esp DISPLAY movi2[idx].unidad_med to s_movi1[idx].unidad_med END FOR FOR idx = 1 to 20 LET movi2[idx].cod_n = null LET movi2[idx].cod_grupo = null LET movi2[idx].cod_tipo = null LET movi2[idx].cod_sec = null LET movi2[idx].cantidad_2 = null LET movi2[idx].unidad_med = null LET movi2[idx].descrip_esp = null END FOR ELSE GOTO otra_vez END IF GOTO vuelve END FUNCTION REPORT formu4(x,z) DEFINE x RECORD num_doc LIKE iptb00006.num_doc, cod_cia LIKE iptb00006.cod_cia, cod_mov LIKE iptb00006.cod_mov, fact_no LIKE iptb00006.fact_no, cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, placa LIKE iptb00006.placa, fecha LIKE iptb00006.fecha, descrip_mov LIKE intb00005.descrip_mov, bodega LIKE iptb00006.bodega, detalle LIKE iptb00006.detalle, cod_sp LIKE iptb00006.cod_sp, cod_sp_sec LIKE iptb00006.cod_sp_sec, descrip4 CHAR(30) END RECORD DEFINE z RECORD cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, cantidad_1 LIKE iptb00006.cantidad_1, cantidad_2 LIKE iptb00006.cantidad_2, unidad_med LIKE iptb00002.unidad_med, descrip_esp CHAR(40) END RECORD DEFINE usuario_c CHAR(9) DEFINE signo CHAR(1) DEFINE doce,normal,doble,doble_of,negras,negras_off CHAR(2) DEFINE l,cuenta SMALLINT OUTPUT LEFT MARGIN 5 ORDER BY x.num_doc,z.cod_sec FORMAT BEFORE GROUP OF x.num_doc LET doble = ASCII 14 LET doble_of = ASCII 20 LET negras = ASCII 27, ASCII 69 LET negras_off = ASCII 27, ASCII 70 SELECT unique us_crea INTO usuario_c FROM iptb00006 WHERE num_doc = x.num_doc and cod_mov = x.cod_mov and us_crea = user LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 PRINT doce PRINT COLUMN 1, negras,doble,p_companias.nombre CLIPPED PRINT COLUMN 71,"No. ",doble,x.num_doc using "<<<<<<" LET l = (80 - LENGTH ("OTROS MOVIMIENTOS")) / 2 PRINT COLUMN l, "OTROS MOVIMIENTOS", COLUMN 71, x.fecha using "dd/mm/yy" SKIP 1 LINES LET l = (80 - LENGTH (x.descrip_mov)) / 2 PRINT COLUMN l-2, "(",x.cod_mov using "&&",") ",x.descrip_mov,negras_off PRINT COLUMN 1, "Factura No: ",x.fact_no using "&&&&&&" IF x.detalle is null THEN LET x.detalle = "**************************************" END IF PRINT COLUMN 1, "Detalle : ", x.detalle PRINT COLUMN 1, "Cliente : ", x.cod_sp using "&&","-", x.cod_sp_sec using "&&&&"," ", x.descrip4 SKIP 1 LINES PRINT COLUMN 1, "-----------------------------------------------------------------------------", "--------------" PRINT COLUMN 2,doble, "PRODUCTO",doble_of clipped, COLUMN 76, "UNIDADES" PRINT COLUMN 1, "-----------------------------------------------------------------------------", "-------------" SKIP 1 LINES ON EVERY ROW IF z.cod_n is not null and z.cod_grupo is not null and z.cod_tipo is not null and z.cod_sec is not null THEN PRINT COLUMN 2, z.cod_n using "&","-", COLUMN 4, z.cod_grupo using "&","-", COLUMN 6, z.cod_tipo using "&&","-", COLUMN 9, z.cod_sec using "&&&", COLUMN 17, z.descrip_esp clipped," ",z.unidad_med CLIPPED; IF cuenta = 1 THEN LET signo = "+" ELSE LET signo = "-" LET z.cantidad_2 = z.cantidad_2 * -1 END IF PRINT COLUMN 75, signo, z.cantidad_2 using "#,###,###.##" END IF PAGE TRAILER PRINT COLUMN 1, "------------------", COLUMN 22, "------------------", COLUMN 45, "------------------", COLUMN 65, "------------------" PRINT COLUMN 5, "Entregado Por", COLUMN 24, "Recibido Por", COLUMN 48, "Aprobado Por", COLUMN 68, "Aprobado Por" PRINT COLUMN 2, "Original: Contabilidad Copia: Vendedor Copia: Ventas Copia: Almacen" PRINT normal END REPORT FUNCTION busca_vend() DEFINE arr_vend ARRAY[200] OF RECORD cod_sp_sec INTEGER, num_emp INTEGER, nombre CHAR(30) END RECORD OPEN WINDOW busca_1 AT 8,4 WITH FORM "ipfmwd004" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,PROMPT LINE LAST) DECLARE busca_1 CURSOR FOR SELECT a.tipo_cliente,a.num_emp,b.nombre FROM vetb00033 a,vetb00004 b WHERE a.sec_cliente = b.sec_cliente AND a.status_t IS NULL AND b.status_t IS NULL ORDER BY 1 LET idx = 1 FOREACH busca_1 INTO arr_vend[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY arr_vend TO sc_vend.* LET idx = ARR_CURR() LET busca_v.cod_sp_sec = arr_vend[idx].cod_sp_sec LET busca_v.nombre = arr_vend[idx].nombre CLOSE WINDOW busca_1 END FUNCTION FUNCTION busca_prod1() DEFINE arr_prod ARRAY[500] OF RECORD cod_n INTEGER, cod_grupo INTEGER, cod_tipo INTEGER, cod_sec INTEGER, descrip_esp CHAR(30), unidad_med CHAR(5) END RECORD OPEN WINDOW busca_2 AT 8,4 WITH FORM "ipfmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,PROMPT LINE LAST) CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM cod_n,cod_grupo,cod_tipo,cod_sec LET selec_pt = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", " a.unidad_med FROM iptb00002 a ", "WHERE a.status_t IS NULL AND ",criterio CLIPPED," ORDER BY 5 " PREPARE comando_p FROM selec_pt DECLARE busca_2 CURSOR FOR comando_p LET idx = 1 FOREACH busca_2 INTO arr_prod[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY arr_prod TO s_prod.* LET idx = ARR_CURR() LET busca_p.cod_n = arr_prod[idx].cod_n LET busca_p.cod_grupo = arr_prod[idx].cod_grupo LET busca_p.cod_tipo = arr_prod[idx].cod_tipo LET busca_p.cod_sec = arr_prod[idx].cod_sec LET busca_p.descrip_esp = arr_prod[idx].descrip_esp LET busca_p.unidad_med = arr_prod[idx].unidad_med CLOSE WINDOW busca_2 END FUNCTION FUNCTION busca_cliente() LET int_flag = FALSE OPEN WINDOW cliente AT 10,9 WITH FORM "ipfmwd009" ATTRIBUTE(BORDER,FORM LINE FIRST + 2) CONSTRUCT BY NAME criterio ON a.tipo_cliente,a.sec_cliente,a.nombre LET selec = "SELECT a.tipo_cliente,a.sec_cliente,a.nombre FROM vetb00004 a ", "WHERE a.status_t IS NULL AND ",criterio CLIPPED, "ORDER BY 1,2" PREPARE comando3 FROM selec DECLARE comp3 CURSOR FOR comando3 LET idx = 1 FOREACH comp3 INTO clientes[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY clientes TO s_cliente.* LET idx = ARR_CURR() CLOSE WINDOW cliente END FUNCTION