{ FUNCION : datosCocinas.4gl OBJETIVO : Publicar los datos para realizar estados de las cocinas modulares DESARROLLADO POR: ING. JUAN SOTO FECHA : Julio 20, 2026 } IMPORT util -- Tipos reutilizables para evitar duplicar la definición de campos TYPE t_datos RECORD ventasCantidad, cantidadInsumos DEC(12, 5), ventasVAlor, gastos, valorIsumos DEC(18, 2), cod_msg INT, descripcion STRING END RECORD FUNCTION datosCocina(data) DEFINE data STRING DEFINE credenciales RECORD usuario VARCHAR(50), clave VARCHAR(50), fechaCorte DATE END RECORD, fecha1, fecha2 DATE -- Registros temporales donde cae cada FETCH antes de copiarlo al arreglo DEFINE datos t_datos CALL util.JSON.parse(data, credenciales) DISPLAY "USUARIO ", credenciales.usuario, " clave ", credenciales.clave CONNECT TO "smarmotech" USER credenciales.usuario USING credenciales.clave IF STATUS < 0 THEN LET datos.cod_msg = 400 LET datos.descripcion = "USUARIO NO VALIDO ", SQLCA.SQLERRM DISCONNECT CURRENT RETURN util.JSON.stringify(datos) END IF SELECT a.fecha_inicio, a.fecha_corte INTO fecha1, fecha2 FROM prdtable a WHERE a.ano = YEAR(credenciales.fechaCorte) AND a.mes = MONTH(credenciales.fechaCorte) -- VENTAS NETAS (bruto - descuento) * prima_us. Se agrega a nivel de encabezado -- (vetb00002) con EXISTS para no duplicar sub_total/monto_desc por cada linea de detalle. SELECT ISNULL(SUM(cantidadtrx),0), ISNULL(SUM(neto),0) INTO datos.ventasCantidad, datos.ventasVAlor FROM ventas_facturas WHERE ano = YEAR(credenciales.fechaCorte) AND numero_mes = MONTH(credenciales.fechaCorte) AND cod_n IN (52, 56, 40, 43) AND cod_grupo IN (1511,1500,668) -- GASTOS del departamento de Ensamble Modulares (6118) = SUM(debito - credito) -- Solo cuentas de gasto: cuenta_no que inicia en '7'. SELECT ISNULL(SUM(a.debito - a.credito), 0) INTO datos.gastos FROM cgtb00004 a WHERE a.fecha BETWEEN fecha1 AND fecha2 AND a.departamento = 6118 AND a.cuenta_no LIKE '7%' AND a.tipo <> 3 AND a.status_t IS NULL -- CANTIDAD DE INSUMOS consumidos en el periodo (movimiento 86) SELECT ISNULL(SUM(a.cantidad_2 * - 1), 0) INTO datos.cantidadInsumos FROM iptb00006 a WHERE a.cod_mov = 86 AND a.status_t IS NULL AND a.fecha BETWEEN fecha1 AND fecha2 -- VALOR DE INSUMOS: unidades del periodo * costo estandar (material+labor+gastos) -- tomado de iptb00004 (mes_fin=12 del ano de fecha2), no del costo del movimiento. SELECT ISNULL( SUM((a.cantidad_2 * - 1) * (b.material + b.labor + b.gastos)), 0) INTO datos.valorIsumos FROM iptb00006 a INNER JOIN iptb00004 b ON b.cod_n = a.cod_n AND b.cod_grupo = a.cod_grupo AND b.cod_tipo = a.cod_tipo AND b.cod_sec = a.cod_sec WHERE a.cod_mov = 86 AND a.status_t IS NULL AND a.fecha BETWEEN fecha1 AND fecha2 AND b.mes_fin = 12 AND b.ano = YEAR(fecha2) DISCONNECT CURRENT LET datos.cod_msg = 200 LET datos.descripcion = 'OPERACION EXITOSA' RETURN util.JSON.stringify(datos) END FUNCTION