- DATABASE -> SCHEMA y CONNECT TO smarmotech con usuario/clave (args 1 y 2).
- iptb00007 (contador) es por movimiento y bodega: consulta, update e insert lo usan.
- Verificacion de documento duplicado en iptb00006 considera la bodega.
- user,current (Informix) -> SUSER_SNAME(),getdate().
- INSERT INTO iptb00006 con lista explicita de columnas (la tabla ya tiene 50).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
El formulario viejo de ctdir lo sigue usando ctprmt029; prprmt003 usa una copia del .4fd
nuevo de PRDIR con otro nombre para que no choquen en bin.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
El proyecto apuntaba a ctdir/prprmt003.4gl (631 lineas, version vieja). Se cambia a
PRDIR (2398 lineas) y se agregan prtraza, coperacion, cturno, prod_report,
prverificar, los formularios prfmordenped/pendientes/prfmwd010/prfmwd011, la
dependencia FUNCIONES_IR (maquinas) y libgre.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- otrodir/enviacorreo.4gl: TRY/CATCH al ejecutar el procedimiento de correo
(si falla avisa y no se pierde la grabacion; antes una cotizacion con
reserva se perdia completa) y desvio opcional MBS_CORREO_PRUEBA para
ambientes de prueba (en produccion no existe la variable).
- ccprmt001, ccprmt003, ccprrp049, ccprrp054: salida SVG fija -> PDF.
- bin/ccprrp054.4rp: era de otro reporte (reporte54); se usa el de
ccprrp049 (mismo REPORT r_email).
- *.sch: columnas DECIMAL/MONEY con precision > 32 (vistas como
ventas_facturas, analisiscotizaciones, rotacioniventario) bajadas a 32
con la misma escala; Genero daba -6634 y no compilaban veprrp058/059/060.
- mbsERP.4pw: agregado vefmrp060.4fd a FORMULARIOS_VE (-1110).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Si el item ya esta en otra linea, muestra un aviso corto, limpia la fila y
regresa a Clase. Se mantiene el chequeo al guardar como respaldo.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Guardar: si un item (clase/grupo/tipo/medida) aparece en mas de una linea,
aunque cambie el area, muestra error y no guarda (antes solo avisaba y solo
si coincidia el area). Evita que el impreso muestre solo la primera linea.
- Reporte: la fecha/hora sale como dd/mm/yyyy hh:mm y el titulo deja espacio
para que no se corte en el encabezado.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Nueva funcion itemRepetido(): misma area, clase, grupo, tipo y medida entre las
lineas con cantidad. Si hay repetido pregunta si desea continuar; NO vuelve a
la edicion (CONTINUE DIALOG), YES guarda como antes.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- .gitignore: PROYECTO/bin/** ignorado salvo *.4rp (incluye subcarpetas).
- Se sacan del indice 459 archivos de bin (cert/*.pem, filesXML, fotos,
node_modules, estilos, etc.) con git rm --cached; siguen en cada PC.
- Se conservan los 205 disenos de reporte .4rp.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- La salida escribia un .txt en FGLSPOOL (no era PDF ni Excel); vuelve a
configureOutput() con la ventana comun seleccionarsalida() (EXCEL / PDF /
SCREEN), RIGHT MARGIN 142 y sin codigos de impresora matricial.
- BUG de la migracion: la consulta se armaba en selec CHAR(500); al cambiar
rowid por ROW_NUMBER() el texto fijo paso a 463 caracteres y cualquier
filtro de factura+suplidor o de fechas se cortaba (-4145). Ahora se arma
en un STRING local.
Verificado contra la BD .250: factura 068-1AK05 de 22-770 (Debe = Haber =
1,253,019.91) y grupo 22 del 01/08/2026 al 15/08/2026 (4 facturas, total
3,834,979.72) cuadran con SQL; PDF y Excel generados. Build OK con gsmake.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- La salida escribia un XML crudo en FGLSPOOL (no era PDF ni Excel); vuelve
a configureOutput() (modo compatibilidad de GRE, como en 3.20) con la
ventana comun seleccionarsalida() (EXCEL / PDF / SCREEN).
- RIGHT MARGIN 142: la linea llega a la columna 139 y con el ancho por
defecto (132) se cortaba.
Verificado contra la BD .250 (grupo 22, 01/08/2026 al 15/08/2026, Afectar
Mayor = N): PDF y Excel generados; 4 facturas, valor 62,868.52, Debe = Haber
= 3,834,979.72 y totales por cuenta cuadran con SQL. Build OK con gsmake.
No probado: Afectar Mayor = S (graba en cgtb00004).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- La salida escribia un XML crudo en FGLSPOOL (no era PDF ni Excel); vuelve
a configureOutput() (modo compatibilidad de GRE, como en 3.20) con la
ventana comun seleccionarsalida() (EXCEL / PDF / SCREEN).
- Se quita defecto(): solo cargaba codigos de impresora matricial que, si
el menu pasa una impresora, salian como basura en PDF/Excel.
Verificado contra la BD .250 (22-770, 01/08/2026 al 15/08/2026): PDF y Excel
generados; documentos y creditos (38,910.46) cuadran con SQL. Build OK con
gsmake. Sin cambios (igual que 3.20): 'Balance Al' sale .00 porque usa
cptb00001.tipo_doc_cp, vacia en todas las filas; hoja final vacia.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
El reporte se veia con los campos apilados y encimados: las filas
estaban declaradas con length=12 en vez de max y las columnas eran
demasiado angostas.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
grupo_producto() declaraba bgrupos (iptb00071) pero recorria btipoproductos.
Ahora recorre bgrupos y usa el nombre del grupo como valor, que es lo que
guarda iptb00002.grupo1 (CORALINA, TRAVERTINO, CARIBBEAN BLOND, PORTORRO).
Verificado en la .250: alta del producto 209-1819-9-391 con grupo1=TRAVERTINO.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- La salida escribia un XML crudo en FGLSPOOL (no era PDF ni Excel); vuelve
a configureOutput() (modo compatibilidad de GRE, como en 3.20) con la
ventana comun seleccionarsalida() (EXCEL / PDF / SCREEN).
- Se dejan vacios los codigos de impresora matricial (ASCII 14/15/20,
ESC E/F/M/P) del encabezado, que salian como basura en PDF/Excel.
Verificado contra la BD .250 (grupo 22, del 01/08/2026 al 15/08/2026):
PDF, Excel y pantalla generados; balance inicial, debitos, creditos, balance
y total general (credito 62,868.52, balance 105,394.28) cuadran con SQL.
Build OK con gsmake.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
En la pantalla nueva se puede aceptar con OK sin pasar por el campo num_emp, y
nombre_representante solo se calculaba en AFTER FIELD num_emp. Al modificar un
producto, el UPDATE lo grababa vacio. Se recalcula antes de los 5 INSERT/UPDATE
de iptb00002. Verificado en la .250: tras Escoger+OK sin cambios solo cambian
us_mod y fech_mod.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- ipdir/smarmotech.sch: copia del esquema raiz con solo iptb00002 actualizada a
las 49 columnas reales (grupo2, bookmatch, tipos, tipo_material, imp_aduanal,
categoria, es_produccion). Verificado: los 33 programas ip* que compilaban
siguen compilando.
- otrodir/gerentesmarcas.4gl copiado de PROYECTOS; categoria_conteo registrada;
busca_departamento local en ipprmt002 (irdepartamento esta en FUNCIONES_IR).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
El merge 93a4eb4 subio el .4pw con marcadores de conflicto (ambas versiones
pegadas). Se rehizo el merge de 16ef058 y 9bc9170 normalizando los saltos de
linea (16ef058 estaba en LF, el resto en CRLF). Resultado: XML valido, 233
aplicaciones sin duplicados, conserva registros de ipprmt044/045 y los de
adprmt001/017/027 y cpprrp002.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Vuelve a configureOutput() (modo compatibilidad de GRE, como en 3.20) en
lugar del XML crudo en FGLSPOOL, que no era ni PDF ni Excel.
- El formato se elige en la ventana comun seleccionarsalida() (EXCEL / PDF /
SCREEN); se quita del formulario cpfmrp002 el grupo 'Opciones Salidas',
al que no se llegaba con Enter. La opcion MATRICIAL deja de ofrecerse.
- RIGHT MARGIN 145: la linea llega a la columna 143 y con el ancho por
defecto (132) la columna Total salia cortada.
Verificado contra la BD .250 (grupo 25, corte 20/10/2026): PDF de 12 paginas
con totales completos. Excel generado en prueba local; falta confirmarlo en
el GDC.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dos usuarios convirtiendo la misma cotizacion a la vez creaban dos ordenes
(cot 340001 -> 262237 y 262238, ticket 12234). La validacion "cotizacion
tiene orden" corria antes del BEGIN WORK; el segundo usuario la pasaba,
esperaba el bloqueo de prtb00020 y al liberarse insertaba otra orden.
- vedir/veconvierteorden: re-valida dentro de la transaccion, ya con el
bloqueo de prtb00020.
- WEBSERVICES/veconvierteorden: misma re-validacion (no tenia ninguna).
- ccdir/ccprmt003 verifica_orden(): COUNT(*) en vez de SELECT num_oc,
que daba -284 con ordenes duplicadas.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Registra adfmmt027.per (FORMULARIOS_AD) y la aplicacion adprmt027 en
ADMINISTRACION PERSONAL.
- MAIN: se quitan el usuario y la clave escritos en el fuente (kpolanco);
vuelve a usar los argumentos de la linea de comandos.
- adpcmf027: CONVERT(CHAR(10),fecha,103) hacia variables DATE -> columna
directa (-1205).
- La tabla vacaciones no existia en marmotech (.250); se creo con
adprmt027_vacaciones.sql (14 columnas del esquema viejo).
Verificado contra la BD .250: Nuevo, Buscar, Escoger y eLiminar con la
ficha 110 (el registro de prueba se elimino).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Registra adprmt017 y sus formularios (adfmmt017, adfmwd007/008/017/018/019)
en ADMINISTRACION PERSONAL. adfmwd009.per no se registra: solo lo abre
busca_movi(), que nadie llama.
- adfunciones.4gl pasa a la libreria FUNCIONES_ADF (el mismo archivo no puede
estar en dos aplicaciones); noprcs004 y adprmt017 dependen de ella.
- adfmwd008.per: DATABASE rayovac -> smarmotech (-6601).
- adprmt017.4gl: CONVERT(CHAR(10),fecha,103/101) hacia variables DATE -> se
lee la columna fecha directa (-1205); sexo del titular con
ISNULL(cod_par,0)=0 (adtb00021 tiene cod_par/sec_par NULL); un tipo_mov
vacio (AUMENTO SALARIAL, CONTRATACION) ya no se atora en cod_sol.
Verificado contra la BD .250: Nuevo de AUMENTO SALARIAL (accion 5387, empleado
110) graba adtb00020 sin cambiar adtb00003. Capacitacion/Desvinculacion no
probadas: las tablas adtb00059-62 no existen en la .250.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- lqprrp009: se quita la copia local de defecto(); msgrp000 (restaurado por
Johnny el 16/10) ya la trae y duplicaba (-6203).
- prprmt006: se anulan las dos llamadas a pantalla() (encabezado de la
pantalla de texto antigua, no existe en el proyecto y los demas programas
de PRODUCCION no la usan) y se pone titulo de ventana.
- ipprmt044: fotos.4gl ahora incluye ctramo() y cseccion() (copiadas de
otrodir/tramos.4gl y secciones.4gl) porque importar FUNCIONES_IR completa
mete modulos de Repuestos que chocan.
- ipdir/ipautorizareq.4gl: IMPORT FGL greruntime. msgrp000 importa ese
paquete y libgre.42m tambien define fgl_report_*, por lo que cualquier
modulo de libreria que los llamara sin importar quedaba ambiguo (-8401)
cuando el programa lo usaba (solo ipprmt044). Verificado: las 34
aplicaciones que usan FUNCIONES_IP enlazan, salvo ipprmt002 e ipprrp052
que siguen con el problema conocido de columnas de iptb00002 en el
esquema.
Pendiente: probar funcionalmente estos programas.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
lqprrp009 (Liquidacion Repuestos):
- Dependencia FUNCIONESREPORT (msgrp000, seleccionarsalida).
- defecto() copiada al programa (vive en indir/defecto.4gl junto con
msgrp000 duplicado, importarla chocaba -6203); configureOutput ya la
aporta msgrp000.
- Quita Convert(...,103) que llenaba variables DATE (fecha_inicial/final).
- Titulo de ventana "Liquidacion Repuestos".
prprmt006 (Orden Produccion):
- El programa usa prtb08[idx].cod_n_c... como arreglo, pero el global
prtb08 es RECORD LIKE prtb00012.* y el arreglo arrprtb08 se quito de
prprgb000.4gl el 24/08 (68b73cf): 52 errores "Subscripting cannot be
applied". Se define arrprtb08 dentro del propio programa (mismos 7
campos que el form prfmmt006 s_orden) y se renombran 54 referencias.
Nadie mas usa arrprtb08, no hay choque con globales.
ipprmt044 (Transacciones Inventario):
- Faltaba la funcion fotos() de 12 parametros: existe en el respaldo
PROYECTOS/otrodir/fotos.4gl (version de 2017) y la llamada del programa
coincide exactamente. Se agrega a la aplicacion junto con el form
ipfmwd015.4fd. Las llamadas de ipprcs004/_1 a fotos() estan comentadas,
no se afectan. cc_avisadespacho es un procedimiento almacenado, no una
funcion 4GL.
Los tres compilan con fglcomp (esquema smarmotech); falta enlazar y
probar cuando se active la licencia de Genero (FLM-51 vencida).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Cada programa arranca parado en su ruta de seg0005 (cd /d), como en 3.20: ahi estan
cert\, filesXML\, net6.0\, tmp\... que la factura electronica busca con rutas relativas,
y sus .42m. Antes heredaba como directorio de trabajo la carpeta del despliegue del GAR,
que cambia en cada deploy y llego a tener .42m de 3.20 (-6201 Bad version).
- Usa %FGLDIR%\bin\fglrun (el runtime del menu) en vez del primer fglrun del PATH.
- Ya no imprime usuario y clave en la consola/log del GAS.
Probado en .251 (despliegue mbs-20261019-121056): cgprmt001 y cgprmt004 OK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Registra adfmmt001.4fd (FORMULARIOS_AD), adprgb000.4gl (FUNCIONES_AD) y
la aplicacion adprmt001 en el subgrupo ADMINISTRACION PERSONAL.
- INSERT en adtb00001 (14 cols) y adtb00029 (10 cols) con lista de
columnas (error 213 por columnas nuevas en el esquema).
- INPUT/DISPLAY BY NAME limitados a los 7 campos del formulario (-1102
tipo_departamento no existe en el form).
- Escoger ya no actualiza estado_a/estado_m con variables nunca cargadas
(los dejaba en NULL); se quitan del INPUT BY NAME (no estan en el form).
- SELECT UNIQUE -> SELECT DISTINCT (SQL Server).
Verificado contra la BD .250 con el depto 9990: Nuevo, Escoger y eLiminar
en adtb00001/00029/00033.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>