From 6f50812bb120e4664e6aea528d8211eab8302f32 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Fri, 28 Aug 2026 19:21:13 -0400 Subject: [PATCH 1/3] Completa Buscar Documentos en inprmt036 y agrega inprmt066 - inprfu000.4gl: corrige reimprime()/busca_info() para que branchen correctamente segun el programa llamante (inprmt046 vs otros). Antes usaban siempre las variables de inprmt046 (otros_mov), causando errores en inprmt036. Se activa y corrige la logica que estaba comentada para el caso generico (Johnny autorizo completarla, confirmado que tampoco funcionaba en produccion). - inprmt066 (Anular Documentos): agrega formulario faltante y el campo Bodega (combo) que no existia. Ensancha el combo para legibilidad. Probado: anulacion de documento real, funciona. --- PROYECTO/indir/infmwd005.4fd | 49 +++---- PROYECTO/indir/infmwd005.per | 4 +- PROYECTO/indir/inprfu000.4gl | 277 ++++++++++++++++++++--------------- PROYECTO/mbsERP.4pw | 1 + 4 files changed, 188 insertions(+), 143 deletions(-) diff --git a/PROYECTO/indir/infmwd005.4fd b/PROYECTO/indir/infmwd005.4fd index 7c6220e..e06d51d 100644 --- a/PROYECTO/indir/infmwd005.4fd +++ b/PROYECTO/indir/infmwd005.4fd @@ -1,33 +1,30 @@ - + - + - - - - - - - - + + + + + + + + -
- -
\ No newline at end of file diff --git a/PROYECTO/indir/infmwd005.per b/PROYECTO/indir/infmwd005.per index f38dd53..1ae1c99 100644 --- a/PROYECTO/indir/infmwd005.per +++ b/PROYECTO/indir/infmwd005.per @@ -15,7 +15,8 @@ LAYOUT (TEXT="ANULAR DOCUMENTOS") { Codigo Movimiento [f0][a ] Numero Documento [f02 ] - Fecha [f5 ] + Fecha [f5 ] + Bodega [bod] [f1][f2 ] } end @@ -28,6 +29,7 @@ f02 = intb00006.num_doc; f1 = formonly.cod_sp,noentry; f2 = formonly.cod_sp_sec,noentry; f5 = intb00006.fecha,noentry,format = "dd/mm/yy"; +COMBOBOX bod = formonly.bodega; instructions delimiters " " end diff --git a/PROYECTO/indir/inprfu000.4gl b/PROYECTO/indir/inprfu000.4gl index 3643832..d0251dc 100644 --- a/PROYECTO/indir/inprfu000.4gl +++ b/PROYECTO/indir/inprfu000.4gl @@ -3,7 +3,8 @@ GLOBALS DEFINE nombre,apellido CHAR(30), xinserta CHAR(1), kprograma varchar(20), - xdescrip_mov VARCHAR(50) + xdescrip_mov VARCHAR(50), + xcod_mov_tmp LIKE intb00005.cod_mov FUNCTION reimprime(xprograma) DEFINE xprograma CHAR(20), @@ -41,148 +42,192 @@ FUNCTION reimprime(xprograma) LET xinserta = 'N' END IF + LET kprograma = xprograma + PREPARE breimprime FROM selec DECLARE bdocumento SCROLL CURSOR FOR breimprime OPEN bdocumento - - FETCH FIRST bdocumento INTO otros_mov.cod_mov,xdescrip_mov, - otros_mov.num_doc,otros_mov.fecha, - datos1.depto_a,pnum_emp,otros_mov.bodega + + IF kprograma = 'inprmt046' THEN + FETCH FIRST bdocumento INTO otros_mov.cod_mov,xdescrip_mov, + otros_mov.num_doc,otros_mov.fecha, + datos1.depto_a,pnum_emp,otros_mov.bodega + ELSE + FETCH FIRST bdocumento INTO xcod_mov_tmp,xdescrip_mov, + datos1.num_doc,datos1.fecha, + datos1.depto_a,pnum_emp,datos1.bodega + END IF IF STATUS = NOTFOUND THEN CALL msg(3) RETURN END IF - LET kprograma = xprograma CALL busca_info() - + MENU "NAVEGACION:" COMMAND "Siguiente" "Busca el siguiente documento" - FETCH NEXT bdocumento INTO otros_mov.cod_mov,xdescrip_mov, - otros_mov.num_doc,otros_mov.fecha, - datos1.depto_a,pnum_emp,otros_mov.bodega + IF kprograma = 'inprmt046' THEN + FETCH NEXT bdocumento INTO otros_mov.cod_mov,xdescrip_mov, + otros_mov.num_doc,otros_mov.fecha, + datos1.depto_a,pnum_emp,otros_mov.bodega + ELSE + FETCH NEXT bdocumento INTO xcod_mov_tmp,xdescrip_mov, + datos1.num_doc,datos1.fecha, + datos1.depto_a,pnum_emp,datos1.bodega + END IF CALL busca_info() - + COMMAND "Primero" "Busca el siguiente documento" - FETCH FIRST bdocumento INTO otros_mov.cod_mov,xdescrip_mov, - otros_mov.num_doc,otros_mov.fecha, - datos1.depto_a,pnum_emp,otros_mov.bodega - CALL busca_info() + IF kprograma = 'inprmt046' THEN + FETCH FIRST bdocumento INTO otros_mov.cod_mov,xdescrip_mov, + otros_mov.num_doc,otros_mov.fecha, + datos1.depto_a,pnum_emp,otros_mov.bodega + ELSE + FETCH FIRST bdocumento INTO xcod_mov_tmp,xdescrip_mov, + datos1.num_doc,datos1.fecha, + datos1.depto_a,pnum_emp,datos1.bodega + END IF + CALL busca_info() COMMAND "Anterior" "Busca el Registrosiguiente documento" - FETCH PREVIOUS bdocumento INTO otros_mov.cod_mov,xdescrip_mov, - otros_mov.num_doc,otros_mov.fecha, - datos1.depto_a,pnum_emp,otros_mov.bodega + IF kprograma = 'inprmt046' THEN + FETCH PREVIOUS bdocumento INTO otros_mov.cod_mov,xdescrip_mov, + otros_mov.num_doc,otros_mov.fecha, + datos1.depto_a,pnum_emp,otros_mov.bodega + ELSE + FETCH PREVIOUS bdocumento INTO xcod_mov_tmp,xdescrip_mov, + datos1.num_doc,datos1.fecha, + datos1.depto_a,pnum_emp,datos1.bodega + END IF CALL busca_info() COMMAND "Ultimo" "Busca el Ultimo Documento" - FETCH LAST bdocumento INTO otros_mov.cod_mov,xdescrip_mov, - otros_mov.num_doc,otros_mov.fecha, - datos1.depto_a,pnum_emp,otros_mov.bodega + IF kprograma = 'inprmt046' THEN + FETCH LAST bdocumento INTO otros_mov.cod_mov,xdescrip_mov, + otros_mov.num_doc,otros_mov.fecha, + datos1.depto_a,pnum_emp,otros_mov.bodega + ELSE + FETCH LAST bdocumento INTO xcod_mov_tmp,xdescrip_mov, + datos1.num_doc,datos1.fecha, + datos1.depto_a,pnum_emp,datos1.bodega + END IF CALL busca_info() COMMAND KEY("T") "reTornar" "Salir de busqueda" EXIT MENU END MENU END FUNCTION FUNCTION busca_info() - - SELECT UNIQUE nom_dpto INTO nombre_d FROM adtb00001 a - WHERE a.departamento = datos1.depto_a and - a.status_t is NULL - LET nombre =NULL - LET apellido = NULL - - SELECT a.nom1_emp,a.apell1_emp INTO nombre,apellido FROM adtb00003 a - WHERE a.num_Emp = pnum_emp - - DISPLAY BY NAME otros_mov.cod_mov,otros_mov.num_doc, - otros_mov.fecha,nombre,apellido - DISPLAY datos1.depto_a TO departamento - DECLARE busca CURSOR FOR - SELECT a.cod_n,a.cod_Grupo,a.cod_tipo,a.cod_Sec,a.cantidad_2, b.unidad_med, b.descrip_Esp,NULL, - a.maquina, a.clasf_bloque - FROM intb00006 a,intb00001 b - WHERE a.num_Doc = otros_mov.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 + IF kprograma = 'inprmt046' THEN + SELECT UNIQUE nom_dpto INTO nombre_d FROM adtb00001 a + WHERE a.departamento = datos1.depto_a and + a.status_t is NULL - LET idx = 1 - IF kprograma = 'inprmt046' THEN - FOREACH busca INTO movi2[idx].cod_n,movi2[idx].cod_grupo, - movi2[idx].cod_tipo,movi2[idx].cod_sec, - movi2[idx].cantidad_2, movi2[idx].unidad_med, - movi2[idx].descrip_esp, movi2[idx].existencia, - movi2[idx].maquina, movi2[idx].clasf_bloque - LET idx = idx + 1 - END FOREACH - - CALL set_count(idx-1) - DISPLAY ARRAY movi2 TO s_movi1.* - BEFORE DISPLAY - CALL maquinaria() - CALL clasf_bloque() - ON ACTION rimprimir - - CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, - doble_on,doble_off,comp_on,comp_off, - doce,normal,archivo,copia + LET nombre =NULL + LET apellido = NULL - # CALL configureoutput('PDF') RETURNING handler - # START REPORT formu46 TO XML HANDLER handler + SELECT a.nom1_emp,a.apell1_emp INTO nombre,apellido FROM adtb00003 a + WHERE a.num_Emp = pnum_emp + + DISPLAY BY NAME otros_mov.cod_mov,otros_mov.num_doc, + otros_mov.fecha,nombre,apellido + DISPLAY datos1.depto_a TO departamento + DECLARE busca CURSOR FOR + SELECT a.cod_n,a.cod_Grupo,a.cod_tipo,a.cod_Sec,a.cantidad_2, b.unidad_med, b.descrip_Esp,NULL, + a.maquina, a.clasf_bloque + FROM intb00006 a,intb00001 b + WHERE a.num_Doc = otros_mov.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 + + LET idx = 1 + FOREACH busca INTO movi2[idx].cod_n,movi2[idx].cod_grupo, + movi2[idx].cod_tipo,movi2[idx].cod_sec, + movi2[idx].cantidad_2, movi2[idx].unidad_med, + movi2[idx].descrip_esp, movi2[idx].existencia, + movi2[idx].maquina, movi2[idx].clasf_bloque + LET idx = idx + 1 + END FOREACH + + CALL set_count(idx-1) + DISPLAY ARRAY movi2 TO s_movi1.* + BEFORE DISPLAY + CALL maquinaria() + CALL clasf_bloque() + ON ACTION rimprimir + + CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, + doble_on,doble_off,comp_on,comp_off, + doce,normal,archivo,copia + + START REPORT formu46 TO archivo + + FOR idx = 1 TO movi2.getLength() + OUTPUT TO REPORT formu46(otros_mov.num_doc,otros_mov.fecha, + otros_mov.cod_mov,otros_mov.bodega,xdescrip_mov, + nombre_d, + movi2[idx].*) + END FOR + FINISH REPORT formu46 + + RUN imprime + END DISPLAY + ELSE + SELECT UNIQUE nom_dpto INTO datos1.nom_dpto FROM adtb00001 a + WHERE a.departamento = datos1.depto_a and + a.status_t is NULL + + DISPLAY BY NAME datos1.num_doc,datos1.fecha,datos1.depto_a,datos1.bodega + DISPLAY datos1.nom_dpto TO nombre_d + + DECLARE busca36 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 + FROM intb00006 a,intb00001 b + WHERE a.num_Doc = datos1.num_doc AND + a.cod_mov = 36 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 = datos1.bodega + + LET idx = 1 + FOREACH busca36 INTO movi[idx].cod_n,movi[idx].cod_grupo, + movi[idx].cod_tipo,movi[idx].cod_sec, + movi[idx].cantidad_1,movi[idx].cantidad_2, + movi[idx].unidad_med,movi[idx].descrip_esp + LET idx = idx + 1 + END FOREACH + + CALL set_count(idx-1) + DISPLAY ARRAY movi TO s_movi1.* + ON ACTION rimprimir + + CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, + doble_on,doble_off,comp_on,comp_off, + doce,normal,archivo,copia + + START REPORT formu36 TO archivo + + FOR idx = 1 TO movi.getLength() + IF movi[idx].cod_n is not null and movi[idx].cod_grupo is not null and + movi[idx].cod_tipo is not null and movi[idx].cod_sec is not null THEN + + LET movi[idx].cantidad_2 = movi[idx].cantidad_2 * -1 + + OUTPUT TO REPORT formu36(datos1.num_doc,datos1.fecha, + datos1.depto_a,datos1.nom_dpto, + movi[idx].*) + END IF + END FOR + FINISH REPORT formu36 + RUN imprime - START REPORT formu46 TO archivo - - FOR idx = 1 TO movi2.getLength() - OUTPUT TO REPORT formu46(otros_mov.num_doc,otros_mov.fecha, - otros_mov.cod_mov,otros_mov.bodega,xdescrip_mov, - nombre_d, - movi2[idx].*) - END FOR - FINISH REPORT formu46 - - RUN imprime END DISPLAY - { ELSE - FOREACH busca INTO movi[idx].cod_n,movi[idx].cod_grupo, - movi[idx].cod_tipo,movi[idx].cod_sec, - movi[idx].descrip_esp,movi[idx].cantidad_2 - LET idx = idx + 1 - END FOREACH - - - DISPLAY ARRAY movi TO s_movi1.* - ON ACTION rimprimir - - CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, - doble_on,doble_off,comp_on,comp_off, - doce,normal,archivo,copia - - # CALL configureoutput('PDF') RETURNING HANDLER - # START REPORT formu36 TO XML HANDLER HANDLER - - START REPORT formu36 TO archivo - - FOR idx = 1 TO movi.getLength() - IF movi[idx].cod_n is not null and movi[idx].cod_grupo is not null and - movi[idx].cod_tipo is not null and movi[idx].cod_sec is not null THEN - - LET movi[idx].cantidad_2 = movi[idx].cantidad_2 * -1 - - - OUTPUT TO REPORT formu36(datos1.num_doc,datos1.fecha, - datos1.depto_a,datos1.nom_dpto, - movi[idx].*) - END IF - END FOR - FINISH REPORT formu36 - RUN imprime - - END DISPLAY - } - END IF + END IF END FUNCTION REPORT formu46(x,xnombre_d,z) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 470a2e3..d63a65e 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -358,6 +358,7 @@ + From 7b1b414629c018e033fafc764f9e8df39473211e Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Fri, 28 Aug 2026 19:39:54 -0400 Subject: [PATCH 2/3] Agrega formulario infmcs006 para inprcs006 Compilo correctamente; pendiente probar por caida del servidor de base de datos (192.168.40.250). --- PROYECTO/mbsERP.4pw | 1 + 1 file changed, 1 insertion(+) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 6a71956..99bb2e0 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -381,6 +381,7 @@ + From ea1493db43fe01af7dbcc991b8628dbd7d28dc92 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Sun, 30 Aug 2026 12:21:46 -0400 Subject: [PATCH 3/3] Prueba y corrige inprcs006 (Movimiento Materia Prima) - Proyecto ahora referencia infmcs006.4fd en vez de .per (el .per clasico no puede declarar las columnas del Tree de filas hijas) - Corrige conflicto de campo "bodega" entre INPUT y CONSTRUCT dentro del mismo DIALOG (error -8090), moviendo la busqueda a ON ACTION - Corrige binding de ComboBox Bodega y campo mensaje_ini (faltaba colName/sqlTabName, causaba Null pointer exception) - Agrega titulo "MOVIMIENTO MATERIA PRIMA" y ensancha combo de bodega - Corrige tabIndex del combo de bodega para navegacion con teclado Co-Authored-By: Claude Sonnet 5 --- PROYECTO/indir/infmcs006.4fd | 12 ++++++------ PROYECTO/indir/infmcs006.per | 6 ++++-- PROYECTO/indir/inprcs006.4gl | 13 +++++-------- PROYECTO/mbsERP.4pw | 2 +- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/PROYECTO/indir/infmcs006.4fd b/PROYECTO/indir/infmcs006.4fd index 643faf4..38bb6a7 100644 --- a/PROYECTO/indir/infmcs006.4fd +++ b/PROYECTO/indir/infmcs006.4fd @@ -12,8 +12,8 @@ - - + + @@ -25,8 +25,8 @@ -
- + +