{ =============================================================== PROGRAMA : IPPRRP036 OBJETIVO : COSTOS DE CALIDAD 2 DESARROLLADOR : Ing. Elvis Garcia =============================================================== } GLOBALS "ipprgb000.4gl" DEFINE departamento INT, fecha1 DATE, fecha2 DATE, inv DYNAMIC ARRAY OF RECORD tipo_producto STRING, origen_producto STRING, mov44 DECIMAL(18, 2), mov12 DECIMAL(18, 2), mov13 DECIMAL(18, 2), total DECIMAL(18, 2), total_fact DECIMAL(18, 2) END RECORD, idx INT, query STRING, titulo_col1 STRING, ventas_total DECIMAL(18, 2) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave CALL ipprrp036() END MAIN FUNCTION ipprrp036() OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM ipfmrp036 FROM "ipfmrp036" DISPLAY FORM ipfmrp036 INPUT BY NAME fecha1, fecha2 BEFORE INPUT INITIALIZE fecha1, fecha2 TO NULL AFTER FIELD fecha1 IF fecha1 IS NULL OR fecha1 > TODAY THEN CALL msg(16) NEXT FIELD fecha1 END IF LET fecha2 = TODAY DISPLAY BY NAME fecha2 AFTER FIELD fecha2 IF fecha2 IS NULL OR fecha2 < fecha1 THEN CALL msg(16) NEXT FIELD fecha1 END IF ON ACTION CANCEL EXIT PROGRAM AFTER INPUT LET idx = 1 -- Solo para mostrar en el header (referencia CAM). SELECT ISNULL(SUM(monto_bruto - descuento), 0) INTO ventas_total FROM ventas_facturas WHERE ano = YEAR(TODAY) AND numero_mes <= MONTH(TODAY) LET query = "SELECT a.producto, a.origen, CAST(ISNULL(SUM(CASE WHEN a.codigo_mov = 44 THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0)) ELSE 0 END),0) AS DECIMAL(18,2)) AS total_costo_44, CAST(ISNULL(SUM(CASE WHEN a.codigo_mov = 12 THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0)) ELSE 0 END),0) AS DECIMAL(18,2)) AS total_costo_12, CAST(ISNULL(SUM(CASE WHEN a.codigo_mov = 13 THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0)) ELSE 0 END),0) AS DECIMAL(18,2)) AS total_costo_13, CAST(ISNULL(SUM(CASE WHEN a.codigo_mov IN (44,12,13) THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0)) ELSE 0 END),0) AS DECIMAL(18,2)) AS total_costo_general, CAST(ISNULL(SUM(CASE WHEN a.codigo_mov IN (30,31,55,56) THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0)) ELSE 0 END),0) AS DECIMAL(18,2)) AS total_calculado FROM vwipprodterm a WHERE a.codigo_mov IN (44,12,13,30,31,55,56) AND a.ano BETWEEN YEAR('", fecha1 USING 'yyyy-mm-dd', "') AND YEAR('", fecha2 USING 'yyyy-mm-dd', "') AND a.mes_orden BETWEEN MONTH('", fecha1 USING 'yyyy-mm-dd', "') AND MONTH('", fecha2 USING 'yyyy-mm-dd', "') GROUP BY a.origen, a.producto ORDER BY a.origen, a.producto; " LET titulo_col1 = 'PRODUCTOS' DECLARE buscar CURSOR FROM query FOREACH buscar INTO inv[idx].* LET idx = idx + 1; END FOREACH IF idx > 1 THEN LET r_filename = "ipprrp036.4rp" IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 CALL selectoutput() RETURNING r_output 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 inv1 TO XML HANDLER HANDLER FOR idx = 1 TO inv.getlength() OUTPUT TO REPORT inv1(inv[idx].*, fecha1, fecha2, titulo_col1, ventas_total) END FOR FINISH REPORT inv1 ELSE CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS", "INFO") END IF END INPUT END FUNCTION REPORT inv1(x, fecha1, fecha2, titulo_columna1, ventas_total) DEFINE x RECORD tipo_producto STRING, origen_producto STRING, mov44 DECIMAL(18, 2), mov12 DECIMAL(18, 2), mov13 DECIMAL(18, 2), total DECIMAL(18, 2), total_fact DECIMAL(18, 2) -- PRODUCTOS: venta de la clase | DEPARTAMENTOS: MOV 30,31,55,56 END RECORD DEFINE total_registros,total_mov44, total_mov12, total_mov13, total_general, total_general_fact DECIMAL(18, 2) DEFINE registros_prod,prod_mov44, prod_mov12, prod_mov13, prod_general, prod_general_fact DECIMAL(18, 2) DEFINE total_costoCalidad, costoCalidad, prod_costoCalidad DECIMAL (18,6) DEFINE container, titulo_columna1 STRING DEFINE ventas_total DECIMAL(18, 2) DEFINE fecha1, fecha2, fecha_actual DATE FORMAT FIRST PAGE HEADER LET fecha_actual = CURRENT PRINTX fecha1, fecha2, fecha_actual, titulo_columna1, ventas_total AFTER GROUP OF x.origen_producto LET prod_mov44 = GROUP SUM(x.mov44) LET prod_mov12 = GROUP SUM(x.mov12) LET prod_mov13 = GROUP SUM(x.mov13) LET prod_general = GROUP SUM(x.total) LET prod_general_fact = GROUP SUM(x.total_fact) IF prod_general_fact IS NULL OR prod_general_fact = 0 THEN LET prod_costoCalidad = 0 ELSE LET prod_costoCalidad = ((prod_mov44 + prod_mov12 + prod_mov13) / ventas_total) * 100 END IF LET container = prod_costoCalidad, '%' LET registros_prod = GROUP COUNT(*) PRINTX registros_prod,prod_mov44, prod_mov12, prod_mov13, prod_general, prod_general_fact, x.origen_producto, container ON EVERY ROW IF x.total_fact IS NULL OR x.total_fact = 0 THEN LET costoCalidad = 0 ELSE LET costoCalidad = ((x.mov12 + x.mov13 + x.mov44) /ventas_total) * 100 END IF LET container = costoCalidad, '%' PRINTX x.mov12, x.mov13, x.mov44, x.tipo_producto, x.total, x.total_fact, container ON LAST ROW LET total_mov44 = SUM(x.mov44) LET total_mov12 = SUM(x.mov12) LET total_mov13 = SUM(x.mov13) LET total_general = SUM(x.total) LET total_general_fact = SUM(x.total_fact) IF total_general_fact IS NULL OR total_general_fact = 0 THEN LET total_costoCalidad = 0 ELSE LET total_costoCalidad = ((total_mov44 + total_mov12 + total_mov13) / ventas_total) * 100 END IF LET container = total_costoCalidad, '%' LET total_registros = COUNT(*) PRINTX total_registros,total_mov44, total_mov12, total_mov13, total_general, total_general_fact, container END REPORT FUNCTION busca_departamento() DEFINE pdepartamento ui.combobox, kdepartamento SMALLINT, kdescripcion CHAR(30) LET pdepartamento = ui.combobox.forname("formonly.departamento") CALL pdepartamento.clear() DECLARE pagar CURSOR FOR SELECT departamento, nom_dpto FROM adtb00001 WHERE status_t IS NULL ORDER BY nom_dpto FOREACH pagar INTO kdepartamento, kdescripcion CALL pdepartamento.additem(kdepartamento, kdescripcion) END FOREACH END FUNCTION