{ PROGRAMA : prprmt022.4gl OBJETIVO : Consulta Orden de produccion DESARROLLADO POR : Ing. Elvis Garcia FECHA : JULIO 12, 2025 } IMPORT util IMPORT FGL fgldialog SCHEMA smarmotech DEFINE usuarios, clave STRING DEFINE pcompanias RECORD LIKE companias.* DEFINE criterio STRING DEFINE fechas RECORD fech_inicial DATE, fech_final DATE END RECORD DEFINE data DYNAMIC ARRAY OF RECORD orden_prod1 INT, orden_ped1 INT, cliente STRING, fech_oc DATE, fech_recibida STRING, material STRING, terminacion STRING, cantidad DECIMAL(12,2), origen_mat STRING, destino_orden STRING, enviar_a STRING, fecha_compromiso DATE, fecha_reprogramada STRING, asignado_a STRING, estatus STRING, fecha_entregado STRING END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO pcompanias.* FROM companias CALL prprmt025() END MAIN FUNCTION prprmt025() OPEN WINDOW w1 WITH FORM "prfmmt025" CALL ui.Interface.LoadStyles("mbsStyle") CALL fgl_settitle("Consulta ordenes de produccion") CALL initConditions() CALL consulta() DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY data TO record2.* ON ACTION consultar ATTRIBUTES(TEXT = "OK") CALL initConditions() CALL consulta() ON ACTION salir ATTRIBUTES(TEXT = "Salir", IMAGE = "fa-power-off") EXIT PROGRAM END DISPLAY END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION initConditions() INITIALIZE fechas TO NULL DIALOG ATTRIBUTES(UNBUFFERED) INPUT BY NAME fechas.* ATTRIBUTES(WITHOUT DEFAULTS) AFTER INPUT IF fechas.fech_final IS NOT NULL AND fechas.fech_inicial IS NOT NULL THEN IF fechas.fech_inicial > fechas.fech_final THEN CALL msg(86) NEXT FIELD fech_inicial END IF END IF END INPUT CONSTRUCT criterio ON c.orden_produccion, c.orden_pedido FROM orden_prod, orden_ped END CONSTRUCT ON ACTION ACCEPT ATTRIBUTES(TEXT = "Consultar", IMAGE = "mag") ACCEPT DIALOG ON ACTION salir ATTRIBUTES(TEXT = "Salir", IMAGE = "fa-power-off") EXIT PROGRAM END DIALOG END FUNCTION FUNCTION consulta() DEFINE sql STRING, idx INT CALL data.clear() LET sql = " SELECT c.orden_produccion, c.orden_pedido, a.fecha_oc, b.nombre, '?' AS Fecha_Recibida, e.descripcion AS MATERIAL, f.descripcion AS TIPO, i.cantidad_detalle AS Cantidad, h.descripcion AS ORIGEN_MATERIAL, '?' AS Destino_Orden, j.nom_dpto AS 'Enviar a', i.fecha_prometida, '?' AS 'Fecha Reprogramada', '?' AS 'Asignado a', k.descrip_estatus, a.fecha_entrega FROM prtb00012 a INNER JOIN vetb00004 b ON a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente INNER JOIN prtb00038 c ON a.num_oc = c.orden_pedido INNER JOIN prtb00039 d ON c.orden_produccion = d.orden_produccion INNER JOIN iptb00029 e ON d.cod_grupo = e.cod_grupo INNER JOIN iptb00024 f ON d.cod_tipo = f.cod_tipo INNER JOIN iptb00002 g ON d.cod_n = g.cod_n AND d.cod_grupo = g.cod_grupo AND d.cod_tipo = g.cod_tipo AND d.cod_sec = g.cod_sec INNER JOIN iptb00022 h ON g.cod_cia = h.cod_cia INNER JOIN prtb00043 i ON i.orden_produccion = d.orden_produccion AND i.cod_n = d.cod_n AND i.cod_grupo = d.cod_grupo AND i.cod_tipo = d.cod_tipo AND i.cod_sec = d.cod_sec INNER JOIN adtb00001 j ON i.departamento = j.departamento INNER JOIN prtb00045 k ON i.estatus = k.cod_estatus WHERE " IF fechas.fech_inicial IS NOT NULL AND fechas.fech_final IS NULL THEN LET SQL = SQL || " a.fecha_oc >= ? AND " END IF IF fechas.fech_inicial IS NULL AND fechas.fech_final IS NOT NULL THEN LET SQL = SQL || " a.fecha_oc <= ? AND " END IF IF fechas.fech_final IS NOT NULL AND fechas.fech_final IS NOT NULL THEN LET SQL = SQL || " a.fecha_oc BETWEEN ? AND ? AND " END IF LET SQL = SQL || criterio CLIPPED PREPARE stmt FROM sql DECLARE cur CURSOR FOR stmt IF fechas.fech_inicial IS NULL AND fechas.fech_final IS NULL THEN OPEN cur END IF IF fechas.fech_inicial IS NOT NULL AND fechas.fech_final IS NULL THEN OPEN cur USING fechas.fech_inicial END IF IF fechas.fech_inicial IS NULL AND fechas.fech_final IS NOT NULL THEN OPEN cur USING fechas.fech_final END IF IF fechas.fech_final IS NOT NULL AND fechas.fech_final IS NOT NULL THEN OPEN cur USING fechas.fech_inicial, fechas.fech_final END IF OPEN cur LET idx = 1 FOREACH cur INTO data[idx].orden_prod1, data[idx].orden_ped1, data[idx].fech_oc, data[idx].cliente, data[idx].fech_recibida, data[idx].material, data[idx].terminacion, data[idx].cantidad, data[idx].origen_mat, data[idx].destino_orden, data[idx].enviar_a, data[idx].fecha_compromiso, data[idx].fecha_reprogramada, data[idx].asignado_a, data[idx].estatus, data[idx].fecha_entregado LET idx = idx + 1 END FOREACH END FUNCTION