DEFINE arr_operaciones DYNAMIC ARRAY OF RECORD orden_etapa SMALLINT, id_etapa INT, nombre_etapa VARCHAR(50), id_maquina INT, nombre_maquina VARCHAR(50), operario INT, nombre_operario VARCHAR(50), fecha_inicio DATE, fecha_fin DATE, estado VARCHAR(50) END RECORD FUNCTION crear_orden_produccion(p_orden_pedido , p_cod_n, p_cod_grupo, p_cod_tipo , p_cod_sec ) DEFINE p_orden_pedido, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec INT DEFINE v_id_produccion INT, mensajes STRING -- Verifica si esta orden de pedidos ya tiene una orden de produccion SELECT DISTINCT a.num_oc FROM prtb00007 a WHERE a.num_oc = p_orden_pedido AND a.cod_n = v_cod_n AND a.cod_grupo = v_cod_grupo AND a.cod_tipo = v_cod_tipo AND a.cod_Sec = v_cod_sec IF STATUS <> NOTFOUND THEN LET mensajes = 'ORDEN YA TIENE ORDEN DE PRODUCCION' RETURN FALSE, mensajes END IF SELECT NEXT VALUE for seq_prtb00007 INTO v_id_produccion INSERT INTO prtb00007 ( id_produccion, fecha, tipo_cliente, sec_cliente, sec_vend, orden_pedido, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, us_crea, fech_crea ) VALUES ( v_id_produccion, CURRENT, 1, 1, NULL, p_orden_pedido, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec, 0, USER, CURRENT ) CALL cargar_etapas_para_planificar(v_id_produccion, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec) OPEN FORM f_planificar FROM "planificar_operaciones.per" INPUT ARRAY arr_operaciones WITHOUT DEFAULTS ATTRIBUTES(UNBUFFERED) ON CHANGE operario CALL cargar_nombre_operario(CURRENT operario, CURRENT nombre_operario) ON CHANGE id_maquina CALL cargar_nombre_maquina(CURRENT id_maquina, CURRENT nombre_maquina) ON CHANGE id_etapa CALL cargar_nombre_etapa(CURRENT id_etapa, CURRENT nombre_etapa) END INPUT CALL guardar_operaciones(v_id_produccion, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec) END FUNCTION FUNCTION cargar_etapas_para_planificar(p_id_produccion INT, p_cod_n INT, p_cod_grupo INT, p_cod_tipo INT, p_cod_sec INT) DEFINE p_id_produccion, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec INT DEFINE i INT DECLARE c_hist CURSOR FOR SELECT etapa, codigo, num_emp, estado, orden_etapa FROM prtb00008 WHERE cod_n = p_cod_n AND cod_grupo = p_cod_grupo AND cod_tipo = p_cod_tipo AND cod_sec = p_cod_sec ORDER BY orden_etapa LET i = 1 CALL arr_operaciones.clear() FOREACH c_hist INTO arr_operaciones[i].id_etapa, arr_operaciones[i].id_maquina, arr_operaciones[i].operario, arr_operaciones[i].estado, arr_operaciones[i].orden_etapa CALL cargar_nombre_etapa(arr_operaciones[i].id_etapa, arr_operaciones[i].nombre_etapa) CALL cargar_nombre_maquina(arr_operaciones[i].id_maquina, arr_operaciones[i].nombre_maquina) CALL cargar_nombre_operario(arr_operaciones[i].operario, arr_operaciones[i].nombre_operario) LET i = i + 1 END FOREACH END FUNCTION FUNCTION guardar_operaciones(p_id_produccion INT, p_cod_n INT, p_cod_grupo INT, p_cod_tipo INT, p_cod_sec INT) DEFINE p_id_produccion, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec INT DEFINE i INT FOR i = 1 TO arr_operaciones.getLength() INSERT INTO prtb00008 ( id_produccion, etapa, codigo, num_emp, estado, fecha_inicio, fecha_fin, orden_etapa, us_crea, fech_crea, cod_n, cod_grupo, cod_tipo, cod_sec ) VALUES ( p_id_produccion, arr_operaciones[i].id_etapa, arr_operaciones[i].id_maquina, arr_operaciones[i].operario, arr_operaciones[i].estado, arr_operaciones[i].fecha_inicio, arr_operaciones[i].fecha_fin, arr_operaciones[i].orden_etapa, USER, CURRENT, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec ) END FOR END FUNCTION FUNCTION cargar_nombre_etapa(p_id INT, p_nombre OUT VARCHAR(50)) DEFINE p_id INT DEFINE p_nombre VARCHAR(50) SELECT titulo INTO p_nombre FROM prtb00036 WHERE id_etapa = p_id END FUNCTION FUNCTION cargar_nombre_maquina(p_id INT, p_nombre OUT VARCHAR(50)) DEFINE p_id INT DEFINE p_nombre VARCHAR(50) SELECT nombre INTO p_nombre FROM irtb00009 WHERE id_codigo = p_id END FUNCTION FUNCTION cargar_nombre_operario(p_id INT, p_nombre OUT VARCHAR(50)) DEFINE p_id INT DEFINE p_nombre VARCHAR(50) SELECT nom1_emp || ' ' || apell1_emp INTO p_nombre FROM adtb00003 WHERE num_emp = p_id END FUNCTION