{ ----------------------------------------------------------------------------- PROGRAMA : CCPRMT008 OBJETIVO : Mantenimiento Requisiciones Despacho REALIZADO POR : JUAN SOTO FECHA : Enero 2010 FUNCTIONES : envia_correo() Envia correo a la persona quien autoriza las ordenes ----------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE estado BOOLEAN, actualiza CHAR(2), accion CHAR(1), idx2 SMALLINT, resultado,total_medida_r DEC(12,5), porc_itbis DYNAMIC ARRAY OF DEC(8,2), rcantidad,numerotemp INT, listarequisi DYNAMIC ARRAY OF RECORD estado1 CHAR(20), estado2 CHAR(20), estado_produccion VARCHAR(20), num_req1 INT, fecha1 CHAR(10), material CHAR(50), fecha_transporte CHAR(10), fecha_llegada CHAR(10), num_oc1 INT, cliente1 CHAR(40), valor1 DEC(12,2) END RECORD, pcerrada CHAR(1), xmonto DEC(12,2), rdespiece DYNAMIC ARRAY OF RECORD etiqueta CHAR(20), cod_n , cod_grupo , cod_tipo , cod_sec SMALLINT, lado_1 , lado_2 , lado_3 , cantidad , medida, cantidad_r, medida_r DEC(12,5) END RECORD, idx1,cuenta_despiece,pcondpago SMALLINT, pneto DEC(12,2), pcotizacion,xorden,xtipocliente,xseccliente INT, pfecha_req CHAR(10) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(4) RETURNING impresor CALL STARTLOG("ccprmt008.txt") CONNECT to "smarmotech" USER usuarios USING clave INITIALIZE requisicion.* TO NULL SELECT a.sec_vend,RTRIM(b.nom1_emp)||' '||b.apell1_emp, a.email INTO requisicion.sec_vend,requisicion.nombre_vendedor, vendedorEmail FROM seg0000 a,adtb00003 b WHERE a.usuario = usuarios AND a.sec_vend = b.num_emp CALL ccprmt008() END MAIN FUNCTION ccprmt008() OPTIONS INPUT WRAP OPEN WINDOW w1 AT 10,5 WITH FORM "ccfmmt008" CALL carga_lista() LET requisicion.fecha_requisicion = TODAY DISPLAY BY NAME requisicion.nombre_vendedor, requisicion.sec_vend,requisicion.fecha_requisicion MENU ON ACTION nuevo ATTRIBUTE(TEXT="Nuevo",IMAGE="new") LET actualiza = "NO" LET accion = "A" CALL arr_requisicion.clear() CALL ccprad008() ON ACTION buscar ATTRIBUTE(TEXT="Buscar",IMAGE="find") LET accion = "M" CALL ccprmf008() ON ACTION refrescar ATTRIBUTE(TEXT="Refrescar",IMAGE="Refresh") CALL carga_lista() ON ACTION salir EXIT MENU END MENU CLOSE WINDOW w1 END FUNCTION FUNCTION ccprad008() DEFINE remanente,unidadRemanente DEC(12,4), total_cotizacion,total_requisicion DEC(12,2) LET requisicion.fecha_requisicion = TODAY LET requisicion.estado = 'NO AUTORIZADA' LET requisicion.num_req = 0 DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM) INPUT BY NAME requisicion.busca_orden ATTRIBUTES(WITHOUT DEFAULTS) {AFTER FIELD sec_vend SELECT UNIQUE RTRIM(b.nom1_emp)||' '||b.apell1_emp,a.email INTO requisicion.nombre_vendedor,vendedoremail FROM adtb00003 b,seg0000 a WHERE b.num_emp = requisicion.sec_vend and b.num_Emp = a.sec_vend IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD sec_vend END IF DISPLAY BY NAME requisicion.nombre_vendedor} AFTER FIELD busca_orden LET pcerrada = null SELECT a.sec_vend,a.cerrada,a.cond_pago INTO requisicion.sec_vend,pcerrada,pcondpago FROM prtb00012 a WHERE a.num_oc = requisicion.busca_orden AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) END IF IF pcerrada = 'S' THEN CALL fgl_winmessage("INFO","ORDEN ESTA CERRADA","STOP") NEXT FIELD busca_orden END IF SELECT RTRIM(b.nom1_emp)||' '||b.apell1_emp INTO requisicion.nombre_vendedor FROM adtb00003 b WHERE b.num_emp = requisicion.sec_vend DISPLAY BY NAME requisicion.sec_vend,requisicion.nombre_vendedor # IF pcondpago = 4 THEN # CALL fgl_winmessage("INFO","ESTA ORDEN ES AL CONTADO, NO PUEDES HACER REQUISICION","INFO") # NEXT FIELD busca_orden # END IF # ESTE CONSTRUCT SE COLOCO EN COMENTARIO PORQUE EL DIRECTOR DE VENTAS # INFORMO QUE EN LA PRIMERA VERSION, EL VENDEDOR DEBE SABER QUE ORDEN # VA A REQUERIR. # CONSTRUCT criterio ON a.num_oc,a.fecha_oc,a.cotizacion_no # FROM busca_orden,busca_fecha,busca_cotizacion # BEFORE CONSTRUCT # CALL DIALOG.setactionactive("procesa",0) # CALL arr_requisicion.clear() # ON ACTION busca_parametros LET selec3 = "SELECT 'N',a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre,SUM(b.cantidad),SUM(h.cantidad_1), ", " b.area,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med, ", " SUM(h.cantidad_1),SUM(b.cantidad),'0','0','0','0','0',h.id_kit,g.porc_itbi ", "FROM prtb00012 a,vetb00004 c,prtb00013 b,iptb00002 d, ", " vetb00050 g,prtb00023 h ", "WHERE a.num_oc =",requisicion.busca_orden," AND ", # " a.sec_vend = g.sec_vend AND ", " a.tipo_cliente = c.tipo_cliente AND ", " a.sec_cliente = c.sec_cliente AND ", " a.num_oc = b.num_oc and ", " a.num_oc = h.num_oc AND", " b.cod_n = d.cod_n and ", " b.cod_grupo = d.cod_grupo and ", " b.cod_tipo = d.cod_tipo and ", " b.cod_Sec = d.cod_Sec and ", " b.secuencia = h.secuencia AND ", " b.cod_n = h.cod_n and ", " b.cod_grupo = h.cod_grupo and ", " b.cod_tipo = h.cod_tipo and ", " b.cod_Sec = h.cod_Sec and ", " a.cotizacion_no = g.cotizacion_no AND ", " a.cerrada = 'N' and a.status_t IS NULL ", " GROUP BY a.fecha_oc,a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre, ", " b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med,g.porc_itbi,b.area,h.id_kit " { " UNION ", "SELECT 'N',a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,a.tipo_cliente,a.sec_cliente,c.nombre,b.cantidad,b.cantidad, ", " b.area,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,d.descrip_esp,d.unidad_med, ", " b.cantidad,b.cantidad,'0','0','0','0','0',b.id_kit,g.porc_itbi ", "FROM prtb00012 a,vetb00004 c,prtb00031 b,iptb00002 d, ", " vetb00050 g ", "WHERE a.num_oc =",requisicion.busca_orden," AND ", " a.sec_vend = g.sec_vend AND ", " a.tipo_cliente = c.tipo_cliente AND ", " a.sec_cliente = c.sec_cliente AND ", " a.num_oc = b.num_oc and ", " b.cod_n = d.cod_n and ", " b.cod_grupo = d.cod_grupo and ", " b.cod_tipo = d.cod_tipo and ", " b.cod_Sec = d.cod_Sec and ", " a.cotizacion_no = g.cotizacion_no AND ", " a.cerrada = 'N' and a.status_t IS NULL " } PREPARE comando FROM selec3 DECLARE busca_orden CURSOR FOR comando OPEN busca_orden LET total_cotizacion = 0 LET idx = 1 LET pcotizacion = 0 FOREACH busca_orden INTO arr_requisicion[idx].*, porc_itbis[idx] LET arr_requisicion[idx].procesa = "NO" # BUSCA PRECIO LET arr_requisicion[idx].precio = 0 IF arr_requisicion[idx].kit IS NULL THEN SELECT AVG(a.precio),AVG(a.porc_Desc) INTO arr_requisicion[idx].precio,arr_requisicion[idx].descuento FROM vetb00051 a WHERE a.cotizacion_no = arr_requisicion[idx].cotizacion_no AND a.area = arr_requisicion[idx].area AND a.cod_n = arr_requisicion[idx].cod_n AND a.cod_grupo = arr_requisicion[idx].cod_grupo AND a.cod_tipo = arr_requisicion[idx].cod_tipo AND a.cod_Sec = arr_requisicion[idx].cod_sec ELSE SELECT AVG(a.precio),AVG(a.porc_Desc) INTO arr_requisicion[idx].precio,arr_requisicion[idx].descuento FROM vetb00031 a WHERE a.cotizacion_no = arr_requisicion[idx].cotizacion_no AND a.area = arr_requisicion[idx].area AND a.cod_n = arr_requisicion[idx].cod_n AND a.cod_grupo = arr_requisicion[idx].cod_grupo AND a.cod_tipo = arr_requisicion[idx].cod_tipo AND a.cod_Sec = arr_requisicion[idx].cod_sec AND a.id_kit = arr_requisicion[idx].kit END IF IF arr_requisicion[idx].precio IS NULL THEN LET arr_requisicion[idx].precio = 0 END IF LET pcotizacion = arr_requisicion[idx].cotizacion_no LET arr_requisicion[idx].valor = arr_requisicion[idx].cantidad_ord * arr_requisicion[idx].precio LET arr_requisicion[idx].descvalor = (arr_requisicion[idx].cantidad_ord * arr_requisicion[idx].precio) * (arr_requisicion[idx].descuento/100) LET arr_requisicion[idx].valor = arr_requisicion[idx].valor - arr_requisicion[idx].descvalor LET arr_requisicion[idx].valor = (arr_requisicion[idx].valor * (porc_itbis[idx] /100)) + arr_requisicion[idx].valor CALL controles(requisicion.num_req,arr_requisicion[idx].area, arr_requisicion[idx].cod_n, arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo, arr_requisicion[idx].cod_sec,arr_requisicion[idx].num_oc,0,arr_requisicion[idx].cantidad_ord) RETURNING estado,arr_requisicion[idx].cantidad,arr_requisicion[idx].cantidad_1 LET total_cotizacion = total_cotizacion + arr_requisicion[idx].valor IF arr_requisicion[idx].cantidad IS NULL THEN LET arr_requisicion[idx].cantidad_1 = arr_requisicion[idx].cantidad_ord1 LET arr_requisicion[idx].cantidad = arr_requisicion[idx].cantidad_ord LET arr_requisicion[idx].cantidad_pendiente = 0 ELSE DISPLAY "CALCULO: CODIGO: ", arr_requisicion[idx].cod_sec," ORDEN:",arr_requisicion[idx].cantidad_ord1," CANTIDAD1: ",arr_requisicion[idx].cantidad_1 LET arr_requisicion[idx].cantidad_1 = arr_requisicion[idx].cantidad_ord1 - arr_requisicion[idx].cantidad_1 CALL factor_conv(arr_requisicion[idx].cod_n, arr_requisicion[idx].cod_grupo, arr_requisicion[idx].cod_tipo, arr_requisicion[idx].cod_sec, arr_requisicion[idx].cantidad_1) RETURNING resultado,estado LET arr_requisicion[idx].cantidad_pendiente = arr_requisicion[idx].cantidad_1 DISPLAY "pendiente: ",arr_requisicion[idx].cantidad_pendiente CALL factor_conv(arr_requisicion[idx].cod_n, arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo, arr_requisicion[idx].cod_sec,arr_requisicion[idx].cantidad_1) RETURNING resultado,estado IF resultado > 0 THEN LET arr_requisicion[idx].cantidad = resultado ELSE LET arr_requisicion[idx].cantidad = arr_requisicion[idx].cantidad_1 END IF IF arr_requisicion[idx].cantidad_1 <=0 THEN DISPLAY "SE DEVUELVE: ",arr_requisicion[idx].cod_sec," cantidad: ",arr_requisicion[idx].cantidad_1 CONTINUE FOREACH END IF END IF LET idx = idx + 1 END FOREACH LET estado = FALSE IF idx = 1 THEN CALL fgl_winmessage("ERROR","NO EXISTEN ORDENES CON ESA CONDICION","STOP") CALL arr_requisicion.clear() EXIT DIALOG END IF DISPLAY BY NAME total_cotizacion CALL set_count(idx-1) # AFTER CONSTRUCT # CALL input_data() AFTER INPUT SELECT UNIQUE RTRIM(b.nom1_emp)||' '||b.apell1_emp,a.email INTO requisicion.nombre_vendedor,vendedoremail FROM adtb00003 b,seg0000 a WHERE b.num_emp = requisicion.sec_vend and b.num_Emp = a.sec_vend IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD busca_orden END IF DISPLAY BY NAME requisicion.nombre_vendedor END INPUT INPUT ARRAY arr_requisicion FROM s_requisi.* ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION desseleccion FOR idx2 = 1 TO idx IF arr_requisicion[idx2].num_oc IS NOT NULL THEN LET arr_requisicion[idx2].procesa = "NO" DISPLAY arr_requisicion[idx2].procesa TO s_requisi[scr_l].procesa END IF END FOR ON ACTION seleccion FOR idx2 = 1 TO arr_requisicion.getLength() IF arr_requisicion[idx2].num_oc IS NOT NULL THEN LET arr_requisicion[idx2].procesa = "SI" LET scr_l = scr_line() DISPLAY arr_requisicion[idx2].procesa TO s_requisi[idx2].procesa END IF END FOR BEFORE INPUT CALL DIALOG.setactionactive("procesa",1) CALL DIALOG.setactionactive("insert",FALSE) CALL DIALOG.setactionactive("delete",FALSE) CALL DIALOG.setactionactive("append",FALSE) BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD cantidad_1 LET curr = arr_curr() LET scr_l = scr_line() IF arr_requisicion[curr].cantidad_1 > 0 AND arr_requisicion[curr].procesa = "SI" THEN LET arr_requisicion[curr].valor = 0 CALL factor_conv(arr_requisicion[curr].cod_n, arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo, arr_requisicion[curr].cod_sec,arr_requisicion[curr].cantidad_1) RETURNING resultado,estado IF estado = FALSE THEN CALL fgl_winmessage("ERROR","PROBLEMA EN EL FACTOR DE CONVERSION, CONTACTE ADM INVENTARIO","STOP") NEXT FIELD cantidad_1 END IF LET arr_requisicion[curr].cantidad = resultado DISPLAY arr_requisicion[curr].cantidad TO s_requisi[scr_l].cantidad IF arr_requisicion[curr].cantidad_1 > arr_requisicion[curr].cantidad_ord1 THEN CALL fgl_Winmessage("ERROR","CANTIDAD EXECEDE CANTIDAD ORDEN","STOP") NEXT FIELD cantidad_1 END IF CALL controles(requisicion.num_req,arr_requisicion[curr].area,arr_requisicion[curr].cod_n, arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo, arr_requisicion[curr].cod_sec,arr_requisicion[curr].num_oc,arr_requisicion[curr].cantidad, arr_requisicion[curr].cantidad_ord) RETURNING estado,remanente,unidadRemanente IF NOT estado THEN CALL fgl_winmessage("ERROR","NO PUEDE HACER MAS REQUISICION A ESTA ORDEN","STOP") NEXT FIELD cantidad_1 END IF # CALL control_despiece(arr_requisicion[curr].area,arr_requisicion[curr].cod_n,arr_requisicion[curr].cod_grupo, # arr_requisicion[curr].cod_tipo,arr_requisicion[curr].cod_sec, # arr_requisicion[curr].num_oc ,arr_requisicion[curr].cantidad,accion) RETURNING estado # IF estado = FALSE THEN # CALL fgl_winmessage("ERROR","NO PUEDE ADICIONAR REQUISICION, EXISTE UN ITEM QUE DEBE DESPIEZAR o LA CANTIDAD DIFIERE DE LA CANTIDAD EN LA REQUISICION","STOP") # NEXT FIELD cantidad_1 # END IF # call fgl_winmessage("w",rcantidad||' '||arr_requisicion[idx].num_oc||' '|| # arr_requisicion[idx].procesa||' '|| # arr_requisicion[idx].cod_sec|| ' '||idx,"stop") LET arr_requisicion[curr].descvalor =(arr_requisicion[curr].cantidad * arr_requisicion[curr].precio) * (arr_requisicion[curr].descuento/100) LET arr_requisicion[curr].valor = (arr_requisicion[curr].cantidad * arr_requisicion[curr].precio) - arr_requisicion[curr].descvalor LET arr_requisicion[curr].valor = arr_requisicion[curr].valor + (arr_requisicion[curr].valor * (porc_itbis[curr]/100)) IF arr_requisicion[curr].valor < 0 THEN LET arr_requisicion[curr].valor =arr_requisicion[curr].cantidad * arr_requisicion[curr].precio END IF DISPLAY arr_requisicion[curr].valor TO s_requisi[scr_l].valor END IF AFTER INPUT LET total_requisicion = 0 FOR idx = 1 TO arr_count() # CALL control_despiece(arr_requisicion[idx].area,arr_requisicion[idx].cod_n,arr_requisicion[idx].cod_grupo, # arr_requisicion[idx].cod_tipo,arr_requisicion[idx].cod_sec, # arr_requisicion[idx].num_oc ,arr_requisicion[idx].cantidad,accion) RETURNING estado # IF estado = FALSE THEN # CALL fgl_winmessage("ERROR","NO PUEDE ADICIONAR REQUISICION, EXISTE UN ITEM QUE DEBE DESPIEZAR o LA CANTIDAD DIFIERE DE LA CANTIDAD EN LA REQUISICION","STOP") # NEXT FIELD cantidad_1 # END IF LET total_Requisicion = total_requisicion + arr_requisicion[curr].valor # call fgl_winmessage("w",rcantidad||' '||arr_requisicion[idx].num_oc||' '|| # arr_requisicion[idx].procesa||' '|| # arr_requisicion[idx].cod_sec|| ' '||idx,"stop") END FOR DISPLAY BY NAME total_requisicion END INPUT ON ACTION procesa LET rcantidad = arr_requisicion.getLength() IF rcantidad > 0 THEN CALL req_insert() RETURNING estado IF estado THEN DECLARE busca_emails CURSOR FOR SELECT a.correo FROM seg0003 a WHERE a.autorizacionDespacho = 'SI' LET idx = 1 FOREACH busca_emails INTO copiacorreo[idx] LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx] CLIPPED LET idx = idx + 1 END FOREACH IF idx=1 THEN LET copiaemail='jsoto@marmotech.com.do' END IF CALL fgl_winmessage("MENSAJE","ADICION EXITOSA","STOP") LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED # CALL envia_correo(vendedorEmail,copiaemail,cuerpo_correo, # subject, procedimiento ) SELECT a.cond_pago,a.total_neto INTO pcondpago,pneto FROM vetb00050 a WHERE a.cotizacion_no = arr_requisicion[1].cotizacion_no CALL evaluaclientes(arr_requisicion[1].tipo_cliente, arr_requisicion[1].sec_cliente,pcondpago,requisicion.num_req, arr_requisicion[1].num_oc, requisicion.sec_vend,'RQ',xmonto) RETURNING estado IF estado THEN UPDATE cctb00025 set estado = 'AUTORIZADA', sec_vend_aprobado = requisicion.sec_vend, fecha_autorizacion = GETDATE() where num_req = requisicion.num_req UPDATE cctb00026 set estado = 'AUTORIZADA', us_mod = 'MBS', fech_mod = GETDATE() where num_req = requisicion.num_req END IF CALL entraMensaje(requisicion.num_req, pcotizacion,"A",usuarios) CLEAR FORM CALL arr_requisicion.clear() RETURN END IF END IF ON ACTION refrescar CALL carga_lista() ON ACTION CANCEL CALL arr_requisicion.clear() CALL msg(2) DELETE FROM cctb00027 WHERE Num_req = numerotemp EXIT DIALOG END DIALOG END FUNCTION FUNCTION req_insert() DEFINE ultimo,numeroOrden INT # WHENEVER ERROR CONTINUE SELECT a.num_req INTO ultimo FROM cctb00019 a IF ultimo IS NULL THEN LET ultimo = 0 END IF LET ultimo = ultimo + 1 LET requisicion.num_req = ultimo UPDATE cctb00019 SET num_req = requisicion.num_req,us_crea=usuarios,fech_crea=getdate() # GUARDA MASTER TABLE # PREPARE s FROM "SELECT @@IDENTITY" BEGIN WORK # EXECUTE s INTO requisicion.num_req DISPLAY BY NAME requisicion.num_req LET subject = "AVISO REQUISICION DESPACHO NO. ",requisicion.num_req USING "&&&&&&"," VALOR: " LET cuerpo_correo = "VENDEDOR : ",requisicion.nombre_vendedor CLIPPED LET cuerpo_correo = " ",cuerpo_correo CLIPPED," FECHA REQUISICION : ",requisicion.fecha_requisicion USING "DD/MM/YYYY" LET cuerpo_correo = " ",cuerpo_correo CLIPPED," NUMERO DE ORDEN: ",requisicion.busca_orden USING "&&&&&&" LET selec = "INSERT INTO cctb00034 (id_kit,num_req,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad)", "SELECT a.id_kit,'",requisicion.num_req USING "<<<<<<","',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ", "FROM prtb00030 a ", " WHERE a.id_kit = ? AND ", " a.num_oc =?" # PREPARE xcctb34 FROM selec LET xmonto = 0 FOR idx = 1 TO arr_requisicion.getLength() IF arr_requisicion[idx].num_oc is not null THEN IF arr_requisicion[idx].procesa = "SI" THEN LET cuerpo_correo = " ",cuerpo_correo CLIPPED," CLIENTE: ",arr_requisicion[idx].nombre CLIPPED," ", " CONTIENE EL PRODUCTO ", arr_requisicion[idx].unidad_med," ", arr_requisicion[idx].cantidad_1," ", arr_requisicion[idx].cantidad USING "<<,<<<.##", arr_requisicion[idx].descripcion CLIPPED LET numeroOrden = arr_requisicion[idx].num_oc # IF arr_requisicion[idx].valor = 0 OR arr_requisicion[idx].valor IS NULL THEN IF arr_requisicion[idx].descvalor IS NULL THEN LET arr_requisicion[idx].descvalor = 0 END IF IF arr_requisicion[idx].descuento IS NULL THEN LET arr_requisicion[idx].descuento = 0 END IF LET arr_requisicion[idx].valor = ((arr_requisicion[idx].cantidad * arr_requisicion[idx].precio)- arr_requisicion[idx].descvalor) DISPLAY "data1 ",arr_requisicion[idx].cantidad," precio ",arr_requisicion[idx].precio, " valor ",arr_requisicion[idx].valor,"descuento ",arr_requisicion[idx].descvalor LET arr_requisicion[idx].valor = arr_requisicion[idx].valor + (arr_requisicion[idx].valor * (porc_itbis[idx]/100)) DISPLAY "data2 ",arr_requisicion[idx].cantidad," precio ",arr_requisicion[idx].precio, " valor ",arr_requisicion[idx].valor,"descuento ",arr_requisicion[idx].descvalor # END IF LET xmonto = xmonto + arr_requisicion[idx].valor IF arr_requisicion[idx].cantidad IS NULL THEN ROLLBACK WORK CALL fgl_winmessage("INFO","CANTIDAD EN BLANCO","INFO") RETURN FALSE END IF INSERT INTO cctb00026 (num_req,num_oc,cotizacion_no,id,area,cod_n,cod_grupo,cod_tipo,cod_Sec, cantidad_ord1,cantidad_ord,cantidad_1,cantidad,precio,descuento,descvalor,valor,us_crea,fech_crea,estado, id_kit) VALUES (requisicion.num_req,arr_requisicion[idx].num_oc,arr_requisicion[idx].cotizacion_no, idx,arr_requisicion[idx].area,arr_requisicion[idx].cod_n,arr_requisicion[idx].cod_grupo, arr_requisicion[idx].cod_tipo,arr_requisicion[idx].cod_Sec, arr_requisicion[idx].cantidad_ord1,arr_requisicion[idx].cantidad_ord,arr_requisicion[idx].cantidad_1, arr_requisicion[idx].cantidad, arr_requisicion[idx].precio,arr_requisicion[idx].descuento, arr_requisicion[idx].descvalor, arr_requisicion[idx].valor,SUSER_SNAME(),GETDATE(),requisicion.estado,arr_requisicion[idx].kit) IF SQLSTATE > 02 THEN LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION" ROLLBACK WORK CALL fgl_winmessage("ERROR",chmensaje,"STOP") RETURN FALSE EXIT FOR END IF END IF END IF END FOR # INSERTA DESPIECE FOR idx1 = 1 TO rdespiece.getLength() IF rdespiece[idx1].medida> 0 THEN INSERT INTO cctb00027 (num_req,etiqueta,num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec, Lado_1,lado_2,lado_3,cantidad,medida,cantidad_r,medida_r,us_crea, fech_crea) VALUES (requisicion.num_req,rdespiece[idx1].etiqueta,numeroOrden,idx,arr_requisicion[idx].area, rdespiece[idx1].cod_n, rdespiece[idx1].cod_grupo,rdespiece[idx1].cod_tipo,rdespiece[idx1].cod_sec, rdespiece[idx1].lado_1,rdespiece[idx1].lado_2,rdespiece[idx1].lado_3, rdespiece[idx1].cantidad,rdespiece[idx1].medida,rdespiece[idx1].cantidad_r, rdespiece[idx1].medida_r,usuarios,GETDATE()) IF STATUS < 0 THEN ROLLBACK WORK CLOSE WINDOW w10 CALL fgl_winmessage("ERROR","OCURRIO UN ERROR ACTUALIZANDO LOS DATOS","STOP") LET estado = FALSE RETURN FALSE ELSE LET estado = TRUE END IF END IF END FOR INSERT INTO cctb00025 (num_req,fecha,sec_vend,us_crea,fech_crea,estado,estado_despacho,monto_req) VALUES (requisicion.num_req,requisicion.fecha_requisicion, requisicion.sec_vend,SUSER_SNAME(),GETDATE(),requisicion.estado,"NO DESPACHADA",xmonto) IF STATUS < 0 THEN LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION" ROLLBACK WORK CALL fgl_Winmessage("ERROR",chmensaje,"STOP") RETURN FALSE END IF IF estado THEN COMMIT WORK CALL entramensaje(requisicion.num_req,pcotizacion,"A",usuarios) RETURN TRUE ELSE ROLLBACK WORK CALL fgl_winmessage("MENSAJE","NO SE INSERTARON DATOS EN REQUISICION","STOP") RETURN FALSE END IF END FUNCTION FUNCTION controles(pnumreq,parea,pcodn,pcodgrupo,pcodtipo,pcodsec,numero,cantidad_Trx,cantidadORD) DEFINE unidad_ctrl,cantidad_ctrl,cantidad_trx,cantidadORD DEC(12,2), pcodn,pcodgrupo,pcodtipo,pcodsec,parea SMALLINT, numero,pnumreq INT, chmesage CHAR(80) SELECT ISNULL(SUM(a.cantidad),0) INTO cantidadord FROM prtb00013 a WHERE a.num_oc = numero AND a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec AND a.area = parea AND a.status_t IS NULL # CONTROL 01 CANTIDAD REQUISICION VS CANTIDAD ORDENADA LET cantidad_ctrl=0 LET unidad_ctrl=0 SELECT ISNULL(SUM(a.cantidad),0),ISNULL(SUM(a.cantidad_1),0) INTO cantidad_ctrl,unidad_ctrl FROM cctb00026 a WHERE a.num_oc = numero AND a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec AND a.num_req <> pnumreq AND a.area = parea AND a.status_t IS NULL IF cantidad_ctrl IS NULL THEN LET cantidad_ctrl=0 END IF #LET chmesage = " TRX "+cantidad_trx using "&&&&.####"," CTRL ",cantidad_ctrl USING "&&&.####" #LET chmesage = " ORDEN "+numero USING "&&&&&&" #LET chmesage = " codn ",pcodn using "&&&"," codgrupo ",pcodgrupo USING "&&&"," codtipo " ,pcodtipo using "&&&"," codsec ",pcodsec USING "&&&" # CALL FGL_WINMESSAGE("W",cantidad_ctrl,"STOP") # DISPLAY "cantidad ctrl ",cantidad_ctrl, "cantidad_trx,",cantidad_trx, #"cantidadORD ",cantidadord," cod ",pcodsec IF cantidad_trx IS NULL THEN LET cantidad_Trx = 0 END IF DISPLAY "control: ",cantidad_ctrl," cantidad trx: ",cantidad_trx," orden: ",cantidadOrd IF cantidad_ctrl +cantidad_Trx > cantidadORD THEN DISPLAY "resultado: ",cantidad_ctrl +cantidad_Trx," orden ",cantidadORD RETURN FALSE,cantidad_ctrl,unidad_ctrl ELSE RETURN TRUE, cantidad_ctrl,unidad_ctrl END IF END FUNCTION FUNCTION busca_info() DISPLAY pfecha_req TO fecha_requisicion DISPLAY requisicion.num_req, requisicion.sec_vend_a,requisicion.nombre_a, requisicion.nombre_vendedor,requisicion.sec_vend, requisicion.estado TO num_req,sec_vend_a,nombre_a,nombre_vendedor,sec_vend,estado CALL arr_requisicion.clear() DECLARE busca_req2 CURSOR FOR SELECT a.num_oc,CAST(b.fecha_oc AS CHAR(10)),a.cotizacion_no, a.cantidad_1,a.cantidad,a.cantidad_ord1,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, b.tipo_cliente,b.sec_cliente,c.nombre,a.cantidad_ord,a.precio, a.descuento,a.descvalor,a.valor,d.descrip_esp,a.estado,a.id_kit FROM cctb00026 a,prtb00012 b,vetb00004 c,iptb00002 d WHERE a.num_req = requisicion.num_req and a.num_oc = b.num_oc AND b.tipo_cliente = c.tipo_cliente AND b.sec_cliente = c.sec_cliente AND a.cod_n = d.cod_n AND a.cod_grupo = d.cod_grupo AND a.cod_tipo = d.cod_tipo AND a.cod_Sec = d.cod_sec LET idx = 1 FOREACH busca_req2 INTO arr_requisicion[idx].num_oc,arr_requisicion[idx].fecha, arr_requisicion[idx].cotizacion_no,arr_requisicion[idx].cantidad_1, arr_requisicion[idx].cantidad,arr_requisicion[idx].cantidad_ord1, arr_requisicion[idx].area, arr_requisicion[idx].cod_n, arr_requisicion[idx].cod_grupo,arr_requisicion[idx].cod_tipo, arr_requisicion[idx].cod_Sec,arr_requisicion[idx].tipo_cliente, arr_requisicion[idx].sec_cliente,arr_requisicion[idx].nombre, arr_requisicion[idx].cantidad_ord, arr_requisicion[idx].precio,arr_requisicion[idx].descuento, arr_requisicion[idx].descvalor,arr_requisicion[idx].valor, arr_requisicion[idx].descripcion,arr_requisicion[idx].procesa, arr_requisicion[idx].kit LET pcotizacion = arr_requisicion[idx].cotizacion_no LET arr_requisicion[idx].cantidad_pendiente = arr_requisicion[idx].cantidad_ord - arr_requisicion[idx].cantidad LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY arr_requisicion TO s_requisi.* END FUNCTION #FUNCTION envia_correo() # IF vendedorEmail IS NULL THEN # LET vendedorEmail = 'jsoto@marmotech.com.do' # END IF # LET vendedorEmail = vendedorEmail CLIPPED,'rantonio@marmotech.com.do' # PREPARE smt FROM "{ call cc_avisadespacho(?,?,?) }" # EXECUTE smt USING cuerpo_correo IN,subject IN,vendedorEmail IN #END FUNCTION FUNCTION control_despiece(parea,pcodn,pcodgrupo,pcodtipo,pcodsec,numero_ord,pcantidad,accion) DEFINE pestado BOOLEAN, total_medida DEC(12,5), punidad CHAR(3),accion CHAR(1), pdescripcion CHAR(60), numero_ord,numero_req INT, parea,pcodn,pcodgrupo,pcodtipo,pcodsec SMALLINT, medidactrl,pcantidad DEC(12,5) CALL rdespiece.clear() # BUSCA SI EL ARTICULO SE DESPIEZA SELECT UNIQUE b.unidad_med,b.descrip_esp INTO punidad,pdescripcion FROM iptb00027 a,iptb00002 b WHERE a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_Sec = pcodsec AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_Sec = b.cod_sec IF STATUS = NOTFOUND THEN LET estado=TRUE RETURN estado END IF IF accion = "A" THEN # SELECT a.num_temp_req INTO numero_req FROM cctb00028 a # IF numero_req IS NULL THEN LET numero_req = 1000 # INSERT INTO cctb00028 (num_temp_req) VALUES (numero_req) SE COLOCO ESTAS INSTRUCCIONES EN COMENTARIO PORQUE SE CREO UNA TABLA TEMPORAL cctb00030 # END IF # LET numero_req = numero_req + 1 # UPDATE cctb00028 set num_temp_req = numero_req DECLARE busca_despiece CURSOR FOR SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, a.lado_1,a.lado_2,a.lado_3, SUM(a.cantidad),SUM(a.medida),SUM(b.cantidad),SUM(b.medida) FROM prtb00022 a LEFT OUTER JOIN cctb00030 b ON a.num_oc = b.num_oc AND a.area = b.area AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND a.lado_1 = b.lado_1 AND a.lado_2 = b.lado_2 AND a.lado_3 = b.lado_3 AND b.us_crea = usuarios AND a.etiqueta = b.etiqueta WHERE a.num_oc = numero_ord AND a.area = parea AND a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec GROUP BY a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, a.lado_1,a.lado_2,a.lado_3 LET idx1 = 1 FOREACH busca_despiece INTO rdespiece[idx1].* LET rdespiece[idx1].cantidad_r = rdespiece[idx1].cantidad LET rdespiece[idx1].medida_r = rdespiece[idx1].medida LET idx1 = idx1 + 1 END FOREACH ELSE # call fgl_winmessage("w",numero_Req,"stop") DECLARE busca_despiece1 CURSOR FOR SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, a.lado_1,a.lado_2,a.lado_3, SUM(a.cantidad),SUM(a.medida),SUM(a.cantidad),SUM(a.medida) FROM cctb00027 a WHERE a.num_oc = numero_ord AND a.area = parea AND a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec AND a.num_req = numero_req GROUP BY a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, a.lado_1,a.lado_2,a.lado_3 LET idx1 = 1 FOREACH busca_despiece1 INTO rdespiece[idx1].* LET idx1 = idx1 + 1 END FOREACH END IF IF idx1 = 1 THEN LET pestado = FALSE RETURN pestado ELSE LET pestado = TRUE END IF OPEN WINDOW w10 AT 5,6 WITH FORM "ccfmwd004" DISPLAY pdescripcion TO descrip_esp DISPLAY punidad TO unidad_med CALL set_count(idx1-1) INPUT ARRAY rdespiece WITHOUT DEFAULTS FROM sdespiece.* BEFORE ROW LET curr = arr_curr() LET fila = scr_line() AFTER FIELD cantidad_r IF rdespiece[curr].cantidad_r IS NOT NULL THEN LET medidactrl = 0 SELECT SUM(a.medida_r) INTO medidaCtrl FROM cctb00027 a WHERE a.area = parea AND a.cod_n = rdespiece[curr].cod_n AND a.cod_grupo =rdespiece[curr].cod_grupo AND a.cod_tipo = rdespiece[curr].cod_tipo AND a.cod_sec = rdespiece[curr].cod_Sec AND a.lado_1 = rdespiece[curr].lado_1 AND a.lado_2 = rdespiece[curr].lado_2 AND a.num_oc = numero_ord AND a.status_t IS NULL AND a.num_req <> numero_req IF medidaCtrl IS NULL THEN LET medidactrl = 0 END IF IF punidad= "M2" THEN LET rdespiece[curr].medida_r = rdespiece[curr].cantidad_r * (rdespiece[curr].lado_1 * rdespiece[curr].lado_2) END IF IF punidad= "M3" THEN LET rdespiece[curr].medida_r = rdespiece[curr].cantidad_r * (rdespiece[curr].lado_1 * rdespiece[curr].lado_2 * rdespiece[curr].lado_3) END IF IF punidad= "ML" THEN LET rdespiece[curr].medida_r = rdespiece[curr].cantidad_r * rdespiece[curr].lado_1 LET rdespiece[curr].lado_2 = 0 END IF IF punidad= "UD" OR punidad= "GL" THEN LET rdespiece[curr].medida_r = rdespiece[curr].cantidad_r END IF DISPLAY rdespiece[curr].medida_r TO sdespiece[fila].medida_r #IF medidaCtrl + rdespiece[curr].medida_r > rdespiece[curr].medida THEN # LET pestado = FALSE # EXIT INPUT LOCOLOQUE POR TIENE OTRO AFTER INPUT FECHA:14/10/11 # END IF LET total_medida_r = 0 LET cuenta_despiece = arr_count() LET total_medida = 0 FOR idx1= 1 TO cuenta_despiece IF rdespiece[idx1].medida_r > 0 THEN LET total_medida_r = total_medida_r + rdespiece[idx1].medida_r END IF IF rdespiece[idx1].medida > 0 THEN LET total_medida = total_medida + rdespiece[idx1].medida END IF END FOR DISPLAY BY NAME total_medida,total_medida_r END IF AFTER INPUT IF Int_flag THEN LET pestado = FALSE EXIT INPUT END IF LET total_medida_r = 0 LET cuenta_despiece = arr_count() FOR idx1 = 1 TO cuenta_despiece IF rdespiece[idx1].medida_r > 0 THEN LET total_medida_r = total_medida_r + rdespiece[idx1].medida_r END IF IF rdespiece[idx1].medida > 0 THEN LET total_medida = total_medida + rdespiece[idx1].medida END IF END FOR DISPLAY "T ",total_medida_r," ",pcantidad IF total_medida_r <> pcantidad THEN CONTINUE INPUT END IF DISPLAY BY NAME total_medida,total_medida_r IF int_flag THEN CLOSE WINDOW w10 RETURN FALSE END IF END INPUT IF int_flag THEN LET int_flag = FALSE LET pestado = FALSE END IF # WHENEVER ERROR CONTINUE BEGIN WORK LET numerotemp = numero_req FOR idx1 = 1 TO cuenta_despiece IF rdespiece[idx1].cantidad_r > 0 THEN DELETE FROM cctb00030 WHERE us_crea = usuarios and num_req = numero_req and area = parea AND cod_n = rdespiece[idx1].cod_n and cod_grupo = rdespiece[idx1].cod_grupo and cod_tipo = rdespiece[idx1].cod_tipo and cod_Sec = rdespiece[idx1].cod_sec LET rdespiece[idx].etiqueta=idx INSERT INTO cctb00030 (num_req,etiqueta,num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec, Lado_1,lado_2,lado_3,cantidad,medida,cantidad_r,medida_r,us_crea, fech_crea) VALUES (numero_req,rdespiece[idx1].etiqueta,numero_ord,idx,parea,rdespiece[idx1].cod_n, rdespiece[idx1].cod_grupo,rdespiece[idx1].cod_tipo,rdespiece[idx1].cod_sec, rdespiece[idx1].lado_1,rdespiece[idx1].lado_2,rdespiece[idx1].lado_3, rdespiece[idx1].cantidad,rdespiece[idx1].medida,rdespiece[idx1].cantidad_r, rdespiece[idx1].medida_r,usuarios,GETDATE()) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","OCURRIO UN ERROR ACTUALIZANDO LOS DATOS","STOP") LET pestado = FALSE EXIT FOR CLOSE WINDOW w10 ELSE LET pestado = TRUE END IF END IF END FOR IF pestado THEN COMMIT WORK ELSE ROLLBACK WORK END IF CLOSE WINDOW w10 RETURN pestado END FUNCTION FUNCTION carga_lista() DEFINE busca_vend SMALLINT, bnombre_vend CHAR(50) INPUT BY NAME busca_vend AFTER FIELD busca_vend IF busca_vend IS NOT NULL THEN SELECT RTRIM(b.nom1_emp)||' '||b.apell1_emp INTO bnombre_vend FROM adtb00003 b WHERE b.num_emp = busca_vend IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD busca_vend END IF DISPLAY BY NAME bnombre_vend END IF AFTER INPUT IF Int_flag THEN LET int_flag = FALSE RETURN END IF END INPUT DISPLAY ARRAY listarequisi TO s_lista.* BEFORE DISPLAY CALL busca_lista(busca_vend) IF idx = 1 THEN RETURN END IF ON ACTION refrescar CALL busca_lista(busca_vend) AFTER DISPLAY EXIT DISPLAY END DISPLAY END FUNCTION FUNCTION busca_lista(xvend) DEFINE xvend SMALLINT DECLARE busca_requi20 CURSOR FOR SELECT a.estado,a.estado_despacho,x.estado_produccion,a.num_req,CAST(a.fecha AS CHAR(10)), e.descrip_Esp||' '||e.unidad_med,CAST(b.fecha_transporte AS CHAR(10)),CAST(b.fecha_llegada AS CHAR(10)), b.num_oc,c.nombre,SUM(b.valor) FROM cctb00025 a,cctb00026 b,vetb00004 c,prtb00012 d,iptb00002 e,prtb00013 x WHERE a.sec_vend = xvend AND a.num_req = b.num_req AND b.num_oc = d.num_oc AND b.num_oc = x.num_oc AND d.tipo_cliente = c.tipo_cliente AND d.sec_cliente = c.sec_cliente AND b.area = x.area AND b.cod_n = e.cod_n AND b.cod_grupo = e.cod_grupo AND b.cod_tipo = e.cod_tipo AND b.cod_Sec = e.cod_sec AND b.cod_n = x.cod_n AND b.cod_grupo = x.cod_grupo AND b.cod_tipo = x.cod_tipo AND b.cod_Sec = x.cod_Sec AND d.cerrada = 'N' AND a.status_t IS NULL AND a.estado_despacho NOT IN ('DESPACHADA') GROUP BY a.estado,a.estado_despacho,a.num_req,b.num_oc,c.nombre,a.fecha, e.descrip_Esp,e.unidad_med, b.fecha_transporte,b.fecha_llegada,x.estado_produccion ORDER BY a.estado DESC LET idx = 1 FOREACH busca_requi20 INTO listarequisi[idx].estado1, listarequisi[idx].estado2, listarequisi[idx].estado_produccion, listarequisi[idx].num_req1, listarequisi[idx].fecha1, listarequisi[idx].material, listarequisi[idx].fecha_transporte, listarequisi[idx].fecha_llegada, listarequisi[idx].num_oc1, listarequisi[idx].cliente1, listarequisi[idx].valor1 LET idx = idx + 1 END FOREACH CALL set_count(idx-1) END FUNCTION FUNCTION factor_conv(pcodn,pcodgrupo,pcodtipo,pcodsec,pcantidad) DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec SMALLINT, pcantidad,pfactor,presultado DEC(12,5), pestado BOOLEAN LET pfactor = 0 SELECT a.factor_conv INTO pfactor FROM iptb00001 a WHERE a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET pestado = FALSE ELSE LET presultado = pcantidad * pfactor LET pestado = TRUE END IF RETURN presultado,pestado END FUNCTION FUNCTION input_data() DEFINE remanente,unidadRemanente DEC(12,4) CALL set_count(idx-1) INPUT ARRAY arr_requisicion WITHOUT DEFAULTS FROM s_requisi.* BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD cantidad_1 IF arr_requisicion[curr].cantidad_1 > 0 AND arr_requisicion[curr].procesa = "SI" THEN LET arr_requisicion[curr].valor = 0 CALL factor_conv(arr_requisicion[curr].cod_n, arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo, arr_requisicion[curr].cod_sec,arr_requisicion[curr].cantidad_1) RETURNING resultado,estado IF estado = FALSE THEN CALL fgl_winmessage("ERROR","PROBLEMA EN EL FACTOR DE CONVERSION, CONTACTE ADM INVENTARIO","STOP") NEXT FIELD cantidad END IF LET arr_requisicion[curr].cantidad = resultado DISPLAY arr_requisicion[curr].cantidad TO s_requisi[scr_l].cantidad IF arr_requisicion[curr].cantidad_1 > arr_requisicion[curr].cantidad_ord1 THEN CALL fgl_Winmessage("ERROR","CANTIDAD EXECEDE CANTIDAD ORDEN","STOP") NEXT FIELD cantidad_1 END IF CALL controles(requisicion.num_req,arr_requisicion[curr].area,arr_requisicion[curr].cod_n, arr_requisicion[curr].cod_grupo,arr_requisicion[curr].cod_tipo, arr_requisicion[curr].cod_sec,arr_requisicion[curr].num_oc,arr_requisicion[curr].cantidad, arr_requisicion[curr].cantidad_ord) RETURNING estado,remanente,unidadRemanente IF NOT estado THEN CALL fgl_winmessage("ERROR","NO PUEDE HACER MAS REQUISICION A ESTA ORDEN","STOP") NEXT FIELD cantidad_1 END IF LET arr_requisicion[curr].descvalor =(arr_requisicion[curr].cantidad * arr_requisicion[curr].precio) * (arr_requisicion[curr].descuento/100) LET arr_requisicion[curr].valor = (arr_requisicion[curr].cantidad * arr_requisicion[curr].precio) - arr_requisicion[curr].descvalor LET arr_requisicion[curr].valor = arr_requisicion[curr].valor + (arr_requisicion[curr].valor * (porc_itbis[curr]/100)) IF arr_requisicion[curr].valor < 0 THEN LET arr_requisicion[curr].valor =arr_requisicion[curr].cantidad * arr_requisicion[curr].precio END IF DISPLAY arr_requisicion[curr].valor TO s_requisi[scr_l].valor END IF ON ACTION procesa LET rcantidad = arr_count() CALL req_insert() RETURNING estado IF estado = TRUE THEN # CALL envia_correo() DISPLAY BY NAME requisicion.num_req CALL fgl_winmessage("MENSAJE","ADICION EXITOSA","STOP") CLEAR FORM CALL arr_requisicion.clear() RETURN END IF END INPUT END FUNCTION FUNCTION ccprmf008() DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM) CONSTRUCT criterio ON a.num_req,c.num_oc,a.fecha FROM num_req,busca_orden,fecha_requisicion ON ACTION refrescar CALL carga_lista() ON ACTION busca_parametros ATTRIBUTE(TEXT="Ejecuta Busqueda",IMAGE="find_all") LET selec = "SELECT DISTINCT a.num_req,CONVERT(CHAR(10),a.fecha,103),a.sec_vend_aprobado,", "(SELECT RTRIM(k.nom1_emp)+' '+k.apell1_emp FROM adtb00003 k WHERE ", "k.num_emp = a.sec_vend_aprobado) as nombre_aprobado,", "a.sec_vend,ISNULL(RTRIM(b.nom1_emp),' ') +' '+ISNULL(b.apell1_emp,' '),a.estado ", " FROM cctb00025 a,adtb00003 b,cctb00026 c ", " WHERE ",criterio CLIPPED," AND a.num_req = c.num_req ", " AND a.sec_vend = b.num_emp AND a.status_t is null ", " ORDER BY a.num_req" PREPARE comando2 FROM selec DECLARE busca_req SCROLL CURSOR FOR comando2 OPEN busca_req FETCH FIRST busca_req INTO requisicion.num_req,pfecha_req, requisicion.sec_vend_a,requisicion.nombre_a, requisicion.sec_vend,requisicion.nombre_vendedor, requisicion.estado IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","NO EXISTEN ORDENES CON ESTE CRITERIO DE BUSQUEDA","STOP") EXIT DIALOG ELSE CALL busca_info() MENU ON ACTION mensaje CALL entraMensaje(requisicion.num_req,pcotizacion,"M",usuarios) ON ACTION siguiente FETCH NEXT busca_req INTO requisicion.num_req,requisicion.fecha_requisicion, requisicion.sec_vend_a,requisicion.nombre_a, requisicion.sec_vend,requisicion.nombre_vendedor, requisicion.estado CALL busca_info() ON ACTION primero FETCH FIRST busca_req INTO requisicion.num_req,requisicion.fecha_requisicion, requisicion.sec_vend_a,requisicion.nombre_a, requisicion.sec_vend,requisicion.nombre_vendedor, requisicion.estado CALL busca_info() ON ACTION ultimo FETCH LAST busca_req INTO requisicion.num_req,requisicion.fecha_requisicion, requisicion.sec_vend_a,requisicion.nombre_a, requisicion.sec_vend,requisicion.nombre_vendedor, requisicion.estado CALL busca_info() CALL fgl_winmessage("MENSAJE","ULTIMO REGISTRO","STOP") ON ACTION anterior FETCH PREVIOUS busca_req INTO requisicion.num_req,requisicion.fecha_requisicion, requisicion.sec_vend_a,requisicion.nombre_a, requisicion.sec_vend,requisicion.nombre_vendedor, requisicion.estado CALL busca_info() ON ACTION anular # CONTROL REQUISICION DESPACHADA SELECT UNIQUE a.num_req FROM iptb00006 a WHERE a.num_req = requisicion.num_req AND a.status_t IS null IF STATUS <> NOTFOUND THEN CALL fgl_winmessage("ERR0R","REQUISICION TIENE DESPACHO NO PUEDE ANULAR","INFO") CONTINUE DIALOG END IF LET respuesta= fgl_winquestion("ATENCION","ESTA SEGURO DE ANULAR ESTA REQUISICION?","no","yes|no","question",0) IF respuesta = "yes" THEN LET pcotizacion = NULL LET xorden = NULL LET xtipocliente=NULL LET xseccliente = NULL LET requisicion.estado=NULL SELECT DISTINCT a.cotizacion_no,a.num_oc,b.tipo_cliente,b.sec_cliente,c.monto_req,c.estado INTO pcotizacion, xorden,xtipocliente,xseccliente,xmonto,requisicion.estado FROM cctb00026 a,prtb00012 b,cctb00025 c WHERE a.num_req = requisicion.num_req AND a.num_req = c.num_req AND a.cotizacion_no = b.cotizacion_no AND b.status_t IS NULL AND c.status_t IS null BEGIN WORK UPDATE cctb00025 SET status_t = 'E', us_mod = suser_sname(), fech_mod = getdate(), estado = 'ANULADA' WHERE num_req = requisicion.num_req UPDATE cctb00026 SET status_t = 'E', us_mod = suser_sname(), fech_mod = getdate() WHERE num_req = requisicion.num_req UPDATE cctb00027 SET status_t = 'E', us_mod = suser_sname(), fech_mod = getdate() WHERE num_req = requisicion.num_req #INSERTA EN TABLA LOG INSERT INTO cctb00031 (fecha,us_crea,sec_vend,nombrevendedor,tipo_cliente,sec_cliente,num_oc,descrip_estado, num_req,tipo_doc_ref,cotizacion_no ) VALUES (getdate(),usuarios,requisicion.sec_vend,requisicion.nombre_vendedor, xtipocliente,xseccliente,xorden, 'ESTA REQUISICION FUE ANULADA',requisicion.num_req,'RQ',pcotizacion) COMMIT WORK END IF CLEAR FORM { ON ACTION actualizar IF requisicion.sec_vend_a IS NULL THEN CALL input_data() FOR idx = 1 TO arr_count() IF arr_requisicion[idx].cantidad > 0 THEN IF arr_requisicion[idx].procesa = "SI" THEN UPDATE cctb00026 SET cantidad = arr_requisicion[idx].cantidad, us_mod = usuarios, fech_mod = getdate() WHERE cod_n = arr_requisicion[idx].cod_n AND cod_n = arr_requisicion[idx].cod_n AND cod_grupo = arr_requisicion[idx].cod_grupo AND cod_tipo = arr_requisicion[idx].cod_tipo AND cod_sec = arr_requisicion[idx].cod_sec AND num_req = requisicion.num_req END IF END IF END FOR ELSE CALL fgl_winmessage("ERROR","NO PUEDE ACTUALIZAR REQUISICION, YA ESTA APROBADA","STOP") END IF } ON ACTION sale EXIT DIALOG END MENU END IF END CONSTRUCT ON ACTION cancel CALL arr_requisicion.clear() CALL msg(2) EXIT DIALOG END DIALOG END FUNCTION