{------------------------------------------------------------------ PROGRAMA : PRPRMT011 OBJETIVO : Matenimiento de Status de Orden de Produccion PROGRAMADOR : Ing. Juan Soto FECHA REALIZACION : Octubre, 2013 OBSERVACIONES : EL USUARIO QUIEN ADMINISTRA LAS INFORMACIONES DE ESTA HERRAMIENTA DEBE TENER EN LA TABLA SEG0003 NOM_PUESTO = 'ADM PRODUCCION', LOS DEMAS USUARIOS QUIENEN TIENEN PERMISOS PARA EJECUTARLO NO ACTUALIZAN ------------------------------------------------------------------} GLOBALS "prprgb000.4gl" DEFINE veces,vecesparcial SMALLINT, arrparcial DYNAMIC ARRAY OF RECORD fecha DATE, cantidad DEC(12,4) END RECORD, puesto VARCHAR(50), email,emailsubject,emailbody,procedimiento CHAR(200), noencontre,resultado CHAR(2), xarticulo STRING DEFINE w ui.Window DEFINE f ui.Form DEFINE p_vetb50 RECORD LIKE vetb00050.* DEFINE data_imp RECORD cotizacion_no,tipo_cliente,sec_cliente INT, fecha DATE, sec_vend INT, direccion_cliente,nombre,contacto,nombre_proyecto,direccion_proyecto,nombre_ciudad, nombre_vend,nombre_cliente VARCHAR(100), rnc VARCHAR(11), telefono_o,telefono_r,celular,celular1 VARCHAR(25), email VARCHAR(100), orden,cond_pago INT, soportes,instalador,plazo_entrega VARCHAR(100), comentario VARCHAR(250), sub_total,monto_desc,porc_itbis,neto,total_bruto,monto_itbis,total_neto DEC(12,2), num_emp_int,vendedor_aux,bodega INT, tbodega VARCHAR(100) END RECORD DEFINE container RECORD vendedor STRING, orden INT, etiqueta_cotiza CHAR(30), cuenta_item SMALLINT END RECORD MAIN DEFER INTERRUPT CALL STARTLOG("prprmt11.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave DECLARE buscacorreo CURSOR FOR SELECT a.correo FROM seg0003 a WHERE a.actualizacion_log_produccion = 'SI' LET idx = 1 FOREACH buscacorreo INTO copiacorreo[idx] LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx] LET idx = idx + 1 END FOREACH SELECT a.actualizacion_log_produccion,actualizacion_produccion INTO actualiza_log_produccion,actualiza_produccion FROM seg0003 a WHERE a.usuario = usuarios CALL prprmt011() END MAIN FUNCTION prprmt011() DEFINE arr_ordenes DYNAMIC ARRAY OF RECORD actualiza VARCHAR(1), cerrada VARCHAR(1), estado_produccion VARCHAR(100), estado_producto VARCHAR(100), departamento SMALLINT, descripcion_dpto VARCHAR(30), vendedor VARCHAR(50), apell1_emp VARCHAR(50), fecha DATE, fecha_compromiso DATE, fecha_llegada DATE, fechaDispEntrega DATE, fechaSolDespacho DATE, fechaInstalacion DATE, cotizacion_no INT, num_oc INT, orden_compra INT, observacion VARCHAR(250), tipo_venta VARCHAR(30), cliente VARCHAR(60), origen VARCHAR(30), producto VARCHAR(100), cantidad_ord DEC(12,5), cantidad_desp DEC(12,5), cantidad_dev DEC(12,5), pendiente DEC(12,5), sec_vend SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, tipo_cliente SMALLINT, sec_cliente INT, balance DEC(12,5), id_kit INT , area SMALLINT, instalador,equipo VARCHAR(100), costo NUMERIC(12,2) END RECORD, cantidad_Desp,cantidad_dev DEC(12,5), registros INT, fecha1,fecha2 DATE, busqueda,entre STRING, att dynamic array of record col1 string, col2 string, col3 string, col4 string, col5 string, col6 string, col7 string, col8 string, col9 STRING, col10,col11,col12,col13,col14,col15,col16 STRING end record, estado VARCHAR(20), cuenta INT, arr_req DYNAMIC ARRAY OF RECORD num_req INT, nombre STRING, precio FLOAT END RECORD ## Captura los datos que va a contener el registro --fechaSolDespacho OPEN WINDOW prfmmt011 AT 10,10 WITH FORM "prfmmt011" #WHENEVER ERROR CONTINUE LET w = ui.Window.getCurrent() LET f = w.getForm() DIALOG ATTRIBUTE(UNBUFFERED,FIELD ORDER FORM) INPUT BY NAME fecha1,fecha2 BEFORE INPUT LET entre='N' LET busqueda = NULL CALL f.setFieldHidden("fechaSolDespacho",1) CALL f.setElementHidden("fechaSolDespacho",1) AFTER INPUT END INPUT CONSTRUCT criterio ON x.cerrada,x.num_oc,x.departamento,x.cotizacion_no,e.tipo_cliente,e.sec_cliente,e.nombre,b.nom1_emp, b.apell1_emp,x1.estado_produccion,x1.estado_producto,x4.cod_cia,x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_Sec, x2.descrip_esp, x1.fecha_compromiso,x.tipo_orden,x7.depto FROM cerrada,num_oc,departamento,cotizacion_no,tipo_cliente,sec_cliente,nombre,vendedor, apell1_emp,estado_produccion,estado_producto,xorigen,pcod10,pcod11,pcod12,pcod13,descripcionprod,fecha_compromiso, tipo_orden,equipos BEFORE CONSTRUCT LET entre = 'S' CALL cequipos() AFTER CONSTRUCT END CONSTRUCT ON ACTION busca ATTRIBUTE(TEXT="Buscar",IMAGE="find") LET busqueda = NULL IF fecha1 IS NOT NULL THEN IF fecha1 > fecha2 THEN CALL msg(64) NEXT FIELD fecha1 END IF LET busqueda = " AND x.fecha_oc BETWEEN '",fecha1 USING "MM/DD/YYYY", "' AND '",fecha2 USING "mm/dd/yyyy","'" END IF LET selec2 = " SELECT SUM(a.cantidad_2) FROM iptb00006 a WHERE a.area =? AND a.cod_n = ? AND a.cod_grupo = ? AND a.cod_tipo = ? AND a.cod_sec = ? AND a.num_oc = ? AND a.cod_mov IN (30,31,55,56,12,13) AND a.status_t IS NULL " PREPARE despachos FROM selec2 IF busqueda IS NULL THEN LET selec1 = " SELECT 'N', x.cerrada, x1.estado_produccion,x1.estado_producto,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ", " CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,x1.fecha_llegada, x1.fecha_disp_entrega, ", " x1.fecha_solic_despacho, x1.fecha_instalacion, x.cotizacion_no, x.num_oc,x5.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ", " + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) ,x4.descripcion, CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ", " + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(7)) + ' ' + RTRIM(x2.descrip_esp), ", " SUM(x1.cantidad), '0' , '0' , '0' , x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente, ", " '0',x1.id_kit,x1.area,(SELECT RTRIM(x10.nom1_emp)+' '+ISNULL(x10.apell1_emp,' ') FROM adtb00003 x10 WHERE x.num_emp_inst=x10.num_emp), x7.nombre as equipo ", " FROM vetb00004 AS e INNER JOIN ", " prtb00012 AS x ON (e.tipo_cliente = x.tipo_cliente AND e.sec_cliente = x.sec_cliente) INNER JOIN ", " vetb00060 AS h ON x.tipo_cliente = h.tipo_cliente INNER JOIN ", " prtb00013 AS x1 ON (x.num_oc = x1.num_oc) LEFT OUTER JOIN ", " cotb00015 AS x5 ON (x1.num_oc = x5.numero_orden) and (x1.cod_n = x5.cod_n AND ", " x1.cod_grupo = x5.cod_grupo AND x1.cod_tipo = x5.cod_tipo AND x1.cod_sec = x5.cod_sec) ", " LEFT OUTER JOIN ", " adtb00001 AS x3 ON (x1.departamento = x3.departamento) INNER JOIN ", " iptb00002 AS x2 ON (x1.cod_n = x2.cod_n) AND (x1.cod_grupo = x2.cod_grupo) AND (x1.cod_tipo = x2.cod_tipo) AND (x1.cod_sec = x2.cod_sec) INNER JOIN ", " iptb00022 AS x4 ON x2.cod_cia = x4.cod_cia INNER JOIN ", " vetb00061 AS g ON h.ventas = g.ventas INNER JOIN ", " adtb00003 AS b ON (x.sec_vend = b.num_emp) LEFT OUTER JOIN ", " seg0000 as x6 ON x6.sec_vend = b.num_emp LEFT OUTER JOIN ", " seg0008 AS x7 ON x7.depto = x6.depto ", " WHERE x.tipo_orden in ('GENERAL','COCINAS MODULARES, PUERTAS, BANOS','REPOSICION') AND ",criterio CLIPPED, " GROUP BY x.cerrada, x1.estado_produccion,x.sec_vend ,b.nom1_emp, b.apell1_emp, x.fecha_oc , x1.fecha_compromiso , x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, e.tipo_cliente, e.sec_cliente ,e.nombre , x1.cod_n,x1.cod_grupo , x1.cod_tipo ,x1.cod_sec,x2.descrip_esp,x4.descripcion, x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente,", " x1.departamento,x3.nom_dpto,x1.id_kit,x1.area,x5.num_oc,x.num_emp_inst,x1.fecha_llegada, x1.fecha_disp_entrega, x1.fecha_solic_despacho, x1.fecha_instalacion,x1.estado_producto,x7.nombre ", " ORDER BY x.num_oc DESC " ELSE IF criterio IS NOT NULL THEN LET busqueda = " AND x.fecha_oc BETWEEN '",fecha1 USING "MM/DD/YYYY", "' AND '",fecha2 USING "mm/dd/yyyy","'" ELSE LET busqueda = " x.fecha_oc BETWEEN '",fecha1 USING "MM/DD/YYYY", "' AND '",fecha2 USING "mm/dd/yyyy","'" END IF LET selec1 = " SELECT 'N', x.cerrada, x1.estado_produccion,x1.estado_producto,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ", " CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) , x1.fecha_llegada,x1.fecha_disp_entrega, ", " x1.fecha_solic_despacho, x1.fecha_instalacion, x.cotizacion_no, x.num_oc,x5.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ", " + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) ,x4.descripcion, CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ", " + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(7)) + ' ' + RTRIM(x2.descrip_esp), ", " SUM(x1.cantidad), '0' , '0' , '0' , x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente, ", " '0',x1.id_kit,x1.area,(SELECT RTRIM(x10.nom1_emp)+' '+ISNULL(x10.apell1_emp,' ') FROM adtb00003 x10 WHERE x.num_emp_inst=x10.num_emp), x7.nombre as equipos ", " FROM vetb00004 AS e INNER JOIN ", " prtb00012 AS x ON (e.tipo_cliente = x.tipo_cliente AND e.sec_cliente = x.sec_cliente) INNER JOIN ", " vetb00060 AS h ON x.tipo_cliente = h.tipo_cliente INNER JOIN ", " prtb00013 AS x1 ON (x.num_oc = x1.num_oc) LEFT OUTER JOIN ", " cotb00015 AS x5 ON (x1.num_oc = x5.numero_orden) and (x1.cod_n = x5.cod_n AND ", " x1.cod_grupo = x5.cod_grupo AND x1.cod_tipo = x5.cod_tipo AND x1.cod_sec = x5.cod_sec) ", " LEFT OUTER JOIN ", " adtb00001 AS x3 ON (x1.departamento = x3.departamento) INNER JOIN ", " iptb00002 AS x2 ON (x1.cod_n = x2.cod_n) AND (x1.cod_grupo = x2.cod_grupo) AND (x1.cod_tipo = x2.cod_tipo) AND (x1.cod_sec = x2.cod_sec) INNER JOIN ", " iptb00022 AS x4 ON x2.cod_cia = x4.cod_cia INNER JOIN ", " vetb00061 AS g ON h.ventas = g.ventas INNER JOIN ", " adtb00003 AS b ON (x.sec_vend = b.num_emp) LEFT OUTER JOIN ", " seg0000 as x6 ON x6.sec_vend = b.num_emp LEFT OUTER JOIN ", " seg0008 AS x7 ON x7.depto = x6.depto ", " WHERE x.tipo_orden in ('GENERAL','COCINAS MODULARES, PUERTAS, BANOS') AND ",criterio CLIPPED, busqueda CLIPPED, " GROUP BY x.cerrada, x1.estado_produccion,x.sec_vend ,b.nom1_emp, b.apell1_emp, x.fecha_oc , x1.fecha_compromiso , x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, e.tipo_cliente, e.sec_cliente ,e.nombre , x1.cod_n,x1.cod_grupo , x1.cod_tipo ,x1.cod_sec,x2.descrip_esp,x4.descripcion, x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente,", " x1.departamento,x3.nom_dpto,x1.id_kit,x1.area,x5.num_oc,x.num_emp_inst,x1.fecha_llegada, x1.fecha_disp_entrega, x1.fecha_solic_despacho, x1.fecha_instalacion,x1.estado_producto,x7.nombre ", " ORDER BY x.num_oc DESC " END IF # CALL fgl_winmessage("info",selec1,"info") { IF actualiza_log_produccion="SI" THEN LET selec1= " SELECT 'N', x.cerrada, x1.estado_produccion,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ", " CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,' ', x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ", " + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) , CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ", " + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(4)) + ' ' + RTRIM(x2.descrip_esp), ", " SUM(x1.cantidad), '0' , '0' , '0' , x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente, ", " '0' ", "FROM vetb00004 AS e INNER JOIN ", " prtb00012 AS x ON e.tipo_cliente = x.tipo_cliente AND e.sec_cliente = x.sec_cliente INNER JOIN ", " vetb00060 AS h ON x.tipo_cliente = h.tipo_cliente INNER JOIN ", " prtb00013 AS x1 ON x.num_oc = x1.num_oc LEFT OUTER JOIN ", " adtb00001 AS x3 ON x1.departamento = x3.departamento INNER JOIN ", " iptb00002 AS x2 ON x1.cod_n = x2.cod_n AND x1.cod_grupo = x2.cod_grupo AND x1.cod_tipo = x2.cod_tipo AND x1.cod_sec = x2.cod_sec INNER JOIN ", " vetb00061 AS g ON h.ventas = g.ventas INNER JOIN ", " adtb00003 AS b ON x.sec_vend = b.num_emp INNER JOIN ", " seg0001 AS c ON x1.departamento =c.departamento ", " WHERE (x.status_t IS NULL) ", busqueda CLIPPED, " AND c.usuario = '",usuarios CLIPPED,"' ", " GROUP BY x.cerrada, x1.estado_produccion,x.sec_vend ,b.nom1_emp, b.apell1_emp, x.fecha_oc , x1.fecha_compromiso , x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, e.tipo_cliente, e.sec_cliente ,e.nombre , x1.cod_n,x1.cod_grupo , x1.cod_tipo ,x1.cod_sec,x2.descrip_esp, x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente,", " x1.departamento,x3.nom_dpto ", " ORDER BY x.num_oc DESC " END IF } DISPLAY "seleccion: ",selec1 PREPARE comando FROM selec1 DECLARE busca_orden CURSOR FOR comando OPEN busca_orden LET idx = 1 FOREACH busca_orden INTO arr_ordenes[idx].* # BUSCA CANTIDAD DESPACHADA LET cantidad_Desp=0 EXECUTE despachos INTO cantidad_desp USING arr_ordenes[idx].area, arr_ordenes[idx].cod_n,arr_ordenes[idx].cod_grupo, arr_ordenes[idx].cod_tipo,arr_ordenes[idx].cod_sec, arr_ordenes[idx].num_oc IF cantidad_Desp IS NULL THEN LET cantidad_desp = 0 END IF # BUSCA CANTIDAD DEVUELTA LET cantidad_Dev = 0 # SELECT SUM(a.cantidad_2) INTO cantidad_dev # FROM iptb00006 a # WHERE a.cod_n = arr_ordenes[idx].cod_n AND # a.cod_grupo = arr_ordenes[idx].cod_grupo AND # a.cod_tipo = arr_ordenes[idx].cod_tipo AND # a.cod_sec = arr_ordenes[idx].cod_sec AND # a.conduce_no = arr_ordenes[idx].num_oc AND # a.cod_mov IN (12,13) AND # a.status_t IS NULL AND a.fech_crea > '2011-01-01' IF cantidad_Desp IS NULL THEN LET cantidad_desp = 0 END IF LET arr_ordenes[idx].cantidad_desp = cantidad_desp LET arr_ordenes[idx].pendiente = arr_ordenes[idx].cantidad_ord - (arr_ordenes[idx].cantidad_desp*-1) LET idx = idx + 1 END FOREACH IF idx = 1 THEN CALL fgl_winmessage("ADVERTENCIA","NO EXISTEN REGISTROS CON ESA CONDICION","INFO") EXIT PROGRAM END IF CALL set_count(idx-1) options input WRAP INPUT ARRAY arr_ordenes WITHOUT DEFAULTS FROM s_ordenes.* attributes(UNBUFFERED) ON ACTION transacciones LET xarticulo = arr_ordenes[arr_curr()].producto CALL transacciones(arr_ordenes[arr_curr()].num_oc,arr_ordenes[arr_curr()].cod_n, arr_ordenes[arr_curr()].cod_grupo,arr_ordenes[arr_curr()].cod_tipo, arr_ordenes[arr_curr()].cod_sec,xarticulo) ON ACTION btransito IF fecha2 IS NULL THEN LET fecha2 = TODAY END IF CALL fechas_llegadas(arr_ordenes[arr_curr()].cod_n,arr_ordenes[arr_curr()].cod_grupo,arr_ordenes[arr_curr()].cod_tipo, arr_ordenes[arr_curr()].cod_sec,fecha2) ON ACTION buscareq ATTRIBUTE(TEXT="Requisicion") IF verificaordenNoAutorizada(arr_ordenes[arr_curr()].num_oc) OR verificaordenAutorizada(arr_ordenes[arr_curr()].num_oc) THEN CALL buscareq(arr_ordenes[arr_curr()].num_oc) CLOSE WINDOW w1 END IF ON ACTION cotizacion_detalle INITIALIZE container TO NULL LET container.vendedor = arr_ordenes[arr_curr()].vendedor LET container.orden = arr_ordenes[arr_curr()].num_oc LET container.cuenta_item = arr_count() LET container.etiqueta_cotiza = "COTIZACION" CALL vepcmf008(arr_ordenes[arr_curr()].cotizacion_no) AFTER FIELD departamento IF arr_ordenes[arr_curr()].departamento IS NOT NULL THEN SELECT a.nom_dpto INTO arr_ordenes[arr_curr()].descripcion_dpto FROM adtb00001 a WHERE a.departamento = arr_ordenes[arr_curr()].departamento IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD departamento END IF DISPLAY arr_ordenes[arr_curr()].descripcion_dpto TO s_ordenes[scr_line()].descripcion_dpto END IF BEFORE INPUT call dialog.setCellAttributes(att) LET registros = DIALOG.getArrayLength("s_ordenes") - 1 DISPLAY BY NAME registros FOR idx = 1 TO arr_ordenes.getLength() LET att[idx].col1 = NULL LET att[idx].col2 = NULL LET att[idx].col3 = NULL LET att[idx].col4 = NULL LET att[idx].col5 = NULL LET att[idx].col6 = NULL LET att[idx].col7 = NULL LET att[idx].col8 = NULL LET att[idx].col9 = NULL LET att[idx].col10 = NULL LET att[idx].col11 = NULL LET att[idx].col12 = NULL LET att[idx].col13 = NULL LET att[idx].col14 = NULL LET att[idx].col15 = NULL LET att[idx].col16 = NULL #FECHA LLEGADA LET veces = 0 SELECT COUNT(*) INTO veces FROM cctb00026 a WHERE (a.num_oc = arr_ordenes[idx].num_oc AND a.cod_n = arr_ordenes[idx].cod_n AND a.cod_grupo = arr_ordenes[idx].cod_grupo AND a.cod_tipo = arr_ordenes[idx].cod_tipo AND a.cod_sec = arr_ordenes[idx].cod_sec) AND a.status_t IS NULL IF veces > 1 THEN LET att[idx].col7 = 'blue reverse' ELSE SELECT CONVERT(CHAR(10),a.fecha_llegada,103) INTO arr_ordenes[idx].fecha_llegada FROM cctb00026 a WHERE a.num_oc = arr_ordenes[idx].num_oc AND a.cod_n = arr_ordenes[idx].cod_n AND a.cod_grupo = arr_ordenes[idx].cod_grupo AND a.cod_tipo = arr_ordenes[idx].cod_tipo AND a.cod_sec = arr_ordenes[idx].cod_sec AND a.status_t IS NULL END IF #VERIFICA SI LA ORDEN TIENE REQUISICION DE DESPACHOS IF verificaordenNoReq(arr_ordenes[idx].num_oc) THEN LET att[idx].col16 = 'black' DISPLAY "ORDENES NO TIENE ",arr_ordenes[idx].num_oc END IF IF verificaordenNoAutorizada(arr_ordenes[idx].num_oc) THEN LET att[idx].col16 = 'yellow reverse' END IF IF verificaordenAutorizada(arr_ordenes[idx].num_oc) THEN LET att[idx].col16 = 'magenta reverse' END IF #--------------------------------------------------------------------- # FECHA COMPROMISO O PRODUCCION LET vecesparcial = 0 SELECT COUNT(*) INTO vecesparcial FROM prtb00028 a WHERE a.num_oc =arr_ordenes[idx].num_oc AND a.cod_n = arr_ordenes[idx].cod_n AND a.cod_grupo = arr_ordenes[idx].cod_grupo AND a.cod_tipo = arr_ordenes[idx].cod_tipo AND a.cod_Sec = arr_ordenes[idx].cod_sec IF vecesparcial > 1 THEN LET att[idx].col8 = 'green reverse' ELSE LET att[idx].col8 = 'Black' END IF IF (arr_ordenes[idx].fecha_compromiso - TODAY) > 2 AND (arr_ordenes[idx].fecha_compromiso - TODAY) < 3 THEN LET att[idx].col9 = 'magenta reverse' ELSE LET att[idx].col9 = 'Black' END IF IF (arr_ordenes[idx].fecha_compromiso-TODAY) <0 THEN LET att[idx].col9 = 'red reverse' ELSE LET att[idx].col9 = 'Black' END IF # VERIFICA QUE LA ORDEN TENGA DIBUJOS SELECT ISNULL(COUNT(*),0) INTO cuenta FROM prtb00029 a WHERE a.num_oc =arr_ordenes[idx].num_oc AND a.tipo_file = 'DI' IF cuenta > 0 THEN LET att[idx].col2='Yellow' ELSE LET att[idx].col2 = 'Black' END IF END FOR ON ACTION existencia ATTRIBUTE(TEXT="Existencia",IMAGE='fa-list-alt') LET xarticulo = arr_ordenes[arr_curr()].producto CLIPPED CALL existenciaalmacenes( arr_ordenes[arr_curr()].cod_n, arr_ordenes[arr_curr()].cod_grupo, arr_ordenes[arr_curr()].cod_tipo, arr_ordenes[arr_curr()].cod_sec, xarticulo ) ON ACTION flujo LET curr = arr_curr() IF curr >0 THEN CALL prprmt011c(arr_ordenes[curr].num_oc,arr_ordenes[curr].cod_n,arr_ordenes[curr].cod_grupo, arr_ordenes[curr].cod_tipo,arr_ordenes[curr].cod_sec,usuarios,actualiza_log_produccion, arr_ordenes[curr].departamento) END IF ON ACTION dibujo ATTRIBUTE(TEXT="Documentos") LET curr = arr_curr() CALL busca_dibujos(arr_ordenes[curr].num_oc) {ON ACTION buscaConduce ATTRIBUTE(TEXT="CONDUCES", IMAGE='picture') LET curr = arr_curr() CALL busca_imagen_conduces(arr_ordenes[curr].num_oc) } ON ACTION fllegada LET curr = arr_curr() LET scr_l = scr_line() # FECHA LLEGADA SELECT COUNT(*) INTO veces FROM cctb00026 a WHERE a.num_oc = arr_ordenes[curr].num_oc AND a.cod_n = arr_ordenes[curr].cod_n AND a.cod_grupo = arr_ordenes[curr].cod_grupo AND a.cod_tipo = arr_ordenes[curr].cod_tipo AND a.cod_sec = arr_ordenes[curr].cod_sec AND a.status_t IS NULL IF veces > 1 THEN CALL busca_fecha(arr_ordenes[curr].num_oc,arr_ordenes[curr].cod_n, arr_ordenes[curr].cod_grupo,arr_ordenes[curr].cod_tipo, arr_ordenes[curr].cod_sec) END IF ON ACTION forden LET curr = arr_curr() CALL prprrp016(arr_ordenes[curr].num_oc) ON ACTION imprime_data ATTRIBUTE(TEXT="Reporte Data",image="print") IF arr_ordenes.getLength() > 1 THEN CALL seleccionarsalida() RETURNING r_output #LET r_output='PDF' LET preview = TRUE LET r_filename ="prprmt011d.4rp" IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1) LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF START REPORT rordenes TO XML HANDLER HANDLER FOR idx=1 TO arr_ordenes.getLength() IF arr_ordenes[idx].num_oc >0 THEN IF arr_ordenes[idx].cerrada='S' THEN LET estado='CERRADA' ELSE IF arr_ordenes[idx].cerrada = 'N' THEN LET estado='ABIERTA' END IF IF arr_ordenes[idx].cerrada = 'E' THEN LET estado='NULA' END IF END IF OUTPUT TO REPORT rordenes(arr_ordenes[idx].num_oc,estado, arr_ordenes[idx].estado_produccion,arr_ordenes[idx].fecha_compromiso, arr_ordenes[idx].vendedor,arr_ordenes[idx].cliente,arr_ordenes[idx].cotizacion_no, arr_ordenes[idx].producto,arr_ordenes[idx].fecha,arr_ordenes[idx].cantidad_ord, arr_ordenes[idx].pendiente,arr_ordenes[idx].costo) END IF END FOR FINISH REPORT rordenes ELSE CALL fgl_winmessage("INFO","NO EXISTEN INFORMACIONES A IMPRIMIR","INFO") END IF ON ACTION parciales LET curr = arr_curr() CALL fparciales(arr_ordenes[curr].num_oc,arr_ordenes[curr].cod_n, arr_ordenes[curr].cod_grupo,arr_ordenes[curr].cod_tipo, arr_ordenes[curr].cod_sec,arr_ordenes[curr].fecha, arr_ordenes[curr].producto) ON ACTION informe ATTRIBUTE(TEXT="Informe",IMAGE="print") CALL seg000(usuarios,0,'prprmt011.informe') RETURNING resultado IF resultado = "SI" THEN CALL prprmt011b(arr_ordenes) ELSE CALL fgl_winmessage("ADVERTENCIA","USTED NO TIENE PERMISOS PARA UTILIZAR OPCION","INFO") CONTINUE DIALOG END IF AFTER FIELD fecha_compromiso LET curr=arr_curr() IF arr_ordenes[curr].fecha_compromiso IS NOT NULL THEN IF arr_ordenes[curr].fecha_compromiso < arr_ordenes[curr].fecha THEN CALL fgl_winmessage("ADVERTENCIA","FECHA COMPROMISO, NO PUEDE SER MENOR A LA FECHA DE LA ORDEN","INFO") NEXT FIELD fecha_compromiso ELSE LET arr_ordenes[arr_curr()].fechaDispEntrega = arr_ordenes[arr_curr()].fecha_compromiso + 1 LET arr_ordenes[arr_curr()].fechaSolDespacho = arr_ordenes[arr_curr()].fechaDispEntrega DISPLAY arr_ordenes[arr_curr()].fechaDispEntrega TO s_ordenes[scr_line()].fechaDispEntrega DISPLAY arr_ordenes[arr_curr()].fechaDispEntrega TO s_ordenes[scr_line()].fechaDispEntrega END IF END IF BEFORE FIELD fechaSolDespacho CALL seg000(usuarios,0,'prprmt011.informe') RETURNING resultado IF resultado = "NO" THEN NEXT FIELD fechaInstalacion CONTINUE DIALOG END IF BEFORE FIELD fechaInstalacion CALL seg000(usuarios,0,'prprmt011.finstalacion') RETURNING resultado IF resultado = "NO" THEN NEXT FIELD cotizacion_no CONTINUE DIALOG END IF ON ACTION visualiza_log CALL ver_log(arr_ordenes[arr_curr()].num_oc,arr_ordenes[arr_curr()].cod_n,arr_ordenes[arr_curr()].cod_grupo ,arr_ordenes[arr_curr()].cod_tipo,arr_ordenes[arr_curr()].cod_sec) AFTER INPUT IF INT_FLAG THEN LET INT_FLAG = FALSE CALL msg(2) EXIT INPUT END IF IF actualiza_produccion="SI" THEN FOR idx = 1 TO arr_ordenes.getLength() IF arr_ordenes[idx].actualiza = "S" THEN IF arr_ordenes[idx].num_oc IS NOT NULL THEN UPDATE prtb00012 SET cerrada = arr_ordenes[idx].cerrada, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE prtb00012.num_oc = arr_ordenes[idx].num_oc IF arr_ordenes[idx].cerrada = 'E' THEN IF arr_ordenes[idx].fecha_compromiso IS NOT NULL THEN CALL msg(1011) EXIT FOR END IF IF arr_ordenes[idx].estado_produccion IS NOT NULL THEN CALL msg(1011) EXIT FOR END IF IF arr_ordenes[idx].estado_producto IS NOT NULL THEN CALL msg(1011) EXIT FOR END IF UPDATE prtb00012 SET status_t = 'E',us_mod = usuarios,fech_mod = getdate() WHERE num_oc = arr_ordenes[idx].num_oc END IF UPDATE prtb00013 SET prtb00013.fecha_compromiso = arr_ordenes[idx].fecha_compromiso, prtb00013.estado_produccion = arr_ordenes[idx].estado_produccion, prtb00013.estado_producto = arr_ordenes[idx].estado_producto, prtb00013.observacion = arr_ordenes[idx].observacion, departamento=arr_ordenes[idx].departamento, us_mod = SUSER_SNAME(), fech_mod = GETDATE(), fecha_llegada = arr_ordenes[idx].fecha_llegada, fecha_disp_entrega = arr_ordenes[idx].fechaDispEntrega, fecha_solic_despacho = arr_ordenes[idx].fechaSolDespacho, fecha_instalacion = arr_ordenes[idx].fechaInstalacion WHERE prtb00013.num_oc = arr_ordenes[idx].num_oc AND cod_n = arr_ordenes[idx].cod_n AND cod_grupo = arr_ordenes[idx].cod_grupo AND cod_tipo = arr_ordenes[idx].cod_tipo AND cod_sec = arr_ordenes[idx].cod_sec AND area = arr_ordenes[idx].area # Se buscan los usuarios quienes tienen permisos para el log de producion por que el usuario # quien actualiza las ordenes de producion es el que tiene la autorizacion_produccion, # este proceso de envio de correo esta orientado a informar a los usuarios quienes # Deben actualizar las otras informaciones como fecha de compromisos y comentarios adicionales SELECT a.correo FROM seg0003 a,seg0001 b WHERE a.actualizacion_log_produccion = 'SI' AND b.departamento = arr_ordenes[idx].departamento AND a.usuario = b.usuario LET j = 1 FOREACH buscacorreo INTO copiacorreo[j] LET copiaemail = copiaemail CLIPPED,";",copiacorreo[j] LET j = j + 1 END FOREACH SELECT a.email INTO email FROM seg0000 a WHERE a.sec_vend = arr_ordenes[idx].sec_vend IF arr_ordenes[idx].estado_produccion IS NULL THEN LET arr_ordenes[idx].estado_produccion ='SIN EVALUAR' END IF IF arr_ordenes[idx].estado_producto IS NULL THEN LET arr_ordenes[idx].producto ='SIN EVALUAR' END IF LET email = email CLIPPED,';','soporteclientes@marmotech.com.do' LET emailsubject = arr_ordenes[idx].num_oc USING "&&&&&&"," ",arr_ordenes[idx].cliente CLIPPED IF arr_ordenes[idx].fecha_compromiso IS NOT NULL THEN LET emailbody = " LA ORDEN ",arr_ordenes[idx].num_oc USING "&&&&&&"," FUE ACTUALIZADA CON LA FECHA PRODUCCION ",arr_ordenes[idx].fecha_compromiso USING "dd/mm/yyyy", " EL ESTADO DE LA PRODUCCION: ",arr_ordenes[idx].estado_produccion CLIPPED, " ",arr_ordenes[idx].observacion CLIPPED," Y EL ESTADO DEL PRODUCTO ", arr_ordenes[idx].producto CLIPPED IF arr_ordenes[idx].observacion IS NULL OR arr_ordenes[idx].observacion = ' ' THEN LET arr_ordenes[idx].observacion = emailbody CLIPPED END IF ELSE LET emailbody = " LA ORDEN ",arr_ordenes[idx].num_oc USING "&&&&&&"," FUE ACTUALIZADA ", " EL ESTADO DE LA PRODUCCION ESTA EN ",arr_ordenes[idx].estado_produccion CLIPPED, " ",arr_ordenes[idx].observacion CLIPPED," Y EL ESTADO DEL PRODUCTO ", arr_ordenes[idx].estado_producto CLIPPED IF arr_ordenes[idx].observacion IS NULL OR arr_ordenes[idx].observacion = ' ' THEN LET arr_ordenes[idx].observacion = emailbody CLIPPED END IF END IF LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED CALL envia_correo(email,copiaemail,emailbody,emailsubject,procedimiento) INSERT INTO prordenstatus(fecha_trx,num_oc,cerrada,observacion,fecha_compromiso,usuario, cod_n,cod_grupo,cod_tipo,cod_sec) VALUES (GETDATE(),arr_ordenes[idx].num_oc,arr_ordenes[idx].cerrada, arr_ordenes[idx].observacion,arr_ordenes[idx].fecha_compromiso,usuarios, arr_ordenes[idx].cod_n,arr_ordenes[idx].cod_grupo,arr_ordenes[idx].cod_tipo, arr_ordenes[idx].cod_sec) LET numero_msg = 1 CALL msg(numero_msg) END IF END IF END FOR END IF EXIT INPUT END INPUT ON ACTION limpiar LET fecha1 = NULL LET fecha2 = NULL LET busqueda = NULL DISPLAY BY NAME fecha1,fecha2 CALL arr_ordenes.clear() CLEAR FORM ON ACTION CANCEL LET fecha1 = NULL LET fecha2 = NULL LET busqueda = NULL DISPLAY BY NAME fecha1,fecha2 EXIT DIALOG EXIT PROGRAM END DIALOG END FUNCTION FUNCTION busca_fecha(xnum_oc,xcodn,xcodgrupo,xcodtipo,xcodsec) DEFINE xnum_oc INT, xcodn,xcodgrupo,xcodtipo,xcodsec SMALLINT, afecha_llegada DYNAMIC ARRAY OF RECORD fecha_llegada CHAR(10), num_req INT, fecha CHAR(10) END RECORD, k smallint OPEN WINDOW prfmwd014 AT 10,10 WITH FORM "prfmwd014" DISPLAY xnum_oc TO num_oc DECLARE busca_req CURSOR FOR SELECT DISTINCT CONVERT(CHAR(10),a.fecha_llegada,103),a.num_req, CONVERT(CHAR(10),b.fecha,103) FROM cctb00026 a,cctb00025 b WHERE a.num_oc = xnum_oc AND a.num_req = b.num_req AND a.cod_n = xcodn AND a.cod_grupo = xcodgrupo AND a.cod_tipo = xcodtipo AND a.cod_sec = xcodsec LET k = 1 FOREACH busca_req INTO afecha_llegada[k].* LET k = k + 1 END FOREACH CALL set_count(k-1) INPUT ARRAY afecha_llegada WITHOUT DEFAULTS FROM s_llegada.* CLOSE WINDOW prfmwd014 END FUNCTION FUNCTION prprrp016(pnum_oc) DEFINE busqueda RECORD cotizacion_no INT, fecha CHAR(10), tipo_cliente SMALLINT, sec_cliente INT, nombre_proyecto CHAR(40), direccion_proyecto CHAR(40), telefono_r CHAR(15), nombre CHAR(40), num_oc INT, fecha_oc CHAR(10), fecha_entrega CHAR(10), fecha_cierre CHAR(10), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(100), unidad_med CHAR(4), cantidad DEC(12,5), precio DEC(12,2), cantidad_2 DEC(12,5), cod_mov CHAR(60), fecha_doc CHAR(10), documento INT, status_mov SMALLINT, simbolo CHAR(6), vendedor CHAR(50), monto_cotizacion DEC(12,2), condicion CHAR(30), estado_orden CHAR(20), avance CHAR(20), monto_avance DEC(12,2), fecha_avance CHAR(10), codigo CHAR(31), factura INT, bodega SMALLINT END RECORD, pnum_oc INT LET selec = "SELECT a.cotizacion_no,CONVERT(CHAR(10),a.fecha,103) as fecha_cotizacion,a.tipo_cliente,a.sec_cliente, ", "a.nombre_proyecto, ", "a.direccion_proyecto,a.telefono_r, ", "b.nombre,c.num_oc,CONVERT(CHAR(10),c.fecha_oc,103) as fecha_orden,", "CONVERT(CHAR(10),c.fecha_entrega,103) as fecha_entrega,CONVERT(CHAR(10),c.fecha_cierre,103) as fecha_cierre,", "x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_sec,", "e.descrip_esp,e.unidad_med, SUM(x1.cantidad),'0',", "i.simbolo,'('+CAST(a.sec_vend as char(7))+')'+ISNULL(RTRIM(j.nom1_emp),' ')+' '+ISNULL(RTRIM(j.nom2_emp),' ')+' '+ISNULL(RTRIM(j.apell1_emp),' ') as vendedor, ", "a.total_neto, k.descrip, CASE WHEN c.cerrada='S' THEN 'CERRADA' ELSE 'ABIERTA' END ", "FROM vetb00050 a,vetb00004 b,vetb00012 k,vetb00061 i,adtb00003 j,iptb00002 e, prtb00012 c,prtb00013 x1 ", " WHERE a.cotizacion_no = c.cotizacion_no and ", " a.tipo_cliente = b.tipo_cliente AND ", " a.sec_cliente = b.sec_cliente and ", " a.sec_vend = j.num_emp AND ", " a.cond_pago = k.cond_pago AND ", " a.ventas =i.ventas AND ", " c.num_oc = x1.num_oc and ", " c.num_oc = ",pnum_oc," AND ", " e.cod_n = x1.cod_n and ", " e.cod_grupo =x1.cod_grupo AND ", " e.cod_tipo = x1.cod_tipo and ", " e.cod_sec =x1.cod_sec ", " GROUP BY a.cotizacion_no,a.fecha,a.tipo_cliente,a.sec_cliente, ", "a.nombre_proyecto, c.cerrada, ", "a.direccion_proyecto,a.telefono_r,", "b.nombre,c.num_oc,c.fecha_oc, ", "c.fecha_entrega,c.fecha_cierre,", "x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_sec,", "e.descrip_esp,e.unidad_med, ", "i.simbolo,a.sec_vend ,j.nom1_emp,j.nom2_emp,j.apell1_emp,", " a.total_neto, k.descrip", " ORDER BY x1.cod_n,x1.cod_grupo,x1.cod_tipo,x1.cod_sec " PREPARE comando1 FROM selec DECLARE busca CURSOR FOR comando1 OPEN busca LET r_filename = 'prprmt011a.4rp' CALL seleccionarSalida() RETURNING r_output IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file # LET r_output='SVG' CLIPPED LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT reporte_16a TO XML HANDLER HANDLER LET idx = 1 FOREACH busca INTO busqueda.cotizacion_no,busqueda.fecha,busqueda.tipo_cliente, busqueda.sec_cliente,busqueda.nombre_proyecto,busqueda.direccion_proyecto, busqueda.telefono_r,busqueda.nombre,busqueda.num_oc,busqueda.fecha_oc, busqueda.fecha_entrega,busqueda.fecha_cierre,busqueda.cod_n, busqueda.cod_grupo,busqueda.cod_tipo,busqueda.cod_sec, busqueda.descrip_esp,busqueda.unidad_med,busqueda.cantidad, busqueda.precio, busqueda.simbolo,busqueda.vendedor,busqueda.monto_cotizacion, busqueda.condicion,busqueda.estado_orden LET busqueda.avance = null LET busqueda.fecha_avance= NULL LET busqueda.monto_avance = NULL SELECT MAX(a.num_doc),MAX(a.fecha_orig) INTO busqueda.avance,busqueda.fecha_avance, busqueda.monto_avance FROM cctb00001 a WHERE a.num_cheque = busqueda.cotizacion_no and a.tipo_Doc = 'AV' and a.tipo_cliente = busqueda.tipo_cliente and a.sec_cliente = busqueda.sec_cliente and a.status_t is null and a.fecha_orig > '08/01/2009' LET busqueda.codigo = busqueda.cod_n using "&&&&","-", busqueda.cod_grupo USING "&&&&","-", busqueda.cod_tipo USING "&&&&","-", busqueda.cod_Sec USING "&&&&&&&" LET selec1 = " SELECT a.num_doc,CONVERT(CHAR(10),a.fecha,103),a.cod_mov,b.descrip_mov,a.cantidad_2,a.bodega,a.factura ", " FROM iptb00006 a,iptb00005 b ", " WHERE a.cod_mov = b.cod_mov AND ", " a.num_oc = ",pnum_oc," AND ", " a.cod_n = ",busqueda.cod_n," AND ", " a.cod_grupo = ",busqueda.cod_grupo," AND ", " a.cod_tipo = ",busqueda.cod_tipo, " AND ", " a.cod_sec = ",busqueda.cod_sec," AND ", " a.status_t IS NULL AND b.cod_mov in (30,31,55,12,13,56) ", " ORDER BY a.fecha " PREPARE transacciones FROM selec1 DECLARE trx_cursor CURSOR FOR transacciones LET noencontre = "NO" FOREACH trx_cursor INTO busqueda.documento,busqueda.fecha_doc,busqueda.cod_mov, busqueda.cod_mov,busqueda.cantidad_2,busqueda.bodega,busqueda.factura # BUSQUEDA FACTURA DE VENTAS # LET busqueda.factura =NULL # SELECT MAX(a.factura) INTO busqueda.factura # FROM vetb00002 a # WHERE a.conduce = busqueda.documento AND # a.bodega = busqueda.bodega AND # a.status_t IS NULL IF busqueda.cantidad_2 IS NULL THEN LET busqueda.cantidad_2 = 0 END IF LET noencontre="SI" OUTPUT TO REPORT reporte_16a(busqueda.*) END FOREACH IF noencontre = "NO" THEN LET busqueda.documento=NULL LET busqueda.cantidad_2=0 LET busqueda.fecha_doc=NULL LET busqueda.cod_mov=NULL LET busqueda.factura=NULL OUTPUT TO REPORT reporte_16a(busqueda.*) END IF LET idx = idx + 1 END FOREACH FINISH REPORT reporte_16a END IF END FUNCTION REPORT reporte_16a(x) DEFINE x RECORD cotizacion_no INT, fecha CHAR(10), tipo_cliente SMALLINT, sec_cliente INT, nombre_proyecto CHAR(40), direccion_proyecto CHAR(40), telefono_r CHAR(15), nombre CHAR(40), num_oc INT, fecha_oc CHAR(10), fecha_entrega CHAR(10), fecha_cierre CHAR(10), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(100), unidad_med CHAR(4), cantidad DEC(12,5), precio DEC(12,2), cantidad_2 DEC(12,5), cod_mov CHAR(60), fecha_doc CHAR(10), documento INT, status_mov SMALLINT, simbolo CHAR(6), vendedor CHAR(50), monto_cotizacion DEC(12,2), condicion CHAR(30), estado_orden CHAR(20), avance CHAR(20), monto_avance DEC(12,2), fecha_avance CHAR(10), codigo CHAR(31), factura INT, bodega SMALLINT END RECORD, balance DEC(12,5), v CHAR(1), codigoant CHAR(11) ORDER BY x.cotizacion_no,x.num_oc,x.codigo FORMAT BEFORE GROUP OF x.cotizacion_no PRINTX x.cotizacion_no,x.direccion_proyecto,x.nombre,x.nombre_proyecto, x.tipo_cliente,x.sec_cliente,x.telefono_r,x.num_oc,x.fecha,x.fecha_cierre, x.fecha_entrega,x.fecha_oc BEFORE GROUP OF x.codigo IF codigoant <> x.codigo THEN LET codigoant = x.codigo END IF PRINTX x.codigo,x.descrip_esp,x.unidad_med LET balance = x.cantidad ON EVERY ROW IF x.status_mov <> 3 THEN LET balance = balance + x.cantidad_2 END IF PRINTX x.cantidad,x.cantidad_2,x.cod_mov,x.fecha_Doc, x.documento,balance,x.precio,x.simbolo,v,x.avance,x.fecha_avance, x.monto_avance,x.vendedor,x.monto_cotizacion,x.condicion,x.status_mov, x.estado_orden,x.factura LET x.cantidad = 0 END REPORT FUNCTION fparciales(xnum_oc,xcodn,xcodgrupo,xcodtipo,xcodsec,xfecha,xproducto) DEFINE xcodn,xcodgrupo,xcodtipo,xcodsec,i1 SMALLINT, xnum_oc INT, xfecha DATE, xproducto STRING CALL arrparcial.clear() OPEN WINDOW prfmwd015 AT 10,10 WITH FORM "prfmwd015" DISPLAY xnum_oc TO num_oc DISPLAY xproducto TO producto DECLARE busca_parcial CURSOR FOR SELECT CONVERT(CHAR(10),a.fecha_compromiso,103),a.cantidad FROM prtb00028 a WHERE a.num_oc = xnum_oc AND a.cod_n = xcodn AND a.cod_grupo = xcodgrupo AND a.cod_tipo = xcodtipo AND a.cod_sec = xcodsec LET i1 = 1 FOREACH busca_parcial INTO arrparcial[i1].* LET i1 = i1 + 1 END FOREACH CALL set_count(i1-1) INPUT ARRAY arrparcial WITHOUT DEFAULTS FROM sparcial.* AFTER FIELD fecha LET i1 = arr_curr() IF arrparcial[i1].fecha IS NOT NULL THEN IF arrparcial[i1].fecha < xfecha THEN CALL msg(64) NEXT FIELD fecha END IF END IF AFTER INPUT IF INT_FLAG THEN CALL msg(2) LET INT_FLAG = FALSE EXIT INPUT END IF IF puesto = 'ADM PRODUCCION' OR puesto = 'ADMINISTRATOR' THEN # WHENEVER ERROR CONTINUE # BEGIN WORK FOR idx = 1 TO arr_count() IF arrparcial[idx].fecha IS NOT NULL THEN DELETE FROM prtb00028 WHERE num_oc = xnum_oc AND fecha_compromiso = arrparcial[idx].fecha AND cod_n = xcodn AND cod_grupo = xcodgrupo AND cod_tipo = xcodtipo AND cod_sec = xcodsec IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR ENTREGAS PARCIALES","INFO") EXIT FOR END IF INSERT INTO prtb00028 (num_oc,fecha_compromiso,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,us_crea,fech_Crea) VALUES(xnum_oc,arrparcial[idx].fecha,xcodn,xcodgrupo,xcodtipo,xcodsec,arrparcial[idx].cantidad,usuarios,getdate()) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR ENTREGAS PARCIALES","INFO") EXIT FOR END IF END IF END FOR # COMMIT WORK END IF EXIT INPUT END INPUT CLOSE WINDOW prfmwd015 END FUNCTION FUNCTION desplega_dibujo(xnumero) DEFINE xnumero INT, desplega DYNAMIC ARRAY OF CHAR(100), zruta,pruta STRING OPEN WINDOW w1 WITH FORM "prfmmt012" DECLARE busca_imagen CURSOR FOR SELECT a.ruta_file,a.id FROM prtb00029 a WHERE a.num_oc = xnumero ORDER BY a.id LET idx = 1 FOREACH busca_imagen INTO desplega[idx] LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY xnumero TO num_oc DISPLAY ARRAY desplega TO sdibujo.* BEFORE ROW LET idx = arr_curr() DISPLAY desplega[idx] TO imagen AFTER ROW LET idx = arr_curr() DISPLAY desplega[idx] TO imagen ON ACTION imprime LET r_output='PDF' LET preview = TRUE LET r_filename ="prprmt011.4rp" IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF START REPORT rdibujo TO XML HANDLER HANDLER LET pruta = desplega[idx] CLIPPED CALL remplazachar(pruta) RETURNING zruta OUTPUT TO REPORT rdibujo(zruta,xnumero) FINISH REPORT rdibujo AFTER DISPLAY EXIT DISPLAY END DISPLAY CLOSE WINDOW w1 END FUNCTION REPORT rdibujo(xruta,znumero) DEFINE xruta CHAR(150), znumero, xtipo,xsec,xcotiza INT, xfecha CHAR(10), xcliente CHAR(60), tiempo CHAR(30) FORMAT FIRST PAGE HEADER LET tiempo = current SELECT a.tipo_cliente,a.sec_cliente,b.nombre,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no INTO xtipo,xsec,xcliente,xfecha,xcotiza FROM prtb00012 a,vetb00004 b WHERE a.num_oc = znumero AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente ON EVERY ROW PRINTX xruta,xtipo,xsec,xcliente,xfecha,xcotiza,znumero,tiempo END REPORT REPORT rordenes(znumero,estado,estado_prod,xfecha_prod,vendedor,xcliente,xcotiza,xproducto,xfecha,xcantidad_ord,xpendiente,xcosto) DEFINE estado CHAR(20), estado_prod VARCHAR(50), znumero, xcotiza INT, xfecha CHAR(10), xfecha_prod VARCHAR(10), xcliente CHAR(60), vendedor VARCHAR(60), tiempo CHAR(25), total_reg SMALLINT, xproducto VARCHAR(100), xcantidad_ord DEC(12,5), xpendiente DEC(12,5), xcosto, tmonto NUMERIC(12,2) ORDER BY znumero FORMAT FIRST PAGE HEADER LET tiempo = CURRENT LET total_reg =0 ON EVERY ROW LET tmonto = tmonto + xcosto PRINTX znumero,estado,estado_prod,xfecha_prod,vendedor,xcliente,xfecha,xcotiza,tiempo,xproducto, xcantidad_ord,xpendiente,xcosto AFTER GROUP OF znumero LET total_reg=total_reg+1 ON LAST ROW PRINTX total_reg, tmonto END REPORT FUNCTION verificaordenNoAutorizada(pnum_oc) DEFINE pnum_oc INT, existe BOOLEAN SELECT DISTINCT a.num_oc FROM cctb00026 a,cctb00025 b WHERE a.num_oc = pnum_oc AND a.num_req=b.num_req AND b.estado = 'NO AUTORIZADA' AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET existe = FALSE ELSE LET existe = TRUE END IF RETURN existe END FUNCTION FUNCTION verificaordenAutorizada(pnum_oc) DEFINE pnum_oc INT, existe BOOLEAN SELECT DISTINCT a.num_oc FROM cctb00026 a,cctb00025 b WHERE a.num_oc = pnum_oc AND a.num_req=b.num_req AND b.estado = 'AUTORIZADA' AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET existe = FALSE ELSE LET existe = TRUE END IF RETURN existe END FUNCTION FUNCTION verificaordenNoReq(pnum_oc) DEFINE pnum_oc INT, existe BOOLEAN SELECT DISTINCT a.num_oc FROM cctb00026 a,cctb00025 b WHERE a.num_oc = pnum_oc AND a.num_req=b.num_req AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET existe = TRUE ELSE LET existe = FALSE END IF RETURN existe END FUNCTION FUNCTION vepcmf008(num_cotizacion) DEFINE chanula CHAR(3), salida STRING DEFINE num_cotizacion INT, comprobante VARCHAR(100), psincroniza BOOLEAN, tbodega STRING LET SELEC = " SELECT DISTINCT a.cod_cia,a.ventas,a.cotizacion_no,a.tipo_cliente,a.sec_cliente,a.nombre_cliente, " || " a.rnc,a.nombre_proyecto,a.direccion_cliente,a.cod_provincia,a.direccion_proyecto, " || " a.telefono_r,a.telefono_o,a.email,a.tipo_precio,a.beeper,a.celular,a.prima,a.fax1,a.celular1, " || " a.fax, CONVERT(CHAR(10),a.fecha,103),CONVERT(CHAR(10),a.fecha_entrega,103), " || " a.plazo_entrega,a.comentario,a.contacto, a.cond_pago,a.sec_Vend,a.porc_itbi," || " a.total_bruto,a.sub_total,a.monto_Desc,a.monto_itbi,a.total_neto,a.monto_dolar,a.num_emp_inst, " || " a.codigo_dgii,a.tipo_ncf,a.cliente_generico,a.sec_vend_aux,a.codigo,a.cod_zona,a.sincronizado, "|| " a.us_crea,a.fech_crea, a.us_mod,a.fech_mod,a.bodega,a.titulo_bodega "|| " FROM vetb00050 a " || " WHERE a.cotizacion_no = " || num_cotizacion CLIPPED || " AND a.status_t is null ", " ORDER BY a.cotizacion_no" PREPARE busca2 FROM selec EXECUTE busca2 INTO p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente, p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente,p_vetb50.cod_provincia,p_vetb50.direccion_proyecto, p_vetb50.telefono_r,p_vetb50.telefono_o,p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax, p_vetb50.fecha,p_vetb50.fecha_entrega, p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_Vend,p_vetb50.porc_itbi, p_vetb50.total_bruto,p_vetb50.sub_total,p_vetb50.monto_Desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar, p_vetb50.num_emp_inst,p_vetb50.codigo_dgii,comprobante, p_vetb50.cliente_generico,p_vetb50.sec_vend_aux,p_vetb50.codigo,p_vetb50.cod_zona, psincroniza, p_vetb50.us_crea,p_vetb50.fech_crea,p_vetb50.us_mod,p_vetb50.fech_mod,p_vetb50.bodega,tbodega IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL asignavalores() LET data_imp.bodega = p_Vetb50.bodega LET data_imp.tbodega = tbodega CALL impresion(data_imp.*,'veprmt049.4rp','PDF',container.cuenta_item,container.etiqueta_cotiza) RETURNING salida END FUNCTION FUNCTION asignavalores() LET data_imp.cotizacion_no = p_vetb50.cotizacion_no LET data_imp.tipo_cliente = p_vetb50.tipo_cliente LET data_imp.sec_cliente = p_vetb50.sec_cliente LET data_imp.direccion_cliente = p_vetb50.direccion_cliente LET data_imp.nombre = p_vetb50.nombre_cliente LET data_imp.contacto = p_vetb50.contacto LET data_imp.nombre_proyecto = p_vetb50.nombre_proyecto LET data_imp.direccion_proyecto = p_vetb50.direccion_proyecto LET data_imp.cond_pago = p_vetb50.cond_pago LET data_imp.fecha = p_vetb50.fecha LET data_imp.sec_vend = p_Vetb50.sec_vend LET data_imp.nombre_cliente = p_vetb50.nombre_cliente LET data_imp.total_neto = p_vetb50.total_neto LET data_imp.comentario = p_vetb50.comentario LET data_imp.nombre_vend = container.vendedor LET data_imp.rnc = p_vetb50.rnc LET data_imp.telefono_o =p_vetb50.telefono_o LET data_imp.telefono_r = p_vetb50.telefono_r LET data_imp.celular = p_vetb50.celular LET data_imp.celular1 = p_vetb50.celular1 LET data_imp.email = p_vetb50.email LET data_imp.orden =container.orden LET data_imp.plazo_entrega = p_vetb50.plazo_entrega LET data_imp.num_emp_int = p_vetb50.num_emp_inst LET data_imp.sub_total = p_vetb50.sub_total LET data_imp.monto_desc = p_vetb50.monto_desc LET data_imp.porc_itbis = p_vetb50.porc_itbi LET data_imp.neto = p_vetb50.total_neto LET data_imp.total_bruto = p_vetb50.total_bruto LET data_imp.vendedor_aux = p_vetb50.sec_vend_aux LET data_imp.monto_itbis = p_vetb50.monto_itbi END FUNCTION