{ FUNCTION : piking.4gl DESARROLLADO POR: ING. JUAN SOTO FECHA : 1/10/20218 OBJETIVO : Visualizar las transferencias que se realizan } IMPORT util SCHEMA smarmotech DEFINE piking DYNAMIC ARRAY OF RECORD transportista STRING, bodega SMALLINT, nombre_b CHAR(25), bodega2 SMALLINT, nombre_b2 CHAR(25), num_doc INTEGER, fecha DATE, cod_mov SMALLINT, nombre VARCHAR(100), usuario CHAR(60), recibo CHAR(1), impresion CHAR(1), cod_mov_transferencia SMALLINT, cod_transp SMALLINT, sec_transp SMALLINT, placa VARCHAR(50), numero_doc INT END RECORD, ximpresion CHAR(1) DEFINE l_sql_seq STRING, prep_seq_piking SMALLINT DEFINE movi10Dest_JSON DYNAMIC ARRAY OF RECORD area, cod_n, cod_Grupo, cod_tipo, cod_sec INT, id_bodega, id_seccion1 INT, id_tramo1 INT, id_fila, id_pos INT, cantidad1, cantidad2 DECIMAL(12, 5) END RECORD DEFINE movi2 DYNAMIC ARRAY OF RECORD area SMALLINT, descripcion_area VARCHAR(30), cod_n LIKE intb00003.cod_n, cod_grupo LIKE intb00003.cod_grupo, cod_tipo LIKE intb00003.cod_tipo, cod_sec LIKE intb00003.cod_sec, cantidad_1 DEC(12, 5), cantidad_2 DEC(12, 5), cantidad_p DEC(12, 5), unidad_med LIKE iptb00002.unidad_med, descrip_esp CHAR(80), existencia DEC(12, 5), disponible DEC(12, 5), codigo_bloque CHAR(15), id_kit INT END RECORD, negrilla_on, negrillas_of, doble_on, doble_off, comp_on, comp_off, doce, NORMAL CHAR(3), imprime, gclave, gusuario, archivo, DESCRIP_TRANSP, copia CHAR(100), gimpresor, idx1, idx, p_act, numero_msg SMALLINT, tituloBodega STRING, otros_mov1 RECORD num_doc INT, cod_cia SMALLINT, cod_mov SMALLINT, fact_no CHAR(25), cod_transp SMALLINT, sec_transp SMALLINT, cod_tarifa SMALLINT, placa CHAR(25), conduce_no CHAR(25), fecha DATE, descrip_mov CHAR(30), bodega SMALLINT, bodega2 SMALLINT, bodega_d CHAR(30), num_bultos SMALLINT, detalle CHAR(30), cod_sp SMALLINT, cod_sp_sec INT, descrip4 CHAR(30), cod_mov_transferencia INT END RECORD DEFINE otros_mov RECORD num_doc LIKE iptb00006.num_doc, cod_cia LIKE iptb00006.cod_cia, cod_mov LIKE iptb00006.cod_mov, fact_no LIKE iptb00006.fact_no, cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, placa LIKE iptb00006.placa, fecha LIKE iptb00006.fecha, conduce_no LIKE iptb00006.conduce_no, descrip_mov CHAR(80), bodega LIKE iptb00006.bodega, bodega_destino SMALLINT, detalle LIKE iptb00006.detalle, cod_sp LIKE iptb00006.cod_sp, cod_sp_sec LIKE iptb00006.cod_sp_sec, departamento SMALLINT, nombre_depto CHAR(30), cod_mov1 SMALLINT, entrada INT, descrip_mov1 CHAR(40), descrip4 CHAR(30), factura INT END RECORD FUNCTION piking(usuario, clave, impresor, xbodega, sucursal) DEFINE letras RECORD negrillas_on CHAR(6), negrillas_off CHAR(6), doble_on CHAR(6), doble_off CHAR(6), comp_on CHAR(6), comp_off CHAR(6), doce CHAR(6), normal CHAR(6) END RECORD, usuario, clave CHAR(50), impresor, xbodega, sucursal SMALLINT LET gusuario = usuario LET gclave = clave LET gimpresor = impresor DECLARE busca_piking CURSOR FOR SELECT DISTINCT d.nombre, a.bodega, e.descripcion, a.bodega_d, ' ', a.num_doc, a.fecha, a.cod_mov, c.descrip_mov, a.us_crea, a.cond_recep, 'N', c.codigo_mov_transferencia, a.cod_transp, a.sec_transp, a.placa, a.numero_doc FROM iptb00033 a LEFT OUTER JOIN vetb00015 d ON a.cod_transp = d.cod_transp AND a.sec_transp = d.sec_transp, iptb00005 c, intb00009 e, iptb00048 b WHERE a.bodega_d = b.bodega AND b.usuario = usuario AND e.cod_bodega = a.bodega_d AND a.cond_recep = 'N' AND a.cod_mov = c.cod_mov AND c.control_transferencia = "SI" AND a.status_t IS NULL LET idx = 1 FOREACH busca_piking INTO piking[idx].* SELECT a.descripcion INTO piking[idx].nombre_b2 FROM intb00009 a WHERE a.cod_bodega = piking[idx].bodega2 #BRIAN LO PUSO SELECT a.descripcion INTO piking[idx].nombre_b FROM intb00009 a WHERE a.cod_bodega = piking[idx].bodega LET otros_mov1.cod_mov_transferencia = piking[idx].cod_mov_transferencia LET idx = idx + 1 END FOREACH #fin foreach busca_piking IF idx > 1 THEN # FORMULARIO RELACION DE TRANSFERENCIA POR RECIBIR OPEN WINDOW ipfmwd007 AT 1, 1 WITH FORM "ipfmwd013" LET int_flag = FALSE INPUT ARRAY piking WITHOUT DEFAULTS FROM spiking.* ON ACTION visualiza LET p_Act = arr_curr() CALL buscadata(p_act) CALL itemsTransferencia() AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF END INPUT IF int_flag THEN LET int_flag = FALSE CLOSE WINDOW ipfmwd007 RETURN END IF FOR idx1 = 1 TO piking.getLength() LET ximpresion = 'N' IF piking[idx1].recibo = "S" THEN CALL buscadata(idx1) IF piking[idx1].impresion = 'S' THEN LET ximpresion = 'S' END IF CALL adicionaTransf() END IF END FOR CLOSE WINDOW ipfmwd007 END IF LET int_flag = FALSE END FUNCTION FUNCTION itemsTransferencia() DEFINE xcodmov, xbodega STRING, xnumdoc INT DISPLAY "BUSCA DATA ", otros_mov1.num_doc, " ", otros_mov.cod_mov, " ", otros_mov.bodega OPEN WINDOW w1 WITH FORM "ipfmwd013a" DECLARE busca_items CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad_1, a.cantidad_2, b.unidad_med, b.descrip_esp, a.costo, a.bodega_d FROM iptb00033 a, iptb00002 b WHERE a.num_doc = otros_mov1.num_doc AND a.cod_mov = otros_mov.cod_mov AND a.cod_n = b.cod_n AND a.cod_Grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND a.bodega = otros_mov.bodega AND a.bodega_d = otros_mov.bodega_destino AND a.status_t IS NULL AND a.cond_recep = 'N' LET idx = 1 LET xcodmov = "(", otros_mov.cod_mov USING "&&&&", ")", otros_mov.descrip_mov CLIPPED LET xnumdoc = otros_mov1.num_doc LET xbodega = "(", otros_mov.bodega USING "<<<", ")", otros_mov.descrip4 CLIPPED DISPLAY BY NAME xcodmov, xnumdoc, xbodega FOREACH busca_items INTO movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].unidad_med, movi2[idx].descrip_esp, otros_mov1.bodega2 LET idx = idx + 1 END FOREACH #fin del foreach busca_items into movi2 DISPLAY ARRAY movi2 TO detallepiking.* ON ACTION imprimir ATTRIBUTE(TEXT = "Imprime", IMAGE = "printer2") CALL defecto( gusuario, gclave, gimpresor) RETURNING imprime, negrilla_on, negrillas_of, doble_on, doble_off, comp_on, comp_off, doce, normal, archivo, copia START REPORT formu4 TO archivo FOR idx = 1 TO movi2.getLength() OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*) END FOR FINISH REPORT formu4 RUN imprime CALL fgl_winmessage("INFO", "IMPRESION TERMINADA", "INFO") AFTER DISPLAY EXIT DISPLAY END DISPLAY CLOSE WINDOW w1 END FUNCTION FUNCTION adicionaTransf() DEFINE jsonMovi STRING, out_msg VARCHAR(1000), procedimiento STRING, out_result INT, cod_mensaje INT, idseccion, idtramo, idfila, idpos, p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec, p_numero_doc, p_num_oc, p_cod_sp, p_cod_sp_sec, p_cod_transp, p_sec_transp, p_area, p_numreq, p_secVend, p_bodega_d, p_retrabajo, p_Departamento, p_factura INT, p_cantidad_1, p_cantidad_2, costoItem DECIMAL(12, 5), out_cantidad_item, out_cantidad_ubicacion DECIMAL(18, 5), p_detalle, p_direccion VARCHAR(100), p_placa VARCHAR(20), p_fecha DATE, p_cerrada, p_aplicadev, pcontrol_depto VARCHAR(1), p_codigoBloque VARCHAR(25) LET p_fecha = TODAY INITIALIZE p_area TO NULL LET p_cerrada = 'N' LET costoItem = 0 ------------------------------------------------------------------ SELECT a.cod_seccion, a.cod_tramo, a.cod_fila, a.cod_pos INTO idseccion, idtramo, idfila, idpos FROM companias a WHENEVER ERROR CONTINUE BEGIN WORK # Serializa la obtencion del numero de documento para evitar duplicados # bajo concurrencia (con RCSI los lectores ya no toman lock compartido). # La lectura va DENTRO del BEGIN WORK con UPDLOCK+HOLDLOCK para que el # lock se sostenga hasta el COMMIT y un segundo usuario espere su turno. IF NOT prep_seq_piking THEN LET l_sql_seq = "SELECT num_doc FROM iptb00007 WITH (UPDLOCK, HOLDLOCK)", " WHERE bodega = ? AND cod_mov = ?" PREPARE p_seq_piking FROM l_sql_seq LET prep_seq_piking = TRUE END IF LET otros_mov.num_doc = NULL EXECUTE p_seq_piking USING otros_mov.bodega_destino, otros_mov1.cod_mov_transferencia INTO otros_mov.num_doc IF otros_mov.num_doc IS NULL THEN LET otros_mov.num_doc = 0 INSERT INTO iptb00007( num_doc, cod_mov, bodega) VALUES(0, otros_mov1.cod_mov_transferencia, otros_mov.bodega_destino) END IF LET otros_mov.num_doc = otros_mov.num_doc + 1 UPDATE iptb00007 SET num_doc = otros_mov.num_doc WHERE cod_mov = otros_mov1.cod_mov_transferencia AND bodega = otros_mov.bodega_destino DECLARE transferencia_pend CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad_1, a.cantidad_2, a.detalle, a.numero_doc, a.num_oc, a.cod_sp, a.cod_sp_sec, a.cod_transp, a.sec_transp, a.placa FROM iptb00033 a WHERE a.num_doc = otros_mov1.num_doc AND a.bodega = otros_mov.bodega AND a.cod_mov = otros_mov.cod_mov AND a.bodega_d = otros_mov.bodega_destino AND a.cond_recep = 'N' FOREACH transferencia_pend INTO p_cod_n, p_cod_grupo, p_cod_tipo, p_cod_sec, p_cantidad_1, p_cantidad_2, p_detalle, p_numero_doc, p_num_oc, p_cod_sp, p_cod_sp_sec, p_cod_transp, p_sec_transp, p_placa LET p_cantidad_2 = p_cantidad_2 * -1 # CONSTRUIR JSON DEL ITEM INITIALIZE movi10Dest_JSON TO NULL INITIALIZE jsonMovi TO NULL LET movi10Dest_JSON[1].area = p_area LET movi10Dest_JSON[1].cod_n = p_cod_n LET movi10Dest_JSON[1].cod_grupo = p_cod_grupo LET movi10Dest_JSON[1].cod_tipo = p_cod_tipo LET movi10Dest_JSON[1].cod_sec = p_cod_sec LET movi10Dest_JSON[1].id_bodega = otros_mov.bodega_destino LET movi10Dest_JSON[1].id_seccion1 = idseccion LET movi10Dest_JSON[1].id_tramo1 = idtramo LET movi10Dest_JSON[1].id_fila = idfila LET movi10Dest_JSON[1].id_pos = idpos LET movi10Dest_JSON[1].cantidad1 = p_cantidad_1 LET movi10Dest_JSON[1].cantidad2 = p_cantidad_2 LET jsonMovi = util.JSON.stringify(movi10Dest_JSON) # EJECUTAR EL MISMO SP INITIALIZE out_result TO NULL INITIALIZE cod_mensaje TO NULL INITIALIZE out_cantidad_item TO NULL INITIALIZE out_cantidad_ubicacion TO NULL INITIALIZE out_msg TO NULL LET pcontrol_depto = 'NO' LET procedimiento = "EXEC sp_insert_inventario ", "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ", "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ", "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ", "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ", "?, ?, ?, ?" PREPARE smt FROM procedimiento IF STATUS <> 0 THEN ROLLBACK WORK DISPLAY "ERROR PREPARE SP: ", STATUS CALL msg(1679) RETURN END IF EXECUTE smt USING p_num_oc IN, p_cod_n IN, p_cod_grupo IN, p_cod_tipo IN, p_cod_sec IN, p_area IN, p_cantidad_1 IN, p_cantidad_2 IN, otros_mov1.cod_mov_transferencia IN, otros_mov.num_doc IN, otros_mov.num_doc IN, # tmpnumero otros_mov.num_doc IN, # entrada p_fecha IN, otros_mov.conduce_no IN, # conduce p_cod_sp IN, p_cod_sp_sec IN, p_cod_transp IN, p_sec_transp IN, p_placa IN, p_detalle IN, otros_mov.bodega_destino IN, p_cerrada IN, # pcerrada gusuario IN, p_numreq IN, # numreq p_codigoBloque IN, # codigo_bloque p_secVend IN, # secvend p_direccion IN, # direccion p_bodega_d IN, # bodega_d p_retrabajo IN, # retrabajo p_aplicadev IN, # aplicaDev p_Departamento IN, # departamento pcontrol_depto IN, # pcontrol_depto p_factura IN, # factura p_numero_doc IN, costoItem IN, otros_mov.cod_mov IN, otros_mov1.num_doc IN, otros_mov.bodega IN, jsonMovi IN, out_result OUT, cod_mensaje OUT, out_cantidad_item OUT, out_cantidad_ubicacion OUT, out_msg OUT IF STATUS <> 0 THEN ROLLBACK WORK DISPLAY "ERROR SQL EJECUTANDO SP: ", STATUS DISPLAY "ITEM: ", p_cod_n, "-", p_cod_grupo, "-", p_cod_tipo, "-", p_cod_sec CALL msg(1679) RETURN END IF DISPLAY "data piking: ", out_msg IF out_result <> 0 THEN ROLLBACK WORK DISPLAY "ERROR RECEPCION TRANSFERENCIA" DISPLAY "ITEM: ", p_cod_n, "-", p_cod_grupo, "-", p_cod_tipo, "-", p_cod_sec DISPLAY "CODIGO: ", cod_mensaje DISPLAY "CANTIDAD ITEM: ", out_cantidad_item DISPLAY "CANTIDAD UBICACION: ", out_cantidad_ubicacion CALL msg(cod_mensaje) RETURN END IF END FOREACH # TODOS LOS ITEMS FUERON RECIBIDOS UPDATE iptb00033 SET cond_recep = "S", us_mod = gusuario, fech_mod = GETDATE() WHERE cod_mov = otros_mov.cod_mov AND num_doc = otros_mov1.num_doc AND bodega = otros_mov.bodega AND bodega_d = otros_mov.bodega_destino AND cond_recep = "N" IF STATUS <> 0 THEN ROLLBACK WORK CALL msg(1679) RETURN END IF COMMIT WORK IF ximpresion = 'S' THEN # IMPRESION DECLARE busca_data CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_Sec, a.cantidad_1, a.cantidad_2, b.descrip_Esp, b.unidad_med, a.num_doc, a.fecha, a.cod_mov, c.descrip_mov, a.bodega, a.placa, a.cod_transp, a.sec_transp FROM iptb00006 a, iptb00002 b, iptb00005 c WHERE a.num_doc = otros_mov.num_doc AND a.cod_mov = otros_mov1.cod_mov_transferencia AND a.bodega = otros_mov.bodega_destino AND a.cod_mov = c.cod_mov AND a.cod_n = b.cod_n AND a.cod_Grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_Sec = b.cod_Sec LET idx = 1 CALL defecto( gusuario, gclave, gimpresor) RETURNING imprime, negrilla_on, negrillas_of, doble_on, doble_off, comp_on, comp_off, doce, normal, archivo, copia START REPORT formu4 TO archivo FOREACH busca_data INTO movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].descrip_esp, movi2[idx].unidad_med, otros_mov.num_doc, otros_mov.fecha, otros_mov.cod_mov, otros_mov.descrip_mov, otros_mov.bodega, otros_mov.placa, otros_mov.cod_transp, otros_mov.sec_transp OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*) END FOREACH FINISH REPORT formu4 RUN imprime END IF CALL fgl_Winmessage("INFO", "TRANSFERENCIA ADICIONADA CON EXITO", "INFO") END FUNCTION FUNCTION buscadata(i) DEFINE i INT SELECT UNIQUE a.detalle, b.descrip_mov, a.cod_cia, a.bodega, a.bodega_d, c.nombre, a.cod_transp, a.sec_transp, b.codigo_mov_transferencia, a.placa INTO otros_mov.detalle, otros_mov.descrip_mov, otros_mov.cod_cia, otros_mov.bodega, otros_mov.bodega_destino, DESCRIP_TRANSP, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov1.cod_mov_transferencia, otros_mov.placa FROM iptb00033 a, iptb00005 b, vetb00015 c WHERE a.num_doc = piking[i].num_doc AND a.cod_mov = piking[i].cod_mov AND a.cod_mov = b.cod_mov AND a.bodega = piking[i].bodega AND a.status_t IS NULL AND a.cond_recep = 'N' AND c.cod_transp = a.cod_transp AND c.sec_transp = a.sec_transp LET otros_mov.detalle = otros_mov1.detalle LET otros_mov.cod_cia = otros_mov1.cod_cia LET otros_mov1.num_Doc = piking[i].num_doc LET otros_mov.fecha = piking[i].fecha LET otros_mov.cod_mov = piking[i].cod_mov LET otros_mov.bodega = piking[i].bodega LET otros_mov.bodega_destino = piking[i].bodega2 LET tituloBodega = piking[i].nombre_b2 END FUNCTION FUNCTION pendienteRecibir(xbodega) DEFINE xbodega, j INT DECLARE cuenta CURSOR FOR SELECT DISTINCT d.nombre, a.bodega, e.descripcion, a.bodega_d, ' ', a.num_doc, a.fecha, a.cod_mov, c.descrip_mov, a.us_crea, a.cond_recep, c.codigo_mov_transferencia, a.cod_transp, a.sec_transp, a.placa FROM iptb00033 a, iptb00005 c, intb00009 e, vetb00015 d WHERE a.bodega_d = xbodega AND e.cod_bodega = a.bodega_d AND a.cond_recep = 'N' AND a.cod_mov = c.cod_mov AND c.control_transferencia = "SI" AND a.cod_transp = d.cod_transp AND a.sec_transp = d.sec_transp AND a.status_t IS NULL LET j = 0 FOREACH cuenta LET j = j + 1 END FOREACH RETURN j END FUNCTION