Compare commits

..
154 Commits
Author SHA1 Message Date
jpegueroandClaude Sonnet 5.5 83fffcd31f ccprmt002: no crear un segundo contador PG por vendedor (rompia ccprmt001)
ccprmt001/003/005 leen cctb00003 por tipo_doc esperando una sola fila. En SQL
Server un SELECT INTO que devuelve varias filas da -284 (en Informix tomaba la
primera). Al dar de alta un rango, ccprmt002 insertaba una fila PG por vendedor
y, con ella, nadie podia registrar recibos. Ahora solo crea la fila si no existe
ninguna PG.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 17:10:29 -04:00
jpegueroandClaude Sonnet 5.5 1e64839bf2 veprmt025: Nuevo abre un grupo vacio y los botones Activar/Desactivar se ven
- El bloque AFTER DISPLAY de la lista recargaba el grupo seleccionado (y sus
  clientes) al pulsar Nuevo; ahora solo lo hace si operacion <> "N".
- vefmwd022.4fd: los botones Desactivar y Activar solo tenian icono y quedaban
  invisibles cuando el icono no carga; se les agrega texto.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 16:08:43 -04:00
jpegueroandClaude Sonnet 5.5 539af7f912 CxC: ccprrp018/003/001 con reporte Genero, ccprrp052 y ccprmt002 corregidos
- ccprrp018: agrega MAIN, GROUP BY por nombre, y reemplaza la salida Excel/DDE
  (G:\ESTADO.XLS, DEL G:\ESTADOS) por un reporte Genero (ccprrp018.4rp); carga con
  un solo INSERT...SELECT en tabla temporal.
- ccprrp003: reemplaza el REPORT de texto con codigos de impresora por
  ccprrp003.4rp; agrega por cliente en una consulta (DATEDIFF, mismas reglas).
- ccprrp001: agrega MAIN, GROUP BY por nombre, reporte Genero (ccprrp001.4rp) y
  registra el formulario ccfmrp001 en FORMULARIOS_CC (faltaba, -1110).
- ccprrp052: la validacion del campo Orden estaba al reves.
- ccprmt002: cctb00002.fecha es datetime en SQL Server; el formulario, la variable
  global relacion (ccprgb000) y el CONSTRUCT la manejan como DATE; corrige que
  eLiminar mostrara exito sin actualizar filas.
- mbsERP.4pw: registra los .4rp, libgre y ccfmrp001 (sin credenciales).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 15:23:22 -04:00
Abel López b52ccfae7f Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-27 16:07:27 -04:00
jpegueroandClaude Sonnet 5.5 b09ba2374f prprmt003.4rp: separa los titulos cantidad y medida
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 15:38:57 -04:00
jpegueroandClaude Sonnet 5.5 7f069af336 prprmt003: combo Equipo mas ancho (se cortaba el texto) y el reporte ahora imprime la Cantidad
- prfmmt003pr.4fd: Equipo 30 -> 48 columnas y las columnas siguientes se corren 18.
- prprmt003.4rp: hoja horizontal y nueva columna cantidad entre espesor y medida
  (el cambio de cantidad al modificar un documento no se veia al imprimir).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 15:33:59 -04:00
jpegueroandClaude Sonnet 5.5 c6bcf1b743 gitignore: quita la regla de bin duplicada (ya la agrego Abel)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 13:14:25 -04:00
jpeguero 1829bd1bc7 Merge origin/main (cambios de Abel) en main local 2026-10-27 13:14:06 -04:00
jpegueroandClaude Sonnet 5.5 16bff226c5 alprmt006 (Reporte de Entrada): conexion explicita, SCHEMA, contador por bodega, CURRENT/USER de SQL Server e INSERT con columnas
- 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>
2026-10-27 12:35:51 -04:00
jpegueroandClaude Sonnet 5.5 91a1a4ef96 alprmt006: registra la aplicacion (otrodir/alprmt006.4gl y alfmmt006.per) en el grupo Reportes de Entradas
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 12:17:27 -04:00
jpegueroandClaude Sonnet 5.5 931a814278 prprmt008: registra FUNCIONESREPORT (defecto/seleccionarsalida), libgre y los formularios prfmwd003/prfmwd004
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 12:10:56 -04:00
Abel LópezandClaude Opus 5.5 5b53d994ac noprrp009: salida con cuadro de formato y conteo por movimiento
- La salida pasa del archivo de texto en FGLSPOOL a
  seleccionarsalida()/configureoutput() (Excel/PDF/pantalla); antes se
  dejo en texto porque configureOutput() era un stub que devolvia NULL.
- RIGHT MARGIN 86 (el reporte usa hasta la columna 84).
- NO. REGISTROS se reinicia en cada codigo de movimiento (se acumulaba).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:48:43 -04:00
Abel LópezandClaude Opus 5.5 05d5adf8c9 noprrp008: desbloqueado, registrado en el proyecto y con cuadro de formato
- mbsERP.4pw: se registra noprrp008 (Volantes de Nomina) en NOMINA. El
  build ya pasa con la JVM configurada en el grupo COMUNES.
- noprrp008.4gl: seleccionarSalida() en lugar del 'SVG' fijo; el usuario
  elige Excel/PDF/pantalla (modo IMPRESORA y la parte impresa de EMAIL).
- noprrp008.4rp: formato del acumulado ###,###,###.## (con #,###,###.##
  los montos de 10 millones o mas salian como 2.64775E7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 10:59:44 -04:00
Abel LópezandClaude Opus 5.5 a8c4ab1f78 coprmt025: desbloqueado (JVM en COMUNES, formulario .4fd e impresion)
- mbsERP.4pw: el grupo COMUNES (libreria FUNCIONESEMAIL, que usa
  IMPORT JAVA javax.mail) recibe FGLJVMPATH/JAVA_HOME/PATH como el grupo
  MODULOS; sin eso el build fallaba con -8301 "Can not create java VM".
- mbsERP.4pw: se registra codir/cofmmt025.4fd en lugar del .per (el .per
  no tiene el combo formonly.depto: error -8083 al consultar).
- coprmt025.4gl: la impresion vuelve a configureoutput(salida) como en
  3.20 (escribia un XML suelto en FGLSPOOL); el boton imprimir muestra el
  cuadro de formato (PDF si se cancela).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 10:41:30 -04:00
Abel López 6a72dad748 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-26 16:44:23 -04:00
Abel LópezandClaude Opus 5.5 afc4fd5f04 cpprrp001: exportacion a PDF/Excel con el cuadro de formato
- defecto()/START REPORT TO archivo reemplazado por
  seleccionarsalida()/configureoutput() (salida XML HANDLER).
- Se quita RUN imprime (era para la impresora matricial).
- Codigos de impresora en NULL (salian como basura en PDF/Excel).
- RIGHT MARGIN 138 para que no se recorten las columnas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 16:43:22 -04:00
Abel LópezandClaude Opus 5.5 4762e8c10d coprrp007: exportacion a Excel/PDF con el cuadro de formato
- La salida escribia un XML directo en FGLSPOOL; se vuelve a
  seleccionarsalida()/configureoutput() como en la version 3.20.
- RIGHT MARGIN 148 para que no se recorten las columnas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 16:42:33 -04:00
jpegueroandClaude Sonnet 5.5 c744b6fd61 prprmt003: imprimir fallaba (-1260): el arreglo del reporte no tenia el campo num_oc
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 16:36:53 -04:00
jpegueroandClaude Sonnet 5.5 282c4ce7fa prprmt003: usa su propio formulario prfmmt003pr (el prfmmt003 de ctdir no tiene el screen record s_docs)
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>
2026-10-26 16:33:34 -04:00
jpeguero 313482be68 Limpieza: PROYECTO/bin fuera del repo, excepto los .4rp (indicacion de Johnny Soto) 2026-10-26 16:27:22 -04:00
jpeguero ff2a3df470 Merge origin/main en main local 2026-10-26 16:27:21 -04:00
jpegueroandClaude Sonnet 5.5 48192eb211 prprmt003: usa PRDIR/prprmt003.4gl (version completa) y registra sus modulos y formularios
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>
2026-10-26 16:27:07 -04:00
jpegueroandClaude Sonnet 5.5 f8e97fd09e ipprmt021: consulta el nombre del usuario una sola vez por usuario (antes una consulta por fila)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 15:56:18 -04:00
Abel LópezandClaude Opus 5.5 316496520b coprrp019: exportacion a PDF/Excel sin codigos de impresora
- Codigos de impresora matricial en NULL (salian como basura en PDF/Excel).
- PRINT antes de la raya de cierre: la ultima linea de detalle termina en ";"
  y la raya se pegaba a ella, saliendose de la pagina.
- nom_pt CLIPPED para que Flete/Gastos queden en sus columnas.
- RIGHT MARGIN 165 (el reporte usa hasta la columna 163).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:37:23 -04:00
Abel LópezandClaude Opus 5.5 f48618a23c coprrp004 (Cronologico de Ordenes): exportacion a PDF/Excel/pantalla
- 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 quitan dos ESC P (ASCII 27, ASCII 80) de impresora matricial que el
  reporte imprimia directo y salian como basura en PDF/Excel.
Verificado contra la BD .250 (tipo 01, 01/08/2026 al 15/08/2026): PDF y Excel
generados; 4 ordenes, monto = productos + flete + otros gastos, total
1,515,154.88 = SQL. Build OK con gsmake.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:36:31 -04:00
Abel LópezandClaude Opus 5.5 1d6a2556e5 coprrp001 (Catalogo de Suplidores): exportacion a PDF/Excel/pantalla
- La salida escribia un XML crudo en FGLSPOOL (no era PDF ni Excel); se
  restaura el codigo de 3.20: ventana seleccionarSalida() (EXCEL / PDF /
  SCREEN) con el diseno bin/coprrp001.4rp (fgl_report_loadCurrentSettings).
Verificado contra la BD .250 (22-1 a 22-10, orden numerico): PDF y Excel
generados; 9 suplidores = SQL (22-7 anulado). Build OK con gsmake.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:31:33 -04:00
LuisandClaude Opus 5.5 465205efc6 Pruebas migracion 6.0: correo de prueba, PDF y esquema DECIMAL(38)
- 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>
2026-10-26 10:54:27 -04:00
Abel LópezandClaude Opus 5.5 5841de1da3 Repo: PROYECTO/bin deja de versionarse, salvo los disenos .4rp
- .gitignore: se ignora todo PROYECTO/bin (compilados, imagenes, estilos,
  xml/js de ejecucion, ejecutables, certificados) excepto *.4rp, que son
  fuentes registradas en mbsERP.4pw. Reemplaza las reglas anteriores de
  bin/IMAGENES y bin/*.TXT.
- Se quitan del repositorio (git rm --cached) los 459 archivos de bin que no
  son .4rp; siguen en el disco de cada PC. Se conservan los 205 .4rp.
Nota: bin/cert/*.pem quedan en el historial de git; si son llaves reales
deben cambiarse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:58:12 -04:00
jpegueroandClaude Sonnet 5.5 f6f1c9b8c7 ipprmt021: limita la busqueda a las 500 requisiciones mas recientes (CERRADA traia 35,812 y fallaba con -1326)
Ordena por fecha desc y avisa al usuario cuando hay mas para que use los filtros.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 16:04:57 -04:00
jpegueroandClaude Sonnet 5.5 4a8d31d9d0 ipprmt020: aviso de item repetido a prueba de valores nulos (el texto salia en blanco)
Arma el mensaje por partes, omitiendo las vacias, y usa ASCII 10 para los saltos.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 17:01:47 -04:00
jpegueroandClaude Sonnet 5.5 6dac9550c1 ipprmt020: avisa del item repetido al escribirlo/buscarlo (al dar Tab) y aviso mas compacto
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>
2026-10-22 16:51:42 -04:00
jpegueroandClaude Sonnet 5.5 75d81bdfc7 ipprmt020: no permite repetir un item en la requisicion y arregla la fecha del reporte
- 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>
2026-10-22 16:44:46 -04:00
jpegueroandClaude Sonnet 5.5 b5bf9e2b26 ipprmt020: avisa (sin bloquear) cuando un item se repite en el detalle al guardar
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>
2026-10-22 16:04:21 -04:00
jpegueroandClaude Sonnet 5.5 fa54d93651 PROYECTO/bin fuera del repo, excepto los .4rp (indicacion de Johnny Soto)
- .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>
2026-10-22 14:43:06 -04:00
Abel López 4bfaea0a47 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-21 16:58:41 -04:00
jpegueroandClaude Sonnet 5.5 96c461d4b6 prprmt020: la orden se guardaba en prtb09.num_oc pero se consultaba prtb08.num_oc (REGISTRO NO EXISTE siempre)
INPUT BY NAME y el SELECT INTO ahora usan prtb08, igual que el resto del programa.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 16:43:18 -04:00
Abel LópezandClaude Opus 5.5 3422acc241 cpprrp017 (Validacion de Facturas): exportacion a PDF/Excel y filtro que se cortaba
- 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>
2026-10-21 16:07:13 -04:00
jpegueroandClaude Sonnet 5.5 a226f65b00 ipprmt064: registra el formulario ipfmwd003.4fd (faltaba en el proyecto, error -1110/-8083 con combo almacen)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 12:50:19 -04:00
Abel LópezandClaude Opus 5.5 65ad3fd68c cpprrp011 (Validacion Cuentas Afectadas en Facturacion): exportacion a PDF/Excel/pantalla
- 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>
2026-10-21 12:43:25 -04:00
jpegueroandClaude Sonnet 5.5 2d3d2c4fbc ipprrp010: centra el titulo y lo separa del encabezado del grupo
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 12:35:35 -04:00
Abel LópezandClaude Opus 5.5 8ced6a5498 cpprrp004 (Estado de Cuenta): exportacion a PDF/Excel/pantalla
- 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>
2026-10-21 12:34:10 -04:00
jpegueroandClaude Sonnet 5.5 bf73616f5c ipprrp010: corrige diseno del .4rp (filas length=max, columnas mas anchas, hoja horizontal)
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>
2026-10-21 12:29:06 -04:00
jpegueroandClaude Sonnet 5.5 dead250cf9 ipprmt002: el combo Grupo No. 1 se llenaba con el cursor equivocado (Bienes/Servicio)
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>
2026-10-21 10:28:19 -04:00
Abel LópezandClaude Opus 5.5 c8743d85c8 cpprrp003 (Mayor Auxiliar): exportacion a PDF/Excel/pantalla
- 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>
2026-10-21 10:00:54 -04:00
jpegueroandClaude Sonnet 5.5 4059dc92e6 ipprmt002: recalcula nombre_representante antes de grabar (Escoger lo dejaba en blanco)
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>
2026-10-21 09:40:43 -04:00
jpegueroandClaude Sonnet 5.5 ef6980358e ipprmt002: registra ipfmmt002 e ipfmwd006
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 09:31:27 -04:00
jpegueroandClaude Sonnet 5.5 5e5da7a926 ipprmt002: compila y enlaza (esquema de ipdir con iptb00002 de 49 columnas, funciones faltantes)
- 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>
2026-10-21 09:12:09 -04:00
jpegueroandClaude Sonnet 5.5 7dfed7798c Repara mbsERP.4pw: resuelve conflicto sin resolver del commit 93a4eb4
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>
2026-10-21 08:37:05 -04:00
Luis 93a4eb40f5 lsoto prueba de programas 2026-10-20 21:53:39 -04:00
Luis 16ef05828e lsoto prueba de programas 2026-10-20 21:52:20 -04:00
Abel López 9bc9170788 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-20 17:05:47 -04:00
jpegueroandClaude Sonnet 5.5 9e4b66497c Merge origin/main en main local (ipprmt044, lqprrp009)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:05:19 -04:00
Abel López 7aa4734658 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-20 17:03:29 -04:00
Abel LópezandClaude Opus 5.5 3bb4b58216 cpprrp002 (Saldos por Antiguedad): exportacion a PDF/Excel/pantalla
- 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>
2026-10-20 17:02:56 -04:00
jsoto 073c284449 Merge remote-tracking branch 'origin/main' 2026-10-20 16:05:23 -04:00
jpegueroandClaude Sonnet 5.5 0c3e16d08c ipprmt044: registra ipfmmt045, ipfmwd012/013/013a y vefmwd100 en FUNCIONES_IP
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 16:05:00 -04:00
jsotoandClaude Opus 5.5 9eb74bbea7 JSOTO veconvierteorden/ccprmt003: evita ordenes duplicadas por cotizacion
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>
2026-10-20 16:04:59 -04:00
jpegueroandClaude Sonnet 5.5 1be68d9313 ipprmt044: registra formularios faltantes (ipfmmt044, ipfmwd001/004/009/010/011) y ipautorizareq.4fd en FUNCIONES_IP
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 15:34:20 -04:00
jpegueroandClaude Sonnet 5.5 97b9c16bf1 lqprrp009: inicia el reporte con la primera fila y avisa cuando no hay registros
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 11:09:06 -04:00
Abel LópezandClaude Sonnet 5.5 4e3993daf8 Registra adprmt027 (Formulario de Vacaciones) y corrige bugs
- 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>
2026-10-20 10:20:42 -04:00
Luis 4c9a841473 modificacion factura lsoto 2026-10-19 18:21:13 -04:00
Abel López 9c520ec3ad Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-19 17:24:20 -04:00
Abel LópezandClaude Sonnet 5.5 548dc62d4a Registra adprmt017 (Accion de Personal) y corrige bugs de Genero 6
- 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>
2026-10-19 17:22:34 -04:00
jpegueroandClaude Sonnet 5.5 0f48fc5afc Bloqueados: enlazan prprmt006, ipprmt044 y lqprrp009 (licencia Genero activa)
- 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>
2026-10-19 13:11:45 -04:00
jpegueroandClaude Sonnet 5.5 604f9339ed Bloqueados: lqprrp009, prprmt006 e ipprmt044 (pendiente enlazar y probar)
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>
2026-10-19 13:00:27 -04:00
jsotoandClaude Opus 5.5 7e166ca852 JSOTO MainMenu: lanza cada programa desde su ruta de seg0005 y con el runtime del menu
- 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>
2026-10-19 12:19:21 -04:00
jsoto fcaa47948b Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-19 12:09:59 -04:00
Abel LópezandClaude Sonnet 5.5 31daca8636 Registra adprmt001 (Departamentos) en ADMINISTRACION PERSONAL y corrige bugs
- 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>
2026-10-19 11:24:54 -04:00
jsotoandClaude Opus 5.5 7831e33c28 JSOTO .gitignore: llaves y certificados fuera del repo
Se ignoran *.jks, *.keystore, *.p12, *.pfx, *.pem, *.key, *.crt y *.cer, y se sacan del
repo los 38 que estaban versionados (keystores de Android, certificados de firma, llave
TLS de WEBSERVICES, llaves APNs, etc.). Los archivos siguen en disco.

OJO: al hacer pull, git borra esos archivos de la copia de cada desarrollador; quien los
necesite (firma e-CF, WEBSERVICES, build del APK) debe recibirlos por un medio seguro.
Siguen en el historial de git: se recomienda renovar las llaves expuestas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:35:51 -04:00
jsotoandClaude Opus 5.5 c7325cc87d JSOTO .gitignore: GAR e imagenes de ejecucion fuera del repo
- *.gar: los paquetes se generan en el build (gsmake -t mbs mbsERP.4pw); se sacan del
  repo PROYECTO/distbin/mbs.gar y PROYECTO/seguridad2.0/distbin/Application_GAR.gar.
- PROYECTO/bin/IMAGENES: solo se versionan las imagenes que usan programas y reportes
  (Logo.png, Logo_DCM.png, genero_logo.png, LOGO.JPG, logo1.png y EMPLEADOS/.gitkeep).
  Se sacan del repo fotos personales, temporales (tmpfile.jpg) y archivos subidos en
  ejecucion (imagenessistema/, p.ej. comprobantes de cobro). Los archivos siguen en disco.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:32:04 -04:00
jsotoandClaude Opus 5.5 3a021932f3 JSOTO mbsERP.4pw: cgprmt005 fuera del proyecto y GAR solo con logos de reportes
- Se quita la aplicacion cgprmt005 (Cheques Administrativos RD$) y sus formularios
  cgfmmt005/cgfmwd007: pertenece al proyecto EXTERIOR (conecta a la BD exterior, usa
  funciones de sus librerias y los cheques solo estan vivos en exterior; en marmotech
  el ultimo es de 2018). Las fuentes quedan en cgdir.
- Paquete mbs: el directorio IMAGENES solo incluye los logos que usan los .4rp
  (Logo.png, Logo_DCM.png, genero_logo.png, LOGO.JPG). Con *.png/*.jpg se empaquetaban
  fotos personales, temporales y comprobantes de cobro de bin/IMAGENES.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:27:45 -04:00
Luis 1d3906bcc3 Merge branch 'main' of https://git.fulldetord.com/jsoto/MBS
# Conflicts:
#	PROYECTO/cgdir/edprrp118b.4gl.bak-20261008
#	PROYECTO/irdir/desglose_conteo.4gl
#	PROYECTO/irdir/imprequisicion.4gl
#	PROYECTO/irdir/irautorizareq.4gl
#	PROYECTO/irdir/irbuscaprod.4gl
#	PROYECTO/irdir/irfmmt004.per
#	PROYECTO/irdir/irprcs006.4gl
#	PROYECTO/irdir/irprgb000.4gl
#	PROYECTO/irdir/irprmt002.4gl
#	PROYECTO/irdir/irprmt004.4gl
#	PROYECTO/irdir/irprmt006.4gl
#	PROYECTO/irdir/irprmt009.4gl
#	PROYECTO/irdir/irprmt020.4gl
#	PROYECTO/irdir/irprmt021.4gl
#	PROYECTO/irdir/irprmt036.4gl
#	PROYECTO/irdir/irprmt066.4gl
#	PROYECTO/irdir/irprrp002.4gl
#	PROYECTO/irdir/irprrp003.4gl
#	PROYECTO/irdir/irprrp005.4gl
#	PROYECTO/irdir/irprrp006.4gl
#	PROYECTO/irdir/irprrp009.4gl
#	PROYECTO/irdir/irprrp043.4gl
#	PROYECTO/irdir/irprrp045.4gl
#	PROYECTO/lqdir/lqprrp009.4gl.bak_20261012
#	PROYECTO/lqdir/lqprrp009.rdd.bak_20261012
#	PROYECTO/otrodir/apiclient.4gl.bak_20261014
#	PROYECTO/otrodir/cuentas.4gl
#	PROYECTO/otrodir/irdepartamento.4gl
#	PROYECTO/otrodir/maquinas.4gl
#	PROYECTO/otrodir/productos_incluye.4gl
#	PROYECTO/otrodir/secciones.4gl
#	PROYECTO/otrodir/tramos.4gl
#	WEBSERVICES/productosconteo.4gl.bak_20261012
2026-10-19 10:17:14 -04:00
Luis a67f97271a lsoto 2026-10-19 10:11:40 -04:00
Luis e0722b2e2a lsoto 2026-10-19 10:07:36 -04:00
jsotoandClaude Opus 5.5 a1c15d43f3 JSOTO acprmt001: ALTER de actb00001 y arreglos de MaintainX y lista
- acprmt001_alter_actb00001.sql: crea en actb00001 las columnas cod_sp, cod_sp_sec,
  tipo_activo y activo_padre (NULL). Las usa la version ene-2025 del programa
  (integracion MaintainX) y nunca se habian creado en ninguna base. Aplicado en la .250;
  pendiente en produccion.
- Si MaintainX falla (Adicionar/Modificar con la casilla marcada, Eliminar con
  id_maintainx) se cancela la operacion; antes hacia ROLLBACK y seguia grabando fuera de
  la transaccion (COMMIT -255).
- Eliminar: parametros de ApiMaintainX en el orden de la firma (infoArray, maquinaria).
- Lista: se quita la fila vacia final; getdata usa el codigo como parametro (antes
  "WHERE a.codigo = " sin valor daba -201) y filtra la maquina inactiva en el ON del
  LEFT JOIN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 09:54:32 -04:00
jpegueroandClaude Opus 5.5 f6e41932b1 prprmt011 (Administracion Ordenes): formularios faltantes y fechas -1205
- Registra en FORMULARIOS_PR los formularios que el programa y sus
  librerias abren y no estaban en el proyecto: prfmmt011b, prfmmt011c,
  prfmwd015, prfmcs002, prfmmt021b/c/d, prfmwd002, prfmwd012, prfmwd013.
- prfmmt012 registrado era el de ccdir (otro formulario con el mismo
  nombre); se reemplaza por PRDIR/prfmmt012.4fd (campos iguales al 42f de
  produccion).
- Rescata otrodir/existenciaalmacenes.4fd del respaldo PROYECTOS y lo
  registra en FUNCIONES_PR junto a existenciaalmacenes.4gl.
- prfmwd014.per: s_llegada[9] -> [5]; la pantalla dibuja 5 filas y el
  formulario no compilaba (-2029). Tampoco existia compilado en produccion.
- Quita CONVERT(...,103) en 8 lecturas que llenan campos DATE (consulta
  principal, fecha_llegada, parciales y datos de cotizacion); con dias >12
  el programa terminaba con error al buscar. Se dejan los CONVERT que
  llenan campos CHAR(10).
- Titulo de ventana "Administracion Ordenes".

Verificado: busqueda 01/07/2026-02/07/2026 trae 189 lineas con colores;
botones transacciones y Requisicion funcionan. Pendiente probar
Existencia, flujo, Documentos, fllegada, parciales, visualiza_log,
Reporte Data e Informe. Nota: un mes completo (3,105 lineas) tarda
varios minutos por las consultas por linea (diseno original).
Pendiente Johnny: FORMULARIOS_PR no compila completo por prfmmt006
(columna prtb00007.orden_pedido inexistente) y msgfmwd001 (msgrp000) no
tiene fuente en ningun lado.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 12:05:43 -04:00
jpeguero cb8363561a Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-17 09:31:17 -04:00
jsoto adbbaaee8e Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-16 17:07:28 -04:00
jsotoandClaude Opus 5.5 f363390589 JSOTO cgprmt022 adaptado a MARMOTECH y cgprmt037 fuera del proyecto MBS
cgprmt022 (actualizacion de tasa mensual, cgtb00084; la usa edprrp116):
- La fuente era la version de EXTERIOR, donde vetb00060/vetb00061 estan invertidas
  respecto a marmotech: el combo de moneda ahora sale de vetb00061 y los tipos de
  cliente de vetb00060.
- SELECT INTO tenia 5 columnas para 4 variables.
- Se quita la segunda escritura a marmotech.dbo.cgtb00084 (en marmotech es la misma tabla).
- cgfmmt022.4fd: formulario de EXTERIOR (campo Replicar y tabla de tipos de cliente);
  el de MARMOTECH (2022) no tenia esos campos (-1102).

mbsERP.4pw: se quita la aplicacion cgprmt037 y sus formularios cgfmmt037/cgfmwd006
(solo los usaba ese programa). Pertenece al proyecto EXTERIOR (sistema de tablas de la
BD exterior, aun no iniciado); las fuentes quedan en cgdir.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 17:05:01 -04:00
jpegueroandClaude Opus 5.5 a52b16b8b2 ipprmt005 (Clase): graba Inventario y oculta clases eliminadas
- Alta y modificacion ahora graban cod_inv (Inventario); antes se leia en
  la consulta pero nunca se guardaba (igual en el 42m de produccion 3.20).
- La consulta excluye las clases con status_t = 'E' (eliminadas) y lee
  status_t, para que al consultar una eliminada salga REGISTRO NO EXISTE y
  funcione el control de Escoger sobre registros anulados.
- Impresora se deja sin tocar, como en 3.20: el combo no tiene opciones
  (tampoco en produccion) y guardarlo borraria valores existentes (80-83)
  que usa veconvierteorden para rutear impresion de ordenes.
- Configuracion de ejecucion con el usuario de la responsable (antes usaba
  el de jsoto, por eso grababa ese usuario como creador/modificador).

Verificado: consulta de clase eliminada (211) da REGISTRO NO EXISTE; alta
(212) graba Inventario y usuario jpeguero. Pendiente: probar Escoger y
eLiminar con la nueva version y confirmar en produccion que cod_inv solo
usa los valores del combo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 17:00:54 -04:00
Abel LópezandClaude Sonnet 5.5 b8f403c2e4 Proyecto: elimina el grupo NOMINA vacio de MODULOS
El grupo estaba vacio (despues de MATERIA PRIMA) y no se usara; los
programas de nomina viven en RECURSOS HUMANOS > NOMINA.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 16:53:41 -04:00
Abel López 8a87ebbc10 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-16 16:50:16 -04:00
jsotoandClaude Opus 5.5 0991743a80 JSOTO QA G6 (.250): arreglos en reportes de Repuestos y Contabilidad
Repuestos (irdir):
- irprrp002: cod_sec USING '&&&&' (con '&&&' salia *** en sec >= 1000); encabezado
  con companias.nombre (estaba fijo "EUROSTONE").
- irprrp003: filtro de fecha real con parametros (antes CONVERT(...,103) BETWEEN texto:
  traia movimientos de cualquier ano); codigo CHAR(8)/'&&&&' (los sec >= 1000 se
  mezclaban en un mismo grupo y saldo); RIGHT MARGIN 170 (saldo y balance cortados).
- irprrp004: CONSTRUCT sobre irtb00005.cod_mov (antes intb00005: fallaba con filtro).
- irprrp006: JOIN b.cod_n = c.cod_n (antes c.cod_n = c.cod_n).
- irprrp009: CONSTRUCT calificado con b. (columnas ambiguas en el JOIN).
- irprrp045: sin departamento solo muestra los departamentos del usuario (adtb00056).

Contabilidad (cgdir):
- cgprrp014: saldo de apertura acreedor va positivo a la columna CR (restaba en totales).
- cgprrp009: ya no modifica cgtb00004 (UPDATE departamento=0 y reversion); el NULL se
  trata como 0 en las consultas; corrige idx1 (START REPORT se repetia por fila).
- cgprcs024: el acumulado anterior termina el dia antes de "desde" (se contaba doble).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:50:08 -04:00
Abel LópezandClaude Sonnet 5.5 70c3131e9c Registra noprmt026 (Pago TSS) y migra la salida de DDE a CSV
- Registra nofmmt026.4fd y la aplicacion noprmt026 (con FGLSPOOL) en el
  subgrupo NOMINA.
- GDC 6.00 ya no incluye el modulo WINDDE (error -6331): enviaDDE() guarda
  las celdas en memoria y escribeCSV() genera FGLSPOOL/noprmt026_<tipo>_
  <periodo>.csv con las mismas filas/columnas de la plantilla TSS.
- SQL: se quitan los CONVERT(...,103) sobre variables DATE (-1205), la
  comparacion de fechas como texto (101) y el date+int dentro del SQL
  (-206); rango con fecha_sig = fecha_final+1. FOREACH con THRU (10 cols).
Verificado contra la BD .250: Normal 2026/7 = 636 filas / 33,933,711.43;
Bonificacion cancelados 2026/4 = 229 filas / 1,596,887.98.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 16:47:15 -04:00
Abel LópezandClaude Sonnet 5.5 fc5a23132d Registra noprrp041 (Reporte de Horas Extras) y corrige bugs
- Registra nofmrp041.4fd y la aplicacion noprrp041 en el subgrupo NOMINA.
- nofmrp041.4fd: el del repo no era el de este programa; se usa el de 3.20
  (fecha_inicial, fecha_final, cod_sup, num_emp) con format dd/mm/yyyy.
- noprrp041.4gl: el JOIN comparaba notb00028.supervisor (texto
  '(cod) NOMBRE') con adtb00003.num_emp -> error 245; ahora une por
  notb00028.num_emp. El filtro Empleado filtra b.num_emp. Fechas del SQL
  en yyyymmdd con fecha_final+1 (sin BETWEEN).
Verificado contra la BD .250 (dic-2019: 3,552 horas / 544,076.97).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 15:39:35 -04:00
Luis 54c77ca23e para hacer el pull lsoto 2026-10-16 15:33:34 -04:00
jsotoandClaude Opus 5.5 705fadfdb4 JSOTO QA G6 (.250): arreglos CG/Activos/Repuestos/Informatica, DBDATE, imagenes de reportes y cgprrp008
Programas (bugs encontrados en las pruebas funcionales en la .250):
- acprmt004/acprmt005: MIN/MAX sobre la fecha real (no sobre texto CONVERT 103); acprmt004 alinea rowid.
- cgprrp008: lee cgtb00004 (no la copia cgtb00004_tmp del 14-mar-2026) y solo regenera
  cgtb00016 cuando se corre sin filtro de cuenta.
- cgprrp014: CONSTRUCT con los nombres de campo del form (cod_sp_sc).
- cgfmrp013: defaultValue del combo = cgprrp012.4rp.
- cgprrp022/edprrp029: salida getPreviewDevice() en lugar de SVG fijo.
- edprrp080: no consume numero ED con afecta = NO.
- cgprmt004/022/037, segprmt0001: sin CONNECT "IFMX" (-6366); EXTERIOR via cross-DB.
- irprcs001: agrega CONNECT; irprmt021: columna idestado; irprmt066: la anulacion sin
  MaintainX ya no se deshace (-255); otrodir/bodegas: rama '2' llena origen y destino.
- teprmt001: ajustes G6.

Despliegue G6:
- DBDATE=dmy4 en config/Application.xcf, config/Main_prg.xcf, resources/Application.xcf
  y en el grupo MODULOS del .4pw (los programas lanzados por el menu heredan el entorno).
- 31 .4rp: IMAGEBOX con rutas absolutas file:///E:|F:|C: -> relativas IMAGENES/...;
  se agregan IMAGENES/LOGO.JPG y genero_logo.png.
- Paquete mbs: incluye bin/*.4rp y bin/IMAGENES (antes el GAR no llevaba los reportes).
- resources/TopMenu.4st (irprcs008 daba -8014); bin/cgprcs024.4rp.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:30:24 -04:00
Luis c190582481 para hacer un pull lsoto 2026-10-16 15:28:58 -04:00
jpegueroandClaude Sonnet 5.5 aa7fe013c0 lqprrp004: mensaje de 'sin datos' igual al de Genero 3.20
Con Tipo Reporte Local (sin liquidaciones con liquidada='L' en cgtb00017,
ni en pruebas ni en produccion) el programa se cerraba sin avisar. En 3.20
muestra INFO "NO ENCONTRE INFORMACION CON ESOS PARAMETROS" y vuelve al
menu; se replica el mismo texto.

Verificado contra Genero 3.20 y 6.00.03 con Productos Terminados, 03/2024,
Local.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 11:35:04 -04:00
jpegueroandClaude Sonnet 5.5 e051b498f6 lqprrp004: reemplaza .4rp danado por el de produccion y avisa si no hay datos
- bin/lqprrp004.4rp del repo era un archivo binario ilegible (motor de
  reportes: "Content is not allowed in prolog"). Se reemplaza por el XML de
  produccion (\192.168.40.4\MARMOTECHC$\BIN320, report name liquida1,
  formato 6.00).
- Si la consulta no devuelve filas ahora muestra "NO EXISTEN REGISTROS PARA
  ESTOS PARAMETROS" en vez de cerrarse sin avisar.

Verificado: Productos Terminados, 03/2024, tipo Importacion: 2 paginas en
pantalla y PDF con totales por orden. Tipo Local sin datos en el periodo.
Excel no probado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 11:11:42 -04:00
jpegueroandClaude Sonnet 5.5 5dcc4adf2c Corrige compilacion de lqprrp004 y prprmt011 (modulos LIQUIDACION y PRODUCCION)
lqprrp004:
- El .4gl tenia saltos de linea CR (Mac antiguo): en Genero 6 el comentario
  '######' de la linea 2 se tragaba todo el programa (modulo de 181 bytes,
  "main not defined"). Convertido a CRLF (el diff grande es solo eso).
- numero_ent se usaba en REPORT entrada271 sin definirse (solo existia en
  edprrp0271); definida y asignada = 27 como en la funcion hermana.
- Agrega dependencia FUNCIONESREPORT.

prprmt011 / prprmt021:
- primpresion.impresion(pnumoc) chocaba con impresion(...) de 5 parametros
  de FUNCIONESREPORT (veprrp049_1.4gl). Renombrada a impresion_oc y su unico
  llamador (prprmt021) actualizado. prprmt011 recibe FUNCIONESREPORT.

Verificado con gsmake: lqprrp004, lqprmt002, ipprmt005, prprmt011 y
prprmt021 compilan y enlazan. lqprrp004 consulta datos de 03/2024 pero el
reporte no se genera: bin/lqprrp004.4rp es un archivo binario (no XML) y no
existe version XML en el repo. Pendiente que Johnny lo entregue.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 10:15:59 -04:00
jsotoandClaude Opus 5.5 95aa24c029 JSOTO Restaura configureOutput() de 3.20 en msgrp000 (reportes GRE)
El stub RETURN NULL dejaba sin handler a los ~90 programas que usan
configureOutput(): todos caian con -8083 en START REPORT ... TO XML HANDLER.
Se vuelve a la version de 3.20 y se agrega IMPORT FGL greruntime para que
las funciones fgl_report_* resuelvan aunque la app no declare libgre.42x.

Verificado con gsmake (fgl602) sobre las 79 apps que dependen de
FUNCIONESREPORT: ninguna empeora; las de CxP, Compras y Nomina siguen
compilando y 8 reportes de Ventas pasan a compilar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 17:37:36 -04:00
jsotoandClaude Opus 5.5 d8764b3bda JSOTO Alta y compilacion G6 de programas CG, Cheques, Activos, Tesoreria, Repuestos e Informatica
Merge de main (ipprrp013/014/046/053) con conflictos resueltos:
- mbsERP.4pw: ipprrp014 conserva ambos 4rp y su 4fd.
- bin/ipprrp014.4rp: columnas MARGEN/CLASIF. + titulo IPPRRP014.

Programas agregados a mbsERP.4pw (53 compilan y enlazan con fgl602):
- CONTABILIDAD GENERAL, ACTIVOS FIJOS, REPUESTOS; grupos nuevos TESORERIA,
  CHEQUES e INFORMATICA (segprmt001 = seguridad2.0/segprmt0001.4gl).
- irdir copiado de 3.20 PROYECTOS/irdir a PROYECTO/irdir; helpers de
  PROYECTOS/otrodir en FUNCIONES_IR (departamento -> irdepartamento.4gl).
- Fuentes mas nuevos de 3.20: edprrp118, edprrp080, acprrp010, cgprmt022.
- FUNCIONES: GeneraEntradaDiario.4gl a la version 3.20 + costoLiquidacion.4gl.
- Ajustes G6: existe duplicado en irprgb000, fakeData de 22 campos y
  answer2 en irprmt036/020 (ApiMaintainC), selectOutputSimple en irprcs008,
  schemas de forms a smarmotech, referencia declarada en cgprmt005.
- cgprmt005 sigue sin enlazar: requiere funciones de EXTERIOR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:22:14 -04:00
jpegueroandClaude Sonnet 5.5 ea88c93da3 Corrige ctprrp014 (Reporte Produccion Mensual)
- Titulo de ventana corregido
- START REPORT se ejecuta con la primera fila; si la consulta no devuelve
  datos avisa "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS" en vez de
  generar un reporte en blanco

Verificado con ano 2024 (la BD de pruebas no tiene produccion posterior a
agosto de 2025): 1 pagina con 9 semielaborados por mes y total, en pantalla,
PDF y Excel.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 16:07:11 -04:00
jpegueroandClaude Sonnet 5.5 7d5a853351 Corrige ctprrp004 (Reporte Produccion Diaria)
- Titulo de ventana corregido (mostraba "screen")
- START REPORT se ejecuta con la primera fila; si la consulta no devuelve
  datos avisa "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS" en vez de
  generar un reporte en blanco

Verificado con 01/01/2024 a 12/31/2024: detallado 166 paginas en pantalla,
resumen 57 paginas en PDF. En la BD de pruebas (.40.250) cttb00003 no tiene
produccion posterior a agosto de 2025, por eso rangos de 2026 salen vacios.
Excel no probado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 15:49:06 -04:00
jpegueroandClaude Sonnet 5.5 fc2fa7acac Corrige ipprrp054 (Revision de Conduces con y sin Archivo)
- Registra ipfmrp054.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw
- seleccionarsalida() -> selectOutputSimple()
- Rescata ipprrp054.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/)
- El reporte arrancaba aunque la consulta no devolviera filas y el motor
  fallaba (Failed to find value for the look ahead input-variables);
  ahora START REPORT se ejecuta con la primera fila y, si no hay datos,
  muestra "NO EXISTEN REGISTROS"
- Titulo de ventana corregido

Verificado: 05/01/2026 a 10/15/2026 genera 100 paginas en pantalla y PDF.
Nota: las fechas de este formulario se capturan en formato mm/dd/yyyy
(campo Edit sin selector), comportamiento original del programa.
Excel no probado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 13:16:11 -04:00
jpegueroandClaude Sonnet 5.5 47942191ee Corrige ipprrp051 (Transacciones de Inventario con ubicacion)
- Registra ipfmrp051.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw
  (resuelve msgrp000 y seleccionarSalida)
- busca_departamento() definida localmente (igual que ipprrp047/048)
- seleccionarsalida() -> selectOutputSimple()
- Rescata ipprrp051.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/)
- Titulo de ventana corregido

Verificado: 01/08/2026 a hoy, movimiento 30, 8 paginas en pantalla y PDF.
Excel no probado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 13:04:06 -04:00
jpegueroandClaude Sonnet 5.5 43f9d16e62 Corrige ipprrp048 (Transacciones de Inventario por Departamento)
- Registra ipfmrp048.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw
  (resuelve msgrp000 y seleccionarSalida)
- busca_departamento() definida localmente (igual que ipprrp035/036/047)
- seleccionarsalida() -> selectOutputSimple()
- Rescata ipprrp048.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/)
- Titulo de ventana corregido

Verificado: 01/08/2026 a hoy, movimiento 30, 4 paginas en pantalla y PDF.
Excel no probado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 12:51:54 -04:00
jsoto 659e690af3 JSOTO adicione los 4rp del ipprrp014 2026-10-14 18:30:22 -04:00
jpegueroandClaude Sonnet 5.5 d805fa3164 Corrige ipprrp047 (Operacion por Movimiento Detallado y Valorizado)
- Registra ipfmrp047.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw
  (resuelve msgrp000 y seleccionarSalida)
- busca_departamento() definida localmente (igual que ipprrp035/036)
- seleccionarsalida() -> selectOutputSimple()
- Rescata ipprrp047.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/)
- Titulo de ventana corregido

Verificado en pantalla: 01/05/2026 a hoy, 113+ paginas agrupadas por
movimiento y departamento con totales. PDF y Excel no probados.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 17:00:45 -04:00
jpegueroandClaude Sonnet 5.5 3903f11a92 Corrige ipprrp046 (Relacion de Documentos)
- Registra ipfmrp046.per y la dependencia FUNCIONESREPORT en mbsERP.4pw
- seleccionarsalida()/configureoutput() -> selectOutputSimple() y funcion
  local configurarSalidaClasica(): el configureOutput de msgrp000 es un stub
  que devuelve NULL; el reporte clasico PRINT COLUMN necesita el modo
  compatibilidad (monoespaciado) como el de indir/defecto.4gl
- Titulo de ventana corregido

Verificado: 01/05/2026 a hoy genera 299 paginas en pantalla y PDF.
Excel no probado por el volumen de datos.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 16:29:54 -04:00
jpegueroandClaude Sonnet 5.5 d76e6d7035 Corrige ipprrp014 (Dias de Inventarios Gerente Marcas): Detallado funcional
- Registra ipfmrp014.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw
- Quita convert(char(10),...,103) de fecha_v y fecha_oc (el campo es DATE)
- Titulo de ventana corregido
- Rescata ipprrp014.4rp del respaldo PROYECTOS/bin; el encabezado decia
  IPPRRP013 (texto fijo copiado del otro diseno), corregido a IPPRRP014

Verificado: pantalla, PDF y Excel con el gerente Adolfo Santelises (prueba
con usuario temporal, no incluido en este commit). Pendiente: Resumen por
clase, ipprrp014r.4rp no existe en el repo ni en el respaldo.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 15:47:26 -04:00
Abel LópezandClaude Sonnet 5.5 79a4a4530c Proyecto: reorganiza grupos de RECURSOS HUMANOS
- Programas y librerias de nomina (FORMULARIOS_NO, FUNCIONES_NO y las
  aplicaciones noprmt/noprcs/noprrp) pasan al subgrupo NOMINA.
- FORMULARIOS_AD y FUNCIONES_AD pasan al subgrupo ADMINISTRACION PERSONAL.
Solo cambia la ubicacion en mbsERP.4pw; ids, dependencias y fuentes sin
cambios.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 16:48:11 -04:00
Abel López 0ed9fb6d98 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs
# Conflicts:
#	PROYECTO/mbsERP.4pw
2026-10-08 10:28:43 -04:00
jpegueroandClaude Sonnet 5.5 b6ae121e22 Corrige ipprrp053 (Informe Transacciones Inventarios)
- Registra ipfmrp053.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw
- selectoutput() inexistente -> selectOutputSimple()
- Rescata ipprrp053.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/)
- Titulo de ventana corregido (mostraba "form")

Verificado: rango 05/01/2026 a hoy genera 911 paginas; pantalla, PDF y Excel OK.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:15:20 -04:00
Abel LópezandClaude Sonnet 5.5 ad1a97dd9a noprrp045: corrige expresiones del diseno (.4rp)
Quita espacios dentro de las expresiones RTL de bgColor/fontBold, que el
parser rechazaba al cargar el reporte. Datos verificados contra la BD
(monto y cantidad por mes y sexo, ano 2025).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:06:20 -04:00
jpegueroandClaude Sonnet 5.5 f8df43d126 Corrige ipprrp013 (Dias de Inventario): Detallado y Resumen funcionales
- Registra ipfmrp013.4fd y la libreria FUNCIONESREPORT en mbsERP.4pw
- Quita CONVERT(...,103) en fecha_factura y fech_oc (error -1205)
- Titulo de ventana corregido
- ipprrp013.4rp: formato 7.00, diseno plano con rtl:input-variable
  (los grupos anidados no coincidian con el flujo del REPORT), encabezado
  con compania/fecha/hora y FECHA VENTA enlazada a fecha_v
- Resumen usa ipprrp013r.4rp (agregado por Johnny)

Verificado: Detallado sin filtros (3 paginas) y Resumen clase 124.
Pendiente: alineacion visual de columnas del Detallado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:56:29 -04:00
Abel LópezandClaude Sonnet 5.5 61818beb31 Registra noprrp045 (Formulario Ministerio de Trabajo)
- Registra nofmrp045.per y la aplicacion noprrp045 en mbsERP.4pw.
- Mueve noprrp045.4rp a bin/ (igual que los demas reportes).
- Diseno: el gris/negrita de columnas aplica solo a filas mensuales
  (A/M/C); las secciones 4-8 se ven planas. Declara x.tipo como
  input-variable.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:54:04 -04:00
Abel LópezandClaude Sonnet 5.5 4b2d63007b Proyecto: mover librerias y programas del grupo NOMINA a RECURSOS HUMANOS
Solo cambia la ubicacion en mbsERP.4pw (ids, dependencias y fuentes
sin cambios). El grupo NOMINA queda vacio.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:53:51 -04:00
jsoto 9366fc90e4 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-07 12:12:20 -04:00
jsoto a5ccd3083f JSOTO Adicion grupos ADMINISTRACION PERSONAL Y NOMINA 2026-10-07 12:11:28 -04:00
Luis f574991f0d Merge branch 'main' of https://git.fulldetord.com/jsoto/MBS
# Conflicts:
#	PROYECTO/MBSVG240-marmodesarrollador.4pw
#	PROYECTO/MBSVG240-marmotecnologia.4pw
2026-10-05 23:23:05 -04:00
Luis 2498c785d3 agregue varias funciones para poder ejecutar el programa de facturas lsoto 2026-10-05 23:11:14 -04:00
jsoto ccf12198ba JSOTO ELIMINE LOS NOMBRES DEL PROYECTO DUPLICADOS 2026-10-05 15:03:14 -04:00
jsoto f414a150d9 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs
# Conflicts:
#	PROYECTO/mbsERP.4pw
2026-10-01 17:53:35 -04:00
jsoto 67a5190309 JSOTO ADICIONE EL IPPRRP013R.4RP 2026-10-01 17:48:44 -04:00
Abel López 9ba79096c4 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-10-01 17:03:15 -04:00
Abel LópezandClaude Sonnet 5 80bd203be6 Registra noprrp015 (Prestamos Cooperativa) con reporte moderno
Se agrega noprrp015 al proyecto usando nofmrp015.per.

A diferencia de noprrp009 (donde se opto por salida de archivo de
texto), aqui se reescribio REPORT prestamo de PRINT COLUMN clasico a
PRINTX, y se creo nodir/../bin/noprrp015.4rp (diseno Report Writer
2.0) para soportar pantalla/PDF/Excel, igual que noprrp002/003/039/
043/044. configureOutput() en msgrp000.4gl sigue siendo un stub NULL
(ver noprrp009), asi que se usa fgl_report_loadCurrentSettings +
fgl_report_selectDevice/selectPreview/commitCurrentSettings
directamente.

Se corrige tambien el mismo problema de signo oculto en los montos
(mascaras sin caracter de signo) que se encontro en noprrp009.

Probado con empleado especifico y con varios empleados del mismo
movimiento, verificado contra BD (valor, interes y balance).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 17:02:41 -04:00
Abel LópezandClaude Sonnet 5 8ac18135e5 Registra noprrp009 (Movimientos de Empleados) y corrige varios bugs
Se agrega noprrp009 al proyecto usando nofmrp009.per.

Se corrige conversion CONVERT(CHAR,fecha,103) hacia variables DATE en
3 consultas (mismo patron de error -1205 "Invalid month in date" visto
en otros programas).

Se corrige salida del reporte: REPORT list_cooper usa el estilo
clasico PRINT COLUMN (no PRINTX/.4rp), incompatible con el motor de
reportes moderno (fgl_report_*); configureOutput() en msgrp000.4gl es
un stub que siempre retorna NULL para este caso (documentado en su
propio comentario). Se cambia a escribir un archivo de texto plano en
FGLSPOOL, igual que noprrp038.

Se corrige comparacion de fechas como texto (CONVERT a CHAR en formato
dd/mm/yyyy comparado alfabeticamente) en el modo "Vacaciones Pagadas",
que fallaba al usar un rango de fechas que cruza meses/anos distintos;
se cambia a comparacion real de fechas (>= y < dia_siguiente).

Se corrige formato de fecha faltante en los campos de rango de fecha
del formulario (.per), causando "Invalid month in date" al capturar
un dia mayor a 12 como mes.

Se corrige perdida del valor de fecha final en el encabezado del modo
"Vacaciones Pagadas" (el campo se reutilizaba en el record de fetch y
se sobreescribia con un valor en blanco); se guarda en una variable
separada antes del ciclo.

Se corrige formato de impresion de montos y totales sin signo
(mascaras "#,###,###.##" sin caracter de signo), que ocultaba
silenciosamente los valores negativos mostrandolos como positivos.

Probado en ambos modos (por nomina/movimiento, y por vacaciones
pagadas con rango de fechas cruzando meses), verificado contra BD.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 12:53:49 -04:00
jpeguero 65515b14c2 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-09-30 17:03:17 -04:00
jpegueroandClaude Sonnet 5 4bdcf34a7d Registrar form y dependencia de ipprrp013 (Dias de Inventario), agregar titulo
- Registrar ipfmrp013.4fd en el proyecto (form not found al abrir).
- Agregar dependencia faltante FUNCIONESREPORT (msgrp000,
  seleccionarSalida), no linkeaba.
- Agregar titulo a la ventana (usaba el generico "screen").

El .4rp ya existia en el repo y no necesito cambios. Pendiente probar
funcionalmente (filtros/fechas, totales, exportar) - queda para la
proxima sesion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 16:56:02 -04:00
Abel LópezandClaude Sonnet 5 a7431ef94a Registra noprrp043 (Informe Registro Entrada/Salidas) y corrige bugs
Se agrega noprrp043 al proyecto usando nofmrp043.4fd, reutilizando
FUNCIONESREPORT y libgre.42x.

Se corrige validacion residual de otro programa: comprobaba
"fecha_inicial IS NULL" (variable nunca asignada aqui) y hacia
NEXT FIELD fecha_inicial, campo que no existe en este formulario
(solo existen xfecha1/xfecha2). Esto hacia que el boton "Imprimir"
fallara siempre con "Field not found". Se elimina esa validacion,
ya que la validacion real de xfecha1 esta justo despues.

Se corrige rango de fechas: WHERE checktime BETWEEN fecha1 AND fecha2
(sin hora) excluye registros del ultimo dia con hora posterior a
medianoche. Se cambia a >= fecha1 AND < fecha2+1.

Probado con empleado 5001, rango 14/10/2024-16/10/2024, verificado
contra BD (2 registros de entrada, fecha/hora correctas).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:58:35 -04:00
jpegueroandClaude Sonnet 5 c795294090 Renombrar selectOutput() a selectOutputSimple() para evitar choque
otrodir/selectoutput_simple.4gl definia FUNCTION selectOutput(), mismo
nombre que otrodir/vesalidaimpresora.4gl (ya usado por Abel en
noprcs006, ipprrp002, ipprrp003, ipprrp039, ipprrp044). Al mezclar
ambos commits, cualquier programa que dependiera de FUNCIONESREPORT
mas la libreria de Abel rompia por simbolo duplicado.

Se renombra la funcion (y se actualizan sus 4 unicos llamados: ipprrp005,
ipprrp009, ipprrp035, ipprrp036) sin tocar vesalidaimpresora.4gl, para
no afectar los programas que Abel ya tiene funcionando con esa version.

Recompilados y verificados los 4 programas tras el cambio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:48:03 -04:00
Abel López 5eedb6b174 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-09-29 16:48:14 -04:00
Abel LópezandClaude Sonnet 5 f9a7bb91dc Registra noprrp038 (Generacion File para Bancos)
Se agrega noprrp038 al proyecto reutilizando el formulario nofmrp008
(no tiene formulario propio). Sin bugs de codigo encontrados.

Probado con nomina 2320/Q filtrando al empleado 110 (con cuenta
bancaria real): archivo H/N generado correctamente, RNC de la
empresa y monto neto verificados contra BD. El archivo de retiro en
efectivo (RetMarmo.txt) quedo vacio correctamente ya que el empleado
de prueba si tiene cuenta bancaria.

Nota: el relleno de lineas en blanco al final del archivo de prueba
es un artefacto de filtrar a un solo empleado (PAGE LENGTH usa el
conteo total de la nomina, no el del filtro); en una corrida real sin
filtro de empleado no ocurre.

Se genero el archivo real de prueba en una carpeta temporal fuera del
repositorio (contenia datos bancarios/cedula reales del empleado de
prueba), se verifico y se elimino del disco tras la confirmacion del
usuario.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 16:44:17 -04:00
jpegueroandClaude Sonnet 5 60a4119326 Corregir ipprrp036 (Costos de Calidad con Ventas): form, dependencia,
.4rp faltantes y titulo incorrecto

- Registrar ipfmrp036.4fd en el proyecto.
- Agregar dependencia faltante FUNCIONESREPORT para selectOutput().
- Rescatar ipprrp036.4rp de un backup viejo (PROYECTOS/bin), no existia
  en el repo. El nombre de reporte (inv1) coincidia bien.
- El titulo del reporte decia "ipprrp035" (texto quemado copiado del
  diseño anterior, nunca actualizado) - corregido a "ipprrp036", y el
  subtitulo aclarado a "Reporte costos de calidad (con ventas)".

Verificado con rango de fechas 2026-hoy: abre limpio, muestra
"Facturado ventas a la fecha" en el encabezado, exporta correctamente
en PDF, pantalla y Excel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 15:26:41 -04:00
jpegueroandClaude Sonnet 5 895499a8a8 Corregir ipprrp035 (Costos de Calidad): form, dependencia y .4rp faltantes
- Registrar ipfmrp035.4fd en el proyecto.
- Agregar dependencia faltante FUNCIONESREPORT para selectOutput().
- Rescatar ipprrp035.4rp de un backup viejo (PROYECTOS/bin), no existia
  en el repo. El nombre de reporte (inv1) coincidia bien.

Verificado con rango de fechas 2024-hoy, vista detallada y resumida
(por producto y por departamento): abre limpio, exporta correctamente
en PDF, pantalla y Excel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 15:07:14 -04:00
jpegueroandClaude Sonnet 5 6c20f62de9 Corregir ipprrp009 (Existencia a Diferentes Fechas) y limpiar debug
- Registrar ipfmrp009.4fd y agregar dependencias faltantes
  (FUNCIONESREPORT, FUNCIONES_IN) para msgrp000/selectOutput/defecto/
  fgl_report_*.
- Rescatar ipprrp009.4rp de un backup viejo (PROYECTOS/bin), no existia
  en el repo. El nombre de reporte (existencia_grafica) coincidia bien,
  a diferencia del caso de ipprrp010.
- Quitar dos DISPLAY de depuracion olvidados (mostraban el SQL completo
  y el texto "imprime" en cada fila).

Verificado con producto 29-668-1403-6952, rango 01/01/2026-29/09/2026,
grafico=SI: Existencia 360.00, Costo 3,512.41/3,512.42, Total
1,264,469.40 (cuadra: 360 x costo). Subtotal por origen y total general
correctos. Exportado en PDF, pantalla y Excel sin problemas. Cierre
limpio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 12:44:34 -04:00
jpegueroandClaude Sonnet 5 3923c9dc01 Corregir ipprrp005 (Maestra Costo Standard): dependencias, logo y titulo
- Registrar ipfmrp005.4fd en el proyecto (form not found al abrir).
- Agregar dependencias faltantes FUNCIONESREPORT (msgrp000) para el
  papel/preview del reporte.
- selectOutput() no estaba definida en ningun modulo enlazable sin
  conflicto: la version de otrodir/vesalidaimpresora.4gl tiene una
  firma distinta (devuelve 3 valores) y la de otrodir/msgrp000.4gl
  choca con indir/defecto.4gl al traer ambas. Se extrajo a un archivo
  propio (otrodir/selectoutput_simple.4gl) la version de un solo
  valor de retorno que ya coincidia con lo que espera este programa,
  reutilizando el formulario "Configuration" ya existente.
- ipprrp005.4rp: la ruta del logo era absoluta a la maquina de
  produccion (E:\MARMOTECHC\IMAGENES\logo.png), no existia aqui -
  cambiada a ruta relativa (logo.png, ya esta en PROYECTO/bin).
- Se agrego titulo a la ventana (usaba el generico "screen").

Verificado con producto 29-668-1403-6952, año 2026: Material 3,512.42,
Labor 0.00, Gasto 0.00, Costo STD 3,512.42 - reporte bien formateado
(usa el .4rp original del programa, no uno reescrito). Cierre limpio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 12:22:37 -04:00
jpegueroandClaude Sonnet 5 d1b29437c9 Reescribir ipprrp010 (Operacion Movimientos Detallado): .4rp equivocado
El .4rp que traia el repo (y su copia en el backup viejo) era en
realidad el reporte de "activos" de otro programa (RWFglReportName y
todo el cuerpo no correspondian a REPORT detalle(x)) - por eso nunca
pudo generar nada, ni siquiera despues de arreglar el crash original
de configureOutput().

- Se convirtio el REPORT detalle(x) de PRINT COLUMN clasico a PRINTX
  (siguiendo el patron de ipprrp005, que si funciona), y se escribio un
  .4rp nuevo desde cero con las variables correctas.
- Se quito el subtotal por "Orden" que la migracion habia agregado sin
  incluirlo en el ORDER BY (nunca funciono bien, no existia en 3.20).
- Se agrego titulo a la ventana (usaba el generico "screen").

Pendiente: el acomodo visual de columnas del reporte sale apilado en
vertical en vez de en fila - los datos y subtotales son correctos, pero
falta pulir el layout en el Report Designer (consultado con Johnny).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 12:22:25 -04:00
Abel LópezandClaude Sonnet 5 6ec15cfb3d Registra noprrp044 (Carnet Empleados) y corrige ruta de logo
Se agrega noprrp044 al proyecto usando nofmrp044.4fd, reutilizando
FUNCIONESREPORT y libgre.42x.

Se corrige ruta absoluta hardcodeada en noprrp044.4rp
(file:///F:/MARMOTECHC/BIN320/IMAGENES/marmotech.png, inexistente en
este equipo) por una ruta relativa a IMAGENES/Logo.png, ya presente
en el proyecto.

Probada impresion de carnet (frente y reverso) para un empleado con
foto, verificado contra BD.

Pendiente: la opcion "NO EMPLEADOS" (generacardnet, etiquetas
genericas) usa noprrp044_1.4rp, que no existe en el proyecto (solo
una version renombrada noprrp044_1_otros_ant.4rp de origen incierto).
Se deja sin resolver hasta confirmar con el usuario cual version usar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 16:39:15 -04:00
Abel LópezandClaude Sonnet 5 aeab10ce0d Registra noprrp039 (Reporte Empleados) y corrige bugs de SQL y fecha
Se agrega noprrp039 al proyecto usando nofmrp039.4fd, reutilizando
FUNCIONESREPORT y libgre.42x.

Se corrige "AND  and" duplicado (typo) en las 3 consultas dinamicas
del bloque tipoEmpleados=9 (TODOS los empleados), que producia un
error de sintaxis SQL y bloqueaba completamente esa opcion.

Se corrige CONVERT(CHAR,fech_efec,103) hacia variable DATE en las 5
consultas del programa, mismo patron de error -1205 "Invalid month
in date" ya visto en otros programas.

Se crea PROYECTO/bin/IMAGENES/EMPLEADOS (con .gitkeep), carpeta
faltante donde el programa exporta las fotos de empleados
(foto_empleado.writeFile); sin ella el reporte fallaba con error
-8087 al procesar cualquier empleado con foto guardada.

Probado con empleado especifico y con "TODOS" (activos+inactivos con
foto), verificado contra BD sobre departamento 1000.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 13:11:32 -04:00
Abel LópezandClaude Sonnet 5 0641c6b2be Registra noprrp003 (Herramientas de Empleados) y corrige bugs
Se agrega noprrp003 al proyecto usando nofmrp003.4fd, reutilizando
FUNCIONESREPORT y libgre.42x ya configurados para noprrp002.

Se corrige bug donde el combo "Departamento=TODOS" (valor NULL)
generaba via CONSTRUCT la condicion "e.departamento is null" en vez
de no filtrar, excluyendo a todos los empleados con departamento
asignado (confirmado con debug logging: solo empleados sin
departamento pasaban el filtro). Se agrega neutraliza_depto_null()
para neutralizar esa condicion especifica tras el CONSTRUCT.

Se corrige fila vacia sobrante al final del reporte (el FOREACH deja
un elemento extra en el arreglo dinamico; se agrega
inv.deleteElement(idx), igual que en noprrp002).

Probado con empleado especifico, todos los empleados y filtro por
departamento, verificado contra BD (94 registros totales, 12 para
CONTABILIDAD).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 12:09:57 -04:00
Abel LópezandClaude Sonnet 5 c7442a777b Corrige ancho insuficiente del campo Numero de Nomina en noprrp002
El campo num_nomi en nofmrp002.4fd solo permitia 6 caracteres, pero
existen numeros de nomina de 8 digitos en notb00010 (periodos
codificados como fecha, ej. 27032021). Se amplia a 9 caracteres.

Probado reporte con nomina 2118/Q (14 empleados en notb00008, de los
cuales 12 pertenecen realmente al periodo segun el rango de fechas;
los otros 2 son registros historicos de 2008/2015 con el mismo
numero de nomina por coincidencia de datos antiguos, correctamente
excluidos por el filtro de fecha del reporte).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:48:04 -04:00
Abel LópezandClaude Sonnet 5 7e2f99b50e Registra noprrp002 (Nomina de Pago) y corrige bugs de reporte PDF
Se agrega noprrp002 al proyecto usando nofmrp002.4fd, mas
vesalidaimpresora.4gl (selectOutput2) en la libreria compartida
FUNCIONESREPORT, y externalDependencies libgre.42x para el motor de
reportes.

Se corrige databaseName="marmotech" invalido en nofmrp002.4fd (schema
no registrado en el proyecto) por "smarmotech".

Se corrige bug de tipo de dato: r_output estaba declarado SMALLINT en
noprrp002.4gl, pero selectOutput2() devuelve un STRING ("PDF","SVG",
"XLSX"). Ese desajuste impedia que fgl_report_selectDevice recibiera
el dispositivo correcto, asi que elegir PDF no generaba un PDF real.
Se cambia r_output a STRING.

Probado reporte agrupado de nomina (vista previa en pantalla y
exportacion a PDF real), verificado contra BD sobre empleado 110,
periodo 2320/Q.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:09:33 -04:00
Abel LópezandClaude Sonnet 5 c1719d4b6e Registra noprcs006 (Consulta Balance Por Empleado)
Se agrega noprcs006 al proyecto usando nofmcs006.4fd, mas
FUNCIONESREPORT (seleccionarsalida.4gl) y externalDependencies
libgre.42x, requeridos para las funciones del motor de reportes
(fgl_report_loadCurrentSettings, etc) que usa la opcion Imprimir.

Probada consulta inicial, Ver (balance acumulado por movimiento) e
Imprimir (vista previa de reporte), verificado contra BD sobre
empleado 110, cod_mov=12 (PRESTAMO COOPMAR).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 10:36:47 -04:00
Abel LópezandClaude Sonnet 5 c296da0151 Registra noprcs004 (Consulta Acumulado por Empleado)
Se agrega noprcs004 al proyecto usando nofmcs004.4fd. Se agrega
addir/adfunciones.4gl al Application ya que el programa llama a
calcula_salarios() definida ahi (no en noprrp037.4gl, que tiene una
funcion del mismo nombre pero con firma incompatible/uso de
variables de otro programa).

Se corrige conversion CONVERT(CHAR,fech_efec,103) hacia variable DATE
en la consulta principal, mismo patron de error -1205 "Invalid month
in date" ya visto en otros programas.

Probada consulta principal (datos del empleado, fecha de entrada,
salario promedio diario) y Ver (acumulado por movimiento), verificado
contra BD sobre empleado 110.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 09:45:52 -04:00
Abel López 66a57b4b3c Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-09-25 16:46:21 -04:00
Abel LópezandClaude Sonnet 5 c141af53f2 Registra noprcs002 (Consulta Movimiento por Nomina)
Se agrega noprcs002 al proyecto usando nofmcs002.per. Es un programa
de solo consulta (sin INSERT/UPDATE/DELETE).

Probada busqueda inicial, Ver (detalle de movimientos de un periodo,
incluyendo scroll por teclado para ver mas de 4 filas) y navegacion
Siguiente sobre empleado 110, periodo 2320/Q. Monto Pagado verificado
contra SUM(valor) en BD.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 16:33:40 -04:00
Abel LópezandClaude Sonnet 5 750b9a6bcf Registra noprmt025 (Parametros ISR) y corrige tres bugs bloqueantes
Se agrega noprmt025 al proyecto usando nofmmt025.4fd (tiene los
campos monto_ars/monto_afp que faltan en el .per).

Se corrigen tres bugs que impedian usar el programa:
1. nopcmf023(): CONVERT(varchar,fecha,101) hacia variable DATE,
   mismo patron de error -1205 "Invalid month in date" ya visto en
   otros programas.
2. nopcad023(): la validacion de tipo_emp contra notb00010 usaba un
   SELECT sin INTO/cursor (singleton select), que exige exactamente
   una fila. notb00010 es la tabla de periodos de nomina (un registro
   por periodo), con cientos de filas por tipo_emp, asi que esta
   validacion fallaba siempre con error -284 "A subquery has returned
   not exactly one row", bloqueando por completo la opcion Nuevo. Se
   cambia a SELECT COUNT(*) INTO existe_tipo.
3. nofmmt025.4fd: el campo fecha (Edit widget, formonly) no tenia
   format="dd/mm/yyyy", causando que Genero interpretara la fecha
   tecleada con el formato de fecha por defecto del sistema en vez
   del formato dominicano, dando "Invalid month in date" al capturar
   un dia mayor a 12 como mes.

Probado ciclo completo: Nuevo, Buscar, Escoger y eLiminar sobre
parametro de prueba (numero_nomina=26).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 12:30:28 -04:00
Abel LópezandClaude Sonnet 5 303a722875 Registra noprmt024 (Maestra de Puestos) y corrige duplicado en Nuevo
Se agrega noprmt024 al proyecto usando nofmmt024.per.

Se corrige adpcad023(): tras un INSERT exitoso el codigo hacia NEXT
FIELD nom_puesto para permitir capturar otro puesto, pero sin limpiar
los campos del registro anterior. Combinado con el orden real de
tabulacion del formulario (nivel_sal/salario_min/salario_max quedan
antes que cod_puesto_sirla en el orden de atributos, aunque
visualmente aparecen despues), esto permitia disparar un segundo
INSERT accidental con datos incompletos/residuales del registro
previo. Se agrega CLEAR FORM y reset de los campos tras cada insercion
exitosa, igual que en los demas programas de Nuevo ya corregidos.

Probado ciclo completo: Nuevo (confirmado que ya no duplica),
Buscar, Escoger y eLiminar sobre puesto de prueba.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 11:48:21 -04:00
Abel LópezandClaude Sonnet 5 58909014ab Registra noprmt023 (Maestra de Departamentos) y corrige bug de MaintainX
Se agrega noprmt023 al proyecto usando nofmmt023.4fd. Este programa
conecta a dos bases (smarmotech y marmotech/EXTERIOR via Informix
legado) para sincronizar departamentos en ambas.

Se agrega environment FGLPROFILE al Application para que resuelva la
conexion dual via PROYECTO/config/fglprofile. Se corrige ese archivo:
dbi.database.smarmotech.source apuntaba a un DSN "marmotech250s" que
nunca se creo; se cambia al DSN real existente "marmotech18".

Se corrige eLiminar: llamaba a la API real de MaintainX (DELETE) con
solo validar que id_maintainx no fuera null, ignorando el checkbox
"Enviar a MaintainX" (apicheck). Ahora requiere ambas condiciones.

Probado ciclo completo (Adicionar, Buscar, Escoger, eLiminar,
Departamentos Relacionados) verificando sincronizacion entre
smarmotech y EXTERIOR.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 10:11:49 -04:00
jpegueroandClaude Sonnet 5 3d43efa82f Revertir actualizacion de meta-esquema de smarmotech.sch/4db
La regeneracion via 'Update Meta-schema' del commit anterior perdio 239
tablas que si existian en el esquema anterior (algunas reales, como
departamentos y dgii_rnc, no solo staging temporal), probablemente por
la opcion 'Ignore errors' de la extraccion o por permisos/timeout contra
la base real. Riesgo de romper la compilacion de otros programas del
equipo sin necesidad, y de todas formas no resolvio el bloqueo de
ipprrp052 (columna iptb00002.categoria). Se revierte para no arriesgar
el trabajo de otros mientras se investiga la causa real con Johnny.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 16:21:54 -04:00
jpegueroandClaude Sonnet 5 ecf819671d Corregir ipprrp050 (Conteo Fisico) y actualizar meta-esquema de smarmotech
- Registrar ipfmrp050.4fd en el proyecto (form not found al abrir).
- Agregar dependencia faltante FUNCIONESREPORT a ipprrp050 (no linkeaba,
  llamaba seleccionarSalida() sin tener el modulo).
- Rescatar ipprrp050.4rp de un backup viejo (PROYECTOS/bin), no existia
  en el repo.

Verificado con producto 29-668-1403-6952, bodega ALMACEN PUNTA CANA:
existencia 308.00, coincide con la BD. Cierre limpio con Cancel (usa el
mismo patron DIALOG/ON ACTION que ipprrp052, sin el bug de cierre
colgado de ipprrp002/ipprrp002_1).

Nota aparte (sin corregir, igual que ipprrp052): cuentaitems() nunca se
llama (comentado), variable cuenta sin inicializar para la barra de
progreso - inofensivo pero es codigo muerto.

Ademas: actualizar DATABASE/smarmotech.4db, smarmotech.sch y
PROYECTO/smarmotech.sch desde la BD real (.40.250) via Update Meta-schema
de Genero Studio. Se hizo intentando resolver el bloqueo de ipprrp052
(columna iptb00002.categoria no reconocida por el compilador) - el
esquema ya trae la columna correcta pero el compilador sigue sin
reconocerla incluso tras Rebuild All completo; ipprrp052 sigue
bloqueado, pendiente que Johnny revise el paso de regeneracion del
diccionario que nos falta.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 16:21:16 -04:00
jpegueroandClaude Sonnet 5 1ea7f53344 Corregir ipprrp002_1 (Catalogo Productos Con Costos): cierre colgado y titulo
- ipprrp002_1.4gl: envolver el flujo de captura/reporte en un WHILE,
  mismo bug que ipprrp002 (el programa quedaba colgado tras generar el
  reporte y habia que forzar el cierre; ahora Cancelar cierra limpio y
  se puede volver a buscar sin cerrar el programa).
- ipfmrp002_1.4fd: agregar texto al <Form> ("CATALOGO PRODUCTOS CON
  COSTOS"), la ventana no tenia titulo y mostraba "screen" por defecto.

Verificado con producto 29-668-1403-6952 (1 pagina, existencia 360.00,
costo 3,512.42, precio 7,379.02, coincide con la BD) y con el catalogo
completo sin filtro (mismo volumen que ipprrp002, generacion correcta
aunque lenta por las consultas adicionales que hace por fila).

Nota aparte (sin corregir): los campos "Origen" y "Lista Precios" en
pantalla no estan en el INPUT BY NAME ni se usan en el query (que trae
siempre ventas='1' y cod_lista=1 hardcodeados) - no seleccionables,
funcionalidad a medio conectar igual que "Anio" en ipprcs042.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 12:10:43 -04:00
Abel López 899f4ee138 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-09-22 16:50:12 -04:00
Abel LópezandClaude Sonnet 5 37209b5009 Registra noprmt019 (Cambio de Departamento)
Se agrega noprmt019 al proyecto usando nofmmt019.per. Probado cambio
de departamento sobre empleado 110 (1000 -> 2100 -> 1000), verificado
que se propaga a adtb00003 y a los movimientos fijos en notb00003.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 13:38:15 -04:00
jpegueroandClaude Sonnet 5 c00ba4b920 Corregir ipprrp002 (Catalogo Productos Terminados) y registrar assets de ipprrp002_1/ipprrp052
- Rescatar de un backup viejo (PROYECTOS/bin) los .4rp que faltaban en el
  repo: ipprrp002.4rp, ipprrp002_1.4rp, ipprrp002_2.4rp e ipprrp052.4rp.
  Sin ellos el reporte nunca podia generarse (fgl_report_loadCurrentSettings
  fallaba y el programa hacia EXIT PROGRAM).
- Registrar en mbsERP.4pw los formularios ipfmrp002.4fd, ipfmrp002_1.4fd
  e ipfmrp052.4fd, y los .4rp anteriores: existian en el repo pero nunca
  se habian agregado al proyecto.
- ipprrp002.4gl: cambiar `cuenta` de SMALLINT a INTEGER, causaba
  "Value too large to fit in a SMALLINT" al generar el catalogo completo
  (43,796 productos sin filtro).
- ipprrp002.4gl: envolver el flujo de captura/reporte en un WHILE para
  permitir buscar de nuevo sin cerrar el programa, y para que Cancelar
  termine limpio (antes, al terminar de generar el reporte el programa
  quedaba colgado y habia que forzar el cierre).

Verificado con producto 29-668-1403-6952 (1 pagina, ciclo buscar-reporte-
cerrar limpio) y catalogo completo sin filtro (43,796 productos, 1093
paginas, generacion correcta).

Nota aparte (sin corregir): sin filtro de codigo el programa genera el
catalogo completo (43,796 productos) sin ninguna advertencia; evaluar si
deberia exigir un filtro minimo. Campo "Anio" en pantalla sin uso en el
codigo. ipprrp002_1 e ipprrp052 tienen sus assets registrados pero aun
no se han probado funcionalmente.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 12:58:06 -04:00
Abel LópezandClaude Sonnet 5 31fbc9a3b9 Registra noprmt018 (Pago Prest. en Efectivo) y corrige bug de fecha
Se agrega noprmt018 al proyecto usando nofmmt018.per.

Se corrige conversion CONVERT(CHAR,fecha,103) hacia variable DATE en
nopcmf018(), mismo patron de error -1205 "Invalid month in date"
encontrado en otros programas de nomina.

Probado ciclo completo: Adicionar, Consultar-modificar/Buscar,
Escoger y eLiminar sobre empleado 4124 (cod_mov=12).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 12:44:22 -04:00
jpeguero 7bda7659a6 Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-09-21 17:03:01 -04:00
jpegueroandClaude Sonnet 5 e33dad06b8 Registrar formularios de ipprrp002/ipprrp002_1 (Catalogo Productos Terminados)
ipfmrp002.4fd e ipfmrp002_1.4fd existian en el repo pero nunca se habian
agregado a mbsERP.4pw, mismo patron visto en ipprcs004_1/ipprcs042.

Pendiente aparte: los reportes ipprrp002.4rp e ipprrp002_2.4rp (usados
por fgl_report_loadCurrentSettings) no existen en el repo ni en su
historial, el programa no puede completar la generacion del reporte
hasta que se consigan o se rehagan en Report Studio. Consultado con
Johnny, sin respuesta aun.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 17:01:21 -04:00
Abel López 12bb4e837b Merge branch 'main' of https://git.fulldetord.com/jsoto/mbs 2026-09-21 16:56:47 -04:00
Abel LópezandClaude Sonnet 5 fc49b30714 Registra noprmt016 (Act./Desact. Empleado)
Se agrega noprmt016 al proyecto usando nofmmt016.per. Probado
Activar/Desactivar sobre empleado 110, verificado status_t en
adtb00003 en ambos sentidos.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 16:55:33 -04:00
Abel LópezandClaude Sonnet 5 5baf191a88 Registra noprmt011 y corrige bugs de fecha y borrado de cuota compartida
Se agrega noprmt011 (Control Prestamos y Facturas) al proyecto usando
nofmmt011.4fd (nofmmt011.per no tenia el campo valor_cuota requerido).

Se corrige conversion CONVERT(CHAR,fecha,103) hacia variable DATE en
nopcmf011(), que causaba error -1205 "Invalid month in date" al
navegar con Siguiente/Anterior cuando el dia del mes era mayor a 12.

Se corrige eLiminar: el DELETE FROM notb00003 era incondicional y
borraba la cuota compartida del empleado+movimiento aunque quedaran
otros documentos activos en notb00011 dependiendo de ella. Ahora solo
se borra si no quedan documentos activos para ese empleado+movimiento.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 11:45:55 -04:00
841 changed files with 75621 additions and 265937 deletions
+19 -1
View File
@@ -34,7 +34,6 @@ mydatabase.db
# ── Logs de ejecución ──
*.log
*.err
PROYECTO/bin/*.TXT
# ── Spool de reportes (salida temporal de impresión) ──
PROYECTO/spool/
@@ -49,3 +48,22 @@ desktop.ini
# NOTA: se CONSERVAN en el repo -> *.4gl *.per *.4fd *.4pw *.4st *.4ad
# *.sch *.4db (esquema), imagenes (*.png *.jpg), README, docs.
# -- Paquetes GAR: se generan en el build (gsmake -t mbs mbsERP.4pw), no van al repo --
*.gar
# -- PROYECTO/bin: no se versiona (compilados, imagenes, ejecutables, datos de ejecucion) --
# salvo los disenos de reporte .4rp, que son fuentes registradas en mbsERP.4pw.
PROYECTO/bin/**
!PROYECTO/bin/**/
!PROYECTO/bin/**/*.4rp
# -- Llaves y certificados: NUNCA en el repo (se entregan aparte a quien los necesite) --
*.jks
*.keystore
*.p12
*.pfx
*.pem
*.key
*.crt
*.cer
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+117
View File
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ManagedForm fileVersion="31400" gstVersion="3140a" name="ManagedForm" uid="{8f013df5-71e9-4123-ace5-57cb0d559141}">
<AGSettings>
<DynamicProperties version="2"/>
</AGSettings>
<Record name="scr_costos" uid="{1072830e-e04e-4a63-8f41-4aa8efa5ffaa}">
<RecordField colName="tipo" fieldIdRef="11" name="tipo" sqlTabName="formonly" uid="{d9350682-2ead-47c0-8563-a7d127b1ec5d}"/>
<RecordField fieldIdRef="5" name="codigo" uid="{7225c2f2-2ca5-4952-9439-39d6105683b2}"/>
<RecordField colName="emp_no" fieldIdRef="8" name="emp_no" sqlTabName="formonly" sqlType="DECIMAL" uid="{ada70def-e69a-4c50-bd69-1fb91fd596cf}"/>
<RecordField colName="h_directa" fieldIdRef="12" name="h_directa" sqlTabName="formonly" uid="{f0d26a13-bbd5-4de4-a3ad-9e26feb8ccb0}"/>
<RecordField colName="h_indirecta" fieldIdRef="13" name="h_indirecta" sqlTabName="formonly" uid="{d3a40df7-5349-4812-82bc-a96aa2c4027b}"/>
<RecordField colName="e_directa" fieldIdRef="14" name="e_directa" sqlTabName="formonly" uid="{d24a8ff5-f9b6-4fbb-a667-451a948c3f7b}"/>
<RecordField colName="e_indirecta" fieldIdRef="15" name="e_indirecta" sqlTabName="formonly" uid="{9a0f1103-7db4-43c3-8147-f715eab9a3c1}"/>
<RecordField colName="cod_prod" fieldIdRef="9" name="cod_prod" sqlTabName="formonly" uid="{e1b64282-cd3b-4615-bcb8-fde9313110e2}"/>
<RecordField fieldIdRef="20" name="lado1" uid="{10db271d-bbce-4ae7-9e10-144888550c81}"/>
<RecordField fieldIdRef="21" name="lado2" uid="{f134fcc5-822c-4f75-8b71-70263f00284c}"/>
<RecordField fieldIdRef="22" name="lado3" uid="{98f897e4-b702-4356-bf11-25e1b93bb2ab}"/>
<RecordField colName="cantidad" fieldIdRef="17" name="cantidad" sqlTabName="formonly" uid="{166ac25b-ad15-45f8-8b8e-7862ac3bccfe}"/>
<RecordField fieldIdRef="23" name="medida1" uid="{c1b4ea3b-4927-423f-8dfd-a3dc80f64090}"/>
<RecordField colName="codigo_bloque" fieldIdRef="2" name="codigo_bloque" sqlTabName="formonly" uid="{d03b323d-b9bb-4eea-9514-c14bcccd7a56}"/>
<RecordField colName="turno" fieldIdRef="0" name="turno" sqlTabName="formonly" uid="{cea5543d-5e89-46ba-a306-d6d732238f3a}"/>
<RecordField fieldIdRef="24" name="depto_receptor" uid="{33d0c1ec-7dc1-4ec0-b489-b23701305b3c}"/>
<RecordField fieldIdRef="28" name="ref" uid="{e955cc32-7b71-4cec-90cd-379631ca8437}"/>
<RecordField fieldIdRef="50" name="num_oc" uid="{b2c3d4e5-0050-4a00-9050-0d0c0b0a0950}"/>
</Record>
<Record name="record1" uid="{af6b78f0-189c-4e68-8607-46f11a433423}">
<RecordField colName="num_doc" fieldIdRef="4" name="num_doc" sqlTabName="formonly" uid="{2bec5bf1-0623-4163-9235-ba4b878a0590}"/>
<RecordField colName="fecha" fieldIdRef="7" name="fecha" sqlTabName="formonly" sqlType="DATE" uid="{77a2edd0-719f-44f1-83dc-e532b159653f}"/>
<RecordField colName="factor" fieldIdRef="6" name="factor" sqlTabName="formonly" uid="{6dee7883-621c-45f7-8519-0cf206a8f484}"/>
<RecordField colName="departamento" fieldIdRef="3" name="departamento" sqlTabName="formonly" uid="{b4139611-41fc-494f-9bba-b6dee92f1e87}"/>
<RecordField colName="descripcion" fieldIdRef="18" name="descripcion" sqlTabName="formonly" uid="{f5f4d146-6d13-4504-b957-e3f116446c65}"/>
<RecordField colName="medida" fieldIdRef="16" name="medida" sqlTabName="formonly" uid="{f4fcca96-d1c9-43fa-a343-4b1ed7441d3a}"/>
<RecordField colName="nombre" fieldIdRef="19" name="nombre" sqlTabName="formonly" uid="{0b987b65-36cf-4e02-91a5-46831177aa0a}"/>
<RecordField fieldIdRef="27" name="cod_mov" uid="{611b980b-7ec3-480b-82f2-c4509213bf31}"/>
</Record>
<Record name="s_docs" uid="{a1b2c3d4-0001-4a00-9001-0d0c0b0a0901}">
<RecordField fieldIdRef="40" name="d_num_doc" uid="{a1b2c3d4-0002-4a00-9002-0d0c0b0a0902}"/>
<RecordField fieldIdRef="41" name="d_fecha" uid="{a1b2c3d4-0003-4a00-9003-0d0c0b0a0903}"/>
<RecordField fieldIdRef="42" name="d_departamento" uid="{a1b2c3d4-0004-4a00-9004-0d0c0b0a0904}"/>
<RecordField fieldIdRef="43" name="d_movimiento" uid="{a1b2c3d4-0005-4a00-9005-0d0c0b0a0905}"/>
<RecordField fieldIdRef="44" name="d_estado" uid="{a1b2c3d4-0006-4a00-9006-0d0c0b0a0906}"/>
<RecordField fieldIdRef="45" name="d_bloques" uid="{a1b2c3d4-0007-4a00-9007-0d0c0b0a0907}"/>
</Record>
<Form gridHeight="20" gridWidth="258" name="prfmmt003" style="basic" text="CREACION DOCUMENTO PRODUCCION">
<ToolBar name="toolbar1">
<ToolBarItem comment="Nuevo Documento" image="new" name="nuevo" text="Produccion"/>
<ToolBarItem comment="Criterio de busqueda" image="find" name="buscar" text="Buscar Documento"/>
<ToolBarItem comment="Anula Registro en Screen" image="cancel" name="anular" text="Anular Registros"/>
<ToolBarItem comment="Lista de documentos (mas recientes primero)" image="detail" name="documentos" text="Documentos"/>
<ToolBarItem comment="Recorrido/trazabilidad del bloque" image="fa-sitemap" name="traza" text="Trazabilidad"/>
<ToolBarSeparator name="toolbarseparator1"/>
<ToolBarItem image="quit" name="salir" text="Salir"/>
</ToolBar>
<Folder gridHeight="20" gridWidth="258" name="folder1" posX="0" posY="0">
<Page action="documentos" name="pg_docs" text="Documentos">
<Grid gridHeight="18" gridWidth="257" name="grid_docs" posX="0" posY="0">
<Table gridHeight="17" gridWidth="255" name="table_docs" posX="1" posY="0" totalRows="16" unitWidth="characters" width="150">
<Edit fieldId="40" gridHeight="1" gridWidth="12" name="d_num_doc" noEntry="true" posX="0" posY="0" scroll="true" tabIndex="-1" title="NUM. DOC" widget="Edit"/>
<Edit fieldId="41" gridHeight="1" gridWidth="14" name="d_fecha" noEntry="true" posX="12" posY="0" scroll="true" tabIndex="-1" title="FECHA" widget="Edit"/>
<Edit fieldId="42" gridHeight="1" gridWidth="42" name="d_departamento" noEntry="true" posX="26" posY="0" scroll="true" tabIndex="-1" title="DEPARTAMENTO" widget="Edit"/>
<Edit fieldId="43" gridHeight="1" gridWidth="36" name="d_movimiento" noEntry="true" posX="68" posY="0" scroll="true" tabIndex="-1" title="MOVIMIENTO" widget="Edit"/>
<Edit fieldId="44" gridHeight="1" gridWidth="12" name="d_estado" noEntry="true" posX="104" posY="0" scroll="true" tabIndex="-1" title="ESTADO" widget="Edit"/>
<Edit fieldId="45" gridHeight="1" gridWidth="34" name="d_bloques" noEntry="true" posX="116" posY="0" scroll="true" tabIndex="-1" title="BLOQUES" widget="Edit"/>
</Table>
</Grid>
</Page>
<Page name="pg_prod" text="Produccion">
<Grid gridHeight="18" gridWidth="258" name="grid1" posX="0" posY="0">
<Group gridHeight="6" gridWidth="62" name="group1" posX="1" posY="0" text="General">
<Label gridHeight="1" gridWidth="10" name="label1" posX="3" posY="1" text="Secuencia"/>
<Edit colName="num_doc" fieldId="4" gridHeight="1" gridWidth="5" name="num_doc" noEntry="false" posX="14" posY="1" sqlTabName="formonly" tabIndex="1" widget="Edit"/>
<Label gridHeight="1" gridWidth="6" name="label2" posX="21" posY="1" text="Fecha"/>
<DateEdit colName="fecha" fieldId="7" format="DD/MM/YYYY" gridHeight="1" gridWidth="9" name="fecha" posX="28" posY="1" required="true" sqlTabName="formonly" sqlType="DATE" tabIndex="2" widget="DateEdit"/>
<Label gridHeight="1" gridWidth="6" name="label3" posX="3" posY="2" text="Factor"/>
<Edit colName="factor" comment="Digite factor que desa calcular las horas normales" fieldId="6" gridHeight="1" gridWidth="5" name="factor" posX="14" posY="2" sqlTabName="formonly" tabIndex="3" widget="Edit"/>
<Label gridHeight="1" gridWidth="8" name="label4" posX="3" posY="3" text="Departa."/>
<ComboBox colName="departamento" fieldId="3" gridHeight="1" gridWidth="32" items="" name="departamento" posX="14" posY="3" required="true" sqlTabName="formonly" tabIndex="4" widget="ComboBox"/>
<Label gridHeight="1" gridWidth="10" name="label6" posX="3" posY="4" text="Cod. Movimiento"/>
<ComboBox fieldId="27" gridHeight="1" gridWidth="35" items="" name="cod_mov" posX="14" posY="4" tabIndex="-1" title="combobox1" widget="ComboBox"/>
</Group>
<Group gridHeight="8" gridWidth="257" name="group2" posX="1" posY="6" text="Detalle">
<Table gridHeight="6" gridWidth="254" name="table1" posX="2" posY="1" totalRows="5" unitWidth="characters" width="76">
<ComboBox colName="tipo" comment="Digite Codigo de la Maquina" fieldId="11" gridHeight="1" gridWidth="30" items="" name="tipo" posX="0" posY="0" scroll="true" sqlTabName="formonly" tabIndex="5" title="OPERACION" widget="ComboBox"/>
<ComboBox fieldId="5" gridHeight="1" gridWidth="48" items="" name="codigo" posX="30" posY="0" scroll="true" tabIndex="-1" title="Equipo" unhidable="true" unmovable="true" unsortable="true" widget="ComboBox"/>
<ButtonEdit action="empleado" autoNext="true" colName="emp_no" fieldId="8" gridHeight="1" gridWidth="10" name="emp_no" posX="78" posY="0" sqlTabName="formonly" sqlType="DECIMAL" tabIndex="6" title="EMPLEADO" widget="ButtonEdit"/>
<Edit autoNext="true" colName="h_directa" fieldId="12" gridHeight="1" gridWidth="6" name="h_directa" posX="88" posY="0" sqlTabName="formonly" tabIndex="7" title="N.DIRECTA" widget="Edit"/>
<Edit autoNext="true" colName="h_indirecta" fieldId="13" gridHeight="1" gridWidth="6" name="h_indirecta" posX="94" posY="0" sqlTabName="formonly" tabIndex="8" title="N.IND." widget="Edit"/>
<Edit autoNext="true" colName="e_directa" fieldId="14" gridHeight="1" gridWidth="6" name="e_directa" posX="100" posY="0" sqlTabName="formonly" tabIndex="9" title="E. DIRECTAS" widget="Edit"/>
<Edit autoNext="true" colName="e_indirecta" fieldId="15" gridHeight="1" gridWidth="5" name="e_indirecta" posX="106" posY="0" sqlTabName="formonly" tabIndex="10" title="E.INDIRECTAS" widget="Edit"/>
<ButtonEdit action="semielaborado" colName="cod_prod" fieldId="9" gridHeight="1" gridWidth="10" name="cod_prod" posX="111" posY="0" sqlTabName="formonly" tabIndex="11" title="SEMI-ELABORADO" widget="ButtonEdit"/>
<Edit fieldId="20" gridHeight="1" gridWidth="8" name="lado1" posX="121" posY="0" tabIndex="-1" title="Ancho" widget="Edit"/>
<Edit fieldId="21" gridHeight="1" gridWidth="8" name="lado2" posX="129" posY="0" tabIndex="-1" title="Largo" widget="Edit"/>
<Edit fieldId="22" gridHeight="1" gridWidth="8" name="lado3" posX="137" posY="0" tabIndex="-1" title="Espesor" widget="Edit"/>
<Edit colName="cantidad" comment="Digite Cantidad Producida" fieldId="17" gridHeight="1" gridWidth="12" name="cantidad" posX="145" posY="0" sqlTabName="formonly" tabIndex="12" title="CANTIDAD" widget="Edit"/>
<Edit fieldId="23" gridHeight="1" gridWidth="8" name="medida1" noEntry="true" posX="157" posY="0" tabIndex="-1" title="Medida" widget="Edit"/>
<Edit case="upper" colName="codigo_bloque" fieldId="2" gridHeight="1" gridWidth="20" name="codigo_bloque" posX="165" posY="0" scroll="true" sqlTabName="formonly" tabIndex="13" title="BLOQUE" widget="Edit"/>
<ComboBox colName="turno" fieldId="0" gridHeight="1" gridWidth="20" items="" name="turno" posX="185" posY="0" sqlTabName="formonly" tabIndex="14" title="TURNO" widget="ComboBox"/>
<ComboBox fieldId="24" gridHeight="1" gridWidth="13" items="" name="depto_receptor" notNull="false" posX="205" posY="0" required="false" tabIndex="-1" title="DEPTO. RECEPTOR" widget="ComboBox"/>
<ButtonEdit action="ordenped" fieldId="50" gridHeight="1" gridWidth="12" name="num_oc" posX="218" posY="0" scroll="true" tabIndex="18" title="ORDEN PED." widget="ButtonEdit"/>
<Phantom fieldId="28" name="ref" widget="Phantom"/>
</Table>
</Group>
<Group gridHeight="4" gridWidth="56" name="group3" posX="1" posY="14" text="INFORMACION">
<Label gridHeight="1" gridWidth="7" name="label5" posX="1" posY="1" text="Produce"/>
<Edit colName="descripcion" fieldId="18" gridHeight="1" gridWidth="31" name="descripcion" noEntry="true" posX="12" posY="1" sqlTabName="formonly" tabIndex="15" widget="Edit"/>
<Edit colName="medida" fieldId="16" gridHeight="1" gridWidth="3" name="medida" noEntry="true" posX="44" posY="1" sqlTabName="formonly" tabIndex="16" widget="Edit"/>
<Label gridHeight="1" gridWidth="8" name="label9" posX="1" posY="2" text="Empleado"/>
<Edit colName="nombre" fieldId="19" gridHeight="1" gridWidth="31" name="nombre" noEntry="true" posX="12" posY="2" sqlTabName="formonly" tabIndex="17" widget="Edit"/>
</Group>
</Grid>
</Page>
</Folder>
</Form>
<DiagramLayout>
<![CDATA[AAAAAgAAAEwAewAxADAANwAyADgAMwAwAGUALQBlADAANABlAC0ANABhADYAMwAtADgAZgA0ADEALQA0AGEAYQA4AGUAZgBhADUAZgBmAGEAYQB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAEwAewBhADEAYgAyAGMAMwBkADQALQAwADAAMAAxAC0ANABhADAAMAAtADkAMAAwADEALQAwAGQAMABjADAAYgAwAGEAMAA5ADAAMQB9QDAAAAQAAABAMAAABAAAAAAAAAAAAAAAAQAAAEwAewBhAGYANgBiADcAOABmADAALQAxADgAOQBjAC0ANABlADYAOAAtADgANgAwADcALQA0ADYAZgAxADEAYQA0ADMAMwA0ADIAMwB9QHMAAEhgAHpAPVVV1VVWYD9QYk3S8an8AQ==]]>
</DiagramLayout>
</ManagedForm>
+1 -1
View File
@@ -11,7 +11,7 @@
END RECORD,
nombre_cia STRING
FUNCTION impresion(pnumoc)
FUNCTION impresion_oc(pnumoc)
DEFINE pnumoc,I INT
DECLARE busca_orden CURSOR FOR
+4 -2
View File
@@ -32,7 +32,8 @@ FUNCTION imprime (datos_c, arr_costos)
codigo_bloque LIKE cttb00003.codigo_bloque,
turno SMALLINT,
depto_receptor SMALLINT,
ref INT
ref INT,
num_oc INT
END RECORD
DEFINE nombre, descripcion, movimiento, departamento, turno, maquina, depto_receptor STRING
@@ -125,7 +126,8 @@ REPORT p_diaria(datos_c, arr_costos, nombre, descripcion, movimiento, departamen
codigo_bloque LIKE cttb00003.codigo_bloque,
turno SMALLINT,
depto_receptor SMALLINT,
ref INT
ref INT,
num_oc INT
END RECORD
DEFINE nombre, descripcion, movimiento, departamento, descrip_turno,
+2 -2
View File
@@ -114,8 +114,8 @@ FUNCTION prprmt003()
CLEAR SCREEN
OPEN FORM prfmmt003 FROM "prfmmt003"
DISPLAY FORM prfmmt003
OPEN FORM prfmmt003pr FROM "prfmmt003pr"
DISPLAY FORM prfmmt003pr
DISPLAY "Registro de Produccion Diaria" AT 4,25
DISPLAY "prprmt003" AT 4,3
# CALL pantalla1()
+67 -56
View File
@@ -7,6 +7,16 @@
------------------------------------------------------------------
}
GLOBALS "prprgb000.4gl"
DEFINE arrprtb08 DYNAMIC ARRAY OF RECORD
cod_n_c LIKE prtb00008.cod_n,
cod_grupo_c LIKE prtb00008.cod_grupo,
cod_tipo_c LIKE prtb00008.cod_tipo,
cod_sec_c LIKE prtb00008.cod_sec,
cantidad_c LIKE prtb00008.cantidad,
descrip_esp_c LIKE intb00001.descrip_esp,
unidad_c LIKE intb00001.unidad_med
END RECORD
DEFINE nombre LIKE vetb00004.nombre,
descrip_esp_c,descrip_esp LIKE iptb00002.descrip_esp,
unidad LIKE iptb00002.unidad_med,
@@ -41,10 +51,11 @@ END MAIN
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
CALL pantalla()
# (pantalla() es el encabezado de la pantalla de texto antigua; no aplica en GUI)
OPEN FORM ctfmmt006 FROM "prfmmt006"
DISPLAY FORM ctfmmt006
CALL pantalla()
CALL ui.Window.getCurrent().setText("Ordenes de Produccion")
# (pantalla() es el encabezado de la pantalla de texto antigua; no aplica en GUI)
DISPLAY "prprmt006" AT 4,3
DISPLAY "Ordenes De Produccion" AT 6,32
@@ -280,13 +291,13 @@ FUNCTION prpcad006()
b.cod_sec = prtb07.cod_sec AND
a.num_oc = b.num_oc
LET idx = 1
FOREACH buscame INTO prtb08[idx].*
FOREACH buscame INTO arrprtb08[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
}
INPUT ARRAY prtb08 FROM s_orden.*
INPUT ARRAY arrprtb08 FROM s_orden.*
ON KEY(CONTROL-W)
CALL busca_material()
@@ -295,13 +306,13 @@ FUNCTION prpcad006()
LET scr_l = scr_line()
AFTER FIELD cod_sec_c
LET descrip_esp_c = NULL
IF prtb08[curr].cod_sec_c IS NOT NULL THEN
IF arrprtb08[curr].cod_sec_c IS NOT NULL THEN
SELECT a.descrip_esp,a.unidad_med INTO descrip_esp_c,unidad_c
FROM intb00001 a
WHERE a.cod_n = prtb08[curr].cod_n_c AND
a.cod_grupo = prtb08[curr].cod_grupo_c AND
a.cod_tipo = prtb08[curr].cod_tipo_c AND
a.cod_sec = prtb08[curr].cod_sec_c AND
WHERE a.cod_n = arrprtb08[curr].cod_n_c AND
a.cod_grupo = arrprtb08[curr].cod_grupo_c AND
a.cod_tipo = arrprtb08[curr].cod_tipo_c AND
a.cod_sec = arrprtb08[curr].cod_sec_c AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
@@ -309,15 +320,15 @@ FUNCTION prpcad006()
NEXT FIELD cod_n_c
END IF
END IF
LET prtb08[curr].descrip_esp_c = descrip_esp_c
LET prtb08[curr].unidad_c = unidad_c
DISPLAY prtb08[curr].descrip_esp_c TO s_orden[scr_l].descrip_esp_c
LET arrprtb08[curr].descrip_esp_c = descrip_esp_c
LET arrprtb08[curr].unidad_c = unidad_c
DISPLAY arrprtb08[curr].descrip_esp_c TO s_orden[scr_l].descrip_esp_c
ATTRIBUTE(BLUE)
DISPLAY prtb08[curr].unidad_c TO s_orden[scr_l].unidad_c
DISPLAY arrprtb08[curr].unidad_c TO s_orden[scr_l].unidad_c
ATTRIBUTE(BLUE)
AFTER FIELD cantidad_c
IF prtb08[curr].cod_n_c IS NOT NULL THEN
IF prtb08[curr].cantidad_c IS NULL THEN
IF arrprtb08[curr].cod_n_c IS NOT NULL THEN
IF arrprtb08[curr].cantidad_c IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cantidad_c
@@ -347,23 +358,23 @@ FUNCTION prpcad006()
# SE ESTA VALIDANDO EL PRODUCTO TERMINADO EN EL CODIGO DE LA MATERIA PRIMA
# PARA CUANDO LA ORDEN SEA PARA PRODUCTOS IMPORTADOS QUE NO TIENEN COMPOSICION
IF prtb08[1].cod_n_c IS NULL THEN
LET prtb08[1].cod_n_c = prtb07.cod_n
LET prtb08[1].cod_grupo_c = prtb07.cod_grupo
LET prtb08[1].cod_tipo_c = prtb07.cod_tipo
LET prtb08[1].cod_sec_c = prtb07.cod_Sec
OUTPUT TO REPORT ordenes(prtb07.num_oc,prtb08[idx].*)
IF arrprtb08[1].cod_n_c IS NULL THEN
LET arrprtb08[1].cod_n_c = prtb07.cod_n
LET arrprtb08[1].cod_grupo_c = prtb07.cod_grupo
LET arrprtb08[1].cod_tipo_c = prtb07.cod_tipo
LET arrprtb08[1].cod_sec_c = prtb07.cod_Sec
OUTPUT TO REPORT ordenes(prtb07.num_oc,arrprtb08[idx].*)
END IF
FOR idx = 1 TO arr_count()
IF prtb08[idx].cod_n_c IS NOT NULL THEN
IF arrprtb08[idx].cod_n_c IS NOT NULL THEN
INSERT INTO prtb00008 VALUES (prtb07.num_oc,
prtb08[idx].cod_n_c,
prtb08[idx].cod_grupo_c,
prtb08[idx].cod_tipo_c,
prtb08[idx].cod_sec_c,
prtb08[idx].cantidad_c,
arrprtb08[idx].cod_n_c,
arrprtb08[idx].cod_grupo_c,
arrprtb08[idx].cod_tipo_c,
arrprtb08[idx].cod_sec_c,
arrprtb08[idx].cantidad_c,
SUSER_SNAME(),current,null,null)
OUTPUT TO REPORT ordenes(prtb07.num_oc,prtb08[idx].*)
OUTPUT TO REPORT ordenes(prtb07.num_oc,arrprtb08[idx].*)
END IF
END FOR
FINISH REPORT ordenes
@@ -534,24 +545,24 @@ LABEL sale9:
END FUNCTION
FUNCTION limpia()
FOR idx = 1 TO 10
LET prtb08[idx].cod_n_c = null
LET prtb08[idx].cod_grupo_c = null
LET prtb08[idx].cod_tipo_c = null
LET prtb08[idx].cod_sec_c = null
LET prtb08[idx].unidad_c = null
LET prtb08[idx].cantidad_c = null
LET prtb08[idx].descrip_esp_c = null
LET arrprtb08[idx].cod_n_c = null
LET arrprtb08[idx].cod_grupo_c = null
LET arrprtb08[idx].cod_tipo_c = null
LET arrprtb08[idx].cod_sec_c = null
LET arrprtb08[idx].unidad_c = null
LET arrprtb08[idx].cantidad_c = null
LET arrprtb08[idx].descrip_esp_c = null
END FOR
FOR idx = 1 TO 5
DISPLAY prtb08[idx].cod_n_c TO s_orden[idx].cod_n_c
DISPLAY prtb08[idx].cod_grupo_c TO s_orden[idx].cod_grupo_c
DISPLAY prtb08[idx].cod_tipo_c TO s_orden[idx].cod_tipo_c
DISPLAY prtb08[idx].cod_sec_c TO s_orden[idx].cod_sec_c
DISPLAY prtb08[idx].cantidad_c TO s_orden[idx].cantidad_c
DISPLAY arrprtb08[idx].cod_n_c TO s_orden[idx].cod_n_c
DISPLAY arrprtb08[idx].cod_grupo_c TO s_orden[idx].cod_grupo_c
DISPLAY arrprtb08[idx].cod_tipo_c TO s_orden[idx].cod_tipo_c
DISPLAY arrprtb08[idx].cod_sec_c TO s_orden[idx].cod_sec_c
DISPLAY arrprtb08[idx].cantidad_c TO s_orden[idx].cantidad_c
DISPLAY prtb08[idx].descrip_esp_c TO s_orden[idx].descrip_esp_c
DISPLAY arrprtb08[idx].descrip_esp_c TO s_orden[idx].descrip_esp_c
ATTRIBUTE(BLUE)
DISPLAY prtb08[idx].unidad_c TO s_orden[idx].unidad_c
DISPLAY arrprtb08[idx].unidad_c TO s_orden[idx].unidad_c
ATTRIBUTE(BLUE)
END FOR
@@ -565,28 +576,28 @@ FUNCTION busca_detalle()
WHERE a.num_oc = numero_oc
LET idx = 1
FOREACH busca_d INTO prtb08[idx].*
FOREACH busca_d INTO arrprtb08[idx].*
SELECT a.descrip_esp,a.unidad_med INTO descrip_esp_c,unidad_c
FROM intb00001 a
WHERE a.cod_n = prtb08[idx].cod_n_c AND
a.cod_grupo = prtb08[idx].cod_grupo_c AND
a.cod_tipo = prtb08[idx].cod_tipo_c AND
a.cod_sec = prtb08[idx].cod_sec_c AND
WHERE a.cod_n = arrprtb08[idx].cod_n_c AND
a.cod_grupo = arrprtb08[idx].cod_grupo_c AND
a.cod_tipo = arrprtb08[idx].cod_tipo_c AND
a.cod_sec = arrprtb08[idx].cod_sec_c AND
a.status_t IS NULL
IF idx > 5 THEN
EXIT FOREACH
END IF
LET prtb08[idx].descrip_esp_c = descrip_esp_c
LET prtb08[idx].unidad_c = unidad_c
DISPLAY prtb08[idx].cod_n_c TO s_orden[idx].cod_n_c
DISPLAY prtb08[idx].cod_grupo_c TO s_orden[idx].cod_grupo_c
DISPLAY prtb08[idx].cod_tipo_c TO s_orden[idx].cod_tipo_c
DISPLAY prtb08[idx].cod_sec_c TO s_orden[idx].cod_sec_c
DISPLAY prtb08[idx].cantidad_c TO s_orden[idx].cantidad_c
LET arrprtb08[idx].descrip_esp_c = descrip_esp_c
LET arrprtb08[idx].unidad_c = unidad_c
DISPLAY arrprtb08[idx].cod_n_c TO s_orden[idx].cod_n_c
DISPLAY arrprtb08[idx].cod_grupo_c TO s_orden[idx].cod_grupo_c
DISPLAY arrprtb08[idx].cod_tipo_c TO s_orden[idx].cod_tipo_c
DISPLAY arrprtb08[idx].cod_sec_c TO s_orden[idx].cod_sec_c
DISPLAY arrprtb08[idx].cantidad_c TO s_orden[idx].cantidad_c
DISPLAY prtb08[idx].descrip_esp_c TO s_orden[idx].descrip_esp_c
DISPLAY arrprtb08[idx].descrip_esp_c TO s_orden[idx].descrip_esp_c
ATTRIBUTE(BLUE)
DISPLAY prtb08[idx].unidad_c TO s_orden[idx].unidad_c
DISPLAY arrprtb08[idx].unidad_c TO s_orden[idx].unidad_c
ATTRIBUTE(BLUE)
LET idx = idx + 1
END FOREACH
+20 -14
View File
@@ -64,7 +64,7 @@ GLOBALS "prprgb000.4gl"
nombre_vend,nombres,apellidos CHAR(40),fcalle CHAR(25),
fcasa_num CHAR(5), fbarrio,furbanizacion CHAR(15),
monto_desc,total1,p_costos1,total_i,total_mo DECIMAL(12,2),
ult_numero,cuenta INTEGER,
ult_numero,cuenta,existe_oc INTEGER,
vetb05 RECORD LIKE vetb00005.*,
cuenta_p,ridx SMALLINT,
pbalance1,pbalance2 DEC(12,2),
@@ -798,19 +798,26 @@ FUNCTION prpcad008()
# SE COLOCO QUE EL NUMERO SE GENERARA A PARTIR DEL 01/01/2003 HACIA ATRAS POR MODIFICACION DEL
# SISTEMA Y LA INCLUSION DEL NCF A PARTIR DEL 01/01/2007
# FECHA MODIFICACION: 11/01/2007
SELECT num_oc INTO ult_numero FROM prtb00020
IF nuevo = "S" THEN
IF ult_numero IS NULL THEN
LET ult_numero = 0
END IF
LET ult_numero = ult_numero + 1
LET prtb08.num_oc = ult_numero
DISPLAY BY NAME prtb08.num_oc
UPDATE prtb00020 set num_oc = ult_numero,
# CONSECUTIVO ATOMICO: el UPDATE incrementa y bloquea la fila de prtb00020
# hasta el COMMIT, asi dos usuarios no pueden tomar el mismo num_oc
# (antes se leia y luego se escribia -> PK_prtb00012 duplicada)
BEGIN WORK
UPDATE prtb00020 SET num_oc = ISNULL(num_oc, 0) + 1,
us_crea = SUSER_SNAME(),
fech_crea = GETDATE()
SELECT num_oc INTO ult_numero FROM prtb00020
# AUTOCORRECCION: si el contador quedo por detras de prtb00012, salta al siguiente libre
LET existe_oc = 0
SELECT COUNT(*) INTO existe_oc FROM prtb00012 WHERE num_oc = ult_numero
IF existe_oc > 0 THEN
SELECT MAX(num_oc) + 1 INTO ult_numero FROM prtb00012
UPDATE prtb00020 SET num_oc = ult_numero
END IF
COMMIT WORK
LET prtb08.num_oc = ult_numero
DISPLAY BY NAME prtb08.num_oc
{ CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia1
@@ -851,9 +858,8 @@ CALL seleccionarsalida() RETURNING r_output
fech_crea = GETDATE()
WHERE @num_oc = prtb09.num_oc
UPDATE prtb00020 SET num_oc = ult_numero,
us_Crea = SUSER_SNAME(),
fech_crea = GETDATE()
# (se elimino la re-escritura de prtb00020 aqui: el consecutivo ya se tomo
# arriba de forma atomica y re-escribirlo podia retroceder el contador)
# ACTUALIZA NUMERO TEMPORAL PARA EL DESPIECE
UPDATE prtb00022 SET num_oc = prtb08.num_oc WHERE num_oc = tmpnumero
+7 -6
View File
@@ -140,6 +140,7 @@ FUNCTION prprmt011()
--fechaSolDespacho
OPEN WINDOW prfmmt011 AT 10,10 WITH FORM "prfmmt011"
CALL ui.Window.getCurrent().setText("Administracion Ordenes")
#WHENEVER ERROR CONTINUE
LET w = ui.Window.getCurrent()
@@ -201,7 +202,7 @@ FUNCTION prprmt011()
IF busqueda IS NULL THEN
LET selec1 =
" SELECT 'N', x.cerrada, x1.estado_produccion,x1.estado_producto,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ",
" CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,x1.fecha_llegada, x1.fecha_disp_entrega, ",
" x.fecha_oc AS fecha_orden , x1.fecha_compromiso ,x1.fecha_llegada, x1.fecha_disp_entrega, ",
" x1.fecha_solic_despacho, x1.fecha_instalacion, x.cotizacion_no, x.num_oc,x5.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ",
" + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) ,x4.descripcion, CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ",
" + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(7)) + ' ' + RTRIM(x2.descrip_esp), ",
@@ -243,7 +244,7 @@ FUNCTION prprmt011()
END IF
LET selec1 =
" SELECT 'N', x.cerrada, x1.estado_produccion,x1.estado_producto,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ",
" CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,
" x.fecha_oc AS fecha_orden , x1.fecha_compromiso ,
x1.fecha_llegada,x1.fecha_disp_entrega, ",
" x1.fecha_solic_despacho, x1.fecha_instalacion, x.cotizacion_no, x.num_oc,x5.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ",
" + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) ,x4.descripcion, CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ",
@@ -281,7 +282,7 @@ FUNCTION prprmt011()
IF actualiza_log_produccion="SI" THEN
LET selec1=
" SELECT 'N', x.cerrada, x1.estado_produccion,x1.departamento,x3.nom_dpto,RTRIM(CAST(x.sec_vend AS CHAR)) + ' ' + RTRIM(b.nom1_emp), b.apell1_emp, ",
" CONVERT(CHAR(10), x.fecha_oc,103) AS fecha_orden , CONVERT(char(10),x1.fecha_compromiso,103) ,' ', x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ",
" x.fecha_oc AS fecha_orden , x1.fecha_compromiso ,' ', x.cotizacion_no, x.num_oc, x.observacion,g.descripcion, CAST(e.tipo_cliente AS CHAR(2)) ",
" + '-' + CAST(e.sec_cliente AS CHAR(6)) + ' ' + RTRIM(e.nombre) , CAST(x1.cod_n AS VARCHAR(4)) + '-' + CAST(x1.cod_grupo AS VARCHAR(4)) ",
" + '-' + CAST(x1.cod_tipo AS VARCHAR(4)) + '-' + CAST(x1.cod_sec AS VARCHAR(4)) + ' ' + RTRIM(x2.descrip_esp), ",
" SUM(x1.cantidad), '0' , '0' , '0' , x.sec_vend, x1.cod_n, x1.cod_grupo, x1.cod_tipo, x1.cod_Sec, e.tipo_cliente, e.sec_cliente, ",
@@ -440,7 +441,7 @@ FUNCTION prprmt011()
IF veces > 1 THEN
LET att[idx].col7 = 'blue reverse'
ELSE
SELECT CONVERT(CHAR(10),a.fecha_llegada,103) INTO arr_ordenes[idx].fecha_llegada
SELECT a.fecha_llegada INTO arr_ordenes[idx].fecha_llegada
FROM cctb00026 a
WHERE a.num_oc = arr_ordenes[idx].num_oc AND
a.cod_n = arr_ordenes[idx].cod_n AND
@@ -1091,7 +1092,7 @@ FUNCTION fparciales(xnum_oc,xcodn,xcodgrupo,xcodtipo,xcodsec,xfecha,xproducto)
DECLARE busca_parcial CURSOR FOR
SELECT CONVERT(CHAR(10),a.fecha_compromiso,103),a.cantidad FROM prtb00028 a
SELECT a.fecha_compromiso,a.cantidad FROM prtb00028 a
WHERE a.num_oc = xnum_oc AND
a.cod_n = xcodn AND
a.cod_grupo = xcodgrupo AND
@@ -1313,7 +1314,7 @@ FUNCTION vepcmf008(num_cotizacion)
LET SELEC = " SELECT DISTINCT a.cod_cia,a.ventas,a.cotizacion_no,a.tipo_cliente,a.sec_cliente,a.nombre_cliente, " ||
" a.rnc,a.nombre_proyecto,a.direccion_cliente,a.cod_provincia,a.direccion_proyecto, " ||
" a.telefono_r,a.telefono_o,a.email,a.tipo_precio,a.beeper,a.celular,a.prima,a.fax1,a.celular1, " ||
" a.fax, CONVERT(CHAR(10),a.fecha,103),CONVERT(CHAR(10),a.fecha_entrega,103), " ||
" a.fax, a.fecha,a.fecha_entrega, " ||
" a.plazo_entrega,a.comentario,a.contacto, a.cond_pago,a.sec_Vend,a.porc_itbi," ||
" a.total_bruto,a.sub_total,a.monto_Desc,a.monto_itbi,a.total_neto,a.monto_dolar,a.num_emp_inst, " ||
" a.codigo_dgii,a.tipo_ncf,a.cliente_generico,a.sec_vend_aux,a.codigo,a.cod_zona,a.sincronizado, "||
+2 -2
View File
@@ -54,7 +54,7 @@ FUNCTION prprmt020()
OPEN WINDOW w1 WITH FORM "prfmmt012"
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME prtb09.num_oc
INPUT BY NAME prtb08.num_oc
BEFORE INPUT
LET d_tipos="PDF"
@@ -86,7 +86,7 @@ FUNCTION prprmt020()
AFTER FIELD num_oc
SELECT a.cotizacion_no,b.nombre,a.sec_vend,ISNULL(c.nom1_emp,' ')+ISNULL(c.apell1_emp,' '),
a.tipo_cliente,a.sec_cliente
INTO prtb09.cotizacion_no,nombre_cliente,psec_vend,vendedor,
INTO prtb08.cotizacion_no,nombre_cliente,psec_vend,vendedor,
prtb08.tipo_cliente,prtb08.sec_cliente
FROM prtb00012 a,vetb00004 b,adtb00003 c
WHERE a.num_oc = prtb08.num_oc AND
+1 -1
View File
@@ -177,7 +177,7 @@ END RECORD
" ORDEN ECOMMERCE ",orden_externa USING "&&&&&&&"
INPUT ARRAY detalle FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS)
ON ACTION impresion ATTRIBUTE(TEXT="Orden",IMAGE="printer")
CALL impresion(pnum_oc)
CALL impresion_oc(pnum_oc)
ON ACTION etiqueta ATTRIBUTE(TEXT="Label",IMAGE="fa-tag")
LET datos.celular = orden.celular
LET datos.cliente = orden.nombre_envio
+1 -1
View File
@@ -18,7 +18,7 @@
<LAYOUTNODE name="Layout Node9" y="max-33.3652" width="214.531" length="26.3906" anchorY="1" alignment="center" layoutDirection="topToBottom" floatingBehavior="free">
<WORDBOX name="WordBox34" width="213.984" length="14.3281" alignment="far" fontSize="20" fontBold="true" underline="true" layoutDirection="topToBottom" baselineType="leftleft" textAlignment="center" text="ANÁLISIS PRODUCCIÓN" trimText="both"/>
</LAYOUTNODE>
<IMAGEBOX name="ImageBox1_1" y="6.5535" width="230.836" length="92.4741" floatingBehavior="enclosed" url="file:///F:/MARMOTECHC/IMAGENES/logo.png" intendedResolution="120"/>
<IMAGEBOX name="ImageBox1_1" y="6.5535" width="230.836" length="92.4741" floatingBehavior="enclosed" url="IMAGENES/Logo.png" intendedResolution="120"/>
<rtl:input-variable name="fecha_reporte" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="fecha_reporte Value1" class="grwDateValue" x="4.0943" y="414.196" width="103.969" anchorX="0" anchorY="0" floatingBehavior="enclosed" textAlignment="right" text="{{fecha_reporte}}"/>
</MINIPAGE>
+10 -4
View File
@@ -35,14 +35,16 @@
<RecordField colName="" fieldIdRef="26" name="xnum_emp" sqlTabName="" table_alias_name="" uid="{cbe6a079-16f8-4d94-8834-508b8802f0eb}"/>
<RecordField colName="" fieldIdRef="27" name="nombre_empleado" sqlTabName="" table_alias_name="" uid="{025a8c47-52a6-46a7-809d-068fce546410}"/>
<RecordField colName="" fieldIdRef="28" name="bloque" sqlTabName="" table_alias_name="" uid="{1fdfddbb-c15b-430b-900a-277fe124636e}"/>
<RecordField colName="" fieldIdRef="29" name="xnum_ocp" sqlTabName="" table_alias_name="" uid="{3b6f1c2e-8d4a-4f7b-9e21-6a5c0d9e7f11}"/>
<RecordField colName="" fieldIdRef="30" name="proveedor" sqlTabName="" table_alias_name="" uid="{9c2e7a41-5b3d-4e8f-a1c6-2d7f8e0b4a22}"/>
</Record>
<Form gridHeight="31" gridWidth="163" name="acfmrp010" style="basic" text="ETIQUETAS">
<Form gridHeight="33" gridWidth="163" name="acfmrp010" style="basic" text="ETIQUETAS">
<ActionDefaultList name="ActionDefaultList1">
<ActionDefault image="cancel" name="cancel" text="Cancela operacion"/>
<ActionDefault image="find" name="busca" text="Busca informacion"/>
<ActionDefault image="printer" name="imprime" text="Imprimir"/>
</ActionDefaultList>
<Grid gridHeight="28" gridWidth="163" name="Grid1" posX="0" posY="1">
<Grid gridHeight="30" gridWidth="163" name="Grid1" posX="0" posY="1">
<Group gridHeight="10" gridWidth="138" name="Group1" posX="1" posY="1" text="INFORMACIONES SOBRE EL TAMANO DE LA ETIQUETA E INVENTARIO">
<Label posX="1" posY="1" text="INVENTARIO"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="inventario" defaultValue="PRODUCTOS TERMINADOS" fieldId="9" gridHeight="1" gridWidth="43" include="ACTIVOS FIJOS|PRODUCTOS TERMINADOS|MATERIA PRIMA|REPUESTOS" items="ACTIVOS FIJOS, PRODUCTOS TERMINADOS, MATERIA PRIMA, REPUESTOS" name="inventario" posX="20" posY="1" sqlTabName="formonly" tabIndex="1" table_alias_name="" widget="ComboBox">
@@ -99,7 +101,7 @@
<Label posX="2" posY="4" text="DEPARTAMENTO"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="codigo_dp" fieldId="13" gridHeight="1" gridWidth="7" name="codigo_dp" posX="21" posY="4" sqlTabName="formonly" tabIndex="13" table_alias_name="" widget="Edit"/>
</Group>
<Group gridHeight="6" gridWidth="70" name="Group4" posX="70" posY="11" text="Informacion Orden">
<Group gridHeight="8" gridWidth="70" name="Group4" posX="70" posY="11" text="Informacion Orden">
<Label gridHeight="1" gridWidth="10" name="Label2" posX="3" posY="1" text="Orden"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" fieldId="23" gridHeight="1" gridWidth="10" name="xnum_oc" posX="17" posY="1" sqlTabName="" tabIndex="25" table_alias_name="" title="Edit1" widget="Edit"/>
<Label gridHeight="1" gridWidth="10" name="Label3" posX="3" posY="2" text="Cliente"/>
@@ -109,8 +111,12 @@
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" fieldId="27" gridHeight="1" gridWidth="40" name="nombre_empleado" posX="28" posY="3" sqlTabName="" tabIndex="28" table_alias_name="" title="Edit3" widget="Edit"/>
<Label gridHeight="1" gridWidth="10" name="Label5" posX="3" posY="4" text="Bloque"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="" fieldId="28" gridHeight="1" gridWidth="27" name="bloque" posX="17" posY="4" scroll="true" sqlTabName="" tabIndex="29" table_alias_name="" title="Edit1" widget="Edit"/>
<Label gridHeight="1" gridWidth="12" name="Label6" posX="3" posY="5" text="Orden Compra"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" comment="Orden de compra (cotb00014)" fieldId="29" gridHeight="1" gridWidth="10" name="xnum_ocp" posX="17" posY="5" sqlTabName="" tabIndex="30" table_alias_name="" title="Edit4" widget="Edit"/>
<Label gridHeight="1" gridWidth="10" name="Label7" posX="3" posY="6" text="Proveedor"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" fieldId="30" gridHeight="1" gridWidth="51" name="proveedor" posX="17" posY="6" sqlTabName="" tabIndex="31" table_alias_name="" title="Edit5" widget="Edit"/>
</Group>
<Group gridHeight="9" gridWidth="161" name="Group3" posX="1" posY="17" text="MEDIDAS, SOLO PARA MATERIA PRIMA O PRODUCTOS TERMINADOS">
<Group gridHeight="9" gridWidth="161" name="Group3" posX="1" posY="19" text="MEDIDAS, SOLO PARA MATERIA PRIMA O PRODUCTOS TERMINADOS">
<Table gridHeight="5" gridWidth="157" name="Table1" posX="2" posY="2" totalRows="4" unitWidth="characters" width="157">
<CheckBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="imp" defaultValue="NO" fieldId="14" gridHeight="1" gridWidth="3" name="imp" notNull="true" posX="0" posY="0" required="true" sqlTabName="formonly" tabIndex="14" table_alias_name="" title="IMPRIME" valueChecked="SI" valueUnchecked="NO" widget="CheckBox"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="pcodid" fieldId="0" gridHeight="1" gridWidth="10" name="pcodid" posX="3" posY="0" scroll="true" sqlTabName="formonly" tabIndex="15" table_alias_name="" widget="Edit"/>
+18 -6
View File
@@ -442,6 +442,11 @@ FUNCTION acpcad001() --Consultar Datos Activo
LET i = i + 1
END FOREACH
-- el FOREACH deja un elemento vacio al final; al seleccionarlo getdata armaba
-- "WHERE a.codigo = " sin valor (-201) y el programa se caia
IF DisArray.getLength() >= i THEN
CALL DisArray.deleteElement(i)
END IF
END FUNCTION
@@ -470,12 +475,12 @@ FUNCTION getdata(idx INT)
,a.id_MaintainX
,a.id_codigo
,b.nombre
FROM actb00001 a left join irtb00009 b on a.id_codigo = b.codigo
WHERE a.codigo = " || DisArray[idx].codigo1 || "
AND a.status_t is null and b.status_t is null
FROM actb00001 a left join irtb00009 b on a.id_codigo = b.codigo AND b.status_t is null
WHERE a.codigo = ?
AND a.status_t is null
ORDER BY a.codigo"
EXECUTE query INTO infoArray.*
EXECUTE query USING DisArray[idx].codigo1 INTO infoArray.*
SELECT a.descripcion
INTO des.descripcion2
@@ -568,6 +573,9 @@ FUNCTION insertData()
IF infoArray.id_MaintainX IS NULL THEN
ROLLBACK WORK
-- antes seguia grabando fuera de la transaccion (el COMMIT caia -255)
CALL fgl_winmessage("MaintainX", "NO SE PUDO REGISTRAR EN MAINTAINX, OPERACION CANCELADA", "stop")
RETURN
END IF
END IF
@@ -701,6 +709,8 @@ INITIALIZE checking TO NULL
IF answer IS NULL THEN
ROLLBACK WORK
CALL fgl_winmessage("MaintainX", "NO SE PUDO ACTUALIZAR MAINTAINX, OPERACION CANCELADA", "stop")
RETURN
END IF
END IF
@@ -811,11 +821,13 @@ INITIALIZE checking TO NULL
END IF
IF infoArray.id_MaintainX IS NOT NULL THEN
CALL ApiMaintainX('DELETE',infoArray.id_MaintainX,maquinaria.*, infoArray.*,extraCampos.*,NULL)
CALL ApiMaintainX('DELETE',infoArray.id_MaintainX,infoArray.*,maquinaria.*,extraCampos.*,NULL) -- antes maquinaria/infoArray invertidos
RETURNING answer
IF answer != 1 THEN
IF answer != 1 OR answer IS NULL THEN
ROLLBACK WORK
CALL fgl_winmessage("MaintainX", "NO SE PUDO ELIMINAR EN MAINTAINX, OPERACION CANCELADA", "stop")
RETURN
END IF
END IF
@@ -0,0 +1,17 @@
-- acprmt001 (version ene-2025, integracion MaintainX) usa 4 columnas que nunca se
-- crearon en actb00001: proveedor del activo, tipo de activo y activo padre.
-- Todas NULL: no afectan filas existentes ni a los programas que no las usan.
-- Ejecutar primero en la .250 (QA G6); en produccion (.40.8) solo cuando se apruebe.
USE marmotech;
GO
IF COL_LENGTH('dbo.actb00001','cod_sp') IS NULL
ALTER TABLE dbo.actb00001 ADD cod_sp INT NULL; -- cotb00001.cod_sp (proveedor)
IF COL_LENGTH('dbo.actb00001','cod_sp_sec') IS NULL
ALTER TABLE dbo.actb00001 ADD cod_sp_sec INT NULL; -- cotb00001.cod_sp_sec
IF COL_LENGTH('dbo.actb00001','tipo_activo') IS NULL
ALTER TABLE dbo.actb00001 ADD tipo_activo VARCHAR(30) NULL; -- CAMIONES, IT HARDWARE, MAQUINARIAS, MONTACARGAS, EDIFICIOS
IF COL_LENGTH('dbo.actb00001','activo_padre') IS NULL
ALTER TABLE dbo.actb00001 ADD activo_padre INT NULL; -- actb00001.codigo del activo padre
GO
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('dbo.actb00001')
AND name IN ('cod_sp','cod_sp_sec','tipo_activo','activo_padre');
+3 -2
View File
@@ -235,11 +235,12 @@ FUNCTION acpcmf004()
RETURN
END IF
-- G6: trans LIKE actb00004.* incluye rowid; sin el 2o a.rowid todo quedaba corrido una columna (-1213)
LET SELEC =
"SELECT a.rowid,a.codigo
"SELECT a.rowid,a.rowid,a.codigo
,a.num_doc
,CONVERT(VARCHAR(10),a.fecha,103)
,a.cod_mov
@@ -419,7 +420,7 @@ FUNCTION acpcmf004()
CALL fgl_winmessage("INFO","NO SE ACTUALIZARON REGISTROS","INFO")
EXIT PROGRAM
END IF
SELECT MIN(convert(varchar(10),a.fecha,103)) INTO fecha6 FROM actb00004 a
SELECT MIN(a.fecha) INTO fecha6 FROM actb00004 a -- G6: MIN sobre texto dd/mm/yyyy no da la fecha menor
WHERE a.codigo = trans.codigo AND a.status_t IS NULL
IF fecha6 IS NULL THEN
+2 -1
View File
@@ -92,7 +92,8 @@ INPUT BY NAME p_ano1,p_mes1
NEXT FIELD p_ano1
END IF
SELECT MAX(CONVERT(VARCHAR(10),a.fecha,103)) INTO fecha_ant FROM actb00004 a
-- G6: MAX sobre texto dd/mm/yyyy devolvia 31/12 y no la ultima depreciacion (permitia duplicar el mes)
SELECT MAX(a.fecha) INTO fecha_ant FROM actb00004 a
WHERE a.status_t IS NULL AND a.cod_mov = 5
IF fecha_ant >= trans.fecha THEN
+62 -23
View File
@@ -14,7 +14,9 @@ GLOBALS
kcantidad DEC(12,4),
codlista,cia_logo SMALLINT,
xnum_emp,xnum_oc INT,
cliente,nombre_empleado,nom1,nom2,apell1,apell2 VARCHAR(100)
xnum_ocp INT, -- orden de compra (cotb00014)
cliente,nombre_empleado,nom1,nom2,apell1,apell2 VARCHAR(100),
proveedor VARCHAR(100) -- proveedor de la orden de compra (cotb00001)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
@@ -81,7 +83,16 @@ ON ACTION cancel
FROM codigo_act,descripcion_act,codigo_dp
END IF
IF inventario = "PRODUCTOS TERMINADOS" THEN
INPUT BY NAME xnum_oc,xnum_emp,bloque
INPUT BY NAME xnum_oc,xnum_ocp,xnum_emp,bloque
AFTER FIELD xnum_ocp
IF xnum_ocp IS NULL THEN
LET proveedor = NULL
DISPLAY BY NAME proveedor
ELSE
IF NOT busca_proveedor_oc() THEN
NEXT FIELD xnum_ocp
END IF
END IF
ON ACTION busca_emp
CALL busca_empleado1() RETURNING Xnum_emp,nom1,nom2,apell1,apell2
LET nombre_empleado = xnum_emp USING "<<<<<","-",nom1 CLIPPED,apell1 CLIPPED
@@ -127,7 +138,15 @@ ON ACTION cancel
CALL fgl_Winmessage("INFO","EMPLEADO NO EXISTE","INFO")
NEXT FIELD xnum_emp
END IF
DISPLAY BY NAME nombre_empleado
DISPLAY BY NAME nombre_empleado
END IF
IF xnum_ocp IS NOT NULL THEN
IF NOT busca_proveedor_oc() THEN
NEXT FIELD xnum_ocp
END IF
ELSE
LET proveedor = NULL
DISPLAY BY NAME proveedor
END IF
EXIT INPUT
END INPUT
@@ -243,25 +262,25 @@ CALL set_count(idx-1)
INPUT ARRAY despiece WITHOUT DEFAULTS FROM smedida.*
AFTER FIELD lado3
LET idx = arr_curr()
IF despiece[idx].unidad= "M2" THEN
LET despiece[idx].medida =
despiece[idx].cantidad * (despiece[idx].lado1 * despiece[idx].lado2)
END IF
IF despiece[idx].unidad= "M3" THEN
LET despiece[idx].medida =
despiece[idx].cantidad * (despiece[idx].lado1 * despiece[idx].lado2 * despiece[idx].lado3)
END IF
IF despiece[idx].unidad= "ML" THEN
LET despiece[idx].medida =
despiece[idx].cantidad * despiece[idx].lado1
LET despiece[idx].lado2 = 0
END IF
IF despiece[idx].unidad= "UD" OR despiece[idx].unidad= "GL" THEN
LET despiece[idx].medida = despiece[idx].cantidad
END IF
IF despiece[idx].unidad= "M2" THEN
LET despiece[idx].medida =
despiece[idx].cantidad * (despiece[idx].lado1 * despiece[idx].lado2)
END IF
IF despiece[idx].unidad= "M3" THEN
LET despiece[idx].medida =
despiece[idx].cantidad * (despiece[idx].lado1 * despiece[idx].lado2 * despiece[idx].lado3)
END IF
IF despiece[idx].unidad= "ML" THEN
LET despiece[idx].medida =
despiece[idx].cantidad * despiece[idx].lado1
LET despiece[idx].lado2 = 0
END IF
IF despiece[idx].unidad= "UD" OR despiece[idx].unidad= "GL" THEN
LET despiece[idx].medida = despiece[idx].cantidad
END IF
AFTER FIELD cantidad
LET idx = arr_curr()
@@ -376,9 +395,29 @@ REPORT activos(x,descripcion,xfecha_compra,xprecio,xsimbolo,xcodigo,xunidadmed,
END IF
PRINTX x,codigo_dp,descripcion,descripcion_dp,fecha,barcodigo_act,
Xfecha_compra,xprecio,xsimbolo,xcodigo,xvalor_medida,xcantidad,
xlado1,xlado2,xlado3,xunidadmed,cia_logo,xnum_emp,xnum_oc,cliente,nombre_empleado,bloque
xlado1,xlado2,xlado3,xunidadmed,cia_logo,xnum_emp,xnum_oc,cliente,nombre_empleado,bloque,
xnum_ocp,proveedor
END REPORT
# Valida la orden de compra (cotb00014, no anulada) y trae su proveedor (cotb00001)
FUNCTION busca_proveedor_oc()
LET proveedor = NULL
SELECT CAST(b.cod_sp AS VARCHAR(4))+'-'+
CAST(b.cod_sp_sec AS VARCHAR(4))+' '+RTRIM(b.nom_sp)
INTO proveedor
FROM cotb00014 a,cotb00001 b
WHERE a.num_oc = xnum_ocp AND a.status_t IS NULL AND
a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec
IF STATUS = NOTFOUND THEN
LET proveedor = NULL
DISPLAY BY NAME proveedor
CALL fgl_winmessage("INFO","ORDEN DE COMPRA NO EXISTE O ESTA ANULADA","INFO")
RETURN FALSE
END IF
DISPLAY BY NAME proveedor
RETURN TRUE
END FUNCTION
FUNCTION codigo_128(cod_val,pcantidad)
+5 -3
View File
@@ -59,7 +59,7 @@
<Grid gridHeight="22" gridWidth="100" name="Grid1" posX="1" posY="1">
<Group gridHeight="15" gridWidth="96" name="Group1" posX="1" posY="1">
<Label posX="1" posY="1" text="Tipo de Movimiento"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_mto" comment="1= EMPLEO 2=CAMBIO 3=NOVEDADES 4=TERMINACION o Presione Ctrl-W" defaultValue="1" fieldId="2" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="36" include="1|2|3|4" items="" name="adtb00020.cod_mto" posX="21" posY="1" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="1" table_alias_name="" widget="ComboBox"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_mto" comment="Seleccione el tipo de movimiento de la accion de personal" defaultValue="1" fieldId="2" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="36" items="" name="adtb00020.cod_mto" posX="21" posY="1" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="1" table_alias_name="" widget="ComboBox"/>
<Label posX="1" posY="2" text="Numero Documento"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="num_trx" fieldId="5" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="6" name="adtb00020.num_trx" noEntry="true" posX="21" posY="2" sqlTabName="adtb00020" sqlType="INTEGER" tabIndex="2" table_alias_name="" widget="Edit"/>
<Label posX="33" posY="2" text="Numero Solicitante"/>
@@ -79,7 +79,7 @@
<Label posX="39" posY="4" text="-"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="cod_puesto" comment="Digite el puesto del empleado o Presione Ctrl-W para busqueda" fieldId="12" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="3" name="adtb00020.cod_puesto" posX="41" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="10" table_alias_name="" widget="Edit"/>
<Label posX="46" posY="4" text="Cedula"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cedula" fieldId="13" gridHeight="1" gridWidth="14" name="cedula" picture="###-#######-#" posX="55" posY="4" sqlTabName="formonly" tabIndex="11" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cedula" fieldId="13" gridHeight="1" gridWidth="14" name="cedula" posX="55" posY="4" sqlTabName="formonly" tabIndex="11" table_alias_name="" widget="Edit"/>
<Label posX="70" posY="4" text="Cuenta No:"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cuenta_no" comment="No. de Cuenta para pago automatico" fieldId="1" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="14" name="adtb00003.cuenta_no" posX="81" posY="4" sqlTabName="adtb00003" sqlType="VARCHAR" tabIndex="12" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="5" text="Nombre"/>
@@ -100,10 +100,12 @@
<Item lstrtext="false" name="J" text="JORNAL"/>
</ComboBox>
<Label gridHeight="1" gridWidth="9" name="Label1" posX="63" posY="8" text="Estado Civil"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="estado_civil" comment=" S = Soltero C = Casado " defaultValue="U" fieldId="21" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="18" include="S|C" items="CASADO, SOLTERO, UNION LIBRE" name="adtb00003.estado_civil" posX="75" posY="8" sqlTabName="adtb00003" sqlType="CHAR" tabIndex="19" table_alias_name="" widget="ComboBox">
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="estado_civil" comment="Estado civil del colaborador" defaultValue="U" fieldId="21" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="18" items="CASADO, SOLTERO, UNION LIBRE, DIVORCIADO, VIUDO" name="adtb00003.estado_civil" posX="75" posY="8" sqlTabName="adtb00003" sqlType="CHAR" tabIndex="19" table_alias_name="" widget="ComboBox">
<Item lstrtext="false" name="C" text="CASADO"/>
<Item lstrtext="false" name="S" text="SOLTERO"/>
<Item lstrtext="false" name="U" text="UNION LIBRE"/>
<Item lstrtext="false" name="D" text="DIVORCIADO"/>
<Item lstrtext="false" name="V" text="VIUDO"/>
</ComboBox>
<Label posX="1" posY="9" text="Sexo"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="sexo" comment="Digite M Para Sexo Masculino y F Para el Femenino" defaultValue="F" fieldId="40" gridHeight="1" gridWidth="11" include="M|F" items="FEMENINO, MASCULINO" name="sexo" posX="21" posY="9" sqlTabName="formonly" sqlType="CHAR" tabIndex="20" table_alias_name="" widget="ComboBox">
+33
View File
@@ -0,0 +1,33 @@
{
------------------------------------------------------------------------
FORMULARIO : ADFMRP048
OBJETIVO : Parametros del reporte de horas de capacitacion por
colaborador. Es utilizada por: ADPRRP048
FECHA REALIZACION : Octubre 05, 2026
------------------------------------------------------------------------
}
LAYOUT (TEXT="HORAS DE CAPACITACION POR COLABORADOR", STYLE="basic")
GRID
{
<G "PARAMETROS" >
Fecha desde [f001 ] Hasta [f002 ]
Departamento [f003 ]
Ficha (opcional) [f004 ]
Filtro [f005]
}
END
ATTRIBUTES
DATEEDIT f001 = formonly.fecha_ini TYPE DATE, FORMAT="dd/mm/yyyy", REQUIRED,
COMMENT="Fecha de inicio de la capacitacion (plan o ejecucion)";
DATEEDIT f002 = formonly.fecha_fin TYPE DATE, FORMAT="dd/mm/yyyy", REQUIRED;
COMBOBOX f003 = formonly.departamento TYPE SMALLINT, NOT NULL,
COMMENT="Departamento del colaborador (TODOS = toda la empresa)";
EDIT f004 = formonly.num_emp TYPE INTEGER,
COMMENT="Deje en blanco para todos los colaboradores";
CHECKBOX f005 = formonly.solo_pend, VALUECHECKED="S", VALUEUNCHECKED="N",
TEXT="Solo colaboradores con horas pendientes",
COMMENT="Muestra solo a quienes tienen capacitaciones requeridas sin cubrir en el periodo";
END
INSTRUCTIONS
DELIMITERS " "
END
+31
View File
@@ -0,0 +1,31 @@
{
------------------------------------------------------------------------
FORMULARIO : ADFMRP049
OBJETIVO : Parametros del reporte de rotacion laboral.
Es utilizada por: ADPRRP049
FECHA REALIZACION : Octubre 05, 2026
------------------------------------------------------------------------
}
LAYOUT (TEXT="ROTACION LABORAL", STYLE="basic")
GRID
{
<G "PARAMETROS" >
Ano desde [f001 ] Hasta [f002 ]
Departamento [f003 ]
Tipo de empleado [f004 ]
Formato [f005 ]
}
END
ATTRIBUTES
EDIT f001 = formonly.ano_ini TYPE SMALLINT, REQUIRED;
EDIT f002 = formonly.ano_fin TYPE SMALLINT, REQUIRED;
COMBOBOX f003 = formonly.departamento TYPE SMALLINT, NOT NULL,
COMMENT="Departamento (TODOS = toda la empresa)";
COMBOBOX f004 = formonly.tipo_emp, NOT NULL,
ITEMS=(("TODOS","TODOS"),("NORMAL","NORMAL"),("TEMPORERO","TEMPORERO"));
COMBOBOX f005 = formonly.formato, NOT NULL,
ITEMS=(("R","RESUMEN MENSUAL"),("D","DETALLE DE SALIDAS POR CAUSA"));
END
INSTRUCTIONS
DELIMITERS " "
END
+1 -1
View File
@@ -7,7 +7,7 @@
FECHA REALIZACION : Junio 24, 1993
------------------------------------------------------------------------
}
DATABASE rayovac
DATABASE smarmotech
SCREEN SIZE 24 by 80
{
Busqueda de los Niveles de Empleados
+49
View File
@@ -0,0 +1,49 @@
{
------------------------------------------------------------------------
FORMULARIO : ADFMWD017
OBJETIVO : Ventana de capacitacion (requerida / tomada) de la
Accion de Personal. Es utilizada por: ADPRMT017
FECHA REALIZACION : Octubre 05, 2026
------------------------------------------------------------------------
}
LAYOUT (TEXT="CAPACITACION DEL EMPLEADO")
GRID
{
<G "CAPACITACION" >
Movimiento [f001 ]
Requerida a cubrir [f002 ]
Capacitacion [f003 ]
[b01 ]
Tipo de evento [f004 ]
Horas requeridas [f005 ]
Fecha inicio [f006 ] Fecha fin [f007 ]
Horas tomadas [f008 ]
Institucion/Facilitador [f009 ]
Costo [f010 ]
<G "RESUMEN DEL EMPLEADO" >
Requeridas [t001 ] Tomadas [t002 ] Pendientes [t003 ]
}
END
ATTRIBUTES
EDIT f001 = formonly.tipo_desc, NOENTRY, COLOR=BLUE;
COMBOBOX f002 = formonly.id_requerida TYPE INTEGER,
COMMENT="Capacitacion requerida pendiente que cubre esta capacitacion tomada";
COMBOBOX f003 = formonly.cod_cap TYPE INTEGER,
COMMENT="Seleccione la capacitacion. Si no existe use el boton Nuevo curso";
BUTTON b01 : nuevo_curso, TEXT="Nuevo curso";
COMBOBOX f004 = formonly.evento TYPE SMALLINT, NOENTRY,
ITEMS=((1,"SEMINARIO"),(2,"CURSO"),(3,"TALLER"),(4,"CONFERENCIA"));
EDIT f005 = formonly.horas_req TYPE DECIMAL(6,2), FORMAT="##&.&&";
DATEEDIT f006 = formonly.fecha_ini TYPE DATE, FORMAT="dd/mm/yyyy";
DATEEDIT f007 = formonly.fecha_fin TYPE DATE, FORMAT="dd/mm/yyyy";
EDIT f008 = formonly.horas_tom TYPE DECIMAL(6,2), FORMAT="##&.&&";
EDIT f009 = formonly.institucion, UPSHIFT;
EDIT f010 = formonly.costo TYPE DECIMAL(12,2), FORMAT="###,##&.&&";
EDIT t001 = formonly.trq TYPE DECIMAL(8,2), NOENTRY, COLOR=BLUE, FORMAT="###&.&&";
EDIT t002 = formonly.ttm TYPE DECIMAL(8,2), NOENTRY, COLOR=BLUE, FORMAT="###&.&&";
EDIT t003 = formonly.tpd TYPE DECIMAL(8,2), NOENTRY, COLOR=RED, FORMAT="###&.&&";
END
INSTRUCTIONS
DELIMITERS " "
END
+32
View File
@@ -0,0 +1,32 @@
{
------------------------------------------------------------------------
FORMULARIO : ADFMWD018
OBJETIVO : Ventana de desvinculacion (causa de salida) de la
Accion de Personal. Es utilizada por: ADPRMT017
FECHA REALIZACION : Octubre 05, 2026
------------------------------------------------------------------------
}
LAYOUT (TEXT="DESVINCULACION DEL EMPLEADO")
GRID
{
<G "SALIDA" >
Fecha de salida [f001 ]
Causa [f002 ]
Clasificacion [f003 ]
Recontratable [f004]
Detalle [f005 ]
[f005 ]
}
END
ATTRIBUTES
DATEEDIT f001 = formonly.fecha_salida TYPE DATE, FORMAT="dd/mm/yyyy",
COMMENT="Ultimo dia laborado";
COMBOBOX f002 = formonly.cod_causa TYPE SMALLINT,
COMMENT="Causa de la salida (se usa para el indicador de rotacion)";
EDIT f003 = formonly.clase_desc, NOENTRY, COLOR=BLUE;
COMBOBOX f004 = formonly.recontratable, ITEMS=(("S","SI"),("N","NO"));
TEXTEDIT f005 = formonly.detalle, UPSHIFT, SCROLLBARS=NONE, STRETCH=X;
END
INSTRUCTIONS
DELIMITERS " "
END
+29
View File
@@ -0,0 +1,29 @@
{
------------------------------------------------------------------------
FORMULARIO : ADFMWD019
OBJETIVO : Alta de una capacitacion en el catalogo (adtb00059)
desde la ventana de capacitacion. Es utilizada por:
ADPRMT017 (boton Nuevo curso)
FECHA REALIZACION : Octubre 05, 2026
------------------------------------------------------------------------
}
LAYOUT (TEXT="NUEVA CAPACITACION")
GRID
{
<G "CATALOGO DE CAPACITACIONES" >
Nombre [f001 ]
Tipo de evento [f002 ]
Horas estandar [f003 ]
}
END
ATTRIBUTES
EDIT f001 = formonly.nom_cap, UPSHIFT, REQUIRED,
COMMENT="Nombre de la capacitacion (revise antes que no exista en la lista)";
COMBOBOX f002 = formonly.evento TYPE SMALLINT, NOT NULL,
ITEMS=((1,"SEMINARIO"),(2,"CURSO"),(3,"TALLER"),(4,"CONFERENCIA"));
EDIT f003 = formonly.horas TYPE DECIMAL(6,2), FORMAT="##&.&&",
COMMENT="Horas que dura normalmente esta capacitacion";
END
INSTRUCTIONS
DELIMITERS " "
END
+11 -11
View File
@@ -55,7 +55,8 @@ FUNCTION adpcad001()
{WHENEVER ERROR CONTINUE}
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
INPUT BY NAME depto.* #,m_estado_a,m_estado_m
INPUT BY NAME depto.departamento, depto.nom_dpto, depto.status_t, depto.us_crea,
depto.fech_crea, depto.us_mod, depto.fech_mod #,m_estado_a,m_estado_m
## VERIFICA QUE EL CODIGO NO EXISTA EN EL CATALOGO DE DEPARTAMENTO. SI EXISTE,
## ENTONCES DESPLEGA LOS DATOS DEL REGISTRO EXISTENTE.
@@ -77,7 +78,8 @@ FUNCTION adpcad001()
NEXT FIELD departamento
END IF
DISPLAY BY NAME depto.*
DISPLAY BY NAME depto.departamento, depto.nom_dpto, depto.status_t, depto.us_crea,
depto.fech_crea, depto.us_mod, depto.fech_mod
LET numero_msg = 12
CALL msg(numero_msg)
LET depto.nom_dpto = NULL
@@ -113,10 +115,12 @@ FUNCTION adpcad001()
CALL msg(numero_msg)
NEXT FIELD nom_dpto
ELSE
INSERT INTO adtb00001 VALUES (depto.departamento,depto.nom_dpto,
INSERT INTO adtb00001 (departamento,nom_dpto,status_t,us_crea,fech_crea,us_mod,fech_mod)
VALUES (depto.departamento,depto.nom_dpto,
null, SUSER_SNAME (), GETDATE (), null, null)
INSERT INTO adtb00029 VALUES (depto.departamento,m_estado_a,m_estado_m,
INSERT INTO adtb00029 (departamento,estado_a,estado_m,depto_ant,estatus_t,us_crea,fech_crea,us_mod,fech_mod)
VALUES (depto.departamento,m_estado_a,m_estado_m,
depto.departamento,null,SUSER_SNAME(), GETDATE (),null,null)
LET m_depto = depto.departamento
@@ -159,7 +163,7 @@ FUNCTION adpcmf001()
RETURN
END IF
LET SELEC = " SELECT UNIQUE * FROM adtb00001 where ",
LET SELEC = " SELECT DISTINCT * FROM adtb00001 where ",
" status_t is null and ",
criterio clipped,
" ORDER BY 1"
@@ -246,9 +250,7 @@ FUNCTION adpcmf001()
END IF
## SE SELECCIONAN LOS CAMPOS QUE SON MODIFICABLES
INPUT BY NAME depto.nom_dpto,
m_estado_a,
m_estado_m WITHOUT DEFAULTS
INPUT BY NAME depto.nom_dpto WITHOUT DEFAULTS
AFTER FIELD nom_dpto
IF depto.nom_dpto IS NULL THEN
@@ -283,9 +285,7 @@ FUNCTION adpcmf001()
UPDATE chequeo SET nom_dpto = depto.nom_dpto
WHERE departamento = depto.departamento
UPDATE adtb00029 SET estado_a = m_estado_a,
estado_m = m_estado_m,
us_mod = SUSER_NAME(),
UPDATE adtb00029 SET us_mod = SUSER_NAME(),
fech_mod = GETDATE()
WHERE departamento = depto.departamento
+752 -54
View File
@@ -44,6 +44,38 @@ DEFINE vacacion RECORD
tipo_sueldo CHAR(20),
proporcion_vacaciones,salario_quincenal DEC(12,2)
#### VARIABLES PARA MODULO DE CAPACITACION (2026-10-05) ##########
#### tipo_mov 'CAPACITACION REQUERIDA' / 'CAPACITACION TOMADA'
#### detalle en adtb00060, catalogo en adtb00059 (adprmt017_capacitacion.sql)
DEFINE capac RECORD
tipo_desc VARCHAR(30),
id_requerida INTEGER,
cod_cap INTEGER,
evento SMALLINT,
horas_req DEC(6,2),
fecha_ini DATE,
fecha_fin DATE,
horas_tom DEC(6,2),
institucion VARCHAR(100),
costo DEC(12,2)
END RECORD
DEFINE cap_tot RECORD
trq, ttm, tpd DEC(8,2)
END RECORD
#### VARIABLES PARA DESVINCULACION (2026-10-05) ##########
#### tipo_mov 'CANCELAR' (mov. 4 DESVINCULAR) / 'DESVINCULAR' / 'TERMINO'
#### detalle en adtb00062, causas en adtb00061 (adprmt017_desvinculacion.sql)
DEFINE desv RECORD
fecha_salida DATE,
cod_causa SMALLINT,
clase_desc VARCHAR(20),
recontratable CHAR(1),
detalle VARCHAR(200)
END RECORD
DEFINE realiza_desvinculacion BOOLEAN
DEFINE realiza_capacitacion BOOLEAN,
cap_sql STRING
#### MODULO MENU GENERAL DE ACCION DE NOMINA #####
MAIN
@@ -257,7 +289,7 @@ FUNCTION adpcad017()
## SELECCIONA LA FECHA DE INGRESO Y EL SUELDO DE LA TABLA DE CONTRATACION
## Y SELECCION DE EMPLEADOS
SELECT UNIQUE convert(char(10),a.fech_efec,101),a.sueldo,b.cod_sol
SELECT UNIQUE a.fech_efec,a.sueldo,b.cod_sol
INTO contra.fech_efec,contra.sueldo,parece.cod_sol
FROM adtb00019 a,adtb00018 b
WHERE a.cod_sol = b.cod_sol and b.cod_sol = acc_per.cod_sol and
@@ -269,7 +301,7 @@ FUNCTION adpcad017()
END IF
IF xtipo <> 'INGRESO' THEN
IF xtipo IS NULL OR xtipo <> 'INGRESO' THEN
LET acc_per.cod_sol = NULL
NEXT FIELD fecha
END IF
@@ -277,9 +309,9 @@ FUNCTION adpcad017()
## VERIFICA QUE EL SOLICITANTE EXISTE EN LA TABLA DE SOLICITANTES. SI EXISTE
## LO PRESENTA EN PANTALLA.
SELECT cod_sol,convert(char(10),fecha,101),nom1_sol,nom2_sol,apell1_sol,
SELECT cod_sol,fecha,nom1_sol,nom2_sol,apell1_sol,
apell2_sol,calle,casa_num,barrio,urbanizacion,telefono,
cod_provincia,convert(char(10),fech_nac,101),cod_nac,estado_civil,estatura,
cod_provincia,fech_nac,cod_nac,estado_civil,estatura,
peso,cedula,licencia,tipo_sangre,cod_puesto,
cod_prof,sexo,status_t,us_crea,fech_crea,us_mod,fech_mod,
serie
@@ -340,12 +372,12 @@ FUNCTION adpcad017()
## CHEQUEA QUE EL EMPLEADO EXISTA EN LA TABLA DE EMPLEADOS. SI EXISTE
## DESPLEGA TODA LA INFORMACION REFERENTE AL EMPLEADO.
IF xtipo <> 'INGRESO' THEN
IF xtipo IS NULL OR xtipo <> 'INGRESO' THEN
SELECT b.departamento,b.nivel_emp,b.cod_puesto,b.nom1_emp,
b.nom2_emp,b.apell1_emp,b.apell2_emp,b.sueldo_ac,
b.nomina,b.estado_civil,b.tipo_sangre,
b.cedula,b.cuenta_no,CONVERT(char(10),b.fech_efec,103),b.tipo_sueldo
b.cedula,b.cuenta_no,b.fech_efec,b.tipo_sueldo
INTO acc_per.departamento,acc_per.nivel_emp,acc_per.cod_puesto,
nombre9,nombre10,apellido9,apellido10,acc_per.sueldo_ac,
acc_per.nomina,acc_per.estado_civil,acc_per.tipo_sangre,
@@ -370,8 +402,8 @@ FUNCTION adpcad017()
WHERE k.cod_puesto = acc_per.cod_puesto and k.status_t is null
SELECT UNIQUE a.sexo INTO acc_per.sexo FROM adtb00021 a
WHERE a.num_emp = acc_per.num_emp AND a.cod_par = 0 AND
a.sec_par = 0
WHERE a.num_emp = acc_per.num_emp AND ISNULL(a.cod_par,0) = 0 AND
ISNULL(a.sec_par,0) = 0
SELECT a.nis INTO pnis FROM adtb00030 a
WHERE a.num_emp = acc_per.num_emp
@@ -479,6 +511,28 @@ FUNCTION adpcad017()
END IF
END IF
## LLAMA LA VENTANA DE CAPACITACION (REQUERIDA / TOMADA)
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
CALL capacitacion('A') RETURNING realiza_capacitacion
IF NOT realiza_capacitacion THEN
RETURN
END IF
NEXT FIELD observacion
END IF
## LLAMA LA VENTANA DE DESVINCULACION (CAUSA DE SALIDA)
IF es_desvinculacion(xtipo) THEN
IF empleado_desactivado(acc_per.num_emp) THEN
CALL fgl_winmessage("INFO","ESTE EMPLEADO YA ESTA DESACTIVADO","info")
NEXT FIELD num_emp
END IF
CALL desvinculacion('A') RETURNING realiza_desvinculacion
IF NOT realiza_desvinculacion THEN
RETURN
END IF
NEXT FIELD observacion
END IF
AFTER FIELD sueldo_ac
IF acc_per.sueldo_ac IS NULL OR acc_per.sueldo_ac < 0 THEN
LET numero_msg = 16
@@ -666,9 +720,18 @@ FUNCTION adpcad017()
RETURN
END IF
## SE ASEGURA DE QUE TODA LA INFORMACION ESTE CORRECTA
PROMPT "Informacion Correcta? (S/N).." FOR CHAR opt
LET opt = UPSHIFT(opt)
## SE ASEGURA DE QUE TODA LA INFORMACION ESTE CORRECTA
IF fgl_winquestion("ACCION DE PERSONAL","La informacion esta correcta? Desea grabar la accion?",
"YES","YES|NO","question",0) = "YES" THEN
LET opt = "S"
ELSE
LET opt = "N"
# Antes de 2026-10-05 un "N" seguia de largo: mensaje de grabado,
# UPDATE de adtb00028 con num_trx nulo y pregunta de impresion.
LET numero_msg = 2
CALL msg(numero_msg)
RETURN
END IF
## SI NO HA OCURRIDO NINGUN PROBLEMA SE PROCEDE A INSERTAR LA INFORMACION
## EN LA TABLA DE ACCION DE PERSONAL
@@ -751,8 +814,17 @@ FUNCTION adpcad017()
VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.departamento,acc_per.nivel_emp,
acc_per.cod_puesto,vacacion.cod_mov2,salario_quincenal,usuarios,getdate(),
acc_per.num_trx,acc_per.cod_mto)
END IF
END IF
END IF
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
CALL graba_capacitacion()
END IF
## DESVINCULACION: DESACTIVA AL EMPLEADO (status_t = 'D') Y GUARDA LA CAUSA
IF es_desvinculacion(xtipo) THEN
CALL graba_desvinculacion()
END IF
################## DATOS PARA INSERTAR O MODIFICAR PETB00003 ############
@@ -833,7 +905,7 @@ FUNCTION adpcad017()
personal.serie USING "<<<"
SELECT UNIQUE num_emp FROM adtb00021
WHERE num_emp = acc_per.num_emp AND cod_par = 0 AND sec_par = 0
WHERE num_emp = acc_per.num_emp AND ISNULL(cod_par,0) = 0 AND ISNULL(sec_par,0) = 0
IF STATUS = NOTFOUND THEN
@@ -877,16 +949,9 @@ FUNCTION adpcad017()
COMMIT WORK
END IF
## ACTUALIZA LA TABLA DE EMPLEADOS EN CUANTO AL MOVIMIENTO DE LAS TERMINACIONES
## DE LA ACCION DE PERSONAL
IF xtipo = "TERMINO" THEN
UPDATE adtb00003 SET status_t = "T"
WHERE num_emp = acc_per.num_emp
UPDATE adtb00021 SET status_t = "T"
WHERE num_emp = acc_per.num_emp
END IF
## LAS TERMINACIONES (TERMINO/CANCELAR/DESVINCULAR) SE GRABAN DENTRO DE LA
## TRANSACCION EN graba_desvinculacion() (2026-10-05). Antes ponia status_t='T'
## pero el movimiento existente es 'CANCELAR' y nunca entraba aqui.
## ACTUALIZA LA TABLA DE SECUENCIA NUMERICA
UPDATE adtb00028 SET num_trx = acc_per.num_trx
@@ -895,19 +960,28 @@ FUNCTION adpcad017()
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
LABEL preg:
PROMPT "Desea Imprimir Este Documento (S/N)?..." FOR CHAR optt
LET optt = UPSHIFT(optt)
IF optt IS NULL OR (optt != "S" AND optt != "N") THEN
GOTO preg
END IF
IF fgl_winquestion("ACCION DE PERSONAL","Accion grabada. Desea imprimir el documento?",
"NO","YES|NO","question",0) = "YES" THEN
LET optt = "S"
ELSE
LET optt = "N"
END IF
IF optt = "S" THEN
CALL configureoutput("PDF") RETURNING handler
START REPORT imp_accion TO XML HANDLER handler
OUTPUT TO REPORT imp_accion()
FINISH REPORT imp_accion
RUN imprime
# 2026-10-05: antes usaba configureoutput("PDF"), que carga el motor
# SIN diseno (loadCurrentSettings(NULL)) -> PDF en blanco. Ahora usa
# el mismo adprmt017.4rp que la consulta.
IF fgl_report_loadCurrentSettings("adprmt017.4rp") THEN
CALL fgl_report_selectDevice("PDF")
CALL fgl_report_selectPreview(TRUE)
LET handler = fgl_report_commitCurrentSettings()
IF handler IS NOT NULL THEN
START REPORT imp_accion TO XML HANDLER handler
OUTPUT TO REPORT imp_accion()
FINISH REPORT imp_accion
END IF
ELSE
CALL fgl_winmessage("INFO","No se pudo cargar el diseno adprmt017.4rp","stop")
END IF
END IF
END FUNCTION
@@ -927,14 +1001,14 @@ FUNCTION adpcmf017()
END IF
LET selec =
"SELECT UNIQUE a.num_trx,a.cod_mto,a.cod_sol,convert(char(10),a.fecha,103), ",
" CONVERT(CHAR(10),a.fech_efec,103),a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
"SELECT UNIQUE a.num_trx,a.cod_mto,a.cod_sol,a.fecha, ",
" a.fech_efec,a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
" a.sueldo_ac,a.nomina,a.estado_civil,b.sexo,a.tipo_sangre, ",
" a.sueldo_lq,a.observacion,a.num1_emp,a.departamento1, ",
" a.nivel1_emp,a.cod1_puesto,a.num2_emp,a.departamento2, ",
" a.nivel2_emp,a.cod2_puesto,a.num3_emp,a.departamento3, ",
" a.nivel3_emp,a.cod3_puesto,c.cedula,a.us_crea,a.fech_crea,a.us_mod, ",
" a.fech_mod,CASE a.status_t WHEN 'E' THEN 'ANULADO' ELSE 'ACTIVO' END, CONVERT(CHAR(10),c.fech_nac,103) ",
" a.fech_mod,CASE a.status_t WHEN 'E' THEN 'ANULADO' ELSE 'ACTIVO' END, c.fech_nac ",
"FROM adtb00020 a,adtb00003 c LEFT OUTER JOIN adtb00021 b ON b.num_emp = c.num_emp ",
"WHERE a.num_emp = c.num_emp AND ",criterio clipped,
" ORDER BY a.num_emp"
@@ -1506,7 +1580,7 @@ FUNCTION adpcmf017()
END IF
UPDATE adtb00021 SET sexo = acc_per.sexo WHERE num_emp = acc_per.num_emp
AND cod_par = 0 AND sec_par=0
AND ISNULL(cod_par,0) = 0 AND ISNULL(sec_par,0) = 0
UPDATE adtb00017 SET departamento = acc_per.departamento,
nivel_emp = acc_per.nivel_emp,
cod_puesto = acc_per.cod_puesto,
@@ -1559,7 +1633,13 @@ FUNCTION adpcmf017()
UPDATE notb00007 SET status_t ="E",
us_mod = usuarios,
fech_mod = getdate()
WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto
WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
CALL anula_capacitacion(acc_per.num_trx)
END IF
IF es_desvinculacion(xtipo) THEN
CALL anula_desvinculacion(acc_per.num_trx, acc_per.num_emp)
END IF
COMMIT WORK
LET numero_msg = 39
CALL msg(numero_msg)
@@ -1588,7 +1668,7 @@ FUNCTION desplegar()
SELECT b.departamento,b.nivel_emp,b.cod_puesto,b.nom1_emp,
b.nom2_emp,b.apell1_emp,b.apell2_emp,b.sueldo_ac,
b.nomina,b.estado_civil,b.tipo_sangre,
b.cedula,b.cuenta_no,CONVERT(char(10),b.fech_efec,103),
b.cedula,b.cuenta_no,b.fech_efec,
b.sueldo_ac
INTO acc_per.departamento,acc_per.nivel_emp,acc_per.cod_puesto,
nombre9,nombre10,apellido9,apellido10,acc_per.sueldo_ac,
@@ -1684,7 +1764,7 @@ nombre5 clipped," ",nombre6 clipped," ",apellido5 clipped," ",apellido6 clipped
## DATOS VACACIONES
IF xtipo = 'VACACIONES' THEN
INITIALIZE vacacion.* TO NULL
SELECT a.cod_mov,a.cod_mov2,a.num_dias_disfrute,CONVERT(CHAR(10),a.fecha_sal,103),CONVERT(CHAR(10),a.fecha_ent,103),
SELECT a.cod_mov,a.cod_mov2,a.num_dias_disfrute,a.fecha_sal,a.fecha_ent,
a.num_nomi,
a.num_dias_disfrute,a.periodo,a.valor_vacaciones,a.num_dias_pagados,a.proporcion_vacaciones
INTO vacacion.cod_mov1,vacacion.cod_mov2,vacacion.dias_vac,vacacion.fecha_sal,vacacion.fecha_ent,
@@ -1704,8 +1784,19 @@ nombre5 clipped," ",nombre6 clipped," ",apellido5 clipped," ",apellido6 clipped
END IF
CALL vacaciones('C') RETURNING realiza_vacaciones # CUANDO ESTA CONSULTANDO ES 'C' Y ADICIONANDO ES 'A'
END IF
## DATOS CAPACITACION
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
CALL carga_capacitacion(acc_per.num_trx)
CALL capacitacion('C') RETURNING realiza_capacitacion
END IF
## DATOS DESVINCULACION
IF es_desvinculacion(xtipo) THEN
IF carga_desvinculacion(acc_per.num_trx) THEN
CALL desvinculacion('C') RETURNING realiza_desvinculacion
END IF
END IF
@@ -1839,7 +1930,7 @@ FUNCTION vacaciones(operacion)
LET salario_acumulado = 0
IF vacacion.cod_mov1 = 36 THEN
LET salario = 0
SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario
SELECT a.fech_efec,a.sueldo_ac INTO fecha_entrada_emp,salario
FROM adtb00003 a
WHERE a.num_emp = acc_per.num_emp
@@ -1920,7 +2011,7 @@ FUNCTION vacaciones(operacion)
END INPUT
ELSE
LET salario = 0
SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario
SELECT a.fech_efec,a.sueldo_ac INTO fecha_entrada_emp,salario
FROM adtb00003 a
WHERE a.num_emp = acc_per.num_emp
LET salario_quincenal = salario /2
@@ -1946,7 +2037,574 @@ FUNCTION vacaciones(operacion)
END IF
END FUNCTION
## VENTANA DE LOS NIVELES DEL LOS EMPLEADOS
##################################################################
## CAPACITACION (2026-10-05)
## 'CAPACITACION REQUERIDA' : plan de horas por empleado (tipo_reg 'R')
## 'CAPACITACION TOMADA' : horas ejecutadas (tipo_reg 'T'), puede
## cubrir una requerida (id_requerida)
## Tablas adtb00059/adtb00060 via SQL dinamico (no estan en smarmotech.sch)
##################################################################
FUNCTION capacitacion(operacion)
DEFINE operacion VARCHAR(1),
es_requerida BOOLEAN,
pend DEC(8,2),
xcod INTEGER,
xnum INTEGER
LET int_flag = FALSE
LET es_requerida = (xtipo = "CAPACITACION REQUERIDA")
OPEN WINDOW adwindow17 AT 10,12 WITH FORM "adfmwd017"
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
CALL combo_capacitaciones()
CALL combo_requeridas(acc_per.num_emp, operacion = 'C')
CALL totales_capacitacion(acc_per.num_emp)
IF operacion = 'A' THEN
INITIALIZE capac.* TO NULL
LET capac.tipo_desc = xtipo
LET capac.fecha_ini = acc_per.fech_efec
INPUT BY NAME capac.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
BEFORE INPUT
DISPLAY BY NAME cap_tot.*
IF es_requerida THEN
CALL DIALOG.setFieldActive("id_requerida", FALSE)
CALL DIALOG.setFieldActive("horas_tom", FALSE)
CALL DIALOG.setFieldActive("fecha_fin", FALSE)
ELSE
CALL DIALOG.setFieldActive("horas_req", FALSE)
END IF
ON CHANGE id_requerida
IF capac.id_requerida IS NOT NULL THEN
CALL datos_requerida(capac.id_requerida)
RETURNING capac.cod_cap, capac.evento, pend
LET capac.horas_req = pend
IF capac.horas_tom IS NULL THEN
LET capac.horas_tom = pend
END IF
CALL DIALOG.setFieldActive("cod_cap", FALSE)
ELSE
LET capac.cod_cap = NULL
LET capac.evento = NULL
LET capac.horas_req = NULL
CALL DIALOG.setFieldActive("cod_cap", TRUE)
END IF
ON CHANGE cod_cap
IF capac.cod_cap IS NOT NULL THEN
CALL datos_curso(capac.cod_cap) RETURNING capac.evento, pend
IF es_requerida THEN
LET capac.horas_req = pend
ELSE
IF capac.horas_tom IS NULL THEN
LET capac.horas_tom = pend
END IF
END IF
END IF
ON ACTION nuevo_curso
CALL nuevo_curso() RETURNING xcod
IF xcod IS NOT NULL THEN
CALL combo_capacitaciones()
LET capac.cod_cap = xcod
CALL datos_curso(capac.cod_cap) RETURNING capac.evento, pend
IF es_requerida THEN
LET capac.horas_req = pend
ELSE
LET capac.horas_tom = pend
END IF
END IF
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF capac.cod_cap IS NULL THEN
CALL fgl_winmessage("INFO","DEBE SELECCIONAR LA CAPACITACION","info")
NEXT FIELD cod_cap
END IF
IF es_requerida THEN
IF capac.horas_req IS NULL OR capac.horas_req <= 0 THEN
CALL fgl_winmessage("INFO","DEBE INDICAR LAS HORAS REQUERIDAS","info")
NEXT FIELD horas_req
END IF
# Evita duplicar una requerida que todavia esta pendiente
LET xnum = 0
LET cap_sql =
"SELECT COUNT(*) FROM adtb00060 r WHERE r.num_emp = ? AND r.cod_cap = ? ",
" AND r.tipo_reg = 'R' AND r.status_t IS NULL ",
" AND r.horas_req > ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0)"
PREPARE p_cap_dup FROM cap_sql
EXECUTE p_cap_dup INTO xnum USING acc_per.num_emp, capac.cod_cap
IF xnum > 0 THEN
IF fgl_winquestion("INFO",
"ESTE EMPLEADO YA TIENE ESTA CAPACITACION REQUERIDA PENDIENTE. DESEA REGISTRARLA DE NUEVO?",
"NO","YES|NO","QUESTION",0) = "NO" THEN
NEXT FIELD cod_cap
END IF
END IF
ELSE
IF capac.horas_tom IS NULL OR capac.horas_tom <= 0 THEN
CALL fgl_winmessage("INFO","DEBE INDICAR LAS HORAS TOMADAS","info")
NEXT FIELD horas_tom
END IF
IF capac.fecha_ini IS NULL THEN
CALL fgl_winmessage("INFO","DEBE INDICAR LA FECHA DE INICIO","info")
NEXT FIELD fecha_ini
END IF
IF capac.fecha_fin IS NOT NULL AND capac.fecha_fin < capac.fecha_ini THEN
CALL fgl_winmessage("INFO","LA FECHA FIN NO PUEDE SER MENOR QUE LA FECHA INICIO","info")
NEXT FIELD fecha_fin
END IF
IF capac.id_requerida IS NOT NULL AND capac.horas_tom > capac.horas_req THEN
IF fgl_winquestion("INFO",
"LAS HORAS TOMADAS EXCEDEN LAS HORAS PENDIENTES DE LA REQUERIDA. CONTINUAR?",
"NO","YES|NO","QUESTION",0) = "NO" THEN
NEXT FIELD horas_tom
END IF
END IF
END IF
END INPUT
ELSE
LET capac.tipo_desc = xtipo
DISPLAY BY NAME capac.*, cap_tot.*
MENU "Capacitacion"
COMMAND "Cerrar" "Cierra la ventana de capacitacion"
EXIT MENU
ON ACTION close
EXIT MENU
END MENU
END IF
CLOSE WINDOW adwindow17
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
INITIALIZE capac.* TO NULL
RETURN FALSE
END IF
RETURN TRUE
END FUNCTION
## LLENA EL COMBO DEL CATALOGO DE CAPACITACIONES
FUNCTION combo_capacitaciones()
DEFINE cb ui.ComboBox,
xcod INTEGER,
xnom VARCHAR(100)
LET cb = ui.ComboBox.forName("formonly.cod_cap")
IF cb IS NULL THEN
RETURN
END IF
CALL cb.clear()
LET cap_sql =
"SELECT cod_cap, nom_cap FROM adtb00059 WHERE status_t IS NULL ORDER BY nom_cap"
PREPARE p_cap_cat FROM cap_sql
DECLARE c_cap_cat CURSOR FOR p_cap_cat
FOREACH c_cap_cat INTO xcod, xnom
CALL cb.addItem(xcod, xnom CLIPPED)
END FOREACH
FREE c_cap_cat
END FUNCTION
## LLENA EL COMBO DE CAPACITACIONES REQUERIDAS DEL EMPLEADO
## p_todas = FALSE solo las que tienen horas pendientes (captura)
FUNCTION combo_requeridas(p_num_emp, p_todas)
DEFINE p_num_emp INTEGER,
p_todas BOOLEAN,
cb ui.ComboBox,
xid INTEGER,
xnom VARCHAR(100),
pend DEC(8,2)
LET cb = ui.ComboBox.forName("formonly.id_requerida")
IF cb IS NULL THEN
RETURN
END IF
CALL cb.clear()
LET cap_sql =
"SELECT r.id_cap, c.nom_cap, ",
" ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0) ",
"FROM adtb00060 r JOIN adtb00059 c ON c.cod_cap = r.cod_cap ",
"WHERE r.num_emp = ? AND r.tipo_reg = 'R' AND r.status_t IS NULL ",
"ORDER BY c.nom_cap"
PREPARE p_cap_req FROM cap_sql
DECLARE c_cap_req CURSOR FOR p_cap_req
FOREACH c_cap_req USING p_num_emp INTO xid, xnom, pend
IF NOT p_todas AND pend <= 0 THEN
CONTINUE FOREACH
END IF
CALL cb.addItem(xid, xnom CLIPPED || " (" || (pend USING "<<<&.&&") || " h pend.)")
END FOREACH
FREE c_cap_req
END FUNCTION
## TOTALES DE HORAS DEL EMPLEADO: REQUERIDAS, TOMADAS Y PENDIENTES
FUNCTION totales_capacitacion(p_num_emp)
DEFINE p_num_emp INTEGER
LET cap_tot.trq = 0
LET cap_tot.ttm = 0
LET cap_sql =
"SELECT ISNULL(SUM(CASE WHEN tipo_reg = 'R' THEN horas_req END),0), ",
" ISNULL(SUM(CASE WHEN tipo_reg = 'T' THEN horas_tom END),0) ",
"FROM adtb00060 WHERE num_emp = ? AND status_t IS NULL"
PREPARE p_cap_tot FROM cap_sql
EXECUTE p_cap_tot INTO cap_tot.trq, cap_tot.ttm USING p_num_emp
# Pendiente = lo requerido que falta por cubrir (las tomadas sin requerida no restan)
LET cap_sql =
"SELECT ISNULL(SUM(CASE WHEN x.pend > 0 THEN x.pend ELSE 0 END),0) FROM ( ",
" SELECT ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0) pend ",
" FROM adtb00060 r WHERE r.num_emp = ? AND r.tipo_reg = 'R' AND r.status_t IS NULL) x"
PREPARE p_cap_pend FROM cap_sql
EXECUTE p_cap_pend INTO cap_tot.tpd USING p_num_emp
END FUNCTION
## TIPO DE EVENTO Y HORAS ESTANDAR DE UN CURSO DEL CATALOGO
FUNCTION datos_curso(p_cod)
DEFINE p_cod INTEGER,
xev SMALLINT,
xhoras DEC(8,2)
LET cap_sql = "SELECT evento, horas FROM adtb00059 WHERE cod_cap = ?"
PREPARE p_cap_cur FROM cap_sql
EXECUTE p_cap_cur INTO xev, xhoras USING p_cod
RETURN xev, xhoras
END FUNCTION
## CURSO, EVENTO Y HORAS PENDIENTES DE UNA CAPACITACION REQUERIDA
FUNCTION datos_requerida(p_id)
DEFINE p_id INTEGER,
xcod INTEGER,
xev SMALLINT,
pend DEC(8,2)
LET cap_sql =
"SELECT r.cod_cap, c.evento, ",
" ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM adtb00060 t ",
" WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0) ",
"FROM adtb00060 r JOIN adtb00059 c ON c.cod_cap = r.cod_cap WHERE r.id_cap = ?"
PREPARE p_cap_dreq FROM cap_sql
EXECUTE p_cap_dreq INTO xcod, xev, pend USING p_id
RETURN xcod, xev, pend
END FUNCTION
## AGREGA UN CURSO AL CATALOGO adtb00059 Y DEVUELVE SU CODIGO
FUNCTION nuevo_curso()
DEFINE nc RECORD
nom_cap VARCHAR(100),
evento SMALLINT,
horas DEC(6,2)
END RECORD,
xnom VARCHAR(100),
xev SMALLINT,
xhoras DEC(6,2),
xcod INTEGER
# Ventana adfmwd019: nombre, tipo y horas en un solo paso
LET int_flag = FALSE
LET nc.nom_cap = NULL
LET nc.evento = 2
LET nc.horas = NULL
OPEN WINDOW adwindow19 AT 12,14 WITH FORM "adfmwd019"
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
INPUT BY NAME nc.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF nc.nom_cap IS NULL OR length(nc.nom_cap CLIPPED) = 0 THEN
CALL fgl_winmessage("INFO","DEBE INDICAR EL NOMBRE DE LA CAPACITACION","info")
NEXT FIELD nom_cap
END IF
IF nc.horas IS NOT NULL AND nc.horas < 0 THEN
CALL fgl_winmessage("INFO","LAS HORAS NO PUEDEN SER NEGATIVAS","info")
NEXT FIELD horas
END IF
END INPUT
CLOSE WINDOW adwindow19
IF int_flag THEN
LET int_flag = FALSE
RETURN NULL
END IF
LET xnom = upshift(nc.nom_cap CLIPPED)
LET xev = nc.evento
IF xev IS NULL OR xev < 1 OR xev > 4 THEN
LET xev = 2
END IF
LET xhoras = nc.horas
IF xhoras IS NULL THEN
LET xhoras = 0
END IF
LET xcod = NULL
LET cap_sql = "SELECT cod_cap FROM adtb00059 WHERE nom_cap = ? AND status_t IS NULL"
PREPARE p_cap_bnom FROM cap_sql
EXECUTE p_cap_bnom INTO xcod USING xnom
IF xcod IS NOT NULL THEN
CALL fgl_winmessage("INFO","ESA CAPACITACION YA EXISTE EN EL CATALOGO, SE SELECCIONA","info")
RETURN xcod
END IF
LET cap_sql =
"INSERT INTO adtb00059 (nom_cap, evento, horas, us_crea, fech_crea) ",
"VALUES (?, ?, ?, SUSER_SNAME(), GETDATE())"
PREPARE p_cap_ins_cat FROM cap_sql
EXECUTE p_cap_ins_cat USING xnom, xev, xhoras
EXECUTE p_cap_bnom INTO xcod USING xnom
RETURN xcod
END FUNCTION
## GRABA EL DETALLE DE CAPACITACION DE LA ACCION (dentro de la transaccion)
FUNCTION graba_capacitacion()
DEFINE xtipo_reg CHAR(1)
IF xtipo = "CAPACITACION REQUERIDA" THEN
LET xtipo_reg = "R"
LET capac.id_requerida = NULL
LET capac.horas_tom = NULL
LET capac.fecha_fin = NULL
ELSE
LET xtipo_reg = "T"
LET capac.horas_req = NULL
END IF
LET cap_sql =
"INSERT INTO adtb00060 (num_trx, num_emp, tipo_reg, cod_cap, id_requerida, ",
" horas_req, horas_tom, fecha_ini, fecha_fin, institucion, costo, us_crea, fech_crea) ",
"VALUES (?,?,?,?,?,?,?,?,?,?,?, SUSER_SNAME(), GETDATE())"
PREPARE p_cap_ins FROM cap_sql
EXECUTE p_cap_ins USING acc_per.num_trx, acc_per.num_emp, xtipo_reg, capac.cod_cap,
capac.id_requerida, capac.horas_req, capac.horas_tom,
capac.fecha_ini, capac.fecha_fin, capac.institucion, capac.costo
END FUNCTION
## CARGA EL DETALLE DE CAPACITACION DE UNA ACCION PARA CONSULTA
FUNCTION carga_capacitacion(p_trx)
DEFINE p_trx INTEGER
INITIALIZE capac.* TO NULL
LET cap_sql =
"SELECT a.id_requerida, a.cod_cap, c.evento, a.horas_req, a.fecha_ini, a.fecha_fin, ",
" a.horas_tom, a.institucion, a.costo ",
"FROM adtb00060 a JOIN adtb00059 c ON c.cod_cap = a.cod_cap WHERE a.num_trx = ?"
PREPARE p_cap_sel FROM cap_sql
EXECUTE p_cap_sel INTO capac.id_requerida, capac.cod_cap, capac.evento, capac.horas_req,
capac.fecha_ini, capac.fecha_fin, capac.horas_tom,
capac.institucion, capac.costo
USING p_trx
END FUNCTION
## ANULA EL DETALLE DE CAPACITACION JUNTO CON LA ACCION
FUNCTION anula_capacitacion(p_trx)
DEFINE p_trx INTEGER
LET cap_sql =
"UPDATE adtb00060 SET status_t = 'E', us_mod = ?, fech_mod = GETDATE() WHERE num_trx = ?"
PREPARE p_cap_anu FROM cap_sql
EXECUTE p_cap_anu USING usuarios, p_trx
END FUNCTION
##################################################################
## DESVINCULACION (2026-10-05)
## La desactivacion del empleado (adtb00003.status_t = 'D') se hace
## por la accion de personal; noprmt016 ya no desactiva.
## Causa codificada en adtb00062 (catalogo adtb00061) para Rotacion.
##################################################################
FUNCTION es_desvinculacion(p_tipo)
DEFINE p_tipo VARCHAR(25)
LET p_tipo = p_tipo CLIPPED
RETURN (p_tipo = "CANCELAR" OR p_tipo = "DESVINCULAR" OR p_tipo = "TERMINO")
END FUNCTION
FUNCTION empleado_desactivado(p_num_emp)
DEFINE p_num_emp INTEGER,
xst CHAR(1)
LET xst = NULL
SELECT a.status_t INTO xst FROM adtb00003 a WHERE a.num_emp = p_num_emp
RETURN (xst = "D")
END FUNCTION
FUNCTION desvinculacion(operacion)
DEFINE operacion VARCHAR(1),
cb ui.ComboBox,
xcod SMALLINT,
xdesc VARCHAR(60),
xingreso DATE
LET int_flag = FALSE
OPEN WINDOW adwindow18 AT 10,12 WITH FORM "adfmwd018"
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
LET cb = ui.ComboBox.forName("formonly.cod_causa")
CALL cb.clear()
LET cap_sql = "SELECT cod_causa, desc_causa FROM adtb00061 WHERE status_t IS NULL ORDER BY cod_causa"
PREPARE p_desv_cat FROM cap_sql
DECLARE c_desv_cat CURSOR FOR p_desv_cat
FOREACH c_desv_cat INTO xcod, xdesc
CALL cb.addItem(xcod, xdesc CLIPPED)
END FOREACH
FREE c_desv_cat
IF operacion = 'A' THEN
INITIALIZE desv.* TO NULL
LET desv.fecha_salida = acc_per.fech_efec
LET desv.recontratable = "S"
INPUT BY NAME desv.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
ON CHANGE cod_causa
LET desv.clase_desc = clase_causa(desv.cod_causa)
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF desv.fecha_salida IS NULL THEN
CALL fgl_winmessage("INFO","DEBE INDICAR LA FECHA DE SALIDA","info")
NEXT FIELD fecha_salida
END IF
LET xingreso = NULL
SELECT a.fech_efec INTO xingreso FROM adtb00003 a WHERE a.num_emp = acc_per.num_emp
IF xingreso IS NOT NULL AND desv.fecha_salida < xingreso THEN
CALL fgl_winmessage("INFO","LA FECHA DE SALIDA ES MENOR QUE LA FECHA DE INGRESO","info")
NEXT FIELD fecha_salida
END IF
IF desv.cod_causa IS NULL THEN
CALL fgl_winmessage("INFO","DEBE SELECCIONAR LA CAUSA DE LA SALIDA","info")
NEXT FIELD cod_causa
END IF
IF desv.recontratable IS NULL THEN
CALL fgl_winmessage("INFO","INDIQUE SI EL EMPLEADO ES RECONTRATABLE","info")
NEXT FIELD recontratable
END IF
END INPUT
ELSE
LET desv.clase_desc = clase_causa(desv.cod_causa)
DISPLAY BY NAME desv.*
MENU "Desvinculacion"
COMMAND "Cerrar" "Cierra la ventana de desvinculacion"
EXIT MENU
ON ACTION close
EXIT MENU
END MENU
END IF
CLOSE WINDOW adwindow18
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
INITIALIZE desv.* TO NULL
RETURN FALSE
END IF
RETURN TRUE
END FUNCTION
## DESCRIPCION DE LA CLASE DE LA CAUSA (VOLUNTARIA / INVOLUNTARIA / OTRA)
FUNCTION clase_causa(p_cod)
DEFINE p_cod SMALLINT,
xclase CHAR(1)
LET xclase = NULL
LET cap_sql = "SELECT clase FROM adtb00061 WHERE cod_causa = ?"
PREPARE p_desv_clase FROM cap_sql
EXECUTE p_desv_clase INTO xclase USING p_cod
CASE xclase
WHEN "V" RETURN "VOLUNTARIA"
WHEN "I" RETURN "INVOLUNTARIA"
WHEN "O" RETURN "OTRA"
END CASE
RETURN NULL
END FUNCTION
## GRABA LA DESVINCULACION Y DESACTIVA AL EMPLEADO (dentro de la transaccion)
FUNCTION graba_desvinculacion()
DEFINE xdep, xpuesto SMALLINT,
xtipo_emp VARCHAR(20),
xingreso DATE,
xdesc VARCHAR(60),
xmotivo VARCHAR(255)
SELECT a.departamento, a.cod_puesto, a.tipo_empleado, a.fech_efec
INTO xdep, xpuesto, xtipo_emp, xingreso
FROM adtb00003 a
WHERE a.num_emp = acc_per.num_emp
LET cap_sql =
"INSERT INTO adtb00062 (num_trx, num_emp, fecha_salida, cod_causa, recontratable, detalle, ",
" departamento, cod_puesto, tipo_empleado, fech_ingreso, origen, us_crea, fech_crea) ",
"VALUES (?,?,?,?,?,?,?,?,?,?,'A', SUSER_SNAME(), GETDATE())"
PREPARE p_desv_ins FROM cap_sql
EXECUTE p_desv_ins USING acc_per.num_trx, acc_per.num_emp, desv.fecha_salida, desv.cod_causa,
desv.recontratable, desv.detalle, xdep, xpuesto, xtipo_emp, xingreso
# Motivo al inicio de adtb00003.observacion (lo que ya habia se conserva detras)
LET xdesc = NULL
LET cap_sql = "SELECT desc_causa FROM adtb00061 WHERE cod_causa = ?"
PREPARE p_desv_desc FROM cap_sql
EXECUTE p_desv_desc INTO xdesc USING desv.cod_causa
LET xmotivo = xdesc CLIPPED, " ", desv.fecha_salida USING "dd/mm/yyyy"
IF desv.detalle IS NOT NULL THEN
LET xmotivo = xmotivo CLIPPED, " ", desv.detalle CLIPPED
END IF
IF desv.recontratable = "N" THEN
LET xmotivo = xmotivo CLIPPED, " NO REINGRESO"
END IF
LET cap_sql =
"UPDATE adtb00003 SET status_t = 'D', fecha_salida = ?, ",
" observacion = LEFT(? + CASE WHEN observacion IS NULL OR LTRIM(observacion) = '' ",
" THEN '' ELSE ' | ' + observacion END, 255), ",
" us_mod = SUSER_SNAME(), fech_mod = GETDATE() ",
"WHERE num_emp = ?"
PREPARE p_desv_emp FROM cap_sql
EXECUTE p_desv_emp USING desv.fecha_salida, xmotivo, acc_per.num_emp
END FUNCTION
## CARGA LA DESVINCULACION DE UNA ACCION PARA CONSULTA
FUNCTION carga_desvinculacion(p_trx)
DEFINE p_trx INTEGER
INITIALIZE desv.* TO NULL
LET cap_sql =
"SELECT fecha_salida, cod_causa, recontratable, detalle FROM adtb00062 WHERE num_trx = ?"
PREPARE p_desv_sel FROM cap_sql
EXECUTE p_desv_sel INTO desv.fecha_salida, desv.cod_causa, desv.recontratable, desv.detalle
USING p_trx
# Las desvinculaciones anteriores a 2026-10-05 no tienen detalle
RETURN (desv.cod_causa IS NOT NULL)
END FUNCTION
## ANULA LA DESVINCULACION Y REACTIVA AL EMPLEADO SI NO TIENE OTRA SALIDA VIGENTE
FUNCTION anula_desvinculacion(p_trx, p_num_emp)
DEFINE p_trx, p_num_emp INTEGER
LET cap_sql =
"UPDATE adtb00062 SET status_t = 'E', us_mod = ?, fech_mod = GETDATE() WHERE num_trx = ?"
PREPARE p_desv_anu FROM cap_sql
EXECUTE p_desv_anu USING usuarios, p_trx
# Acciones anteriores a 2026-10-05 no tienen detalle: no se reactiva al empleado
IF sqlca.sqlerrd[3] = 0 THEN
RETURN
END IF
LET cap_sql =
"UPDATE adtb00003 SET status_t = NULL, fecha_salida = NULL, us_mod = ?, fech_mod = GETDATE() ",
"WHERE num_emp = ? AND status_t = 'D' ",
" AND NOT EXISTS (SELECT 1 FROM adtb00062 d WHERE d.num_emp = ? AND d.status_t IS NULL)"
PREPARE p_desv_react FROM cap_sql
EXECUTE p_desv_react USING usuarios, p_num_emp, p_num_emp
END FUNCTION
## VENTANA DE LOS NIVELES DEL LOS EMPLEADOS
FUNCTION busca_nivel()
OPEN WINDOW busqueda AT 10,10 WITH FORM "adfmwd008"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
@@ -2036,8 +2694,13 @@ DEFINE doble_of,doble_on,doble_off,negrillas_on,negrillas_off,comp_on,comp_of,
depende,codigo_s,cod_provincia,codigo_n,serie SMALLINT,
fecha_nac DATE,
provincia,nombre_nac CHAR(30),
hoy VARCHAR(25)
hoy VARCHAR(25),
# Bloque de detalle para CAPACITACION / DESVINCULACION (2026-10-05).
# es_vac = 1 muestra el bloque de vacaciones del .4rp; 0 muestra el detalle.
es_vac SMALLINT,
det_tit, det1, det2, det3 VARCHAR(150),
xnom_det VARCHAR(100)
OUTPUT
TOP MARGIN 4
LEFT MARGIN 0
@@ -2070,7 +2733,7 @@ ON EVERY ROW
SELECT COUNT(*) INTO depende FROM adtb00013
WHERE cod_sol = codigo_s AND cod_par = 4
SELECT a.cod_provincia,CONVERT(CHAR(10),a.fech_nac,103),a.cod_nac
SELECT a.cod_provincia,a.fech_nac,a.cod_nac
INTO cod_provincia,fecha_nac,codigo_n
FROM adtb00012 a
WHERE a.cod_sol = codigo_s
@@ -2085,9 +2748,43 @@ ON EVERY ROW
SELECT @desc_mto INTO mov_emp.desc_mto
FROM adtb00009
WHERE @cod_mto = acc_per.cod_mto
WHERE @cod_mto = acc_per.cod_mto
## DETALLE SEGUN EL MOVIMIENTO (CAPACITACION / DESVINCULACION)
LET es_vac = 1
LET det_tit = NULL LET det1 = NULL LET det2 = NULL LET det3 = NULL
IF xtipo = "CAPACITACION REQUERIDA" OR xtipo = "CAPACITACION TOMADA" THEN
LET es_vac = 0
LET xnom_det = NULL
LET cap_sql = "SELECT nom_cap FROM adtb00059 WHERE cod_cap = ?"
PREPARE p_imp_cap FROM cap_sql
EXECUTE p_imp_cap INTO xnom_det USING capac.cod_cap
LET det_tit = xtipo CLIPPED
LET det1 = "CAPACITACION: ", xnom_det CLIPPED
IF xtipo = "CAPACITACION REQUERIDA" THEN
LET det2 = "HORAS REQUERIDAS: ", capac.horas_req USING "<<<&.&&",
" FECHA INICIO: ", capac.fecha_ini USING "dd/mm/yyyy"
ELSE
LET det2 = "HORAS TOMADAS: ", capac.horas_tom USING "<<<&.&&",
" DEL ", capac.fecha_ini USING "dd/mm/yyyy",
" AL ", capac.fecha_fin USING "dd/mm/yyyy"
END IF
LET det3 = "INSTITUCION/FACILITADOR: ", capac.institucion CLIPPED,
" COSTO: ", capac.costo USING "<<<,<<&.&&"
END IF
IF es_desvinculacion(xtipo) THEN
LET es_vac = 0
LET xnom_det = NULL
LET cap_sql = "SELECT desc_causa FROM adtb00061 WHERE cod_causa = ?"
PREPARE p_imp_desv FROM cap_sql
EXECUTE p_imp_desv INTO xnom_det USING desv.cod_causa
LET det_tit = "DESVINCULACION"
LET det1 = "FECHA DE SALIDA: ", desv.fecha_salida USING "dd/mm/yyyy",
" CAUSA: ", xnom_det CLIPPED, " (", clase_causa(desv.cod_causa) CLIPPED, ")"
LET det2 = "RECONTRATABLE: ", desv.recontratable
LET det3 = "DETALLE: ", desv.detalle CLIPPED
END IF
PRINTX acc_per.num_trx,mov_emp.desc_mto,
acc_per.fecha ,acc_per.fech_efec,apellido9,nombre9 ,
direccion,dias2,
@@ -2107,5 +2804,6 @@ ON EVERY ROW
nombre_dpto,
acc_per.cod_mto ,
mov_emp.desc_mto,
acc_per.observacion,vacacion.*,p_companias.nombre,hoy,descrip3,descrip4,descrip5
acc_per.observacion,vacacion.*,p_companias.nombre,hoy,descrip3,descrip4,descrip5,
es_vac,det_tit,det1,det2,det3
END REPORT
+110
View File
@@ -0,0 +1,110 @@
/* ------------------------------------------------------------------
ADPRMT017 - Accion de Personal: movimientos de CAPACITACION
Fecha : 2026-10-05
Crea : adtb00059 (catalogo de capacitaciones)
adtb00060 (capacitacion por empleado: requerida / tomada)
movimientos en adtb00009
vista vw_capacitacion_empleado (requeridas vs tomadas)
Correr en: marmotech (probar primero en .40.9)
Idempotente: se puede correr mas de una vez.
------------------------------------------------------------------- */
SET NOCOUNT ON;
/* 1. Catalogo de capacitaciones */
IF OBJECT_ID('dbo.adtb00059') IS NULL
BEGIN
CREATE TABLE dbo.adtb00059 (
cod_cap INT IDENTITY(1,1) NOT NULL CONSTRAINT pk_adtb00059 PRIMARY KEY,
nom_cap VARCHAR(100) NOT NULL,
evento SMALLINT NULL, -- 1 Seminario 2 Curso 3 Taller 4 Conferencia (igual que adtb00022)
horas DECIMAL(6,2) NULL, -- horas estandar del curso
status_t CHAR(1) NULL,
us_crea VARCHAR(50) NULL,
fech_crea DATETIME NULL,
us_mod VARCHAR(50) NULL,
fech_mod DATETIME NULL
);
CREATE UNIQUE INDEX ux_adtb00059_nom ON dbo.adtb00059(nom_cap) WHERE status_t IS NULL;
END
GO
/* 2. Capacitacion por empleado
tipo_reg 'R' = requerida (plan), 'T' = tomada (ejecutada)
Una 'T' puede referenciar la 'R' que cubre (id_requerida). */
IF OBJECT_ID('dbo.adtb00060') IS NULL
BEGIN
CREATE TABLE dbo.adtb00060 (
id_cap INT IDENTITY(1,1) NOT NULL CONSTRAINT pk_adtb00060 PRIMARY KEY,
num_trx INT NOT NULL, -- adtb00020.num_trx
num_emp INT NOT NULL,
tipo_reg CHAR(1) NOT NULL CONSTRAINT ck_adtb00060_tipo CHECK (tipo_reg IN ('R','T')),
cod_cap INT NOT NULL CONSTRAINT fk_adtb00060_cap REFERENCES dbo.adtb00059(cod_cap),
id_requerida INT NULL CONSTRAINT fk_adtb00060_req REFERENCES dbo.adtb00060(id_cap),
horas_req DECIMAL(6,2) NULL,
horas_tom DECIMAL(6,2) NULL,
fecha_ini DATE NULL,
fecha_fin DATE NULL,
institucion VARCHAR(100) NULL,
costo DECIMAL(12,2) NULL,
status_t CHAR(1) NULL, -- 'E' = anulado (junto con la accion)
us_crea VARCHAR(50) NULL,
fech_crea DATETIME NULL,
us_mod VARCHAR(50) NULL,
fech_mod DATETIME NULL
);
CREATE INDEX ix_adtb00060_emp ON dbo.adtb00060(num_emp, tipo_reg) INCLUDE (cod_cap, horas_req, horas_tom, status_t);
CREATE INDEX ix_adtb00060_trx ON dbo.adtb00060(num_trx);
CREATE INDEX ix_adtb00060_req ON dbo.adtb00060(id_requerida);
END
GO
/* 3. Movimientos de accion de personal */
IF NOT EXISTS (SELECT 1 FROM dbo.adtb00009 WHERE tipo_mov = 'CAPACITACION REQUERIDA')
INSERT INTO dbo.adtb00009 (cod_mto, desc_mto, tipo_mov, status_t, us_crea, fech_crea)
SELECT ISNULL(MAX(cod_mto),0) + 1, 'CAPACITACION REQUERIDA', 'CAPACITACION REQUERIDA', NULL, SUSER_SNAME(), GETDATE()
FROM dbo.adtb00009;
IF NOT EXISTS (SELECT 1 FROM dbo.adtb00009 WHERE tipo_mov = 'CAPACITACION TOMADA')
INSERT INTO dbo.adtb00009 (cod_mto, desc_mto, tipo_mov, status_t, us_crea, fech_crea)
SELECT ISNULL(MAX(cod_mto),0) + 1, 'CAPACITACION TOMADA', 'CAPACITACION TOMADA', NULL, SUSER_SNAME(), GETDATE()
FROM dbo.adtb00009;
GO
/* 4. Vista: por empleado, cada capacitacion requerida con lo tomado debajo.
Las tomadas sin requerida asociada salen con tipo 'T' y horas_req 0. */
IF OBJECT_ID('dbo.vw_capacitacion_empleado') IS NOT NULL
DROP VIEW dbo.vw_capacitacion_empleado;
GO
CREATE VIEW dbo.vw_capacitacion_empleado AS
SELECT e.num_emp,
RTRIM(e.nom1_emp) + ' ' + RTRIM(e.apell1_emp) AS empleado,
e.departamento,
d.nom_dpto,
r.tipo_reg,
r.id_cap,
c.cod_cap,
c.nom_cap,
c.evento,
CASE c.evento WHEN 1 THEN 'SEMINARIO' WHEN 2 THEN 'CURSO'
WHEN 3 THEN 'TALLER' WHEN 4 THEN 'CONFERENCIA' END AS tipo_evento,
CASE WHEN r.tipo_reg = 'R' THEN ISNULL(r.horas_req,0) ELSE 0 END AS horas_requeridas,
CASE WHEN r.tipo_reg = 'R'
THEN ISNULL((SELECT SUM(t.horas_tom) FROM dbo.adtb00060 t
WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0)
ELSE ISNULL(r.horas_tom,0) END AS horas_tomadas,
CASE WHEN r.tipo_reg = 'R'
THEN ISNULL(r.horas_req,0) - ISNULL((SELECT SUM(t.horas_tom) FROM dbo.adtb00060 t
WHERE t.id_requerida = r.id_cap AND t.status_t IS NULL),0)
ELSE 0 END AS horas_pendientes,
r.fecha_ini,
r.fecha_fin,
r.institucion,
r.costo,
r.num_trx
FROM dbo.adtb00060 r
JOIN dbo.adtb00059 c ON c.cod_cap = r.cod_cap
JOIN dbo.adtb00003 e ON e.num_emp = r.num_emp
LEFT JOIN dbo.adtb00001 d ON d.departamento = e.departamento
WHERE r.status_t IS NULL
AND (r.tipo_reg = 'R' OR r.id_requerida IS NULL);
GO
@@ -0,0 +1,34 @@
# ADPRMT017 – Movimientos de Capacitación (2026-10-05)
Pedido de RRHH: indicador **Horas de Capacitación**. Por cada colaborador se registran las capacitaciones **requeridas** con sus horas y luego las **tomadas**, que cubren a las requeridas.
## Backup
`addir\backup_adprmt017_20261005\` contiene adprmt017.4gl, .rdd, adfmmt017.4fd/.per y los binarios que estaban en `addir\bin` y `PROYECTO\bin`.
Para volver atrás: copiar `adprmt017.4gl` del backup sobre el actual, recompilar y desplegar. Las tablas nuevas no afectan a nadie si no se usan.
## Qué se agregó
| Pieza | Detalle |
|---|---|
| `adtb00009` | 2 movimientos nuevos: `CAPACITACION REQUERIDA`, `CAPACITACION TOMADA` (cod_mto = MAX+1) |
| `adtb00059` | Catálogo de capacitaciones: nombre, tipo de evento (1 Seminario, 2 Curso, 3 Taller, 4 Conferencia, igual que adtb00022) y horas estándar |
| `adtb00060` | Detalle por empleado, ligado a `adtb00020.num_trx`. `tipo_reg` R/T; una T apunta a la R que cubre (`id_requerida`) |
| `vw_capacitacion_empleado` | Por empleado: requeridas con sus horas tomadas y pendientes, más las tomadas que no tienen requerida (para BI y Excel) |
| `adfmwd017.per` | Ventana nueva de capacitación. Se abre igual que la de vacaciones, después del puesto |
| `adprmt017.4gl` | Captura (`capacitacion('A')`), consulta (`'C'`), grabado dentro de la misma transacción y anulación junto con la acción |
## Flujo
1. **Nuevo**, elegir el movimiento *CAPACITACION REQUERIDA* y la ficha. Se abre la ventana: escoger la capacitación del catálogo (o usar el botón **Nuevo curso**). Las horas se toman del catálogo y se pueden editar.
2. Cuando la persona toma el curso: **Nuevo**, elegir *CAPACITACION TOMADA* y en **Requerida a cubrir** escoger la pendiente. Se llena el curso y las horas pendientes; luego se ponen las fechas, las horas reales, la institución y el costo.
3. El recuadro **Resumen del empleado** muestra el total de horas requeridas, tomadas y pendientes.
4. **eLiminar** (anular) la acción también anula su detalle de capacitación.
## Despliegue (pendiente)
1. Correr `adprmt017_capacitacion.sql` en marmotech (la sintaxis se validó en .40.8 con NOEXEC; no se ejecutó nada).
2. Compilar la forma y el programa. Ambos compilan limpio en 3.20.14 y en fgl602:
`fglform adfmwd017.per` → `adfmwd017.42f`; `fglcomp adprmt017.4gl` → `adprmt017.42m`.
3. Copiar `adprmt017.42m` y `adfmwd017.42f` a `PROYECTO\bin`.
4. No hace falta tocar `adfmmt017.4fd` ni regenerar smarmotech.sch: las tablas nuevas se usan con SQL dinámico.
## Notas
- **adprmt019 (Adiestramientos)** no se tocó. Usa `adtb00022`, que solo tiene 2 registros, no guarda horas ni distingue requerida de tomada, y tiene **usuario y clave en claro** en el MAIN (`kpolanco`). Además las acciones del menú están cruzadas: *nuevo* llama a la búsqueda y *buscar* llama a la captura. Se puede retirar o migrar después.
- Para **Rotación**: el movimiento 4 DESVINCULAR tiene `tipo_mov = 'CANCELAR'`, pero adprmt017 marca `status_t='T'` solo si es `'TERMINO'`. Por eso las desvinculaciones no marcan al empleado como terminado y además no guardan la causa. Hay que revisarlo antes de automatizar la rotación.
+139
View File
@@ -0,0 +1,139 @@
/* ------------------------------------------------------------------
ADPRMT017 - Accion de Personal: DESVINCULAR (indicador de Rotacion)
Fecha : 2026-10-05
Crea : adtb00061 (catalogo de causas de salida)
adtb00062 (detalle de desvinculacion por accion)
vista vw_rotacion_mensual
La desactivacion (adtb00003.status_t = 'D') pasa a hacerse SOLO por
la accion de personal; noprmt016 ya no desactiva.
Idempotente.
------------------------------------------------------------------- */
SET NOCOUNT ON;
/* 1. Catalogo de causas
clase: V = voluntaria, I = involuntaria, O = otra
cuenta_rotacion: 'N' para traslados dentro del grupo (no es salida real) */
IF OBJECT_ID('dbo.adtb00061') IS NULL
BEGIN
CREATE TABLE dbo.adtb00061 (
cod_causa SMALLINT NOT NULL CONSTRAINT pk_adtb00061 PRIMARY KEY,
desc_causa VARCHAR(60) NOT NULL,
clase CHAR(1) NOT NULL CONSTRAINT ck_adtb00061_clase CHECK (clase IN ('V','I','O')),
cuenta_rotacion CHAR(1) NOT NULL CONSTRAINT df_adtb00061_cuenta DEFAULT 'S',
status_t CHAR(1) NULL,
us_crea VARCHAR(50) NULL,
fech_crea DATETIME NULL
);
INSERT INTO dbo.adtb00061 (cod_causa, desc_causa, clase, cuenta_rotacion, us_crea, fech_crea) VALUES
( 1, 'RENUNCIA', 'V', 'S', SUSER_SNAME(), GETDATE()),
( 2, 'ABANDONO DE TRABAJO', 'V', 'S', SUSER_SNAME(), GETDATE()),
( 3, 'DIMISION', 'V', 'S', SUSER_SNAME(), GETDATE()),
( 4, 'DESAHUCIO', 'I', 'S', SUSER_SNAME(), GETDATE()),
( 5, 'DESPIDO', 'I', 'S', SUSER_SNAME(), GETDATE()),
( 6, 'CIERRE DE OPERACION / MINA', 'I', 'S', SUSER_SNAME(), GETDATE()),
( 7, 'FIN DE CONTRATO / TEMPORADA', 'I', 'S', SUSER_SNAME(), GETDATE()),
( 8, 'NO SUPERO PERIODO DE PRUEBA', 'I', 'S', SUSER_SNAME(), GETDATE()),
( 9, 'MUTUO ACUERDO', 'O', 'S', SUSER_SNAME(), GETDATE()),
(10, 'PENSION / RETIRO', 'O', 'S', SUSER_SNAME(), GETDATE()),
(11, 'FALLECIMIENTO', 'O', 'S', SUSER_SNAME(), GETDATE()),
(12, 'TRASLADO A OTRA EMPRESA DEL GRUPO', 'O', 'N', SUSER_SNAME(), GETDATE()),
(99, 'OTRA', 'O', 'S', SUSER_SNAME(), GETDATE());
END
GO
/* 2. Detalle de desvinculacion (una fila por accion DESVINCULAR) */
IF OBJECT_ID('dbo.adtb00062') IS NULL
BEGIN
CREATE TABLE dbo.adtb00062 (
id_desv INT IDENTITY(1,1) NOT NULL CONSTRAINT pk_adtb00062 PRIMARY KEY,
num_trx INT NULL, -- adtb00020.num_trx (NULL = historico)
num_emp INT NOT NULL,
fecha_salida DATE NOT NULL,
cod_causa SMALLINT NOT NULL CONSTRAINT fk_adtb00062_causa REFERENCES dbo.adtb00061(cod_causa),
recontratable CHAR(1) NULL, -- S / N
detalle VARCHAR(200) NULL,
departamento SMALLINT NULL, -- foto al momento de la salida
cod_puesto SMALLINT NULL,
tipo_empleado VARCHAR(20) NULL, -- NORMAL / TEMPORERO
fech_ingreso DATE NULL,
origen CHAR(1) NOT NULL CONSTRAINT df_adtb00062_origen DEFAULT 'A', -- A accion, H historico
status_t CHAR(1) NULL, -- 'E' anulada
us_crea VARCHAR(50) NULL,
fech_crea DATETIME NULL,
us_mod VARCHAR(50) NULL,
fech_mod DATETIME NULL
);
CREATE INDEX ix_adtb00062_fecha ON dbo.adtb00062(fecha_salida) INCLUDE (num_emp, cod_causa, departamento, tipo_empleado, status_t);
CREATE INDEX ix_adtb00062_emp ON dbo.adtb00062(num_emp);
CREATE INDEX ix_adtb00062_trx ON dbo.adtb00062(num_trx);
END
GO
/* 3. El movimiento 4 DESVINCULAR queda con tipo_mov 'CANCELAR'
(adprmt017 reconoce CANCELAR, DESVINCULAR y TERMINO). No se cambia. */
/* 4. Rotacion mensual por departamento y tipo de empleado.
salidas_rotacion excluye causas con cuenta_rotacion = 'N'.
Plantilla = empleados con ingreso <= inicio de mes y sin salida antes del inicio. */
IF OBJECT_ID('dbo.vw_rotacion_mensual') IS NOT NULL
DROP VIEW dbo.vw_rotacion_mensual;
GO
CREATE VIEW dbo.vw_rotacion_mensual AS
WITH meses AS (
SELECT CAST('2022-01-01' AS DATE) AS ini
UNION ALL
SELECT DATEADD(MONTH, 1, ini) FROM meses WHERE ini < DATEADD(MONTH, -1, CAST(GETDATE() AS DATE))
),
emp AS (
SELECT a.num_emp, a.departamento, ISNULL(a.tipo_empleado,'NORMAL') AS tipo_empleado,
a.fech_efec, a.fecha_salida
FROM dbo.adtb00003 a
WHERE a.num_emp >= 39 -- fichas < 39 no son empleados reales
AND (a.status_t IS NULL OR a.status_t = 'D')
),
sal AS (
SELECT d.num_emp, d.fecha_salida, d.departamento, ISNULL(d.tipo_empleado,'NORMAL') AS tipo_empleado,
c.clase, c.cuenta_rotacion
FROM dbo.adtb00062 d JOIN dbo.adtb00061 c ON c.cod_causa = d.cod_causa
WHERE d.status_t IS NULL
)
SELECT m.ini AS mes,
YEAR(m.ini) AS anio,
MONTH(m.ini) AS mes_num,
g.departamento,
dp.nom_dpto,
g.tipo_empleado,
g.plantilla_inicio,
ISNULL(i.ingresos,0) AS ingresos,
ISNULL(s.salidas,0) AS salidas,
ISNULL(s.salidas_rotacion,0) AS salidas_rotacion,
ISNULL(s.voluntarias,0) AS voluntarias,
ISNULL(s.involuntarias,0) AS involuntarias,
ISNULL(s.otras,0) AS otras,
CASE WHEN g.plantilla_inicio > 0
THEN CAST(100.0 * ISNULL(s.salidas_rotacion,0) / g.plantilla_inicio AS DECIMAL(6,2)) END AS rotacion_pct
FROM meses m
CROSS APPLY (
SELECT e.departamento, e.tipo_empleado, COUNT(*) AS plantilla_inicio
FROM emp e
WHERE e.fech_efec <= m.ini AND (e.fecha_salida IS NULL OR e.fecha_salida >= m.ini)
GROUP BY e.departamento, e.tipo_empleado
) g
OUTER APPLY (
SELECT COUNT(*) AS ingresos FROM emp e
WHERE e.departamento = g.departamento AND e.tipo_empleado = g.tipo_empleado
AND e.fech_efec >= m.ini AND e.fech_efec < DATEADD(MONTH,1,m.ini)
) i
OUTER APPLY (
SELECT COUNT(*) AS salidas,
SUM(CASE WHEN x.cuenta_rotacion = 'S' THEN 1 ELSE 0 END) AS salidas_rotacion,
SUM(CASE WHEN x.clase = 'V' THEN 1 ELSE 0 END) AS voluntarias,
SUM(CASE WHEN x.clase = 'I' THEN 1 ELSE 0 END) AS involuntarias,
SUM(CASE WHEN x.clase = 'O' THEN 1 ELSE 0 END) AS otras
FROM sal x
WHERE x.departamento = g.departamento AND x.tipo_empleado = g.tipo_empleado
AND x.fecha_salida >= m.ini AND x.fecha_salida < DATEADD(MONTH,1,m.ini)
) s
LEFT JOIN dbo.adtb00001 dp ON dp.departamento = g.departamento;
GO
@@ -0,0 +1,34 @@
# ADPRMT017 – Desvinculación por Acción de Personal (2026-10-05)
Objetivo: el indicador de **Rotación** (mes a mes y por causa). La desactivación del empleado ahora se hace **solo** por la acción de personal.
## Antes
- **noprmt016** ("Activar/Desactivar") ponía `adtb00003.status_t = 'D'` sin fecha ni causa.
- En **noprmt003** RRHH escribía a mano la `fecha_salida` y el motivo en `observacion` (texto libre: "DESAHUCIO", "RENUNCIA 30/03/2026"...).
- En adprmt017 el movimiento 4 DESVINCULAR (`tipo_mov = 'CANCELAR'`) solo grababa `adtb00020`. El código esperaba `'TERMINO'`, que no existe, y además ese bloque estaba fuera de la transacción.
## Ahora
| Programa | Cambio |
|---|---|
| adprmt017 | DESVINCULAR (tipo CANCELAR, DESVINCULAR o TERMINO) abre la ventana `adfmwd018`: fecha de salida, causa (catálogo), si es recontratable y un detalle. Dentro de la misma transacción: inserta en `adtb00062` y actualiza `adtb00003` (`status_t='D'`, `fecha_salida`, y el motivo al **inicio** de `observacion`, conservando lo que ya había detrás). Si el empleado ya está en D, no deja continuar. |
| adprmt017 (eLiminar) | Anular una desvinculación nueva anula `adtb00062` y **reactiva** al empleado (status NULL, fecha_salida NULL) si no tiene otra salida vigente. Las acciones viejas, sin detalle, no reactivan a nadie. |
| noprmt016 | Se quitó la opción **Desactivar**. Se dejó **Activar** (para reingresos). |
| noprmt003 | `fecha_salida` salió de las 2 UPDATE activas y en `nofmmt003.4fd` quedó `noEntry` (compilar en GST). `observacion` sigue editable. |
## Tablas y vista (ya creadas en .40.8 / marmotech)
- `adtb00061` causas: 1 Renuncia, 2 Abandono, 3 Dimisión (V); 4 Desahucio, 5 Despido, 6 Cierre de operación, 7 Fin de contrato/temporada, 8 No superó prueba (I); 9 Mutuo acuerdo, 10 Pensión, 11 Fallecimiento, 12 Traslado dentro del grupo (`cuenta_rotacion = 'N'`), 99 Otra (O).
- `adtb00062` detalle: guarda una foto del departamento, el puesto, `tipo_empleado` (NORMAL/TEMPORERO) y la fecha de ingreso al momento de la salida.
- `vw_rotacion_mensual`: por mes, departamento y tipo de empleado: plantilla al inicio, ingresos, salidas, salidas que cuentan para rotación, voluntarias, involuntarias, otras y % de rotación. Usa un CTE recursivo desde 2022, que llega al límite de 100 meses en 2030.
## Histórico (pendiente de aprobación)
`adprmt017_desvinculacion_historico.sql` clasifica las salidas desde 2022 leyendo `observacion`. Vista previa (con rollback): 686 salidas → Desahucio 342, Renuncia 127, Abandono 31, Cierre 8, Fallecimiento 7, Traslado 3, Fin de contrato 2, Prueba 1, Pensión 1, **Otra 164** (sin texto o sin causa reconocible). Para deshacer: `DELETE FROM adtb00062 WHERE origen='H'`.
## Temporeros
Solo 2 empleados tienen `tipo_empleado = 'TEMPORERO'`. Para medir la entrada y salida de temporeros, RRHH tiene que marcarlos en la maestra (noprmt003). La vista ya los separa.
## Backups
- `addir\backup_adprmt017_20261005\`: original y `adprmt017_con_capacitacion.4gl`, que es la versión intermedia.
- `nodir\backup_noprmt003_016_20261005\`: noprmt003, noprmt016, sus formas y binarios.
## Despliegue
Copiar a `PROYECTO\bin` (todo compilado con 3.20): `adprmt017.42m`, `adfmwd017.42f`, `adfmwd018.42f`, `noprmt003.42m`, `noprmt016.42m`, y el `nofmmt003.42f` que se genere en GST.
@@ -0,0 +1,44 @@
/* ------------------------------------------------------------------
Carga historica de salidas (2022 en adelante) en adtb00062
desde adtb00003 (status_t = 'D' + fecha_salida + observacion libre).
origen = 'H'. Para deshacer: DELETE FROM adtb00062 WHERE origen = 'H'
Correr DESPUES de adprmt017_desvinculacion.sql. Idempotente.
------------------------------------------------------------------- */
SET NOCOUNT ON;
;WITH h AS (
SELECT a.num_emp, a.fecha_salida, a.departamento, a.cod_puesto,
ISNULL(a.tipo_empleado,'NORMAL') AS tipo_empleado, a.fech_efec,
UPPER(ISNULL(a.observacion,'')) AS obs
FROM dbo.adtb00003 a
WHERE a.status_t = 'D'
AND a.fecha_salida >= '2022-01-01'
AND a.num_emp >= 39
AND NOT EXISTS (SELECT 1 FROM dbo.adtb00062 d WHERE d.num_emp = a.num_emp AND d.fecha_salida = a.fecha_salida)
)
INSERT INTO dbo.adtb00062 (num_trx, num_emp, fecha_salida, cod_causa, recontratable, detalle,
departamento, cod_puesto, tipo_empleado, fech_ingreso, origen, us_crea, fech_crea)
SELECT NULL, h.num_emp, h.fecha_salida,
CASE WHEN h.obs LIKE '%CAMBIO DE EMPRESA%' OR h.obs LIKE '%CAMBIO A ORDEL%'
OR h.obs LIKE '%CAMBIO A CARIBBEAN%' OR h.obs LIKE '%TRASLAD%' THEN 12
WHEN h.obs LIKE '%CIERRE%' THEN 6
WHEN h.obs LIKE '%DESAHUCIO%' THEN 4
WHEN h.obs LIKE '%DESPID%' THEN 5
WHEN h.obs LIKE '%RENUNCIA%' THEN 1
WHEN h.obs LIKE '%ABANDONO%' THEN 2
WHEN h.obs LIKE '%DIMISION%' THEN 3
WHEN h.obs LIKE '%3 MESES%' OR h.obs LIKE '%PRUEBA%' THEN 8
WHEN h.obs LIKE '%FIN DE CONTRATO%' OR h.obs LIKE '%TEMPORADA%' THEN 7
WHEN h.obs LIKE '%MUTUO%' THEN 9
WHEN h.obs LIKE '%PENSION%' OR h.obs LIKE '%RETIRO%' THEN 10
WHEN h.obs LIKE '%FALLEC%' THEN 11
ELSE 99 END,
CASE WHEN h.obs LIKE '%NO REINGRESO%' OR h.obs LIKE '%NO RECONTRAT%' THEN 'N' END,
LEFT(NULLIF(LTRIM(RTRIM(h.obs)),''), 200),
h.departamento, h.cod_puesto, h.tipo_empleado, h.fech_efec, 'H', SUSER_SNAME(), GETDATE()
FROM h;
SELECT c.desc_causa, COUNT(*) n
FROM dbo.adtb00062 d JOIN dbo.adtb00061 c ON c.cod_causa = d.cod_causa
WHERE d.origen = 'H'
GROUP BY c.desc_causa ORDER BY 2 DESC;
+2 -4
View File
@@ -30,8 +30,6 @@ MAIN
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
let usuarios = "kpolanco"
let clave = "RevolutionX3"
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprmt027()
@@ -183,8 +181,8 @@ DEFINE elimina CHAR(3)
LET SELEC = " SELECT a.ano,a.num_emp,a.cod_puesto,a.nom1_emp,a.nom2_emp, ",
" a.apell1_emp,a.apell2_emp, ",
" a.cedula,a.serie,a.nomina,CONVERT(CHAR(10),a.fecha_ing,103), ",
" a.nom_puesto,CONVERT(CHAR(10),a.fech_vac,103) ",
" a.cedula,a.serie,a.nomina,a.fecha_ing, ",
" a.nom_puesto,a.fech_vac ",
" FROM vacaciones a ",
" WHERE ",
criterio clipped,
+276
View File
@@ -0,0 +1,276 @@
{
-------------------------------------------------------------------------------
PROGRAMA : ADPRRP048
OBJETIVO : Horas de capacitacion por colaborador (indicador RRHH).
Por colaborador: cada capacitacion REQUERIDA con sus
horas y, debajo, las TOMADAS que la cubren; luego las
tomadas no planificadas. Totales por colaborador y
generales con % de cumplimiento.
Datos: adtb00060 (detalle) / adtb00059 (catalogo),
registrados por ADPRMT017 (Accion de Personal).
FECHA REALIZACION : Octubre 05, 2026
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE p RECORD
fecha_ini DATE,
fecha_fin DATE,
departamento SMALLINT,
num_emp INTEGER,
solo_pend CHAR(1)
END RECORD
DEFINE filtros VARCHAR(200)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprrp048()
END MAIN
FUNCTION adprrp048()
DEFINE x RECORD
num_emp INTEGER,
empleado VARCHAR(60),
nom_dpto VARCHAR(40),
nom_puesto VARCHAR(40),
fila VARCHAR(20),
nom_cap VARCHAR(100),
tipo_evento VARCHAR(15),
fecha_ini DATE,
fecha_fin DATE,
h_req DECIMAL(8,2),
h_tom DECIMAL(8,2),
h_pend DECIMAL(8,2),
h_tom_t DECIMAL(8,2),
institucion VARCHAR(100)
END RECORD
DEFINE cb ui.ComboBox,
xdep SMALLINT,
xnom VARCHAR(40),
nfilas INTEGER
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM adfmrp048 FROM "adfmrp048"
DISPLAY FORM adfmrp048
LET cb = ui.ComboBox.forName("formonly.departamento")
CALL cb.clear()
CALL cb.addItem(0, "TODOS")
DECLARE c_dep48 CURSOR FOR
SELECT a.departamento, a.nom_dpto FROM adtb00001 a
WHERE a.status_t IS NULL ORDER BY a.nom_dpto
FOREACH c_dep48 INTO xdep, xnom
CALL cb.addItem(xdep, xnom CLIPPED)
END FOREACH
LET p.fecha_ini = MDY(1, 1, YEAR(TODAY))
LET p.fecha_fin = MDY(12, 31, YEAR(TODAY))
LET p.departamento = 0
LET p.num_emp = NULL -- variable de modulo: arranca en 0, no en NULL
LET p.solo_pend = "N"
INPUT BY NAME p.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF p.fecha_ini IS NULL OR p.fecha_fin IS NULL OR p.fecha_fin < p.fecha_ini THEN
CALL fgl_winmessage("INFO","REVISE EL RANGO DE FECHAS","info")
NEXT FIELD fecha_ini
END IF
END INPUT
IF int_flag THEN
LET int_flag = FALSE
CALL msg(2)
RETURN
END IF
----------------------------------------------------------------------
-- Filas: R (requerida, con lo tomado acumulado), T ligada (debajo de su
-- requerida) y T no planificada (al final). El rango de fechas se mide
-- sobre la fecha de inicio de la requerida (o de la tomada si no tiene).
----------------------------------------------------------------------
LET selec =
"SELECT e.num_emp, ",
" RTRIM(e.nom1_emp)+' '+RTRIM(e.apell1_emp)+ISNULL(' '+RTRIM(e.apell2_emp),''), ",
" ISNULL(d.nom_dpto,''), ISNULL(pu.nom_puesto,''), ",
" CASE WHEN r.tipo_reg = 'R' THEN 'REQUERIDA' ",
" WHEN r.id_requerida IS NOT NULL THEN ' TOMADA' ",
" ELSE 'NO PLANIFICADA' END, ",
" c.nom_cap, ",
" CASE c.evento WHEN 1 THEN 'SEMINARIO' WHEN 2 THEN 'CURSO' ",
" WHEN 3 THEN 'TALLER' WHEN 4 THEN 'CONFERENCIA' ELSE '' END, ",
" r.fecha_ini, r.fecha_fin, ",
" CASE WHEN r.tipo_reg = 'R' THEN ISNULL(r.horas_req,0) END, ",
" CASE WHEN r.tipo_reg = 'R' THEN ISNULL(t.tom,0) ELSE ISNULL(r.horas_tom,0) END, ",
" CASE WHEN r.tipo_reg = 'R' THEN ",
" CASE WHEN ISNULL(r.horas_req,0) - ISNULL(t.tom,0) > 0 ",
" THEN ISNULL(r.horas_req,0) - ISNULL(t.tom,0) ELSE 0 END END, ",
" CASE WHEN r.tipo_reg = 'T' THEN ISNULL(r.horas_tom,0) ELSE 0 END, ",
" ISNULL(r.institucion,'') ",
"FROM adtb00060 r ",
" JOIN adtb00059 c ON c.cod_cap = r.cod_cap ",
" JOIN adtb00003 e ON e.num_emp = r.num_emp ",
" LEFT JOIN adtb00001 d ON d.departamento = e.departamento ",
" LEFT JOIN adtb00004 pu ON pu.cod_puesto = e.cod_puesto ",
" LEFT JOIN adtb00060 q ON q.id_cap = r.id_requerida ",
" LEFT JOIN (SELECT id_requerida, SUM(horas_tom) tom FROM adtb00060 ",
" WHERE tipo_reg = 'T' AND status_t IS NULL AND id_requerida IS NOT NULL ",
" GROUP BY id_requerida) t ON t.id_requerida = r.id_cap ",
"WHERE r.status_t IS NULL ",
" AND ISNULL(q.fecha_ini, r.fecha_ini) BETWEEN ? AND ? "
LET filtros = "Periodo: ", p.fecha_ini USING "dd/mm/yyyy", " al ", p.fecha_fin USING "dd/mm/yyyy"
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
LET selec = selec, " AND e.departamento = ", p.departamento USING "<<<<&"
SELECT a.nom_dpto INTO xnom FROM adtb00001 a WHERE a.departamento = p.departamento
LET filtros = filtros CLIPPED, " Departamento: ", xnom CLIPPED
ELSE
LET filtros = filtros CLIPPED, " Departamento: TODOS"
END IF
IF p.num_emp IS NOT NULL AND p.num_emp <> 0 THEN
LET selec = selec, " AND e.num_emp = ", p.num_emp USING "<<<<<<&"
LET filtros = filtros CLIPPED, " Ficha: ", p.num_emp USING "<<<<<<&"
END IF
IF p.solo_pend = "S" THEN
LET selec = selec,
" AND EXISTS (SELECT 1 FROM adtb00060 r2 ",
" LEFT JOIN (SELECT id_requerida, SUM(horas_tom) tom FROM adtb00060 ",
" WHERE tipo_reg = 'T' AND status_t IS NULL GROUP BY id_requerida) t2 ",
" ON t2.id_requerida = r2.id_cap ",
" WHERE r2.num_emp = r.num_emp AND r2.tipo_reg = 'R' AND r2.status_t IS NULL ",
" AND r2.fecha_ini BETWEEN ? AND ? ",
" AND ISNULL(r2.horas_req,0) - ISNULL(t2.tom,0) > 0) "
LET filtros = filtros CLIPPED, " Solo con pendientes"
END IF
LET selec = selec,
" ORDER BY ISNULL(d.nom_dpto,''), 2, e.num_emp, ",
" CASE WHEN r.tipo_reg = 'T' AND r.id_requerida IS NULL THEN 1 ELSE 0 END, ",
" ISNULL(r.id_requerida, r.id_cap), ",
" CASE WHEN r.tipo_reg = 'R' THEN 0 ELSE 1 END, r.fecha_ini"
PREPARE p_rep48 FROM selec
DECLARE c_rep48 CURSOR FOR p_rep48
-- Configuracion del motor de reportes (.4rp)
LET r_filename = "adprrp048.4rp"
LET preview = TRUE
IF NOT fgl_report_loadCurrentSettings(r_filename) THEN
CALL fgl_winmessage("INFO","No se pudo cargar el diseno adprrp048.4rp","stop")
RETURN
END IF
CALL seleccionarSalida() RETURNING r_output
CALL fgl_report_selectDevice(r_output)
CALL fgl_report_selectPreview(preview)
IF r_output = "XLSX" THEN
CALL fgl_report_configurexlsxdevice(NULL,NULL,NULL,FALSE,FALSE,NULL,1)
END IF
LET handler = fgl_report_commitCurrentSettings()
IF handler IS NULL THEN
RETURN
END IF
LET nfilas = 0
START REPORT capacitacion TO XML HANDLER handler
IF p.solo_pend = "S" THEN
OPEN c_rep48 USING p.fecha_ini, p.fecha_fin, p.fecha_ini, p.fecha_fin
ELSE
OPEN c_rep48 USING p.fecha_ini, p.fecha_fin
END IF
WHILE TRUE
FETCH c_rep48 INTO x.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
LET nfilas = nfilas + 1
OUTPUT TO REPORT capacitacion(x.*)
END WHILE
CLOSE c_rep48
FINISH REPORT capacitacion
IF nfilas = 0 THEN
CALL fgl_winmessage("INFO","No hay capacitaciones registradas con esos parametros","info")
END IF
END FUNCTION
FUNCTION pct48(a, b)
DEFINE a, b DECIMAL(10,2)
IF b IS NULL OR b = 0 THEN
RETURN 0
END IF
RETURN (a / b) * 100
END FUNCTION
REPORT capacitacion(x)
DEFINE x RECORD
num_emp INTEGER,
empleado VARCHAR(60),
nom_dpto VARCHAR(40),
nom_puesto VARCHAR(40),
fila VARCHAR(20),
nom_cap VARCHAR(100),
tipo_evento VARCHAR(15),
fecha_ini DATE,
fecha_fin DATE,
h_req DECIMAL(8,2),
h_tom DECIMAL(8,2),
h_pend DECIMAL(8,2),
h_tom_t DECIMAL(8,2),
institucion VARCHAR(100)
END RECORD
DEFINE fecha_rep CHAR(10),
hora CHAR(8),
fini, ffin CHAR(10),
g_req, g_tom, g_pend, g_cumpl DECIMAL(10,2),
t_req, t_tom, t_pend, t_cumpl DECIMAL(10,2),
t_emp INTEGER
ORDER EXTERNAL BY x.num_emp
FORMAT
FIRST PAGE HEADER
LET fecha_rep = TODAY USING "dd/mm/yyyy"
LET hora = CURRENT HOUR TO SECOND
LET t_emp = 0
PRINTX p_companias.nombre, fecha_rep, hora, filtros
BEFORE GROUP OF x.num_emp
LET t_emp = t_emp + 1
PRINTX x.num_emp, x.empleado, x.nom_dpto, x.nom_puesto
ON EVERY ROW
LET fini = x.fecha_ini USING "dd/mm/yyyy"
LET ffin = x.fecha_fin USING "dd/mm/yyyy"
PRINTX x.fila, x.nom_cap, x.tipo_evento, fini, ffin,
x.h_req, x.h_tom, x.h_pend, x.institucion
AFTER GROUP OF x.num_emp
LET g_req = GROUP SUM(x.h_req)
LET g_tom = GROUP SUM(x.h_tom_t)
LET g_pend = GROUP SUM(x.h_pend)
IF g_req IS NULL THEN LET g_req = 0 END IF
IF g_tom IS NULL THEN LET g_tom = 0 END IF
IF g_pend IS NULL THEN LET g_pend = 0 END IF
LET g_cumpl = pct48(g_req - g_pend, g_req)
PRINTX g_req, g_tom, g_pend, g_cumpl
ON LAST ROW
LET t_req = SUM(x.h_req)
LET t_tom = SUM(x.h_tom_t)
LET t_pend = SUM(x.h_pend)
IF t_req IS NULL THEN LET t_req = 0 END IF
IF t_tom IS NULL THEN LET t_tom = 0 END IF
IF t_pend IS NULL THEN LET t_pend = 0 END IF
LET t_cumpl = pct48(t_req - t_pend, t_req)
PRINTX t_emp, t_req, t_tom, t_pend, t_cumpl
END REPORT
+354
View File
@@ -0,0 +1,354 @@
{
-------------------------------------------------------------------------------
PROGRAMA : ADPRRP049
OBJETIVO : Rotacion laboral (indicador RRHH).
R = Resumen mensual: plantilla al inicio del mes,
ingresos, salidas (voluntarias / involuntarias /
otras) y % de rotacion; total y rotacion anual.
D = Detalle de salidas agrupado por causa.
Datos: vista vw_rotacion_mensual y adtb00062/adtb00061
(desvinculaciones registradas por ADPRMT017; historico
2022+ cargado con origen 'H').
Rotacion % = salidas que cuentan para rotacion /
plantilla al inicio (los traslados dentro del grupo
no cuentan). Anual = salidas del ano / plantilla
promedio de los meses del ano.
FECHA REALIZACION : Octubre 05, 2026
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE p RECORD
ano_ini SMALLINT,
ano_fin SMALLINT,
departamento SMALLINT,
tipo_emp VARCHAR(10),
formato CHAR(1)
END RECORD
DEFINE filtros VARCHAR(200)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprrp049()
END MAIN
FUNCTION adprrp049()
DEFINE cb ui.ComboBox,
xdep SMALLINT,
xnom VARCHAR(40)
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM adfmrp049 FROM "adfmrp049"
DISPLAY FORM adfmrp049
LET cb = ui.ComboBox.forName("formonly.departamento")
CALL cb.clear()
CALL cb.addItem(0, "TODOS")
DECLARE c_dep49 CURSOR FOR
SELECT a.departamento, a.nom_dpto FROM adtb00001 a
WHERE a.status_t IS NULL ORDER BY a.nom_dpto
FOREACH c_dep49 INTO xdep, xnom
CALL cb.addItem(xdep, xnom CLIPPED)
END FOREACH
LET p.ano_ini = YEAR(TODAY) - 1
LET p.ano_fin = YEAR(TODAY)
LET p.departamento = 0
LET p.tipo_emp = "TODOS"
LET p.formato = "R"
INPUT BY NAME p.* WITHOUT DEFAULTS ATTRIBUTE(UNBUFFERED)
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF p.ano_ini IS NULL OR p.ano_fin IS NULL OR p.ano_fin < p.ano_ini
OR p.ano_ini < 2022 THEN
CALL fgl_winmessage("INFO","REVISE LOS ANOS (EL HISTORICO EMPIEZA EN 2022)","info")
NEXT FIELD ano_ini
END IF
END INPUT
IF int_flag THEN
LET int_flag = FALSE
CALL msg(2)
RETURN
END IF
LET filtros = "Anos: ", p.ano_ini USING "<<<<", " a ", p.ano_fin USING "<<<<"
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
SELECT a.nom_dpto INTO xnom FROM adtb00001 a WHERE a.departamento = p.departamento
LET filtros = filtros CLIPPED, " Departamento: ", xnom CLIPPED
ELSE
LET filtros = filtros CLIPPED, " Departamento: TODOS"
END IF
LET filtros = filtros CLIPPED, " Tipo de empleado: ", p.tipo_emp CLIPPED
IF p.formato = "D" THEN
LET r_filename = "adprrp049d.4rp"
ELSE
LET r_filename = "adprrp049.4rp"
END IF
LET preview = TRUE
IF NOT fgl_report_loadCurrentSettings(r_filename) THEN
CALL fgl_winmessage("INFO","No se pudo cargar el diseno " || r_filename CLIPPED,"stop")
RETURN
END IF
CALL seleccionarSalida() RETURNING r_output
CALL fgl_report_selectDevice(r_output)
CALL fgl_report_selectPreview(preview)
IF r_output = "XLSX" THEN
CALL fgl_report_configurexlsxdevice(NULL,NULL,NULL,FALSE,FALSE,NULL,1)
END IF
LET handler = fgl_report_commitCurrentSettings()
IF handler IS NULL THEN
RETURN
END IF
IF p.formato = "D" THEN
CALL detalle_salidas()
ELSE
CALL resumen_mensual()
END IF
END FUNCTION
## R: UNA FILA POR MES (SUMA DE LOS DEPARTAMENTOS / TIPOS FILTRADOS)
FUNCTION resumen_mensual()
DEFINE x RECORD
anio SMALLINT,
mes_num SMALLINT,
mes_nom VARCHAR(12),
plantilla INTEGER,
ingresos INTEGER,
salidas INTEGER,
salidas_rot INTEGER,
voluntarias INTEGER,
involuntarias INTEGER,
otras INTEGER,
rot_pct DECIMAL(8,2)
END RECORD
DEFINE n INTEGER
LET selec =
"SELECT anio, mes_num, SUM(plantilla_inicio), SUM(ingresos), SUM(salidas), ",
" SUM(salidas_rotacion), SUM(voluntarias), SUM(involuntarias), SUM(otras) ",
"FROM vw_rotacion_mensual WHERE anio BETWEEN ? AND ? "
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
LET selec = selec, " AND departamento = ", p.departamento USING "<<<<&"
END IF
IF p.tipo_emp <> "TODOS" THEN
LET selec = selec, " AND tipo_empleado = '", p.tipo_emp CLIPPED, "'"
END IF
LET selec = selec, " GROUP BY anio, mes_num ORDER BY anio, mes_num"
PREPARE p_res49 FROM selec
DECLARE c_res49 CURSOR FOR p_res49
LET n = 0
START REPORT rotacion TO XML HANDLER handler
FOREACH c_res49 USING p.ano_ini, p.ano_fin
INTO x.anio, x.mes_num, x.plantilla, x.ingresos, x.salidas,
x.salidas_rot, x.voluntarias, x.involuntarias, x.otras
LET n = n + 1
LET x.mes_nom = nombre_mes(x.mes_num)
LET x.rot_pct = pct49(x.salidas_rot, x.plantilla)
OUTPUT TO REPORT rotacion(x.*)
END FOREACH
FINISH REPORT rotacion
IF n = 0 THEN
CALL fgl_winmessage("INFO","No hay datos con esos parametros","info")
END IF
END FUNCTION
## D: DETALLE DE SALIDAS AGRUPADO POR CAUSA
FUNCTION detalle_salidas()
DEFINE y RECORD
clase VARCHAR(15),
cod_causa SMALLINT,
desc_causa VARCHAR(60),
fecha_sal DATE,
num_emp INTEGER,
empleado VARCHAR(60),
nom_dpto VARCHAR(40),
nom_puesto VARCHAR(40),
tipo_emp VARCHAR(20),
meses INTEGER,
recont VARCHAR(3),
detalle VARCHAR(200)
END RECORD
DEFINE n INTEGER
LET selec =
"SELECT CASE c.clase WHEN 'V' THEN 'VOLUNTARIA' WHEN 'I' THEN 'INVOLUNTARIA' ELSE 'OTRA' END, ",
" c.cod_causa, c.desc_causa, d.fecha_salida, d.num_emp, ",
" RTRIM(e.nom1_emp)+' '+RTRIM(e.apell1_emp)+ISNULL(' '+RTRIM(e.apell2_emp),''), ",
" ISNULL(dp.nom_dpto,''), ISNULL(pu.nom_puesto,''), ISNULL(d.tipo_empleado,'NORMAL'), ",
" CASE WHEN d.fech_ingreso IS NULL THEN NULL ELSE DATEDIFF(month, d.fech_ingreso, d.fecha_salida) END, ",
" CASE d.recontratable WHEN 'S' THEN 'SI' WHEN 'N' THEN 'NO' ELSE '' END, ",
" ISNULL(d.detalle,'') ",
"FROM adtb00062 d ",
" JOIN adtb00061 c ON c.cod_causa = d.cod_causa ",
" JOIN adtb00003 e ON e.num_emp = d.num_emp ",
" LEFT JOIN adtb00001 dp ON dp.departamento = d.departamento ",
" LEFT JOIN adtb00004 pu ON pu.cod_puesto = d.cod_puesto ",
"WHERE d.status_t IS NULL AND YEAR(d.fecha_salida) BETWEEN ? AND ? "
IF p.departamento IS NOT NULL AND p.departamento <> 0 THEN
LET selec = selec, " AND d.departamento = ", p.departamento USING "<<<<&"
END IF
IF p.tipo_emp <> "TODOS" THEN
LET selec = selec, " AND ISNULL(d.tipo_empleado,'NORMAL') = '", p.tipo_emp CLIPPED, "'"
END IF
LET selec = selec,
" ORDER BY CASE c.clase WHEN 'V' THEN 1 WHEN 'I' THEN 2 ELSE 3 END, c.cod_causa, d.fecha_salida"
PREPARE p_det49 FROM selec
DECLARE c_det49 CURSOR FOR p_det49
LET n = 0
START REPORT salidas TO XML HANDLER handler
FOREACH c_det49 USING p.ano_ini, p.ano_fin INTO y.*
LET n = n + 1
OUTPUT TO REPORT salidas(y.*)
END FOREACH
FINISH REPORT salidas
IF n = 0 THEN
CALL fgl_winmessage("INFO","No hay salidas con esos parametros","info")
END IF
END FUNCTION
FUNCTION nombre_mes(m)
DEFINE m SMALLINT
CASE m
WHEN 1 RETURN "ENERO"
WHEN 2 RETURN "FEBRERO"
WHEN 3 RETURN "MARZO"
WHEN 4 RETURN "ABRIL"
WHEN 5 RETURN "MAYO"
WHEN 6 RETURN "JUNIO"
WHEN 7 RETURN "JULIO"
WHEN 8 RETURN "AGOSTO"
WHEN 9 RETURN "SEPTIEMBRE"
WHEN 10 RETURN "OCTUBRE"
WHEN 11 RETURN "NOVIEMBRE"
WHEN 12 RETURN "DICIEMBRE"
END CASE
RETURN NULL
END FUNCTION
FUNCTION pct49(a, b)
DEFINE a, b DECIMAL(12,2)
IF b IS NULL OR b = 0 OR a IS NULL THEN
RETURN 0
END IF
RETURN (a / b) * 100
END FUNCTION
REPORT rotacion(x)
DEFINE x RECORD
anio SMALLINT,
mes_num SMALLINT,
mes_nom VARCHAR(12),
plantilla INTEGER,
ingresos INTEGER,
salidas INTEGER,
salidas_rot INTEGER,
voluntarias INTEGER,
involuntarias INTEGER,
otras INTEGER,
rot_pct DECIMAL(8,2)
END RECORD
DEFINE fecha_rep CHAR(10),
hora CHAR(8),
a_plant DECIMAL(10,2),
a_ing, a_sal, a_rot, a_vol, a_inv, a_otr INTEGER,
a_pct DECIMAL(8,2),
t_ing, t_sal, t_vol, t_inv, t_otr INTEGER
ORDER EXTERNAL BY x.anio
FORMAT
FIRST PAGE HEADER
LET fecha_rep = TODAY USING "dd/mm/yyyy"
LET hora = CURRENT HOUR TO SECOND
PRINTX p_companias.nombre, fecha_rep, hora, filtros
BEFORE GROUP OF x.anio
PRINTX x.anio
ON EVERY ROW
PRINTX x.mes_nom, x.plantilla, x.ingresos, x.salidas, x.voluntarias,
x.involuntarias, x.otras, x.rot_pct
AFTER GROUP OF x.anio
LET a_plant = GROUP AVG(x.plantilla)
LET a_ing = GROUP SUM(x.ingresos)
LET a_sal = GROUP SUM(x.salidas)
LET a_rot = GROUP SUM(x.salidas_rot)
LET a_vol = GROUP SUM(x.voluntarias)
LET a_inv = GROUP SUM(x.involuntarias)
LET a_otr = GROUP SUM(x.otras)
LET a_pct = pct49(a_rot, a_plant)
PRINTX a_plant, a_ing, a_sal, a_vol, a_inv, a_otr, a_pct
ON LAST ROW
LET t_ing = SUM(x.ingresos)
LET t_sal = SUM(x.salidas)
LET t_vol = SUM(x.voluntarias)
LET t_inv = SUM(x.involuntarias)
LET t_otr = SUM(x.otras)
PRINTX t_ing, t_sal, t_vol, t_inv, t_otr
END REPORT
REPORT salidas(y)
DEFINE y RECORD
clase VARCHAR(15),
cod_causa SMALLINT,
desc_causa VARCHAR(60),
fecha_sal DATE,
num_emp INTEGER,
empleado VARCHAR(60),
nom_dpto VARCHAR(40),
nom_puesto VARCHAR(40),
tipo_emp VARCHAR(20),
meses INTEGER,
recont VARCHAR(3),
detalle VARCHAR(200)
END RECORD
DEFINE fecha_rep CHAR(10),
hora CHAR(8),
fsal CHAR(10),
g_cant, t_cant INTEGER
ORDER EXTERNAL BY y.cod_causa
FORMAT
FIRST PAGE HEADER
LET fecha_rep = TODAY USING "dd/mm/yyyy"
LET hora = CURRENT HOUR TO SECOND
PRINTX p_companias.nombre, fecha_rep, hora, filtros
BEFORE GROUP OF y.cod_causa
PRINTX y.desc_causa, y.clase
ON EVERY ROW
LET fsal = y.fecha_sal USING "dd/mm/yyyy"
PRINTX fsal, y.num_emp, y.empleado, y.nom_dpto, y.nom_puesto,
y.tipo_emp, y.meses, y.recont, y.detalle
AFTER GROUP OF y.cod_causa
LET g_cant = GROUP COUNT(*)
PRINTX g_cant
ON LAST ROW
LET t_cant = COUNT(*)
PRINTX t_cant
END REPORT
@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ManagedForm databaseName="smarmotech" fileVersion="31400" gstVersion="31408" name="ManagedForm" uid="{a549c11f-213c-4b69-ba25-7ba8e81abe58}">
<AGSettings>
<DynamicProperties version="2"/>
</AGSettings>
<Record additionalTables="" joinLeft="" joinOperator="" joinRight="" name="Undefined" order="" uid="{7d471b21-63f0-43b8-a8d9-f13f84ba45e9}" where="">
<RecordField colName="cod_mto" defaultValue="1" fieldIdRef="2" fieldType="TABLE_COLUMN" name="adtb00020.cod_mto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{c1910f49-63bc-4f6d-aa7a-a0a56830d12e}"/>
<RecordField colName="num_trx" fieldIdRef="5" fieldType="TABLE_COLUMN" name="adtb00020.num_trx" sqlTabName="adtb00020" sqlType="INTEGER" table_alias_name="" uid="{bad78dcd-5ecc-4f0c-903b-9c1f60503f44}"/>
<RecordField colName="cod_sol" fieldIdRef="6" fieldType="TABLE_COLUMN" name="adtb00020.cod_sol" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{a37cf6ad-6034-41ba-a4ae-b4332f7cb2c5}"/>
<RecordField colName="fecha" fieldIdRef="7" fieldType="TABLE_COLUMN" name="adtb00020.fecha" sqlTabName="adtb00020" sqlType="DATE" table_alias_name="" uid="{e6e8db60-eca0-4f4f-a4a2-90b6113426bc}"/>
<RecordField colName="fech_efec" fieldIdRef="8" fieldType="TABLE_COLUMN" name="adtb00020.fech_efec" sqlTabName="adtb00020" sqlType="DATE" table_alias_name="" uid="{169afb14-f444-4974-9265-4b473bdbdadd}"/>
<RecordField colName="pnis" fieldIdRef="0" name="pnis" sqlTabName="formonly" table_alias_name="" uid="{1aaeb140-d426-4d15-b612-26047d56b5f8}"/>
<RecordField colName="num_emp" fieldIdRef="9" fieldType="TABLE_COLUMN" name="adtb00020.num_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{cb242072-b73c-4429-8920-3e37e4146e79}"/>
<RecordField colName="departamento" fieldIdRef="10" fieldType="TABLE_COLUMN" name="adtb00020.departamento" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{52724440-1489-4cb1-9516-57a814edfb29}"/>
<RecordField colName="nivel_emp" fieldIdRef="11" fieldType="TABLE_COLUMN" name="adtb00020.nivel_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{cd972710-19a7-4371-87c1-689f9968b674}"/>
<RecordField colName="cod_puesto" fieldIdRef="12" fieldType="TABLE_COLUMN" name="adtb00020.cod_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{7d817b85-b333-4438-935d-b6f72f34308a}"/>
<RecordField colName="cedula" fieldIdRef="13" name="cedula" sqlTabName="formonly" table_alias_name="" uid="{942edd09-4d6c-4266-beb6-a06177c87c4b}"/>
<RecordField colName="cuenta_no" fieldIdRef="1" fieldType="TABLE_COLUMN" name="adtb00003.cuenta_no" sqlTabName="adtb00003" sqlType="VARCHAR" table_alias_name="" uid="{f48e2a21-0619-46dd-bb71-71efdf9f5ca5}"/>
<RecordField colName="descrip1" fieldIdRef="14" name="descrip1" sqlTabName="formonly" table_alias_name="" uid="{58277d32-b999-4232-bfa3-5c1e29875d75}"/>
<RecordField colName="descrip2" fieldIdRef="15" name="descrip2" sqlTabName="formonly" table_alias_name="" uid="{ed02fb7a-54b2-49cb-8f23-c822fbf31ceb}"/>
<RecordField colName="nombre_dpto" fieldIdRef="16" name="nombre_dpto" sqlTabName="formonly" table_alias_name="" uid="{7f62e7e2-a2b0-46e2-a69a-c46213a82610}"/>
<RecordField colName="nom_puesto" fieldIdRef="17" fieldType="TABLE_COLUMN" name="adtb00004.nom_puesto" sqlTabName="adtb00004" sqlType="CHAR" table_alias_name="" uid="{023d641d-52e3-439a-9fa0-5cbee4d2f579}"/>
<RecordField colName="sueldo_ac" fieldIdRef="18" fieldType="TABLE_COLUMN" name="adtb00020.sueldo_ac" precisionDecimal="10" scaleDecimal="2" sqlTabName="adtb00020" sqlType="DECIMAL" table_alias_name="" uid="{9c3607a4-0061-45b5-846a-d2a4a8c5d5f6}"/>
<RecordField colName="" fieldIdRef="19" fieldType="NON_DATABASE" name="nomina" sqlTabName="" sqlType="CHAR" table_alias_name="" uid="{40a9f585-d0d3-4743-a0c5-1f1ae112d230}"/>
<RecordField colName="estado_civil" defaultValue="U" fieldIdRef="21" fieldType="TABLE_COLUMN" name="adtb00003.estado_civil" sqlTabName="adtb00003" sqlType="CHAR" table_alias_name="" uid="{28c263a5-ee09-4d8b-993d-92d7d84c455a}"/>
<RecordField colName="sexo" defaultValue="F" fieldIdRef="40" name="sexo" sqlTabName="formonly" sqlType="CHAR" table_alias_name="" uid="{94e4714a-3064-43a3-9045-c91a7081c93e}"/>
<RecordField colName="tipo_sangre" defaultValue="AB+" fieldIdRef="23" fieldType="TABLE_COLUMN" name="adtb00012.tipo_sangre" sqlTabName="adtb00012" sqlType="CHAR" table_alias_name="" uid="{48ededba-cbcb-40c6-9b48-adbbdc5de259}"/>
<RecordField colName="sueldo_lq" defaultValue="0" fieldIdRef="42" name="sueldo_lq" precisionDecimal="12" scaleDecimal="2" sqlTabName="formonly" sqlType="DECIMAL" table_alias_name="" uid="{b5e885ec-de5f-4de8-ab56-0f0466d82bb3}"/>
<RecordField colName="observacion" fieldIdRef="24" fieldType="TABLE_COLUMN" name="adtb00020.observacion" sqlTabName="adtb00020" sqlType="CHAR" table_alias_name="" uid="{c84f4da4-673b-4935-89dd-170371ee0b6d}"/>
<RecordField colName="num1_emp" fieldIdRef="25" fieldType="TABLE_COLUMN" name="adtb00020.num1_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{f83c838d-f907-4c8b-abaf-f4eee1eb62ee}"/>
<RecordField colName="departamento1" fieldIdRef="26" fieldType="TABLE_COLUMN" name="adtb00020.departamento1" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{03c26a0c-5471-48c1-8b6c-fed247129b95}"/>
<RecordField colName="nivel1_emp" fieldIdRef="27" fieldType="TABLE_COLUMN" name="adtb00020.nivel1_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{ce9714aa-f0ac-45a7-baec-73c070650df6}"/>
<RecordField colName="cod1_puesto" fieldIdRef="28" fieldType="TABLE_COLUMN" name="adtb00020.cod1_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{6c3f6861-ca38-4b80-a3ed-01729c29a1e3}"/>
<RecordField colName="descrip3" fieldIdRef="29" name="descrip3" sqlTabName="formonly" table_alias_name="" uid="{4898d4f5-1654-47f8-9cdd-718988bbd005}"/>
<RecordField colName="num2_emp" fieldIdRef="30" fieldType="TABLE_COLUMN" name="adtb00020.num2_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{fd3d592f-dbb2-4343-9827-c36a460ce034}"/>
<RecordField colName="departamento2" fieldIdRef="31" fieldType="TABLE_COLUMN" name="adtb00020.departamento2" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{b6174a7b-bb09-4886-a1b9-89dca1bcf3a0}"/>
<RecordField colName="nivel2_emp" fieldIdRef="32" fieldType="TABLE_COLUMN" name="adtb00020.nivel2_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{63ccced3-c219-441e-8647-feb32a8e802f}"/>
<RecordField colName="cod2_puesto" fieldIdRef="33" fieldType="TABLE_COLUMN" name="adtb00020.cod2_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{cf9a79bf-f263-408a-b963-a10d2d2f430d}"/>
<RecordField colName="descrip4" fieldIdRef="34" name="descrip4" sqlTabName="formonly" table_alias_name="" uid="{379bce2d-2ce5-4f57-9d55-7f3f7b3a67fe}"/>
<RecordField colName="num3_emp" fieldIdRef="35" fieldType="TABLE_COLUMN" name="adtb00020.num3_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{152d4176-3204-4e6e-a6a3-e4f92787b1bc}"/>
<RecordField colName="departamento3" fieldIdRef="36" fieldType="TABLE_COLUMN" name="adtb00020.departamento3" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{328a1957-b303-4bde-b913-2cc142eff874}"/>
<RecordField colName="nivel3_emp" fieldIdRef="37" fieldType="TABLE_COLUMN" name="adtb00020.nivel3_emp" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{44853c93-2b42-407e-8368-50f11cbb316c}"/>
<RecordField colName="cod3_puesto" fieldIdRef="38" fieldType="TABLE_COLUMN" name="adtb00020.cod3_puesto" sqlTabName="adtb00020" sqlType="SMALLINT" table_alias_name="" uid="{46b5abec-9a78-4be3-9bda-7b8ec9a57841}"/>
<RecordField colName="descrip5" fieldIdRef="39" name="descrip5" sqlTabName="formonly" table_alias_name="" uid="{9c9d8c1b-5031-4cf5-ab44-3dadafdfdf3b}"/>
<RecordField colName="us_crea" fieldIdRef="43" fieldType="TABLE_COLUMN" name="adtb00020.us_crea" sqlTabName="adtb00020" sqlType="CHAR" table_alias_name="" uid="{c6163a70-937c-4d17-b991-f427a5139045}"/>
<RecordField colName="us_mod" fieldIdRef="45" fieldType="TABLE_COLUMN" name="adtb00020.us_mod" sqlTabName="adtb00020" sqlType="CHAR" table_alias_name="" uid="{eb0bacfe-2dde-40f2-9fb5-9e0548d4882a}"/>
<RecordField colName="fech_crea" fieldIdRef="44" fieldType="TABLE_COLUMN" name="adtb00020.fech_crea" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" table_alias_name="" uid="{69edd8d5-620a-49cf-b77a-6f9166a2e408}"/>
<RecordField colName="fech_mod" fieldIdRef="46" fieldType="TABLE_COLUMN" name="adtb00020.fech_mod" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" table_alias_name="" uid="{7547110d-f3f4-42a6-8b1a-db0b0e04fa54}"/>
<RecordField colName="" fieldIdRef="3" name="fecha5" sqlTabName="" table_alias_name="" uid="{1793c072-7959-4c58-a5b1-e7c2fed143b3}"/>
<RecordField colName="" fieldIdRef="4" name="estado_accion" sqlTabName="" table_alias_name="" uid="{39f544a6-146d-4da8-a564-811bbfbc65be}"/>
</Record>
<Form gridHeight="24" gridWidth="103" name="adfmmt017" style="basic" text="FORMULARIO MANTENIMIENTO ACCION DE PERSONAL">
<ToolBar name="ToolBar1">
<ToolBarItem comment="Adicionar Registos" image="new" name="nuevo" text="Nuevo"/>
<ToolBarItem comment="Buscar Regustros" image="find" name="buscar" text="Buscar"/>
<ToolBarSeparator name="ToolBarSeparator1"/>
<ToolBarItem comment="Salir del Programa" image="quit" name="salir" text="Salir"/>
</ToolBar>
<Grid gridHeight="22" gridWidth="100" name="Grid1" posX="1" posY="1">
<Group gridHeight="15" gridWidth="96" name="Group1" posX="1" posY="1">
<Label posX="1" posY="1" text="Tipo de Movimiento"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_mto" comment="1= EMPLEO 2=CAMBIO 3=NOVEDADES 4=TERMINACION o Presione Ctrl-W" defaultValue="1" fieldId="2" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="36" include="1|2|3|4" items="" name="adtb00020.cod_mto" posX="21" posY="1" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="1" table_alias_name="" widget="ComboBox"/>
<Label posX="1" posY="2" text="Numero Documento"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="num_trx" fieldId="5" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="6" name="adtb00020.num_trx" noEntry="true" posX="21" posY="2" sqlTabName="adtb00020" sqlType="INTEGER" tabIndex="2" table_alias_name="" widget="Edit"/>
<Label posX="33" posY="2" text="Numero Solicitante"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod_sol" comment="Digite el Numero del Solicitante" fieldId="6" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod_sol" posX="53" posY="2" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="3" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="3" text="Fecha"/>
<DateEdit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fecha" comment="Digite la fecha de elaboracion de la accion" fieldId="7" fieldType="TABLE_COLUMN" format="dd/mm/yyyy" gridHeight="1" gridWidth="10" name="adtb00020.fecha" posX="21" posY="3" sqlTabName="adtb00020" sqlType="DATE" tabIndex="4" table_alias_name="" widget="DateEdit"/>
<Label posX="33" posY="3" text="Fecha Efectiva"/>
<DateEdit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fech_efec" comment="Digite la fecha de efectividad de la accion" fieldId="8" fieldType="TABLE_COLUMN" format="dd/mm/yyyy" gridHeight="1" gridWidth="10" name="adtb00020.fech_efec" posX="53" posY="3" sqlTabName="adtb00020" sqlType="DATE" tabIndex="5" table_alias_name="" widget="DateEdit"/>
<Label gridHeight="1" gridWidth="10" name="Label5" posX="65" posY="3" text="Fecha Entrada"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" fieldId="3" gridHeight="1" gridWidth="14" name="fecha5" posX="81" posY="3" sqlTabName="" tabIndex="43" table_alias_name="" title="Edit1" widget="Edit"/>
<Label posX="1" posY="4" text="Ficha No."/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num_emp" comment="Digite la ficha del empleado o Presione Ctrl-W para busqueda" fieldId="9" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.num_emp" posX="21" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="7" table_alias_name="" widget="Edit"/>
<Label posX="26" posY="4" text="-"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="departamento" comment="Digite el departamento del empleado o Presione Ctrl-W para busqueda" fieldId="10" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.departamento" posX="28" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="8" table_alias_name="" widget="Edit"/>
<Label posX="33" posY="4" text="-"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="nivel_emp" comment="Digite el nivel del empleado o Presione Ctrl-W para busqueda" fieldId="11" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="3" name="adtb00020.nivel_emp" posX="35" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="9" table_alias_name="" widget="Edit"/>
<Label posX="39" posY="4" text="-"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="cod_puesto" comment="Digite el puesto del empleado o Presione Ctrl-W para busqueda" fieldId="12" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="3" name="adtb00020.cod_puesto" posX="41" posY="4" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="10" table_alias_name="" widget="Edit"/>
<Label posX="46" posY="4" text="Cedula"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cedula" fieldId="13" gridHeight="1" gridWidth="14" name="cedula" picture="###-#######-#" posX="55" posY="4" sqlTabName="formonly" tabIndex="11" table_alias_name="" widget="Edit"/>
<Label posX="70" posY="4" text="Cuenta No:"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cuenta_no" comment="No. de Cuenta para pago automatico" fieldId="1" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="14" name="adtb00003.cuenta_no" posX="81" posY="4" sqlTabName="adtb00003" sqlType="VARCHAR" tabIndex="12" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="5" text="Nombre"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip1" fieldId="14" gridHeight="1" gridWidth="30" name="descrip1" noEntry="true" posX="21" posY="5" sqlTabName="formonly" tabIndex="13" table_alias_name="" widget="Edit"/>
<Label posX="53" posY="5" text="Apellido"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip2" fieldId="15" gridHeight="1" gridWidth="30" name="descrip2" noEntry="true" posX="63" posY="5" sqlTabName="formonly" tabIndex="14" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nombre_dpto" fieldId="16" gridHeight="1" gridWidth="30" name="nombre_dpto" noEntry="true" posX="21" posY="6" sqlTabName="formonly" tabIndex="15" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nom_puesto" fieldId="17" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="29" name="adtb00004.nom_puesto" noEntry="true" posX="53" posY="6" sqlTabName="adtb00004" sqlType="CHAR" tabIndex="16" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="7" text="NIS"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="pnis" comment="CODIGO IDENTIFICACION SEGURIDAD SOCIAL" fieldId="0" gridHeight="1" gridWidth="22" name="pnis" posX="21" posY="7" sqlTabName="formonly" tabIndex="6" table_alias_name="" widget="Edit"/>
<Label gridHeight="1" gridWidth="10" name="Label6" posX="53" posY="7" text="Estatus"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" color="blue" fieldId="4" gridHeight="1" gridWidth="16" name="estado_accion" posX="65" posY="7" sqlTabName="" tabIndex="44" table_alias_name="" title="Edit1" widget="Edit"/>
<Label posX="1" posY="8" text="Sueldo/Salario"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="sueldo_ac" comment="Digite el sueldo/salario del empleado" fieldId="18" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="11" name="adtb00020.sueldo_ac" posX="21" posY="8" precisionDecimal="10" scaleDecimal="2" sqlTabName="adtb00020" sqlType="DECIMAL" tabIndex="17" table_alias_name="" widget="Edit"/>
<Label gridHeight="1" gridWidth="6" name="Label4" posX="39" posY="8" text="Nomina"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="" comment="Digite S = Semanal, Q = Quincenal, V = Vendedor" fieldId="19" fieldType="NON_DATABASE" gridHeight="1" gridWidth="11" items="QUINCENAL, JORNAL" length="1" name="nomina" posX="46" posY="8" sqlTabName="" sqlType="CHAR" tabIndex="18" table_alias_name="" widget="ComboBox">
<Item lstrtext="false" name="Q" text="QUINCENAL"/>
<Item lstrtext="false" name="J" text="JORNAL"/>
</ComboBox>
<Label gridHeight="1" gridWidth="9" name="Label1" posX="63" posY="8" text="Estado Civil"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="estado_civil" comment=" S = Soltero C = Casado " defaultValue="U" fieldId="21" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="18" include="S|C" items="CASADO, SOLTERO, UNION LIBRE" name="adtb00003.estado_civil" posX="75" posY="8" sqlTabName="adtb00003" sqlType="CHAR" tabIndex="19" table_alias_name="" widget="ComboBox">
<Item lstrtext="false" name="C" text="CASADO"/>
<Item lstrtext="false" name="S" text="SOLTERO"/>
<Item lstrtext="false" name="U" text="UNION LIBRE"/>
</ComboBox>
<Label posX="1" posY="9" text="Sexo"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="sexo" comment="Digite M Para Sexo Masculino y F Para el Femenino" defaultValue="F" fieldId="40" gridHeight="1" gridWidth="11" include="M|F" items="FEMENINO, MASCULINO" name="sexo" posX="21" posY="9" sqlTabName="formonly" sqlType="CHAR" tabIndex="20" table_alias_name="" widget="ComboBox">
<Item lstrtext="false" name="F" text="FEMENINO"/>
<Item lstrtext="false" name="M" text="MASCULINO"/>
</ComboBox>
<Label gridHeight="1" gridWidth="12" name="Label2" posX="33" posY="9" text="Tipo de Sangre"/>
<ComboBox aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="tipo_sangre" defaultValue="AB+" fieldId="23" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="11" items="AB+, B-, O+, O-, A+, A-" name="adtb00012.tipo_sangre" posX="46" posY="9" sqlTabName="adtb00012" sqlType="CHAR" tabIndex="21" table_alias_name="" widget="ComboBox">
<Item lstrtext="false" name="AB+" text="AB+"/>
<Item lstrtext="false" name="B+" text="B-"/>
<Item lstrtext="false" name="O+" text="O+"/>
<Item lstrtext="false" name="O-" text="O-"/>
<Item lstrtext="false" name="A+" text="A+"/>
<Item lstrtext="false" name="A-" text="A-"/>
</ComboBox>
<Label gridHeight="1" gridWidth="14" name="Label3" posX="58" posY="9" text="Monto Liquidacion"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="sueldo_lq" defaultValue="0" fieldId="42" gridHeight="1" gridWidth="18" name="sueldo_lq" posX="75" posY="9" precisionDecimal="12" scaleDecimal="2" sqlTabName="formonly" sqlType="DECIMAL" tabIndex="22" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="10" text="Observaciones"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="upper" colName="observacion" fieldId="24" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="74" name="adtb00020.observacion" posX="21" posY="10" sqlTabName="adtb00020" sqlType="CHAR" tabIndex="23" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="11" text="Solicitado"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num1_emp" comment="Digite la ficha del empleado solicitante o Presione Ctrl-W para busqueda" fieldId="25" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.num1_emp" posX="21" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="24" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="departamento1" fieldId="26" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.departamento1" noEntry="true" posX="28" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="25" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nivel1_emp" fieldId="27" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.nivel1_emp" noEntry="true" posX="35" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="26" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod1_puesto" fieldId="28" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod1_puesto" noEntry="true" posX="40" posY="11" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="27" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip3" fieldId="29" gridHeight="1" gridWidth="49" name="descrip3" noEntry="true" posX="46" posY="11" sqlTabName="formonly" tabIndex="28" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="12" text="Autorizado"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num2_emp" comment="Digite el numero del empleado que autoriza o Presione Ctrl-W para busqueda" fieldId="30" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.num2_emp" posX="21" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="29" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="departamento2" fieldId="31" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.departamento2" noEntry="true" posX="28" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="30" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nivel2_emp" fieldId="32" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.nivel2_emp" noEntry="true" posX="35" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="31" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod2_puesto" fieldId="33" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod2_puesto" noEntry="true" posX="40" posY="12" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="32" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip4" fieldId="34" gridHeight="1" gridWidth="49" name="descrip4" noEntry="true" posX="46" posY="12" sqlTabName="formonly" tabIndex="33" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="13" text="Aprobado"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" autoNext="true" colName="num3_emp" comment="Digite el numero del empleado que aprueba o Presione Ctrl-W para busqueda" fieldId="35" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.num3_emp" posX="21" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="34" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="departamento3" fieldId="36" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="5" name="adtb00020.departamento3" noEntry="true" posX="28" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="35" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="nivel3_emp" fieldId="37" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.nivel3_emp" noEntry="true" posX="35" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="36" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="cod3_puesto" fieldId="38" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="4" name="adtb00020.cod3_puesto" noEntry="true" posX="40" posY="13" sqlTabName="adtb00020" sqlType="SMALLINT" tabIndex="37" table_alias_name="" widget="Edit"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="descrip5" fieldId="39" gridHeight="1" gridWidth="49" name="descrip5" noEntry="true" posX="46" posY="13" sqlTabName="formonly" tabIndex="38" table_alias_name="" widget="Edit"/>
</Group>
<Group gridHeight="4" gridWidth="97" name="Group2" posX="1" posY="17">
<Label posX="1" posY="1" text="Usuario Creador"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="us_crea" fieldId="43" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="17" name="adtb00020.us_crea" noEntry="true" posX="20" posY="1" sqlTabName="adtb00020" sqlType="CHAR" tabIndex="39" table_alias_name="" widget="Edit"/>
<Label posX="40" posY="1" text="Usuario Modificador"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="us_mod" fieldId="45" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="16" name="adtb00020.us_mod" noEntry="true" posX="61" posY="1" sqlTabName="adtb00020" sqlType="CHAR" tabIndex="40" table_alias_name="" widget="Edit"/>
<Label posX="1" posY="2" text="Fecha Creacion"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fech_crea" fieldId="44" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="17" name="adtb00020.fech_crea" noEntry="true" posX="20" posY="2" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" tabIndex="41" table_alias_name="" widget="Edit"/>
<Label posX="40" posY="2" text="Fecha Modificacion"/>
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="fech_mod" fieldId="46" fieldType="TABLE_COLUMN" gridHeight="1" gridWidth="16" name="adtb00020.fech_mod" noEntry="true" posX="61" posY="2" qual1="YEAR" qualFraction="FRACTION(3)" sqlTabName="adtb00020" sqlType="DATETIME" tabIndex="42" table_alias_name="" widget="Edit"/>
</Group>
</Grid>
</Form>
<DiagramLayout>
<![CDATA[AAAAAgAAAEwAewA3AGQANAA3ADEAYgAyADEALQA2ADMAZgAwAC0ANAAzAGIAOAAtAGEAOABkADkALQBmADEAMwBmADgANABiAGEANAA1AGUAOQB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ==]]>
</DiagramLayout>
</ManagedForm>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="31405" version="6.00">
<report:Settings RWPageWidth="letterwidth" RWPageLength="letterlength" RWLeftMargin="0.5inch" RWTopMargin="0.5inch" RWRightMargin="0.5inch" RWBottomMargin="0.5inch">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWDataLocation="../addir/adprmt017.rdd" RWFglReportName="imp_accion"/>
<report:Conflicts/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report">
<MINIPAGE name="Page Root" width="max" length="max">
<LAYOUTNODE name="Header" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="WordBox" floatingBehavior="enclosed" text="adprmt017"/>
<rtl:input-variable name="p_companias.nombre" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="WordBox3" width="max-3cm" fontSize="14" fontBold="true" floatingBehavior="enclosed" textAlignment="center" text="{{p_companias.nombre.trim()}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="SubHeader" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="WordBox1" width="max-2.5cm" fontSize="10" fontBold="true" floatingBehavior="enclosed" textAlignment="center" text="ACCION NOMINAS"/>
<rtl:input-variable name="hoy" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="WordBox2" floatingBehavior="enclosed" text="{{hoy.trim()}}"/>
</LAYOUTNODE>
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
<LAYOUTNODE name="Informacion1" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" roundedCorners="true" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="mov_emp.desc_mto" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox4" width="2.5inch" floatingBehavior="enclosed" text="{{mov_emp.desc_mto}}" borderWidth="1" borderStyle="none"/>
<rtl:input-variable name="acc_per.num_trx" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox5" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DOCUMENTO: &quot;+acc_per.num_trx.format(&quot;&amp;&amp;&amp;&amp;&amp;&amp;&quot;)}}" borderWidth="1" borderStyle="none"/>
<rtl:input-variable name="acc_per.fecha" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox6" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;FECHA: &quot;+acc_per.fecha}}" borderWidth="1" borderStyle="none"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion2" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="nombre9" type="FGLString" expectedLocation="expectedHere"/>
<rtl:input-variable name="nombre10" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="WordWrapBox" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;NOMBRES:&quot;+nombre9.trim()+&quot; &quot;+nombre10.trim()}}" borderWidth="1" borderStyle="none"/>
<rtl:input-variable name="apellido9" type="FGLString" expectedLocation="expectedHere"/>
<rtl:input-variable name="apellido10" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="WordWrapBox1" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;APELLIDOS:&quot;+apellido9.trim()+&quot; &quot;+apellido10}}"/>
<rtl:input-variable name="acc_per.fech_efec" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="WordWrapBox2" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;FECHA EFECTIVA:&quot;+acc_per.fech_efec}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion3" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="vacacion.fecha_sal" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox7" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;FECHA SALIDA:&quot;+vacacion.fecha_sal}}"/>
<rtl:input-variable name="vacacion.fecha_ent" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox8" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;FECHA ENT:&quot;+vacacion.fecha_ent}}"/>
<rtl:input-variable name="vacacion.dias_tomados" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox9" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DIAS TOMADOS:&quot;+vacacion.dias_tomados.format(&quot;&amp;&amp;&quot;)}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion4" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="vacacion.dias_vac" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox10" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DIAS PAGADOS:&quot;+vacacion.dias_vac.format(&quot;&amp;&amp;&quot;)}}"/>
<rtl:input-variable name="vacacion.num_nomi" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox11" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;NUMERO NOMINA:&quot;+vacacion.num_nomi.format(&quot;&amp;&amp;&amp;&amp;&quot;)}}"/>
<rtl:input-variable name="vacacion.num_nomi" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox12" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;NOMINA NO C:&quot;+vacacion.num_nomi.format(&quot;&amp;&amp;&amp;&amp;&quot;)}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion5" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="vacacion.pano" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox13" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;PERIODO:&quot;+vacacion.pano}}"/>
<rtl:input-variable name="vacacion.dias_tomados" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox14" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DIAS A TOMAR:&quot;+vacacion.dias_tomados}}"/>
<rtl:input-variable name="dias2" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox15" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DIAS PAGADOS:&quot;+dias2}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion6" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="vacacion.valor_vacaciones" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox16" width="2.5inch" fontSize="8" fontBold="true" floatingBehavior="enclosed" text="{{&quot;VALOR VACACIONES:&quot;+vacacion.valor_vacaciones.format(&quot;###,###.##&quot;)}}"/>
</LAYOUTNODE>
</rtl:match>
<LAYOUTNODE name="Autorizaciones1" width="1.2inch" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="WordBox17" length="1inch" floatingBehavior="enclosed"/>
</LAYOUTNODE>
<LAYOUTNODE name="Autorizciones2" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="descrip3" type="FGLString" expectedLocation="expectedBefore"/>
<WORDBOX name="WordBox20" width="5inch" floatingBehavior="enclosed" text="{{&quot;SOLICITADO POR: &quot;+descrip3.trim()}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Autorizaciones3" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="descrip4" type="FGLString" expectedLocation="expectedBefore"/>
<WORDBOX name="WordBox21" width="5inch" floatingBehavior="enclosed" text="{{&quot;AUTORIZADO: &quot;+descrip4.trim()}}" borderWidth="1" borderStyle="solid"/>
</LAYOUTNODE>
<LAYOUTNODE name="Autorizaciones4" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="descrip5" type="FGLString" expectedLocation="expectedBefore"/>
<WORDBOX name="WordBox22" width="5inch" floatingBehavior="enclosed" text="{{&quot;APROBADO: &quot;+descrip5.trim()}}" borderWidth="1" borderStyle="solid"/>
</LAYOUTNODE>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
+75 -75
View File
@@ -809,27 +809,27 @@ analisiscotizaciones^mes^0^10^3^
analisiscotizaciones^cotizacion_no^258^4^4^
analisiscotizaciones^num_oc^2^4^5^
analisiscotizaciones^estado^201^50^6^
analisiscotizaciones^unidadescotizadas^5^9733^7^
analisiscotizaciones^valorcotizado^5^9740^8^
analisiscotizaciones^unidadescotizadas^5^8197^7^
analisiscotizaciones^valorcotizado^5^8204^8^
analisiscotizaciones^sub_total^261^3074^9^
analisiscotizaciones^unidadesdespachadas^261^9733^10^
analisiscotizaciones^valordespachado^261^9738^11^
analisiscotizaciones^unidadesdespachadas^261^8197^10^
analisiscotizaciones^valordespachado^261^8202^11^
analisiscotizaciones^equipoventas^201^100^12^
analisiscotizaciones^tasa^5^3075^13^
analisiscotizaciones^vendedor^201^31^14^
analisiscotizaciones^emailsupervisor^201^100^15^
analisiscotizaciones^depachosautorizados^5^9733^16^
analisiscotizaciones^depachosautorizados^5^8197^16^
analisiscotizaciones_cdelacruz^ano^1^2^1^
analisiscotizaciones_cdelacruz^numeromes^1^2^2^
analisiscotizaciones_cdelacruz^mes^0^10^3^
analisiscotizaciones_cdelacruz^cotizacion_no^258^4^4^
analisiscotizaciones_cdelacruz^num_oc^2^4^5^
analisiscotizaciones_cdelacruz^estado^201^50^6^
analisiscotizaciones_cdelacruz^unidadescotizadas^5^9733^7^
analisiscotizaciones_cdelacruz^valorcotizado^5^9740^8^
analisiscotizaciones_cdelacruz^unidadescotizadas^5^8197^7^
analisiscotizaciones_cdelacruz^valorcotizado^5^8204^8^
analisiscotizaciones_cdelacruz^sub_total^261^3074^9^
analisiscotizaciones_cdelacruz^unidadesdespachadas^261^9733^10^
analisiscotizaciones_cdelacruz^valordespachado^261^9738^11^
analisiscotizaciones_cdelacruz^unidadesdespachadas^261^8197^10^
analisiscotizaciones_cdelacruz^valordespachado^261^8202^11^
analisiscotizaciones_cdelacruz^equipoventas^201^100^12^
analisiscotizaciones_cdelacruz^tasa^5^3075^13^
analisiscotizaciones_cdelacruz^vendedor^201^31^14^
@@ -840,11 +840,11 @@ analisiscotizaciones_jefrancisco^mes^0^10^3^
analisiscotizaciones_jefrancisco^cotizacion_no^258^4^4^
analisiscotizaciones_jefrancisco^num_oc^2^4^5^
analisiscotizaciones_jefrancisco^estado^201^50^6^
analisiscotizaciones_jefrancisco^unidadescotizadas^5^9733^7^
analisiscotizaciones_jefrancisco^valorcotizado^5^9740^8^
analisiscotizaciones_jefrancisco^unidadescotizadas^5^8197^7^
analisiscotizaciones_jefrancisco^valorcotizado^5^8204^8^
analisiscotizaciones_jefrancisco^sub_total^261^3074^9^
analisiscotizaciones_jefrancisco^unidadesdespachadas^261^9733^10^
analisiscotizaciones_jefrancisco^valordespachado^261^9738^11^
analisiscotizaciones_jefrancisco^unidadesdespachadas^261^8197^10^
analisiscotizaciones_jefrancisco^valordespachado^261^8202^11^
analisiscotizaciones_jefrancisco^equipoventas^201^100^12^
analisiscotizaciones_jefrancisco^tasa^5^3075^13^
analisiscotizaciones_jefrancisco^vendedor^201^31^14^
@@ -855,11 +855,11 @@ analisiscotizaciones_jisa^mes^0^10^3^
analisiscotizaciones_jisa^cotizacion_no^258^4^4^
analisiscotizaciones_jisa^num_oc^2^4^5^
analisiscotizaciones_jisa^estado^201^50^6^
analisiscotizaciones_jisa^unidadescotizadas^5^9733^7^
analisiscotizaciones_jisa^valorcotizado^5^9740^8^
analisiscotizaciones_jisa^unidadescotizadas^5^8197^7^
analisiscotizaciones_jisa^valorcotizado^5^8204^8^
analisiscotizaciones_jisa^sub_total^261^3074^9^
analisiscotizaciones_jisa^unidadesdespachadas^261^9733^10^
analisiscotizaciones_jisa^valordespachado^261^9738^11^
analisiscotizaciones_jisa^unidadesdespachadas^261^8197^10^
analisiscotizaciones_jisa^valordespachado^261^8202^11^
analisiscotizaciones_jisa^equipoventas^201^100^12^
analisiscotizaciones_jisa^tasa^5^3075^13^
analisiscotizaciones_jisa^vendedor^201^31^14^
@@ -870,11 +870,11 @@ analisiscotizaciones_mhurtado^mes^0^10^3^
analisiscotizaciones_mhurtado^cotizacion_no^258^4^4^
analisiscotizaciones_mhurtado^num_oc^2^4^5^
analisiscotizaciones_mhurtado^estado^201^50^6^
analisiscotizaciones_mhurtado^unidadescotizadas^5^9733^7^
analisiscotizaciones_mhurtado^valorcotizado^5^9740^8^
analisiscotizaciones_mhurtado^unidadescotizadas^5^8197^7^
analisiscotizaciones_mhurtado^valorcotizado^5^8204^8^
analisiscotizaciones_mhurtado^sub_total^261^3074^9^
analisiscotizaciones_mhurtado^unidadesdespachadas^261^9733^10^
analisiscotizaciones_mhurtado^valordespachado^261^9738^11^
analisiscotizaciones_mhurtado^unidadesdespachadas^261^8197^10^
analisiscotizaciones_mhurtado^valordespachado^261^8202^11^
analisiscotizaciones_mhurtado^equipoventas^201^100^12^
analisiscotizaciones_mhurtado^tasa^5^3075^13^
analisiscotizaciones_mhurtado^vendedor^201^31^14^
@@ -885,11 +885,11 @@ analisiscotizaciones_mpuig^mes^0^10^3^
analisiscotizaciones_mpuig^cotizacion_no^258^4^4^
analisiscotizaciones_mpuig^num_oc^2^4^5^
analisiscotizaciones_mpuig^estado^201^50^6^
analisiscotizaciones_mpuig^unidadescotizadas^5^9733^7^
analisiscotizaciones_mpuig^valorcotizado^5^9740^8^
analisiscotizaciones_mpuig^unidadescotizadas^5^8197^7^
analisiscotizaciones_mpuig^valorcotizado^5^8204^8^
analisiscotizaciones_mpuig^sub_total^261^3074^9^
analisiscotizaciones_mpuig^unidadesdespachadas^261^9733^10^
analisiscotizaciones_mpuig^valordespachado^261^9738^11^
analisiscotizaciones_mpuig^unidadesdespachadas^261^8197^10^
analisiscotizaciones_mpuig^valordespachado^261^8202^11^
analisiscotizaciones_mpuig^equipoventas^201^100^12^
analisiscotizaciones_mpuig^tasa^5^3075^13^
analisiscotizaciones_mpuig^vendedor^201^31^14^
@@ -900,11 +900,11 @@ analisiscotizaciones_mvargas^mes^0^10^3^
analisiscotizaciones_mvargas^cotizacion_no^258^4^4^
analisiscotizaciones_mvargas^num_oc^2^4^5^
analisiscotizaciones_mvargas^estado^201^50^6^
analisiscotizaciones_mvargas^unidadescotizadas^5^9733^7^
analisiscotizaciones_mvargas^valorcotizado^5^9740^8^
analisiscotizaciones_mvargas^unidadescotizadas^5^8197^7^
analisiscotizaciones_mvargas^valorcotizado^5^8204^8^
analisiscotizaciones_mvargas^sub_total^261^3074^9^
analisiscotizaciones_mvargas^unidadesdespachadas^261^9733^10^
analisiscotizaciones_mvargas^valordespachado^261^9738^11^
analisiscotizaciones_mvargas^unidadesdespachadas^261^8197^10^
analisiscotizaciones_mvargas^valordespachado^261^8202^11^
analisiscotizaciones_mvargas^equipoventas^201^100^12^
analisiscotizaciones_mvargas^tasa^5^3075^13^
analisiscotizaciones_mvargas^vendedor^201^31^14^
@@ -5458,9 +5458,9 @@ product_collection^descripcion^201^255^2^
productosdelta^codigomarmotech^201^45^1^
productosdelta^descrip_esp^457^180^2^
productosdelta^nomenclatura^201^50^3^
productosdelta^cantidadvendida^261^9733^4^
productosdelta^cantidadvendida^261^8197^4^
productosdelta^ultimaentrada^7^4^5^
productosdelta^existencia^5^9733^6^
productosdelta^existencia^5^8197^6^
productosprecioscostosstdcostolq^ano^1^2^1^
productosprecioscostosstdcostolq^clase^258^4^2^
productosprecioscostosstdcostolq^grupo^258^4^3^
@@ -5476,7 +5476,7 @@ productosprecioscostosstdcostolq^material^5^3076^12^
productosprecioscostosstdcostolq^labor^5^3076^13^
productosprecioscostosstdcostolq^gastos^5^3076^14^
productosprecioscostosstdcostolq^fecha_lq^7^4^15^
productosprecioscostosstdcostolq^costoliquidacion^5^9734^16^
productosprecioscostosstdcostolq^costoliquidacion^5^8198^16^
productosprecioscostosstdcostolq^numero_mes^1^2^17^
productosprecioscostosstdcostolq^ventas^0^1^18^
productosprecioscostosstdcostolq^proveedor^201^41^19^
@@ -6117,10 +6117,10 @@ rotacioniventario^codclase^2^4^10^
rotacioniventario^codgrupo^2^4^11^
rotacioniventario^codtipo^2^4^12^
rotacioniventario^codmedida^2^4^13^
rotacioniventario^costoventas^5^9737^14^
rotacioniventario^existencia^5^9734^15^
rotacioniventario^costoinventario^5^9737^16^
rotacioniventario^cantidadvendida^5^9734^17^
rotacioniventario^costoventas^5^8201^14^
rotacioniventario^existencia^5^8198^15^
rotacioniventario^costoinventario^5^8201^16^
rotacioniventario^cantidadvendida^5^8198^17^
rotacioniventario^categoria^201^100^18^
seg0000^id_number^1^2^1^
seg0000^usuario^256^40^2^
@@ -8654,8 +8654,8 @@ ventas_clientes^ciudad^0^30^5^
ventas_clientes^cliente^256^100^6^
ventas_clientes^tipo_cliente^257^2^7^
ventas_clientes^sec_cliente^258^4^8^
ventas_clientes^venta^5^9730^9^
ventas_clientes^costo^5^9737^10^
ventas_clientes^venta^5^8194^9^
ventas_clientes^costo^5^8201^10^
ventas_clientes^nombre_provincia^0^30^11^
ventas_clientes^descrip^0^30^12^
ventas_clientes^calle^0^100^13^
@@ -8671,9 +8671,9 @@ ventas_facturas^fecha^7^4^8^
ventas_facturas^documento^258^4^9^
ventas_facturas^moneda^201^40^10^
ventas_facturas^ano^1^2^11^
ventas_facturas^monto_bruto^5^9736^12^
ventas_facturas^descuento^5^9734^13^
ventas_facturas^neto^5^9734^14^
ventas_facturas^monto_bruto^5^8200^12^
ventas_facturas^descuento^5^8198^13^
ventas_facturas^neto^5^8198^14^
ventas_facturas^clase^0^30^15^
ventas_facturas^tipo^201^30^16^
ventas_facturas^grupo^0^30^17^
@@ -9844,8 +9844,8 @@ vwcobros^ficha^257^2^1^
vwcobros^primernombre^0^15^2^
vwcobros^primerapellido^0^15^3^
vwcobros^tipocobro^201^40^4^
vwcobros^valor^5^9730^5^
vwcobros^valorrd^5^9732^6^
vwcobros^valor^5^8194^5^
vwcobros^valorrd^5^8196^6^
vwcobros^ano^1^2^7^
vwcobros^numero_mes^1^2^8^
vwcobros^nombremes^0^10^9^
@@ -9900,7 +9900,7 @@ vwcodigosnuevos^cod_n^257^2^16^
vwcodigosnuevos^cod_grupo^257^2^17^
vwcodigosnuevos^cod_tipo^257^2^18^
vwcodigosnuevos^cod_sec^257^2^19^
vwcodigosnuevos^existencia^5^9733^20^
vwcodigosnuevos^existencia^5^8197^20^
vwcomisiones^tipoventas^0^30^1^
vwcomisiones^tipo_cliente^1^2^2^
vwcomisiones^sec_cliente^2^4^3^
@@ -9956,8 +9956,8 @@ vwcompras^documetorecepcion^2^4^19^
vwcompras^fecharecepcion^10^4365^20^
vwcompras^departamento^0^30^21^
vwcompras^grupo^201^30^22^
vwcompras^existencia^261^9733^23^
vwcompras^consumo^261^9733^24^
vwcompras^existencia^261^8197^23^
vwcompras^consumo^261^8197^24^
vwcompras^costoliquidacion^5^3076^25^
vwcompras^descripcionmoneda^0^30^26^
vwcompras^simbolomoneda^0^4^27^
@@ -10295,7 +10295,7 @@ vwipprodtermusuario^cantidad2^261^3077^18^
vwipprodtermusuario^producto^0^30^19^
vwipprodtermusuario^bodega^201^30^20^
vwipprodtermusuario^costo_std^5^4614^21^
vwipprodtermusuario^cantidadorden^261^9733^22^
vwipprodtermusuario^cantidadorden^261^8197^22^
vwiptiposmov^codigo^257^2^1^
vwiptiposmov^descripcion^256^40^2^
vwiptiposmov^origen^201^8^3^
@@ -10343,7 +10343,7 @@ vwmatprima^mes^0^10^20^
vwmatprima^depto_a^1^2^21^
vwmatprima^nom_dpto^0^30^22^
vwmatprima^origen^457^8^23^
vwmatprima^existencia^5^9730^24^
vwmatprima^existencia^5^8194^24^
vwmatprima_scosto^cod_n^257^2^1^
vwmatprima_scosto^cod_grupo^257^2^2^
vwmatprima_scosto^cod_tipo^257^2^3^
@@ -10365,7 +10365,7 @@ vwmatprima_scosto^mes^0^10^18^
vwmatprima_scosto^depto_a^1^2^19^
vwmatprima_scosto^nom_dpto^0^30^20^
vwmatprima_scosto^origen^457^8^21^
vwmatprima_scosto^existencia^5^9730^22^
vwmatprima_scosto^existencia^5^8194^22^
vwmatprimausuario^cod_n^257^2^1^
vwmatprimausuario^cod_grupo^257^2^2^
vwmatprimausuario^cod_tipo^257^2^3^
@@ -10389,7 +10389,7 @@ vwmatprimausuario^mes^0^10^20^
vwmatprimausuario^depto_a^1^2^21^
vwmatprimausuario^nom_dpto^0^30^22^
vwmatprimausuario^origen^457^8^23^
vwmatprimausuario^existencia^5^9730^24^
vwmatprimausuario^existencia^5^8194^24^
vwordenescocinas^cod_n^1^2^1^
vwordenescocinas^num_oc^258^4^2^
vwordenescocinas^fecha_oc^263^4^3^
@@ -10429,12 +10429,12 @@ vwordenesdespachadasc^producto^457^180^10^
vwordenesdespachadasc^cantidad^5^3077^11^
vwordenesdespachadasc^porc_desc^5^3586^12^
vwordenesdespachadasc^precio^5^3074^13^
vwordenesdespachadasc^valorbruto^5^9738^14^
vwordenesdespachadasc^descuento^5^9734^15^
vwordenesdespachadasc^valorneto^5^9734^16^
vwordenesdespachadasc^valorbruto^5^8202^14^
vwordenesdespachadasc^descuento^5^8198^15^
vwordenesdespachadasc^valorneto^5^8198^16^
vwordenesdespachadasc^porc_comision^5^3076^17^
vwordenesdespachadasc^ano^1^2^18^
vwordenesdespachadasc^comision^5^9734^19^
vwordenesdespachadasc^comision^5^8198^19^
vwprecios^descripcion^201^40^1^
vwprecios^cod_n^257^2^2^
vwprecios^cod_grupo^257^2^3^
@@ -10480,9 +10480,9 @@ vwprodterm_scosto^departamento^2^4^33^
vwprodterm_scosto^num_oc^2^4^34^
vwprodterm_scosto^precio^5^2562^35^
vwprodterm_scosto^descuento^5^2562^36^
vwprodterm_scosto^valorbrutord^5^9226^37^
vwprodterm_scosto^expr1^5^9734^38^
vwprodterm_scosto^netord^5^9734^39^
vwprodterm_scosto^valorbrutord^5^8202^37^
vwprodterm_scosto^expr1^5^8198^38^
vwprodterm_scosto^netord^5^8198^39^
vwprodterm_scosto^tasa^5^3075^40^
vwproduccion^ano^1^2^1^
vwproduccion^dia^0^20^2^
@@ -10570,11 +10570,11 @@ vwproducciont^cod_tipo^2^4^13^
vwproducciont^cod_sec^2^4^14^
vwproducciont^descripcionp^457^180^15^
vwproducciont^unidadmed^0^4^16^
vwproducciont^unidades^5^9733^17^
vwproducciont^cantidad^5^9733^18^
vwproducciont^unidades^5^8197^17^
vwproducciont^cantidad^5^8197^18^
vwproducciont^ano^1^2^19^
vwproducciont^mes^201^14^20^
vwproducciont^metrosadicionales^5^9738^21^
vwproducciont^metrosadicionales^5^8202^21^
vwproducciont^bodega^1^2^22^
vwproductos^descrip_esp^256^80^1^
vwproductos^cod_sec^257^2^2^
@@ -10589,7 +10589,7 @@ vwproductos^tipo^201^30^10^
vwproductos^grupo^0^30^11^
vwproductos^origen^0^20^12^
vwproductos^expr1^0^30^13^
vwproductosprecioscostos^existencia^5^9733^1^
vwproductosprecioscostos^existencia^5^8197^1^
vwproductosprecioscostos^almacen^201^30^2^
vwproductosprecioscostos^descripcionproducto^457^180^3^
vwproductosprecioscostos^unidadmedida^0^4^4^
@@ -10679,23 +10679,23 @@ vwptventasgral^pventas^1^2^48^
vwptventasgral^grupo^0^100^49^
vwreportesfactura_cdelacruz^mes^0^10^1^
vwreportesfactura_cdelacruz^moneda^201^40^2^
vwreportesfactura_cdelacruz^valor_bruto^5^9734^3^
vwreportesfactura_cdelacruz^devolucion^5^9734^4^
vwreportesfactura_cdelacruz^valor_neto^5^9734^5^
vwreportesfactura_cdelacruz^valor_bruto^5^8198^3^
vwreportesfactura_cdelacruz^devolucion^5^8198^4^
vwreportesfactura_cdelacruz^valor_neto^5^8198^5^
vwreportesfactura_cdelacruz^numero_mes^1^2^6^
vwreportesfactura_cdelacruz^idventas^201^1^7^
vwreportesfactura_jisa^mes^0^10^1^
vwreportesfactura_jisa^moneda^201^40^2^
vwreportesfactura_jisa^valor_bruto^5^9734^3^
vwreportesfactura_jisa^devolucion^5^9734^4^
vwreportesfactura_jisa^valor_neto^5^9734^5^
vwreportesfactura_jisa^valor_bruto^5^8198^3^
vwreportesfactura_jisa^devolucion^5^8198^4^
vwreportesfactura_jisa^valor_neto^5^8198^5^
vwreportesfactura_jisa^numero_mes^1^2^6^
vwreportesfactura_jisa^idventas^201^1^7^
vwreportesfactura_mpuig^mes^0^10^1^
vwreportesfactura_mpuig^moneda^201^40^2^
vwreportesfactura_mpuig^valor_bruto^5^9734^3^
vwreportesfactura_mpuig^devolucion^5^9734^4^
vwreportesfactura_mpuig^valor_neto^5^9734^5^
vwreportesfactura_mpuig^valor_bruto^5^8198^3^
vwreportesfactura_mpuig^devolucion^5^8198^4^
vwreportesfactura_mpuig^valor_neto^5^8198^5^
vwreportesfactura_mpuig^numero_mes^1^2^6^
vwreportesfactura_mpuig^idventas^201^1^7^
vwrepuestos^tipoinventario^457^10^1^
@@ -10740,7 +10740,7 @@ vwrequisicionesautorizadas^numeroorden^258^4^7^
vwrequisicionesautorizadas^tipoventa^201^40^8^
vwrequisicionesautorizadas^cliente^201^110^9^
vwrequisicionesautorizadas^valor_cotizacion^261^3074^10^
vwrequisicionesautorizadas^valorrequisicion^5^9730^11^
vwrequisicionesautorizadas^valorrequisicion^5^8194^11^
vwrequisicionesautorizadas^codigovendedor^257^2^12^
vwrequisicionesautorizadas^tipocliente^257^2^13^
vwrequisicionesautorizadas^codigocliente^257^2^14^
@@ -10766,7 +10766,7 @@ vwretrabajo^cod_sec^2^4^12^
vwretrabajo^cliente^0^100^13^
vwretrabajo^vendedor^457^31^14^
vwretrabajo^cantidaddevuelta^5^3077^15^
vwretrabajo^valorbruto^5^9738^16^
vwretrabajo^valorbruto^5^8202^16^
vwretrabajo^mes^0^10^17^
vwretrabajo^numero_mes^1^2^18^
vwretrabajo^numerodocumentoalmacen^2^4^19^
@@ -10852,7 +10852,7 @@ vwvaloresordenes^ano^1^2^2^
vwvaloresordenes^numeromes^1^2^3^
vwvaloresordenes^mes^0^10^4^
vwvaloresordenes^moneda^201^40^5^
vwvaloresordenes^valor^5^9737^6^
vwvaloresordenes^valor^5^8201^6^
vwvaloresordenes^tasa^5^3075^7^
vwventas^origen1^1^2^1^
vwventas^descventas^201^40^2^
@@ -10861,8 +10861,8 @@ vwventas^producto^0^30^4^
vwventas^descripcion^201^30^5^
vwventas^valorbruto^5^6407^6^
vwventas^porc_itbis^261^2310^7^
vwventas^descuento^261^9735^8^
vwventas^subtotal^261^9734^9^
vwventas^descuento^261^8199^8^
vwventas^subtotal^261^8198^9^
vwventas^factura^2^4^10^
vwventas^cond_pago^1^2^11^
vwventas^fecha_factura^7^4^12^
Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

-4
View File
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<DeclaracionJurada xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DetalleGeneral>Los CONTRIBUYENTES, RESPONSABLES Y TERCEROS MANDATARIOS aceptan y acuerdan estar legalmente obligados a cumplir con las condiciones establecidas por la legislacion o cualquier normativa vigente, asi como por la DIRECCION GENERAL DE IMPUESTOS INTERNOS (DGII), para la emision y uso de los Comprobantes Fiscales Electronicos (e-CF). Estas condiciones constituyen un contrato vinculante entre el CONTRIBUYENTE, RESPONSABLE Y TERCERO MANDATARIO, asi como tambien entre estos y la DGII. Si usted es RESPONSABLE O TERCERO MANDATARIO declara estar debidamente autorizado para representar al CONTRIBUYENTE, respecto del cual se verifica el hecho generador de la obligacion tributaria. Adicionalmente, acepta que los CONTRIBUYENTES, RESPONSABLES Y TERCEROS MANDATARIOS son responsables solidarios del uso de los e - CF y de las informaciones contenidas en los mismos, asi como de cualquier consecuencia legal o comercial derivada, directa o indirectamente de dicho uso. En ese orden, es deber de estos conocer y manejar el modelo de facturacion electronica definido por la DGII y las condiciones necesarias para que un e -CF sea valido. Asimismo, los CONTRIBUYENTES, RESPONSABLES Y TERCEROS MANDATARIOS estan obligados a utilizar un certificado de firma digital para poder emitir e-CF, los cuales deben estar debidamente acreditados por una entidad certificadora autorizada por el Instituto Dominicano de las Telecomunicaciones(INDOTEL) y la normativa vigente.</DetalleGeneral>
</DeclaracionJurada>
Binary file not shown.
-4
View File
@@ -1,4 +0,0 @@
Date: 12/11/2024 Time: 10:34:41
Program error at 'cgprmt022.4gl', line number 18.
SQL statement error number -6319 (-1).
Internal error in the database library. Set FGLSQLDEBUG to get more details.
-66
View File
@@ -1,66 +0,0 @@
P MARMOTECH S. A.
CALLE CENTRAL, MADRE VIEJA NORTE, SAN CRISTOBAL
Tels : (809)528-0650 Fax : (809)-528-0640
RNC : 101-52126-2 Pag. 1
PESENORES :
NESTOR MONTERO COD.#21-0000066
HAINA, 809-517-4745
SAN CRISTOBAL RNC #09300230456  FACTURA 83746
.
NCF: A010010010100050864
FACTURAS QUE GENERAN CREDITOS Y/O SUSTENTAN COSTOS Y GASTOS

=======================================================================================================================================
SALIDA ORDEN FECHA CONDICION VENDEDOR COTIZACION FECHA FACTURA
068130 109104 15/01/2018 CONTADO (4061) 117809 10/02/2018
=======================================================================================================================================
CODIGO CANTIDAD UNIDADES DESCRIPCION PRECIO DESC. TOTAL
=======================================================================================================================================
0006-0090-0001-0002 6.528 M2 7 PLANCHA CHAMPAGNE BROWN PULIDO 2 CM 1,454.080 .00 9,492.23
VALOR BRUTO 9,492.23
SUB-TOTAL RD$ 9,492.23
18.00% ITBIS 1,708.60
--------------
VALOR NETO RD$ 11,200.83
==============

M
OBSERVACIONES:
NOMBRE TRANSPORTISTA: CEDULA: 000000000 SERIE: 000
PLACA DEL VEHICULO:
------------------------------- -------------------------------
FACTURADO POR REVISADO POR
-28
View File
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form database_name="formonly" fourSTFile="" gstVersion="15a01" height="12" name="Form1" posX="0" posY="0" text="Configuration" width="59">
<Grid fontPitch="default" height="11" hidden="--------" lstrcomment="false" name="gr2" posX="2" posY="0" width="54">
<Label color="black" colorCondition="black" commentgroup="" flag_text_changed="TRUE" fontPitch="default" format="" geometry="" height="1" hidden="--------" justify="right" lstrcomment="false" lstrtext="false" miscellaneous="" name="lb1" posX="1" posY="0" sample="" sizePolicy="initial" style="" text="Reporte" width="9"/>
<FormField colName="r_action" data_type="--------" fieldType="FORM_ONLY" name="" repeatDetails="" sqlTabName="formonly">
<RadioGroup color="black" colorCondition="black" commentgroup="" constraints="" data_type="--------" defaultValue="preview" fontPitch="default" formfieldname="formfield2" geometry="" height="2" hidden="--------" items="" lstrcomment="false" miscellaneous="" name="r_action" noEntry="--------" notNull="--------" orientation="vertical" posX="16" posY="7" repeatDetails="" required="--------" sizePolicy="initial" sortItem="" style="" tabIndex="2" width="10">
<Item lstrtext="" name="preview" text="Preview"/>
<Item lstrtext="false" name="save" text="Save On Disk"/>
</RadioGroup>
</FormField>
<Label color="black" colorCondition="black" commentgroup="" flag_text_changed="TRUE" fontPitch="default" format="" geometry="" height="1" hidden="--------" justify="right" lstrcomment="false" lstrtext="false" miscellaneous="" name="lb3" posX="1" posY="7" sample="" sizePolicy="initial" style="" text="Accion" width="9"/>
<Label color="black" colorCondition="black" commentgroup="" flag_text_changed="TRUE" fontPitch="default" format="" geometry="" height="1" hidden="--------" justify="right" lstrcomment="false" lstrtext="false" miscellaneous="" name="lb2" posX="1" posY="2" sample="" sizePolicy="initial" style="" text="Salida Reporte" width="9"/>
<FormField colName="r_output" data_type="--------" fieldType="FORM_ONLY" name="" repeatDetails="" sqlTabName="formonly">
<RadioGroup color="black" colorCondition="black" commentgroup="" constraints="" data_type="--------" defaultValue="PDF" fontPitch="default" formfieldname="formfield1" geometry="" height="3" hidden="--------" items="" lstrcomment="false" miscellaneous="" name="r_output" noEntry="--------" notNull="--------" orientation="vertical" posX="16" posY="2" repeatDetails="" required="--------" sizePolicy="initial" style="" tabIndex="1" width="5">
<Item lstrtext="false" name="Image" text="Image"/>
<Item lstrtext="" name="PDF" text="PDF"/>
<Item lstrtext="false" name="SCREEN" text="SVG"/>
</RadioGroup>
</FormField>
<HLine geometry1="" height="1" name="hl2" posX="1" posY="1" repeatDetails="" width="50"/>
<HLine geometry1="" height="1" name="hl2_1" posX="1" posY="5" repeat="true" repeatDetails="" width="50"/>
<FormField colName="r_filename" data_type="--------" fieldType="FORM_ONLY" hrecindex="-1" name="" repeatDetails="" sqlTabName="formonly">
<ComboBox case="NONE" color="black" colorCondition="black" commentgroup="" constraints="" data_type="--------" defaultValue="ListDemo" fontPitch="default" formfieldname="formfield0" geometry1="" height="1" hidden="--------" initializer="" items="" lstrcomment="false" miscellaneous="" name="r_filename" noEntry="--------" notNull="--------" posX="16" posY="0" queryEditable="--------" required="--------" sample="" scroll="--------" sizePolicy="fixed" sortItem="" style="" tabIndex="3" width="34">
<Item lstrtext="false" name="veprrp049" text="Cotizacion"/>
</ComboBox>
</FormField>
</Grid>
</Form>
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.
-87
View File
@@ -1,87 +0,0 @@
<?xml version="1.0" encoding="ANSI_X3.4-1968"?>
<StyleList>
<Style name="Window">
<StyleAttribute name="windowType" value="normal" />
</Style>
<Style name="Window.main">
<StyleAttribute name="windowType" value="normal" />
<StyleAttribute name="startMenuPosition" value="menu" />
</Style>
<Style name="Window.main-mbs">
<StyleAttribute name="position" value="center" />
<StyleAttribute name="windowType" value="normal" />
<StyleAttribute name="actionPanelPosition" value="none" />
<StyleAttribute name="ringMenuPosition" value="none" />
<StyleAttribute name="statusBarType" value="none" />
</Style>
<Style name="Window.dialog">
<StyleAttribute name="windowType" value="modal" />
<StyleAttribute name="sizable" value="no" />
<StyleAttribute name="position" value="center" />
<StyleAttribute name="actionPanelPosition" value="bottom" />
<StyleAttribute name="ringMenuPosition" value="bottom" />
<StyleAttribute name="toolBarPosition" value="none" />
<StyleAttribute name="statusBarType" value="none" />
<StyleAttribute name="errorMessagePosition" value="popup" />
</Style>
<Style name="Window.dialog2">
<StyleAttribute name="windowType" value="modal" />
<StyleAttribute name="sizable" value="no" />
<StyleAttribute name="position" value="center" />
<StyleAttribute name="actionPanelPosition" value="none" />
<StyleAttribute name="ringMenuPosition" value="none" />
<StyleAttribute name="toolBarPosition" value="none" />
<StyleAttribute name="statusBarType" value="none" />
<StyleAttribute name="errorMessagePosition" value="popup" />
</Style>
<Style name="Window.dialog3">
<StyleAttribute name="windowType" value="modal" />
<StyleAttribute name="sizable" value="yes" />
<StyleAttribute name="toolBarPosition" value="none" />
<StyleAttribute name="actionPanelPosition" value="none" />
<StyleAttribute name="ringMenuPosition" value="none" />
<StyleAttribute name="statusBarType" value="none" />
<StyleAttribute name="errorMessagePosition" value="popup" />
</Style>
<Style name="Window.dialog4">
<StyleAttribute name="windowType" value="modal" />
<StyleAttribute name="sizable" value="yes" />
<StyleAttribute name="actionPanelPosition" value="bottom" />
<StyleAttribute name="ringMenuPosition" value="none" />
<StyleAttribute name="statusBarType" value="none" />
<StyleAttribute name="errorMessagePosition" value="popup" />
</Style>
<Style name="Window.naked">
<StyleAttribute name="windowType" value="modal" />
<StyleAttribute name="border" value="tool" />
<StyleAttribute name="actionPanelPosition" value="none" />
<StyleAttribute name="ringMenuPosition" value="none" />
<StyleAttribute name="toolBarPosition" value="none" />
<StyleAttribute name="statusBarType" value="none" />
</Style>
<Style name="Window.viewer">
<StyleAttribute name="windowType" value="modal" />
<StyleAttribute name="windowSystemMenu" value="yes" />
<StyleAttribute name="windowOptionMinimize" value="no" />
<StyleAttribute name="windowOptionMaximize" value="no" />
<StyleAttribute name="sizable" value="yes" />
<StyleAttribute name="actionPanelPosition" value="none" />
<StyleAttribute name="ringMenuPosition" value="none" />
<StyleAttribute name="toolBarPosition" value="none" />
<StyleAttribute name="statusBarType" value="none" />
</Style>
<Style name="Label:title">
<StyleAttribute name="fontSize" value="xx-large" />
<StyleAttribute name="fontFamily" value="sans-serif" />
<StyleAttribute name="textDecoration" value="underline" />
</Style>
<Style name="Table:focus">
<StyleAttribute name="highlightColor" value="#7E0C6E" />
</Style>
<Style name="Table.detail:even">
<StyleAttribute name="backgroundColor" value="#DECFDB" />
</Style>
<Style name="Image.title">
<StyleAttribute name="border" value="no" />
</Style>
</StyleList>
-93
View File
@@ -1,93 +0,0 @@
<StyleList>
<Style name="Window" >
<StyleAttribute value="normal" name="windowType" />
</Style>
<Style name="Window.main" >
<StyleAttribute value="normal" name="windowType" />
<StyleAttribute value="menu" name="startMenuPosition" />
</Style>
<Style name="Window.main-mbs" >
<StyleAttribute value="center" name="position" />
<StyleAttribute value="normal" name="windowType" />
<StyleAttribute value="none" name="actionPanelPosition" />
<StyleAttribute value="none" name="ringMenuPosition" />
<StyleAttribute value="none" name="statusBarType" />
</Style>
<Style name="Window.dialog" >
<StyleAttribute value="modal" name="windowType" />
<StyleAttribute value="no" name="sizable" />
<StyleAttribute value="center" name="position" />
<StyleAttribute value="bottom" name="actionPanelPosition" />
<StyleAttribute value="bottom" name="ringMenuPosition" />
<StyleAttribute value="none" name="toolBarPosition" />
<StyleAttribute value="none" name="statusBarType" />
<StyleAttribute value="popup" name="errorMessagePosition" />
</Style>
<Style name="Window.dialog2" >
<StyleAttribute value="modal" name="windowType" />
<StyleAttribute value="no" name="sizable" />
<StyleAttribute value="center" name="position" />
<StyleAttribute value="none" name="actionPanelPosition" />
<StyleAttribute value="none" name="ringMenuPosition" />
<StyleAttribute value="none" name="toolBarPosition" />
<StyleAttribute value="none" name="statusBarType" />
<StyleAttribute value="popup" name="errorMessagePosition" />
</Style>
<Style name="Window.dialog3" >
<StyleAttribute value="modal" name="windowType" />
<StyleAttribute value="yes" name="sizable" />
<StyleAttribute value="none" name="toolBarPosition" />
<StyleAttribute value="none" name="actionPanelPosition" />
<StyleAttribute value="none" name="ringMenuPosition" />
<StyleAttribute value="none" name="statusBarType" />
<StyleAttribute value="popup" name="errorMessagePosition" />
</Style>
<Style name="Window.dialog4" >
<StyleAttribute value="modal" name="windowType" />
<StyleAttribute value="yes" name="sizable" />
<StyleAttribute value="bottom" name="actionPanelPosition" />
<StyleAttribute value="none" name="ringMenuPosition" />
<StyleAttribute value="none" name="statusBarType" />
<StyleAttribute value="popup" name="errorMessagePosition" />
</Style>
<Style name="Window.naked" >
<StyleAttribute value="modal" name="windowType" />
<StyleAttribute value="tool" name="border" />
<StyleAttribute value="none" name="actionPanelPosition" />
<StyleAttribute value="none" name="ringMenuPosition" />
<StyleAttribute value="none" name="toolBarPosition" />
<StyleAttribute value="none" name="statusBarType" />
</Style>
<Style name="Window.viewer" >
<StyleAttribute value="modal" name="windowType" />
<StyleAttribute value="yes" name="windowSystemMenu" />
<StyleAttribute value="no" name="windowOptionMinimize" />
<StyleAttribute value="no" name="windowOptionMaximize" />
<StyleAttribute value="yes" name="sizable" />
<StyleAttribute value="none" name="actionPanelPosition" />
<StyleAttribute value="none" name="ringMenuPosition" />
<StyleAttribute value="none" name="toolBarPosition" />
<StyleAttribute value="none" name="statusBarType" />
</Style>
<Style name="edit:title" >
<StyleAttribute value="large" name="fontSize" />
<StyleAttribute value="sans-serif" name="fontFamily" />
<StyleAttribute value="bold" name="textDecoration" />
</Style>
<Style name="Label:title" >
<StyleAttribute value="sans-serif" name="fontFamily" />
<StyleAttribute value="large" name="fontSize" />
<StyleAttribute value="normal" name="fontStyle" />
<StyleAttribute value="bold" name="fontWeight" />
</Style>
<Style name="Table:focus" >
<StyleAttribute value="#7E0C6E" name="highlightColor" />
</Style>
<Style name="Table.detail:even" >
<StyleAttribute value="#DECFDB" name="backgroundColor" />
</Style>
<Style name="Image.title" >
<StyleAttribute value="no" name="border" />
</Style>
</StyleList>
-28
View File
@@ -1,28 +0,0 @@
Date: 20/10/2020 Time: 11:50:09
Program error at 'noprrp015.4gl', line number 17.
SQL statement error number -930 (-18456).
[Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user ''.
Date: 20/10/2020 Time: 11:50:31
Program error at 'noprrp015.4gl', line number 71.
FORMS statement error number -6302.
Can not read from GUI: Connection closed by peer.
Date: 20/10/2020 Time: 11:51:04
Program error at 'noprrp015.4gl', line number 106.
SQL statement error number -6372 (-164).
[Microsoft][SQL Server Native Client 11.0][SQL Server]Each GROUP BY expression must contain at least one column that is not an outer reference.
Date: 20/10/2020 Time: 11:51:45
Program error at 'noprrp015.4gl', line number 106.
SQL statement error number -6372 (-164).
[Microsoft][SQL Server Native Client 11.0][SQL Server]Each GROUP BY expression must contain at least one column that is not an outer reference.
Date: 20/10/2020 Time: 11:52:24
Program error at 'noprrp015.4gl', line number 150.
SQL statement error number -6372 (-207).
[Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid column name 'a'.
Date: 20/10/2020 Time: 11:53:01
Program error at 'noprrp015.4gl', line number 201.
FORMS statement error number -1322.
A report output file cannot be opened: C:\archivo: Permission denied.
Date: 19/05/2021 Time: 15:01:12
Program error at 'noprrp015.4gl', line number 17.
SQL statement error number -6372 (1).
[Microsoft][SQL Server Native Client 11.0]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
-4
View File
@@ -1,4 +0,0 @@
Date: 01/03/2013 Time: 09:54:50
Program error at 'noprmt026.4gl', line number 74.
SQL statement error number -1205 (-1).
Invalid month in date.
-12
View File
@@ -1,12 +0,0 @@
Date: 08/06/2013 Time: 11:50:15
Program error at 'noprrp035.4gl', line number 171.
SQL statement error number -6372 (-206).
[Microsoft][SQL Server Native Client 10.0][SQL Server]Operand type clash: date is incompatible with int
Date: 08/06/2013 Time: 11:51:32
Program error at 'noprrp035.4gl', line number 171.
SQL statement error number -6372 (-206).
[Microsoft][SQL Server Native Client 10.0][SQL Server]Operand type clash: date is incompatible with int
Date: 08/06/2013 Time: 11:55:05
Program error at 'noprrp035.4gl', line number 172.
SQL statement error number -6372 (-206).
[Microsoft][SQL Server Native Client 10.0][SQL Server]Operand type clash: date is incompatible with int
-4
View File
@@ -1,4 +0,0 @@
Date: 05/06/2014 Time: 11:51:54
Program error at 'noprrp035.4gl', line number 208.
SQL statement error number -6372 (-241).
[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Conversion failed when converting date and/or time from character string.
-6
View File
@@ -1,6 +0,0 @@
Este Modulo es excelente para manejar las ordenes de pedidos,
asi como tambien el seguimiento a los clientes.
Utilice la opcion ORDEN DE PEDIDOS para que vea su versatilidad
-112
View File
@@ -1,112 +0,0 @@
<?xml version="1.0" encoding="windows-1252"?>
<?FGLReportToRTLInputStyleSheet reportName="r_registros"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug1.xml"?>
<?ScopeExtenderStyleSheet systemId="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp" styleURL="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp" ignoreUnmatchedInput="true" variableValueNamesAreInLowerCase="true"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug2.xml"?>
<?RTLStyleSheet ignoreUnmatchedInput="true" autoCreate4GLVariables="true" variableValueNamesAreInLowerCase="true" styleURL="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" outputDeviceName="SVG" isPreview="1"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug3.xml"?>
<?BoxDecoratorStyleSheet systemId="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp"?>
<?HlPxmlToPxmlStyleSheet notUsed="true"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug4.xml"?>
<?PxmlLayouter pageWidth="3.00inch" pageHeight="3.00inch" topMargin="0.10inch" leftMargin="0.10inch" rightMargin="0.10inch" bottomMargin="0.10inch" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" markOverfullBoxesInDocument="true"?>
<?SVGWriterStyleSheet antialiasFonts="true" antialiasShapes="true" embedFonts="true" qt422workarounds="true" charsetToEmbed="ISO-8859-15"?>
<?PrettyPrinterStyleSheet tee="false" writeToHost="localhost" encoding="UTF-8" writeMagic="true" writeToPort="6400" writeCompressed="false"?>
<Report name="veprmt022.r_registros" headerLength="0" trailerLength="0" pageLength="66" topMargin="3" bottomMargin="3" leftMargin="5" rightMargin="132" xmlns="http://www.4js.com/2004/REPORT">
<Skip/>
<Skip/>
<Skip/>
<FirstPageHeader/>
<Group>
<BeforeGroup/>
<Group>
<OnEveryRow>
<Print>
<Item name="x.factura" type="INTEGER" value=" 0" isoValue="0"/>
<Item name="x.fecha_factura" type="CHAR(10)" value=" "/>
<Item name="x.fecha_nomina" type="CHAR(10)" value=" "/>
<Item name="x.codigo_id" type="INTEGER" value=" 1203" isoValue="1203"/>
<Item name="x.nombre_cliente" type="VARCHAR(60)" value="1203-VENTURA ANTONIO VIZCAINO PERDOMO "/>
<Item name="x.bruto" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
<Item name="x.descuento" type="DECIMAL(12,2)" value=" 0.00" isoValue="0.00"/>
<Item name="x.itbis" type="DECIMAL(12,2)" value=" 0.00" isoValue="0.00"/>
<Item name="x.sub_total" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
<Item name="x.neto" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
<Item name="x.estado" type="CHAR(20)" value=" "/>
<Item name="x.condicion" type="VARCHAR(30)" value=" "/>
<Item name="nombre_cia" type="VARCHAR(60)" value="CAFETERIA MARMOTECH "/>
<Item name="hora" type="CHAR(16)" value="2015-06-25 14:58"/>
<Item name="xfecha1" type="CHAR(10)" value="09/06/2015"/>
<Item name="xfecha2" type="CHAR(10)" value="25/06/2015"/>
</Print>
</OnEveryRow>
</Group>
<AfterGroup>
<Print>
<Item name="total_condicion" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
</Print>
</AfterGroup>
</Group>
<OnLastRow>
<Print>
<Item name="total_venta" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
</Print>
</OnLastRow>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<Skip/>
<PageTrailer/>
</Report>
-104
View File
@@ -1,104 +0,0 @@
<?xml version="1.0" encoding="windows-1252"?>
<?ScopeExtenderStyleSheet systemId="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp" styleURL="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp" ignoreUnmatchedInput="true" variableValueNamesAreInLowerCase="true"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug2.xml"?>
<?RTLStyleSheet ignoreUnmatchedInput="true" autoCreate4GLVariables="true" variableValueNamesAreInLowerCase="true" styleURL="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" outputDeviceName="SVG" isPreview="1"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug3.xml"?>
<?BoxDecoratorStyleSheet systemId="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp"?>
<?HlPxmlToPxmlStyleSheet notUsed="true"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug4.xml"?>
<?PxmlLayouter pageWidth="3.00inch" pageHeight="3.00inch" topMargin="0.10inch" leftMargin="0.10inch" rightMargin="0.10inch" bottomMargin="0.10inch" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" markOverfullBoxesInDocument="true"?>
<?SVGWriterStyleSheet antialiasFonts="true" antialiasShapes="true" embedFonts="true" qt422workarounds="true" charsetToEmbed="ISO-8859-15"?>
<?PrettyPrinterStyleSheet tee="false" writeToHost="localhost" encoding="UTF-8" writeMagic="true" writeToPort="6400" writeCompressed="false"?>
<xxx0:Report name="veprmt022.r_registros" headerLength="0" trailerLength="0" pageLength="66" topMargin="3" bottomMargin="3" leftMargin="5" rightMargin="132" xmlns:rtli="http://www.4js.com/2004/RTL-INPUT" xmlns:xxx0="http://www.4js.com/2004/REPORT">
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:FirstPageHeader/>
<xxx0:Group>
<xxx0:BeforeGroup/>
<xxx0:Group>
<xxx0:OnEveryRow>
<rtli:variable-value name="x.factura" type="INTEGER" value=" 0" isoValue="0"/>
<rtli:variable-value name="x.fecha_factura" type="CHAR(10)" value=" "/>
<rtli:variable-value name="x.fecha_nomina" type="CHAR(10)" value=" "/>
<rtli:variable-value name="x.codigo_id" type="INTEGER" value=" 1203" isoValue="1203"/>
<rtli:variable-value name="x.nombre_cliente" type="VARCHAR(60)" value="1203-VENTURA ANTONIO VIZCAINO PERDOMO "/>
<rtli:variable-value name="x.bruto" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
<rtli:variable-value name="x.descuento" type="DECIMAL(12,2)" value=" 0.00" isoValue="0.00"/>
<rtli:variable-value name="x.itbis" type="DECIMAL(12,2)" value=" 0.00" isoValue="0.00"/>
<rtli:variable-value name="x.sub_total" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
<rtli:variable-value name="x.neto" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
<rtli:variable-value name="x.estado" type="CHAR(20)" value=" "/>
<rtli:variable-value name="x.condicion" type="VARCHAR(30)" value=" "/>
<rtli:variable-value name="nombre_cia" type="VARCHAR(60)" value="CAFETERIA MARMOTECH "/>
<rtli:variable-value name="hora" type="CHAR(16)" value="2015-06-25 14:58"/>
<rtli:variable-value name="xfecha1" type="CHAR(10)" value="09/06/2015"/>
<rtli:variable-value name="xfecha2" type="CHAR(10)" value="25/06/2015"/>
</xxx0:OnEveryRow>
</xxx0:Group>
<xxx0:AfterGroup>
<rtli:variable-value name="total_condicion" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
</xxx0:AfterGroup>
</xxx0:Group>
<xxx0:OnLastRow>
<rtli:variable-value name="total_venta" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
</xxx0:OnLastRow>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:PageTrailer/>
</xxx0:Report>
-94
View File
@@ -1,94 +0,0 @@
<?xml version="1.0" encoding="windows-1252"?>
<?RTLStyleSheet ignoreUnmatchedInput="true" autoCreate4GLVariables="true" variableValueNamesAreInLowerCase="true" styleURL="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" outputDeviceName="SVG" isPreview="1"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug3.xml"?>
<?BoxDecoratorStyleSheet systemId="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp"?>
<?HlPxmlToPxmlStyleSheet notUsed="true"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug4.xml"?>
<?PxmlLayouter pageWidth="3.00inch" pageHeight="3.00inch" topMargin="0.10inch" leftMargin="0.10inch" rightMargin="0.10inch" bottomMargin="0.10inch" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" markOverfullBoxesInDocument="true"?>
<?SVGWriterStyleSheet antialiasFonts="true" antialiasShapes="true" embedFonts="true" qt422workarounds="true" charsetToEmbed="ISO-8859-15"?>
<?PrettyPrinterStyleSheet tee="false" writeToHost="localhost" encoding="UTF-8" writeMagic="true" writeToPort="6400" writeCompressed="false"?>
<xxx0:Report name="veprmt022.r_registros" headerLength="0" trailerLength="0" pageLength="66" topMargin="3" bottomMargin="3" leftMargin="5" rightMargin="132" xmlns:rtli="http://www.4js.com/2004/RTL-INPUT" xmlns:xxx0="http://www.4js.com/2004/REPORT">
<rtli:variable-value name="xfecha1" value="09/06/2015" type="CHAR(10)"/>
<rtli:variable-value name="nombre_cia" value="CAFETERIA MARMOTECH " type="VARCHAR(60)"/>
<rtli:variable-value name="hora" value="2015-06-25 14:58" type="CHAR(16)"/>
<rtli:variable-value name="xfecha2" value="25/06/2015" type="CHAR(10)"/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:FirstPageHeader/>
<xxx0:Group>
<xxx0:BeforeGroup/>
<xxx0:Group>
<xxx0:OnEveryRow>
<rtli:variable-value name="x.factura" type="INTEGER" value=" 0" isoValue="0"/>
<rtli:variable-value name="x.fecha_factura" type="CHAR(10)" value=" "/>
<rtli:variable-value name="x.nombre_cliente" type="VARCHAR(60)" value="1203-VENTURA ANTONIO VIZCAINO PERDOMO "/>
<rtli:variable-value name="x.neto" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
</xxx0:OnEveryRow>
</xxx0:Group>
<xxx0:AfterGroup>
<rtli:variable-value name="total_condicion" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
</xxx0:AfterGroup>
</xxx0:Group>
<xxx0:OnLastRow>
<rtli:variable-value name="total_venta" type="DECIMAL(12,2)" value=" 497.00" isoValue="497.00"/>
</xxx0:OnLastRow>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:Skip/>
<xxx0:PageTrailer/>
</xxx0:Report>
-41
View File
@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="windows-1252"?>
<?BoxDecoratorStyleSheet systemId="file:/C:/Users/jsoto/Documents/GENERO/BDL240/MARMOTECH/PROYECTO/bin/PUNTOVENTAS/veprrp001.4rp"?>
<?HlPxmlToPxmlStyleSheet notUsed="true"?>
<?PrettyPrinterStyleSheet tee="true" writeToFile="debug4.xml"?>
<?PxmlLayouter pageWidth="3.00inch" pageHeight="3.00inch" topMargin="0.10inch" leftMargin="0.10inch" rightMargin="0.10inch" bottomMargin="0.10inch" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" markOverfullBoxesInDocument="true"?>
<?SVGWriterStyleSheet antialiasFonts="true" antialiasShapes="true" embedFonts="true" qt422workarounds="true" charsetToEmbed="ISO-8859-15"?>
<?PrettyPrinterStyleSheet tee="false" writeToHost="localhost" encoding="UTF-8" writeMagic="true" writeToPort="6400" writeCompressed="false"?>
<xxx0:PXML xmlns:xxx0="http://www.4js.com/2004/PXML">
<xxx0:MINIPAGE fontSize="8" length="min" name="Page Root" width="max">
<xxx0:MINIPAGE layoutDirection="leftToRight" length="min" name="encPrincipal" width="min">
<xxx0:WORDWRAPBOX floatingBehavior="enclosed" name="nombre_cia Value" text="CAFETERIA MARMOTECH " width="width(&quot;M&quot;)*18"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="hora Value" text="2015-06-25 14:58"/>
</xxx0:MINIPAGE>
<xxx0:MINIPAGE fontBold="true" fontSize="7" layoutDirection="leftToRight" length="min" name="rangofechas" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="Finicial" text="FECHA INICIAL:" textAlignment="right" width="2cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="xfecha1 Value" text="09/06/2015"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="FFinal" text="FECHA FINAL:" textAlignment="right" width="2cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="xfecha2 Value" text="25/06/2015"/>
</xxx0:MINIPAGE>
<xxx0:MINIPAGE borderStyle="solid" borderWidth="1" fontSize="7" layoutDirection="leftToRight" length="min" name="encabezados" roundedCorners="true" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox" text="FECHA" width="1.5cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox1" text="FACTURA" width="1.5cm"/>
<xxx0:WORDBOX alignment="baseline" floatingBehavior="enclosed" name="WordBox5" text="NOMBRE" textAlignment="left" width="2cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox2" text="VALOR" textAlignment="right" width="1.9cm"/>
</xxx0:MINIPAGE>
<xxx0:LAYOUTNODE floatingBehavior="enclosed" fontSize="7" layoutDirection="leftToRight" length="min" name="detalle" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="x.fecha_factura Value" text=" " width="1cm"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="----------#" name="x.factura Value" textAlignment="right" value="0" width=".9cm"/>
<xxx0:WORDWRAPBOX alignment="baseline" floatingBehavior="enclosed" name="x.nombre_cliente Value" text="1203-VENTURA ANTONIO VIZCAINO PERDOMO " width="width(&quot;M&quot;)*20"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="---,---,---,--&amp;.&amp;&amp;" name="x.neto Value" textAlignment="right" value="497" width="1cm"/>
</xxx0:LAYOUTNODE>
<xxx0:MINIPAGE fontSize="8" layoutDirection="leftToRight" length="min" name="totalCondicion" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox3" text="T. CONDI" width="3cm"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="---,---,---,--&amp;.&amp;&amp;" name="total_condicion Value" textAlignment="right" value="497" width="2cm"/>
</xxx0:MINIPAGE>
<xxx0:MINIPAGE fontSize="8" layoutDirection="leftToRight" length="min" name="totalGeneral" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox4" text="T. GENERAL" width="3cm"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="---,---,---,--&amp;.&amp;&amp;" name="total_venta Value" textAlignment="right" value="497" width="2cm"/>
</xxx0:MINIPAGE>
</xxx0:MINIPAGE>
</xxx0:PXML>
-40
View File
@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="windows-1252"?>
<?PxmlLayouter pageWidth="3.00inch" pageHeight="3.00inch" topMargin="0.10inch" leftMargin="0.10inch" rightMargin="0.10inch" bottomMargin="0.10inch" FGLDIR="C:/Program Files/FourJs/Genero Studio/fgl" FGLPROFILE="C:/Program Files/FourJs/Genero Studio/fgl/etc/fglprofile" FGLEXECUTABLENAME="veprmt022" FOURRPNAME="veprrp001" markOverfullBoxesInDocument="true"?>
<?SVGWriterStyleSheet antialiasFonts="true" antialiasShapes="true" embedFonts="true" qt422workarounds="true" charsetToEmbed="ISO-8859-15"?>
<?PrettyPrinterStyleSheet tee="false" writeToHost="localhost" encoding="UTF-8" writeMagic="true" writeToPort="6400" writeCompressed="false"?>
<xxx0:PXML xmlns:xxx0="http://www.4js.com/2004/PXML">
<xxx0:MINIPAGE fontSize="8" length="min" name="Page Root" width="max">
<xxx0:MINIPAGE layoutDirection="leftToRight" length="min" name="encPrincipal" width="min">
<xxx0:WORDWRAPBOX floatingBehavior="enclosed" name="nombre_cia Value" text="CAFETERIA MARMOTECH " width="width(&quot;M&quot;)*18"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="hora Value" text="2015-06-25 14:58"/>
</xxx0:MINIPAGE>
<xxx0:MINIPAGE fontBold="true" fontSize="7" layoutDirection="leftToRight" length="min" name="rangofechas" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="Finicial" text="FECHA INICIAL:" textAlignment="right" width="2cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="xfecha1 Value" text="09/06/2015"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="FFinal" text="FECHA FINAL:" textAlignment="right" width="2cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="xfecha2 Value" text="25/06/2015"/>
</xxx0:MINIPAGE>
<xxx0:BORDERBOX borderStyle="solid" borderWidth="1" roundedCorners="true">
<xxx0:MINIPAGE fontSize="7" layoutDirection="leftToRight" length="min" name="encabezados" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox" text="FECHA" width="1.5cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox1" text="FACTURA" width="1.5cm"/>
<xxx0:WORDBOX alignment="baseline" floatingBehavior="enclosed" name="WordBox5" text="NOMBRE" textAlignment="left" width="2cm"/>
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox2" text="VALOR" textAlignment="right" width="1.9cm"/>
</xxx0:MINIPAGE>
</xxx0:BORDERBOX>
<xxx0:LAYOUTNODE floatingBehavior="enclosed" fontSize="7" layoutDirection="leftToRight" length="min" name="detalle" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="x.fecha_factura Value" text=" " width="1cm"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="----------#" name="x.factura Value" textAlignment="right" value="0" width=".9cm"/>
<xxx0:WORDWRAPBOX alignment="baseline" floatingBehavior="enclosed" name="x.nombre_cliente Value" text="1203-VENTURA ANTONIO VIZCAINO PERDOMO " width="width(&quot;M&quot;)*20"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="---,---,---,--&amp;.&amp;&amp;" name="x.neto Value" textAlignment="right" value="497" width="1cm"/>
</xxx0:LAYOUTNODE>
<xxx0:MINIPAGE fontSize="8" layoutDirection="leftToRight" length="min" name="totalCondicion" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox3" text="T. CONDI" width="3cm"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="---,---,---,--&amp;.&amp;&amp;" name="total_condicion Value" textAlignment="right" value="497" width="2cm"/>
</xxx0:MINIPAGE>
<xxx0:MINIPAGE fontSize="8" layoutDirection="leftToRight" length="min" name="totalGeneral" width="min">
<xxx0:WORDBOX floatingBehavior="enclosed" name="WordBox4" text="T. GENERAL" width="3cm"/>
<xxx0:DECIMALFORMATBOX anchorX="1" floatingBehavior="enclosed" format="---,---,---,--&amp;.&amp;&amp;" name="total_venta Value" textAlignment="right" value="497" width="2cm"/>
</xxx0:MINIPAGE>
</xxx0:MINIPAGE>
</xxx0:PXML>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

+11 -1
View File
@@ -15,7 +15,7 @@
<rtl:match name="Group xcodigo" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="Page Root" width="max" length="max">
<LAYOUTNODE name="Layout Node2" width="min" length="min">
<IMAGEBOX name="ImageBox3" width="100" length="38.2134" url="{{&quot;file:///e:/marmotechc/BIN320/IMAGENES/compania/logo.png&quot;}}" intendedResolution="96"/>
<IMAGEBOX name="ImageBox3" width="100" length="38.2134" url="{{&quot;IMAGENES/Logo.png&quot;}}" intendedResolution="96"/>
<MINIPAGE name="Separator" width="1" length="max" bgColor="#000000" layoutDirection="leftToRight" swapX="false"/>
</LAYOUTNODE>
<LAYOUTNODE name="Layout Node3" width="max" length="min" fontSize="10">
@@ -44,6 +44,16 @@
<rtl:input-variable name="xfecha_compra" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox8" alignment="baseline" fontSize="12" baselineType="leftleft" text="{{xfecha_compra.value}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Layout Node6" width="min" length="min" layoutDirection="leftToRight">
<WORDBOX name="WordBox13" width="120" alignment="baseline" fontSize="14" baselineType="leftleft" text="ORDEN COMPRA"/>
<rtl:input-variable name="xnum_ocp" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="xnum_ocp Value" alignment="baseline" fontSize="12" baselineType="leftleft" format="&amp;&amp;&amp;&amp;&amp;&amp;" value="{{xnum_ocp}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Layout Node7" width="min" length="min" layoutDirection="leftToRight">
<WORDBOX name="WordBox14" width="120" alignment="baseline" fontSize="14" baselineType="leftleft" text="PROVEEDOR"/>
<rtl:input-variable name="proveedor" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="proveedor Value" width="width(&quot;M&quot;)*14" alignment="baseline" fontSize="10" baselineType="leftleft" text="{{proveedor.trim()}}"/>
</LAYOUTNODE>
<rtl:input-variable name="barcodigo_act" type="FGLString" expectedLocation="expectedHere"/>
<BARCODEBOX name="BarCodeBox1" x="22.8704" y="220.506" width="105.815" length="35.8691" anchorX="0" anchorY="0" codeType="code-128" codeValue="{{barcodigo_act.value}}" noText="true"/>
</MINIPAGE>
+15 -4
View File
@@ -42,7 +42,18 @@
<rtl:input-variable name="acc_per.fech_efec" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="WordWrapBox2" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;FECHA EFECTIVA:&quot;+acc_per.fech_efec}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion3" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="es_vac" type="FGLNumeric" expectedLocation="expectedHere"/>
<LAYOUTNODE name="Detalle" rtl:condition="es_vac==0" width="min" length="min" fontSize="8" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="det_tit" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="detTit" width="7.5inch" fontSize="9" fontBold="true" floatingBehavior="enclosed" text="{{det_tit.trim()}}"/>
<rtl:input-variable name="det1" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="det1Box" width="7.5inch" floatingBehavior="enclosed" text="{{det1.trim()}}"/>
<rtl:input-variable name="det2" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="det2Box" width="7.5inch" floatingBehavior="enclosed" text="{{det2.trim()}}"/>
<rtl:input-variable name="det3" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="det3Box" width="7.5inch" floatingBehavior="enclosed" text="{{det3.trim()}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion3" rtl:condition="es_vac==1" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="vacacion.fecha_sal" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox7" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;FECHA SALIDA:&quot;+vacacion.fecha_sal}}"/>
<rtl:input-variable name="vacacion.fecha_ent" type="FGLString" expectedLocation="expectedHere"/>
@@ -50,7 +61,7 @@
<rtl:input-variable name="vacacion.dias_tomados" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox9" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DIAS TOMADOS:&quot;+vacacion.dias_tomados.format(&quot;&amp;&amp;&quot;)}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion4" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed">
<LAYOUTNODE name="Informacion4" rtl:condition="es_vac==1" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="vacacion.dias_vac" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox10" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DIAS PAGADOS:&quot;+vacacion.dias_vac.format(&quot;&amp;&amp;&quot;)}}"/>
<rtl:input-variable name="vacacion.num_nomi" type="FGLNumeric" expectedLocation="expectedHere"/>
@@ -58,7 +69,7 @@
<rtl:input-variable name="vacacion.num_nomi" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox12" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;NOMINA NO C:&quot;+vacacion.num_nomi.format(&quot;&amp;&amp;&amp;&amp;&quot;)}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion5" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<LAYOUTNODE name="Informacion5" rtl:condition="es_vac==1" width="min" length="min" fontSize="8" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="vacacion.pano" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox13" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;PERIODO:&quot;+vacacion.pano}}"/>
<rtl:input-variable name="vacacion.dias_tomados" type="FGLNumeric" expectedLocation="expectedHere"/>
@@ -66,7 +77,7 @@
<rtl:input-variable name="dias2" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox15" width="2.5inch" floatingBehavior="enclosed" text="{{&quot;DIAS PAGADOS:&quot;+dias2}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="Informacion6" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<LAYOUTNODE name="Informacion6" rtl:condition="es_vac==1" width="min" length="min" layoutDirection="leftToRight" floatingBehavior="enclosed" borderWidth="1" borderStyle="solid">
<rtl:input-variable name="vacacion.valor_vacaciones" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="WordBox16" width="2.5inch" fontSize="8" fontBold="true" floatingBehavior="enclosed" text="{{&quot;VALOR VACACIONES:&quot;+vacacion.valor_vacaciones.format(&quot;###,###.##&quot;)}}"/>
</LAYOUTNODE>
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="3140a" version="6.00">
<report:Settings RWPageWidth="11.00inch" RWPageLength="8.50inch" RWLeftMargin="0.4inch" RWTopMargin="0.4inch" RWRightMargin="0.4inch" RWBottomMargin="0.4inch">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWDataLocation="../addir/adprrp048.rdd" RWFglReportName="capacitacion"/>
<report:Conflicts/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="Page Root" width="max" length="max" alignment="near">
<LAYOUTNODE name="encabezados" width="max" length="min" fontSize="8" port="anyPageHeader" floatingBehavior="enclosed">
<LAYOUTNODE name="compania" width="min" length="max" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="progId" width="1inch" alignment="baseline" floatingBehavior="enclosed" text="adprrp048"/>
<rtl:input-variable name="p_companias.nombre" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="empresa" width="7.2inch" floatingBehavior="enclosed" textAlignment="center" text="{{p_companias.nombre.trim()}}"/>
<rtl:input-variable name="fecha_rep" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="fechaRep" width="1inch" floatingBehavior="enclosed" textAlignment="right" text="{{fecha_rep}}"/>
<rtl:input-variable name="hora" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="horaRep" width="0.9inch" floatingBehavior="enclosed" textAlignment="right" text="{{hora}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="titulo" width="min" length="max" fontSize="11" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="tituloTxt" width="10.1inch" floatingBehavior="enclosed" textAlignment="center" text="HORAS DE CAPACITACION POR COLABORADOR"/>
</LAYOUTNODE>
<LAYOUTNODE name="filtrosNode" width="min" length="max" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="filtros" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="filtrosTxt" width="10.1inch" floatingBehavior="enclosed" textAlignment="center" text="{{filtros.trim()}}"/>
</LAYOUTNODE>
<WORDBOX name="sepEnc" width="max" length="4" floatingBehavior="enclosed" text=" "/>
<LAYOUTNODE name="encCols" width="min" length="max" fontSize="7.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#E8D9E6" borderWidth="0.5" borderStyle="solid">
<WORDBOX name="hFila" width="1.1inch" floatingBehavior="enclosed" text="MOVIMIENTO"/>
<WORDBOX name="hCap" width="2.9inch" floatingBehavior="enclosed" text="CAPACITACION"/>
<WORDBOX name="hTipo" width="0.9inch" floatingBehavior="enclosed" text="TIPO"/>
<WORDBOX name="hIni" width="0.8inch" floatingBehavior="enclosed" text="INICIO"/>
<WORDBOX name="hFin" width="0.8inch" floatingBehavior="enclosed" text="FIN"/>
<WORDBOX name="hReq" width="0.65inch" floatingBehavior="enclosed" textAlignment="right" text="H. REQ."/>
<WORDBOX name="hTom" width="0.65inch" floatingBehavior="enclosed" textAlignment="right" text="H. TOM."/>
<WORDBOX name="hPend" width="0.65inch" floatingBehavior="enclosed" textAlignment="right" text="H. PEND."/>
<WORDBOX name="hEspacio" width="0.1inch" floatingBehavior="enclosed" text=" "/>
<WORDBOX name="hInst" width="1.5inch" floatingBehavior="enclosed" text="INSTITUCION"/>
</LAYOUTNODE>
</LAYOUTNODE>
<rtl:match name="FirstPageHeader" nameConstraint="FirstPageHeader" minOccurs="0" maxOccurs="1"/>
<rtl:match name="Group num_emp" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<LAYOUTNODE name="grpEnc" width="min" length="max" fontSize="8" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#F3EEF3">
<rtl:input-variable name="x.num_emp" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="gFicha" width="0.7inch" floatingBehavior="enclosed" format="&lt;&lt;&lt;&lt;&lt;&amp;" value="{{x.num_emp}}"/>
<rtl:input-variable name="x.empleado" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="gEmp" textAlignment="left" width="3.6inch" floatingBehavior="enclosed" text="{{x.empleado.trim()}}"/>
<rtl:input-variable name="x.nom_dpto" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="gDpto" textAlignment="left" width="2.9inch" floatingBehavior="enclosed" text="{{x.nom_dpto.trim()}}"/>
<rtl:input-variable name="x.nom_puesto" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="gPuesto" textAlignment="left" width="2.9inch" floatingBehavior="enclosed" text="{{x.nom_puesto.trim()}}"/>
</LAYOUTNODE>
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
<LAYOUTNODE name="fila" width="min" length="max" fontSize="7.5" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="x.fila" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dFila" width="1.1inch" floatingBehavior="enclosed" text="{{x.fila}}"/>
<rtl:input-variable name="x.nom_cap" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dCap" width="2.9inch" floatingBehavior="enclosed" text="{{x.nom_cap.trim()}}"/>
<rtl:input-variable name="x.tipo_evento" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dTipo" width="0.9inch" floatingBehavior="enclosed" text="{{x.tipo_evento.trim()}}"/>
<rtl:input-variable name="fini" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dIni" width="0.8inch" floatingBehavior="enclosed" text="{{fini}}"/>
<rtl:input-variable name="ffin" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dFin" width="0.8inch" floatingBehavior="enclosed" text="{{ffin}}"/>
<rtl:input-variable name="x.h_req" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dReq" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{x.h_req}}"/>
<rtl:input-variable name="x.h_tom" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dTom" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{x.h_tom}}"/>
<rtl:input-variable name="x.h_pend" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dPend" class="grwNumericValue" width="0.65inch" anchorX="1" fontBold="true" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{x.h_pend}}"/>
<WORDBOX name="dEspacio" width="0.1inch" floatingBehavior="enclosed" text=" "/>
<rtl:input-variable name="x.institucion" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dInst" width="1.5inch" floatingBehavior="enclosed" text="{{x.institucion.trim()}}"/>
</LAYOUTNODE>
</rtl:match>
<MINIPAGE name="lineaPie" width="max" length="0.5" bgColor="#7E0C6E"/>
<LAYOUTNODE name="grpPie" width="min" length="max" fontSize="7.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="pTit" width="3.0inch" floatingBehavior="enclosed" text="Total colaborador"/>
<rtl:input-variable name="g_cumpl" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="pCumplTit" width="1.1inch" floatingBehavior="enclosed" text="Cumplimiento %"/>
<DECIMALFORMATBOX name="pCumpl" width="1.5inch" floatingBehavior="enclosed" format="---&amp;.&amp;&amp;" value="{{g_cumpl}}"/>
<WORDBOX name="pVacio" width="0.9inch" floatingBehavior="enclosed" text=" "/>
<rtl:input-variable name="g_req" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pReq" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{g_req}}"/>
<rtl:input-variable name="g_tom" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pTom" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{g_tom}}"/>
<rtl:input-variable name="g_pend" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pPend" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{g_pend}}"/>
</LAYOUTNODE>
<WORDBOX name="sepGrp" width="max" length="6" floatingBehavior="enclosed" text=" "/>
</rtl:match>
<rtl:match name="OnLastRow" nameConstraint="OnLastRow" minOccurs="0" maxOccurs="1">
<LAYOUTNODE name="totGen" width="min" length="max" fontSize="8.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#E8D9E6" borderWidth="0.5" borderStyle="solid">
<rtl:input-variable name="t_emp" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="tTit" width="1.2inch" floatingBehavior="enclosed" text="TOTAL GENERAL"/>
<DECIMALFORMATBOX name="tEmp" width="0.5inch" floatingBehavior="enclosed" format="&lt;&lt;&lt;&lt;&amp;" value="{{t_emp}}"/>
<WORDBOX name="tEmpTit" width="1.3inch" floatingBehavior="enclosed" text="colaboradores"/>
<rtl:input-variable name="t_cumpl" type="FGLNumeric" expectedLocation="expectedHere"/>
<WORDBOX name="tCumplTit" width="1.1inch" floatingBehavior="enclosed" text="Cumplimiento %"/>
<DECIMALFORMATBOX name="tCumpl" width="1.5inch" floatingBehavior="enclosed" format="---&amp;.&amp;&amp;" value="{{t_cumpl}}"/>
<WORDBOX name="tVacio" width="0.9inch" floatingBehavior="enclosed" text=" "/>
<rtl:input-variable name="t_req" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tReq" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{t_req}}"/>
<rtl:input-variable name="t_tom" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tTom" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{t_tom}}"/>
<rtl:input-variable name="t_pend" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tPend" class="grwNumericValue" width="0.65inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;.&amp;&amp;" value="{{t_pend}}"/>
</LAYOUTNODE>
</rtl:match>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
+113
View File
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="3140a" version="6.00">
<report:Settings RWPageWidth="8.50inch" RWPageLength="11.00inch" RWLeftMargin="0.4inch" RWTopMargin="0.4inch" RWRightMargin="0.4inch" RWBottomMargin="0.4inch">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWDataLocation="../addir/adprrp049.rdd" RWFglReportName="rotacion"/>
<report:Conflicts/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="Page Root" width="max" length="max" alignment="near">
<LAYOUTNODE name="encabezados" width="max" length="min" fontSize="8" port="anyPageHeader" floatingBehavior="enclosed">
<LAYOUTNODE name="compania" width="min" length="max" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="progId" width="0.9inch" alignment="baseline" floatingBehavior="enclosed" text="adprrp049"/>
<rtl:input-variable name="p_companias.nombre" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="empresa" width="4.8inch" floatingBehavior="enclosed" textAlignment="center" text="{{p_companias.nombre.trim()}}"/>
<rtl:input-variable name="fecha_rep" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="fechaRep" width="0.9inch" floatingBehavior="enclosed" textAlignment="right" text="{{fecha_rep}}"/>
<rtl:input-variable name="hora" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="horaRep" width="0.8inch" floatingBehavior="enclosed" textAlignment="right" text="{{hora}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="titulo" width="min" length="max" fontSize="11" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="tituloTxt" width="7.4inch" floatingBehavior="enclosed" textAlignment="center" text="ROTACION LABORAL - RESUMEN MENSUAL"/>
</LAYOUTNODE>
<LAYOUTNODE name="filtrosNode" width="min" length="max" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="filtros" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="filtrosTxt" width="7.4inch" floatingBehavior="enclosed" textAlignment="center" text="{{filtros.trim()}}"/>
</LAYOUTNODE>
<WORDBOX name="sepEnc" width="max" length="4" floatingBehavior="enclosed" text=" "/>
<LAYOUTNODE name="encCols" width="min" length="max" fontSize="7.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#E8D9E6" borderWidth="0.5" borderStyle="solid">
<WORDBOX name="hMes" width="1.3inch" floatingBehavior="enclosed" text="MES"/>
<WORDBOX name="hPlant" width="0.85inch" floatingBehavior="enclosed" textAlignment="right" text="PLANTILLA"/>
<WORDBOX name="hIng" width="0.85inch" floatingBehavior="enclosed" textAlignment="right" text="INGRESOS"/>
<WORDBOX name="hSal" width="0.85inch" floatingBehavior="enclosed" textAlignment="right" text="SALIDAS"/>
<WORDBOX name="hVol" width="0.85inch" floatingBehavior="enclosed" textAlignment="right" text="VOLUNT."/>
<WORDBOX name="hInv" width="0.85inch" floatingBehavior="enclosed" textAlignment="right" text="INVOLUNT."/>
<WORDBOX name="hOtr" width="0.85inch" floatingBehavior="enclosed" textAlignment="right" text="OTRAS"/>
<WORDBOX name="hRot" width="0.95inch" floatingBehavior="enclosed" textAlignment="right" text="ROTACION %"/>
</LAYOUTNODE>
</LAYOUTNODE>
<rtl:match name="FirstPageHeader" nameConstraint="FirstPageHeader" minOccurs="0" maxOccurs="1"/>
<rtl:match name="Group anio" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<LAYOUTNODE name="grpEnc" width="min" length="max" fontSize="8.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#F3EEF3">
<WORDBOX name="gTit" width="0.5inch" floatingBehavior="enclosed" text="AÑO"/>
<rtl:input-variable name="x.anio" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="gAnio" width="1.0inch" floatingBehavior="enclosed" format="&amp;&amp;&amp;&amp;" value="{{x.anio}}"/>
</LAYOUTNODE>
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
<LAYOUTNODE name="fila" width="min" length="max" fontSize="7.5" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="x.mes_nom" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dMes" width="1.3inch" floatingBehavior="enclosed" text="{{x.mes_nom}}"/>
<rtl:input-variable name="x.plantilla" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dPlant" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{x.plantilla}}"/>
<rtl:input-variable name="x.ingresos" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dIng" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{x.ingresos}}"/>
<rtl:input-variable name="x.salidas" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dSal" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{x.salidas}}"/>
<rtl:input-variable name="x.voluntarias" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dVol" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{x.voluntarias}}"/>
<rtl:input-variable name="x.involuntarias" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dInv" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{x.involuntarias}}"/>
<rtl:input-variable name="x.otras" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dOtr" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{x.otras}}"/>
<rtl:input-variable name="x.rot_pct" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dRot" class="grwNumericValue" width="0.95inch" anchorX="1" fontBold="true" floatingBehavior="enclosed" textAlignment="right" format="---&amp;.&amp;&amp;" value="{{x.rot_pct}}"/>
</LAYOUTNODE>
</rtl:match>
<MINIPAGE name="lineaPie" width="max" length="0.5" bgColor="#7E0C6E"/>
<LAYOUTNODE name="grpPie" width="min" length="max" fontSize="7.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="pTit" width="1.3inch" floatingBehavior="enclosed" text="TOTAL AÑO / PROM."/>
<rtl:input-variable name="a_plant" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pPlant" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{a_plant}}"/>
<rtl:input-variable name="a_ing" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pIng" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{a_ing}}"/>
<rtl:input-variable name="a_sal" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pSal" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{a_sal}}"/>
<rtl:input-variable name="a_vol" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pVol" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{a_vol}}"/>
<rtl:input-variable name="a_inv" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pInv" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{a_inv}}"/>
<rtl:input-variable name="a_otr" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pOtr" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{a_otr}}"/>
<rtl:input-variable name="a_pct" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pRot" class="grwNumericValue" width="0.95inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---&amp;.&amp;&amp;" value="{{a_pct}}"/>
</LAYOUTNODE>
<WORDBOX name="sepGrp" width="max" length="6" floatingBehavior="enclosed" text=" "/>
</rtl:match>
<rtl:match name="OnLastRow" nameConstraint="OnLastRow" minOccurs="0" maxOccurs="1">
<LAYOUTNODE name="totGen" width="min" length="max" fontSize="8" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#E8D9E6" borderWidth="0.5" borderStyle="solid">
<WORDBOX name="tTit" width="1.3inch" floatingBehavior="enclosed" text="TOTAL PERIODO"/>
<WORDBOX name="tPlant" width="0.85inch" floatingBehavior="enclosed" text=" "/>
<rtl:input-variable name="t_ing" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tIng" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{t_ing}}"/>
<rtl:input-variable name="t_sal" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tSal" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{t_sal}}"/>
<rtl:input-variable name="t_vol" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tVol" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{t_vol}}"/>
<rtl:input-variable name="t_inv" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tInv" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{t_inv}}"/>
<rtl:input-variable name="t_otr" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tOtr" class="grwNumericValue" width="0.85inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{t_otr}}"/>
</LAYOUTNODE>
<WORDBOX name="nota" width="max" length="min" fontSize="7" fontItalic="true" floatingBehavior="enclosed" text="Rotacion % = salidas que cuentan para rotacion / plantilla al inicio del mes. Anual = salidas del año / plantilla promedio. Los traslados dentro del grupo no cuentan."/>
</rtl:match>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
+97
View File
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="3140a" version="6.00">
<report:Settings RWPageWidth="11.00inch" RWPageLength="8.50inch" RWLeftMargin="0.4inch" RWTopMargin="0.4inch" RWRightMargin="0.4inch" RWBottomMargin="0.4inch">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWDataLocation="../addir/adprrp049.rdd" RWFglReportName="salidas"/>
<report:Conflicts/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="Page Root" width="max" length="max" alignment="near">
<LAYOUTNODE name="encabezados" width="max" length="min" fontSize="8" port="anyPageHeader" floatingBehavior="enclosed">
<LAYOUTNODE name="compania" width="min" length="max" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="progId" width="1inch" alignment="baseline" floatingBehavior="enclosed" text="adprrp049"/>
<rtl:input-variable name="p_companias.nombre" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="empresa" width="7.2inch" floatingBehavior="enclosed" textAlignment="center" text="{{p_companias.nombre.trim()}}"/>
<rtl:input-variable name="fecha_rep" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="fechaRep" width="1inch" floatingBehavior="enclosed" textAlignment="right" text="{{fecha_rep}}"/>
<rtl:input-variable name="hora" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="horaRep" width="0.9inch" floatingBehavior="enclosed" textAlignment="right" text="{{hora}}"/>
</LAYOUTNODE>
<LAYOUTNODE name="titulo" width="min" length="max" fontSize="11" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="tituloTxt" width="10.1inch" floatingBehavior="enclosed" textAlignment="center" text="ROTACION LABORAL - DETALLE DE SALIDAS POR CAUSA"/>
</LAYOUTNODE>
<LAYOUTNODE name="filtrosNode" width="min" length="max" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="filtros" type="FGLString" expectedLocation="expectedAhead"/>
<WORDBOX name="filtrosTxt" width="10.1inch" floatingBehavior="enclosed" textAlignment="center" text="{{filtros.trim()}}"/>
</LAYOUTNODE>
<WORDBOX name="sepEnc" width="max" length="4" floatingBehavior="enclosed" text=" "/>
<LAYOUTNODE name="encCols" width="min" length="max" fontSize="7.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#E8D9E6" borderWidth="0.5" borderStyle="solid">
<WORDBOX name="hFec" width="0.8inch" floatingBehavior="enclosed" text="SALIDA"/>
<WORDBOX name="hFicha" width="0.5inch" floatingBehavior="enclosed" text="FICHA"/>
<WORDBOX name="hNom" width="2.1inch" floatingBehavior="enclosed" text="COLABORADOR"/>
<WORDBOX name="hDep" width="1.6inch" floatingBehavior="enclosed" text="DEPARTAMENTO"/>
<WORDBOX name="hPue" width="1.6inch" floatingBehavior="enclosed" text="PUESTO"/>
<WORDBOX name="hTipo" width="0.75inch" floatingBehavior="enclosed" text="TIPO"/>
<WORDBOX name="hMeses" width="0.6inch" floatingBehavior="enclosed" textAlignment="right" text="MESES"/>
<WORDBOX name="hEsp" width="0.1inch" floatingBehavior="enclosed" text=" "/>
<WORDBOX name="hRec" width="0.5inch" floatingBehavior="enclosed" text="RECONT."/>
<WORDBOX name="hDet" width="1.55inch" floatingBehavior="enclosed" text="DETALLE"/>
</LAYOUTNODE>
</LAYOUTNODE>
<rtl:match name="FirstPageHeader" nameConstraint="FirstPageHeader" minOccurs="0" maxOccurs="1"/>
<rtl:match name="Group cod_causa" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<LAYOUTNODE name="grpEnc" width="min" length="max" fontSize="8.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#F3EEF3">
<rtl:input-variable name="y.desc_causa" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="gCausa" width="4.0inch" textAlignment="left" floatingBehavior="enclosed" text="{{y.desc_causa.trim()}}"/>
<rtl:input-variable name="y.clase" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="gClase" width="3.0inch" textAlignment="left" floatingBehavior="enclosed" text="{{&quot;(&quot;+y.clase.trim()+&quot;)&quot;}}"/>
</LAYOUTNODE>
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
<LAYOUTNODE name="fila" width="min" length="max" fontSize="7.5" layoutDirection="leftToRight" floatingBehavior="enclosed">
<rtl:input-variable name="fsal" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dFec" width="0.8inch" floatingBehavior="enclosed" text="{{fsal}}"/>
<rtl:input-variable name="y.num_emp" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dFicha" width="0.5inch" floatingBehavior="enclosed" format="&lt;&lt;&lt;&lt;&lt;&amp;" value="{{y.num_emp}}"/>
<rtl:input-variable name="y.empleado" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="dNom" width="2.1inch" floatingBehavior="enclosed" text="{{y.empleado.trim()}}"/>
<rtl:input-variable name="y.nom_dpto" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="dDep" width="1.6inch" floatingBehavior="enclosed" text="{{y.nom_dpto.trim()}}"/>
<rtl:input-variable name="y.nom_puesto" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="dPue" width="1.6inch" floatingBehavior="enclosed" text="{{y.nom_puesto.trim()}}"/>
<rtl:input-variable name="y.tipo_emp" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dTipo" width="0.75inch" floatingBehavior="enclosed" text="{{y.tipo_emp.trim()}}"/>
<rtl:input-variable name="y.meses" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dMeses" class="grwNumericValue" width="0.6inch" anchorX="1" floatingBehavior="enclosed" textAlignment="right" format="---,--&amp;" value="{{y.meses}}"/>
<WORDBOX name="dEsp" width="0.1inch" floatingBehavior="enclosed" text=" "/>
<rtl:input-variable name="y.recont" type="FGLString" expectedLocation="expectedHere"/>
<WORDBOX name="dRec" width="0.5inch" floatingBehavior="enclosed" text="{{y.recont}}"/>
<rtl:input-variable name="y.detalle" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="dDet" width="1.55inch" floatingBehavior="enclosed" text="{{y.detalle.trim()}}"/>
</LAYOUTNODE>
</rtl:match>
<MINIPAGE name="lineaPie" width="max" length="0.5" bgColor="#7E0C6E"/>
<LAYOUTNODE name="grpPie" width="min" length="max" fontSize="7.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed">
<WORDBOX name="pTit" width="1.3inch" floatingBehavior="enclosed" text="Salidas por esta causa:"/>
<rtl:input-variable name="g_cant" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pCant" width="1.0inch" floatingBehavior="enclosed" format="---,--&amp;" value="{{g_cant}}"/>
</LAYOUTNODE>
<WORDBOX name="sepGrp" width="max" length="6" floatingBehavior="enclosed" text=" "/>
</rtl:match>
<rtl:match name="OnLastRow" nameConstraint="OnLastRow" minOccurs="0" maxOccurs="1">
<LAYOUTNODE name="totGen" width="min" length="max" fontSize="8.5" fontBold="true" layoutDirection="leftToRight" floatingBehavior="enclosed" bgColor="#E8D9E6" borderWidth="0.5" borderStyle="solid">
<WORDBOX name="tTit" width="1.6inch" floatingBehavior="enclosed" text="TOTAL DE SALIDAS:"/>
<rtl:input-variable name="t_cant" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tCant" width="1.0inch" floatingBehavior="enclosed" format="---,--&amp;" value="{{t_cant}}"/>
</LAYOUTNODE>
</rtl:match>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
-66
View File
@@ -1,66 +0,0 @@
3355 2300 0 113JUAN SOTO CONCEPCION 31/12/1899C/ PRIMERA, RES. SOL RECIENTE 1 31/12/1899 0 00104581939 0 175000.00 01/04/200831/12/1899 0 0 <byte value> 0 31/12/1899 0 0 031/12/1899 0 31/12/1899 M A R M O T E C H, S. A. (C) TECNOLOGIA GERENTE DE TECNOLOGIA EMPLEADOS ACTIVOS 1
3980 2300 0 16MIGUEL PINALES DEL ROSARIO 31/12/1899C/ PRIMERA 31/12/1899 0 40225031695 0 25000.00 09/06/201431/12/1899 0 0 <byte value> 0 31/12/1899 0 0 031/12/1899 0 31/12/1899 M A R M O T E C H, S. A. (C) TECNOLOGIA ASISTENTE TECNOLOGIA EMPLEADOS ACTIVOS 2
4791 2300 0 16ALEXANDER PAULINO ROSARIO 31/12/1899C/ MANZANA N 28 31/12/1899 0 40226444517 0 20000.00 25/03/201931/12/1899 0 0 <byte value> 0 31/12/1899 0 0 031/12/1899 0 31/12/1899 M A R M O T E C H, S. A. (C) TECNOLOGIA ASISTENTE TECNOLOGIA EMPLEADOS ACTIVOS 3
3
Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

-226
View File
@@ -1,226 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta/css/bootstrap.min.css" /> -->
<title>Custom Bootstrap 4 card</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,500&amp;subset=latin-ext" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
</head>
<style>
html {
font-size: 14px;
}
.card {
position: relative;
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
background-color: #fff;
background-clip: border-box;
border: 1px solid black;
border-radius: .25rem;
}
.container {
font-size: 14px;
color: #666666;
font-family: "Open Sans";
}
.card-custom {
overflow: hidden;
min-height: 500px;
/* box-shadow: 0 0 15px rgba(10, 10, 10, 0.3); */
}
.card-custom-img {
height: 278px;
background-color: #792227;
background-size: cover;
background-position: center;
border-color: inherit;
margin-top: 222px;
}
/* First border-left-width setting is a fallback */
/* .card-custom-img::after {
position: absolute;
content: '';
top: 161px;
left: 0;
width: 0;
height: 0;
border-style: solid;
border-top-width: 40px;
border-right-width: 0;
border-bottom-width: 0;
border-left-width: 545px;
border-left-width: calc(575px - 5vw);
border-top-color: transparent;
border-right-color: transparent;
border-bottom-color: transparent;
border-left-color: inherit;
} */
.img-fluid {
max-width: 100%;
height: auto;
}
img {
vertical-align: middle;
border-style: none;
}
.card-custom-avatar img {
border-radius: 50%;
border: 5px solid #792227;
position: absolute;
top: 234px;
left: 50%;
transform: translate(-50%, -50%);
width: 158px;
height: 154px;
}
.card-custom-avatar2 .img2 {
position: absolute;
top: 65px;
left: 50%;
transform: translate(-50%, -50%);
width: 255px;
height: 90px;
}
.card-custom-avatar2 .direccion {
position: absolute;
top: 94px;
left: 53%;
transform: translate(-50%, -50%);
width: 69%;
font-size: 11px;
}
.card-custom-avatar2 .telefono {
position: absolute;
top: 110px;
left: 52%;
transform: translate(-50%, -50%);
width: 30%;
font-size: 11px;
}
.card-footer{
color: white;
position: absolute;
height: 195px;
bottom: 0;
width: 100%;
/* background-color: aquamarine; */
}
.nombre {
position: absolute;
font-size: 23px;
left: 50%;
transform: translate(-50% , -50%);
-webkit-transform: translate(-50%, -50%);
width: 50%;
}
.cargo {
font-size: 15px;
position: absolute;
top: 15%;
left: 50%;
transform: translate(-50% , -50%);
-webkit-transform: translate(-50%, -50%);
}
.m-auto {
margin: auto!important;
}
.pt-5 {
padding-top: 3rem!important;
}
.row {
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;
}
.pb-3 {
padding-bottom: 1rem!important;
}
.col-md-6 {
width: 310px;
}
.bg-white {
background-color: #fff!important;
}
.m-auto {
margin: auto!important;
}
.pt-5 {
padding-top: 3rem!important;
}
.row {
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-right: -15px;
margin-left: -15px;
}
*, ::after, ::before {
box-sizing: inherit;
}
</style>
<body>
<div class="container">
<div class="row pt-5 m-auto">
<div class="col-md-6 col-lg-4 pb-3">
<!-- Copy the content below until next comment -->
<div class="card card-custom bg-white border-white border-0">
<div class="card-custom-avatar2">
<img class="img-fluid img2" src="Logo_DCM.png" alt="Avatar" />
<p class="card-text direccion">Av. Ing Roberto Pastoriza 164. Sto.Dgo.</p>
<p class="card-text telefono">(809)-227-2223)</p>
</div>
<div class="card-custom-avatar">
<img class="img-fluid" src="lana.PNG" alt="Avatar" />
</div>
<div class="card-custom-img"></div>
<div class="card-footer">
<p class="nombre">Lana Rhoades</p>
<p class="cargo">Gerente de RR.HH</p>
</div>
</div>
<!-- Copy until here -->
</div>
</div>
</div>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

+1 -1
View File
@@ -14,7 +14,7 @@
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="Page Root" width="max" length="min">
<MINIPAGE name="ENCABEZADOSGRAL" width="130" length="560.485" alignment="center" fontSize="9" layoutDirection="leftToRight">
<IMAGEBOX name="ImageBox4" x="7" y="5" width="112.489" length="65.8341" anchorX="0" anchorY="0" url="file:///E:/MARMOTECHC/BIN320/IMAGENES/Logo_DCM.PNG" intendedResolution="96"/>
<IMAGEBOX name="ImageBox4" x="7" y="5" width="112.489" length="65.8341" anchorX="0" anchorY="0" url="IMAGENES/Logo_DCM.png" intendedResolution="96"/>
<LAYOUTNODE name="Layout Node8" y="max-181.379" width="min" length="min" anchorY="1" floatingBehavior="enclosed">
<rtl:input-variable name="p_companias.nombre" type="FGLString" expectedLocation="expectedAhead"/>
<WORDWRAPBOX name="p_companias.nombre Value" width="width(&quot;M&quot;)*20" alignment="baseline" fontSize="12" fontBold="true" baselineType="leftleft" text="{{p_companias.nombre}}"/>
-28
View File
@@ -1,28 +0,0 @@
Date: 03/02/2026 Time: 10:46:04
Program error at 'ccprmt017.4gl', line number 28.
SQL statement error number -930 (-18456).
[Microsoft][SQL Server Native Client 11.0][SQL Server]Error de inicio de sesión del usuario ''.
Date: 03/02/2026 Time: 10:46:25
Program error at 'ccprmt017.4gl', line number 60.
FORMS statement error number -1110.
Form file (cpfmt017) not found.
Date: 03/02/2026 Time: 10:46:49
Program error at 'ccprmt017.4gl', line number 60.
FORMS statement error number -1110.
Form file (ccfmt017) not found.
Date: 03/02/2026 Time: 10:47:04
Program error at 'ccprmt017.4gl', line number 62.
FORMS statement error number -1102.
Field (comisiones) not found in form.
Date: 03/02/2026 Time: 10:48:00
Program error at 'ccprmt017.4gl', line number 79.
SQL statement error number -206 (-208).
[Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name 'ctb9'.
Date: 03/02/2026 Time: 10:55:18
Program error at 'ccprmt017.4gl', line number 73.
SQL statement error number -6372 (-4104).
[Microsoft][SQL Server Native Client 11.0][SQL Server]The multi-part identifier "a.id" could not be bound.
Date: 03/02/2026 Time: 10:56:56
Program error at 'ccprmt017.4gl', line number 65.
SQL statement error number -284 (-1).
A subquery has returned not exactly one row.
+62
View File
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="60003" version="7.00">
<report:Settings RWPageWidth="a4width" RWPageLength="a4length" RWLeftMargin="1.3cm" RWTopMargin="1.3cm" RWRightMargin="1.3cm" RWBottomMargin="1.3cm">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWFglReportName="ventas"/>
<report:Conflicts/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="page root" width="max" length="max" alignment="near" fontName="Arial" fontSize="8">
<LAYOUTNODE name="header" width="min" length="min" alignment="center" port="firstPageHeader">
<WORDBOX name="Title" width="500" length="24" alignment="near" fontSize="15" fontBold="true" textAlignment="center" text="Clientes sin Ventas"/>
<LAYOUTNODE name="espacio titulo" width="500" length="6"/>
</LAYOUTNODE>
<rtl:match name="Group sec_vend" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="info" width="min" length="max" layoutDirection="leftToRight" fontBold="true">
<rtl:input-variable name="empresa" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="empresa Value" width="170" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{empresa}}"/>
<rtl:input-variable name="titulo" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="titulo Value" width="330" length="12" alignment="baseline" floatingBehavior="enclosed" textAlignment="right" text="{{titulo}}"/>
</MINIPAGE>
<LAYOUTNODE name="espacio info" width="500" length="6"/>
<MINIPAGE name="vendedor header" width="min" length="max" layoutDirection="leftToRight" bgColor="#cccccc" fontBold="true">
<rtl:input-variable name="vendedor" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="vendedor Value" width="500" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{vendedor}}"/>
</MINIPAGE>
<MINIPAGE name="encabezado" width="min" length="max" bgColor="#eeeeee" fontBold="true" layoutDirection="leftToRight">
<WORDBOX name="h1" width="170" length="12" alignment="baseline" text="Cliente"/>
<WORDBOX name="h2" width="55" length="12" alignment="baseline" textAlignment="right" text="Factura"/>
<WORDBOX name="h3" width="70" length="12" alignment="baseline" textAlignment="right" text="Fecha"/>
<WORDBOX name="h4" width="75" length="12" alignment="baseline" textAlignment="right" text="Valor"/>
<WORDBOX name="h5" width="45" length="12" alignment="baseline" textAlignment="right" text="No.dias"/>
<WORDBOX name="h6" width="85" length="12" alignment="baseline" textAlignment="right" text="Balance"/>
</MINIPAGE>
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="fila" width="min" length="max" layoutDirection="leftToRight">
<rtl:input-variable name="cli" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="cli Value" width="170" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{cli}}"/>
<rtl:input-variable name="x.factura" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="factura Value" width="55" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="------&amp;" value="{{x.factura}}"/>
<rtl:input-variable name="fec" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="fec Value" width="70" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" text="{{fec}}"/>
<rtl:input-variable name="x.valor" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="valor Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="-,---,--&amp;.&amp;&amp;" value="{{x.valor}}"/>
<rtl:input-variable name="dias_c" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dias Value" width="45" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="---,--&amp;" value="{{dias_c}}"/>
<rtl:input-variable name="x.balance" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="balance Value" width="85" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="---,---,--&amp;.&amp;&amp;" value="{{x.balance}}"/>
</MINIPAGE>
</rtl:match>
<LAYOUTNODE name="espacio vendedor" width="500" length="14"/>
</rtl:match>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
+94
View File
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="60003" version="7.00">
<report:Settings RWPageWidth="a4length" RWPageLength="a4width" RWLeftMargin="1.3cm" RWTopMargin="1.3cm" RWRightMargin="1.3cm" RWBottomMargin="1.3cm">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWFglReportName="estado3"/>
<report:Conflicts/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="page root" width="max" length="max" alignment="near" fontName="Arial" fontSize="8">
<LAYOUTNODE name="header" width="min" length="min" alignment="center" port="firstPageHeader">
<WORDBOX name="Title" width="720" length="24" alignment="near" fontSize="15" fontBold="true" textAlignment="center" text="Saldos por Antiguedad"/>
<LAYOUTNODE name="espacio titulo" width="720" length="6"/>
</LAYOUTNODE>
<rtl:match name="Group grupo" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="info" width="min" length="max" layoutDirection="leftToRight" fontBold="true">
<rtl:input-variable name="x.empresa" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="empresa Value" width="300" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{x.empresa}}"/>
<rtl:input-variable name="x.titulo" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="titulo Value" width="420" length="12" alignment="baseline" floatingBehavior="enclosed" textAlignment="right" text="{{x.titulo}}"/>
</MINIPAGE>
<LAYOUTNODE name="espacio info" width="720" length="6"/>
<MINIPAGE name="encabezado" width="min" length="max" bgColor="#cccccc" fontBold="true" layoutDirection="leftToRight">
<WORDBOX name="h1" width="190" length="12" alignment="baseline" text="Cliente"/>
<WORDBOX name="h2" width="75" length="12" alignment="baseline" textAlignment="right" text="Corriente"/>
<WORDBOX name="h3" width="75" length="12" alignment="baseline" textAlignment="right" text="De 1 a 30"/>
<WORDBOX name="h4" width="75" length="12" alignment="baseline" textAlignment="right" text="De 31 a 60"/>
<WORDBOX name="h5" width="75" length="12" alignment="baseline" textAlignment="right" text="De 61 a 90"/>
<WORDBOX name="h6" width="75" length="12" alignment="baseline" textAlignment="right" text="Mas de 90"/>
<WORDBOX name="h7" width="85" length="12" alignment="baseline" textAlignment="right" text="Total"/>
<WORDBOX name="h8" width="45" length="12" alignment="baseline" textAlignment="right" text="%"/>
</MINIPAGE>
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="fila" width="min" length="max" layoutDirection="leftToRight">
<rtl:input-variable name="x.cliente" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="cliente Value" width="190" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{x.cliente}}"/>
<rtl:input-variable name="x.c1" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="c1 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{x.c1}}"/>
<rtl:input-variable name="x.c2" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="c2 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{x.c2}}"/>
<rtl:input-variable name="x.c3" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="c3 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{x.c3}}"/>
<rtl:input-variable name="x.c4" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="c4 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{x.c4}}"/>
<rtl:input-variable name="x.c5" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="c5 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{x.c5}}"/>
<rtl:input-variable name="x.total" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="total Value" width="85" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,---,--&amp;.&amp;&amp;" value="{{x.total}}"/>
<rtl:input-variable name="x.pct" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="pct Value" width="45" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="---&amp;.&amp;&amp;" value="{{x.pct}}"/>
</MINIPAGE>
</rtl:match>
<LAYOUTNODE name="espacio totales" width="720" length="8"/>
<MINIPAGE name="totales" width="min" length="max" layoutDirection="leftToRight" bgColor="#eeeeee" fontBold="true">
<WORDBOX name="tl" width="190" length="12" alignment="baseline" textAlignment="right" text="Totales --&gt;"/>
<rtl:input-variable name="t30" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="t30 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{t30}}"/>
<rtl:input-variable name="t45" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="t45 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{t45}}"/>
<rtl:input-variable name="t60" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="t60 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{t60}}"/>
<rtl:input-variable name="tm60" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tm60 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{tm60}}"/>
<rtl:input-variable name="tm120" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tm120 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{tm120}}"/>
<rtl:input-variable name="tsaldo" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="tsaldo Value" width="85" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,---,--&amp;.&amp;&amp;" value="{{tsaldo}}"/>
</MINIPAGE>
<MINIPAGE name="cxc" width="min" length="max" layoutDirection="leftToRight" fontBold="true">
<WORDBOX name="cl" width="190" length="12" alignment="baseline" textAlignment="right" text="Total CXC --&gt;"/>
<rtl:input-variable name="ct30" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="ct30 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{ct30}}"/>
<rtl:input-variable name="ct45" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="ct45 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{ct45}}"/>
<rtl:input-variable name="ct60" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="ct60 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{ct60}}"/>
<rtl:input-variable name="ctm60" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="ctm60 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{ctm60}}"/>
<rtl:input-variable name="ctm120" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="ctm120 Value" width="75" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{ctm120}}"/>
<rtl:input-variable name="ctsaldo" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="ctsaldo Value" width="85" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,---,--&amp;.&amp;&amp;" value="{{ctsaldo}}"/>
</MINIPAGE>
</rtl:match>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
+84
View File
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<report:Report xmlns:rtl="http://www.4js.com/2004/RTL" xmlns:report="http://www.4js.com/2007/REPORT" xmlns="http://www.4js.com/2004/PXML" gstVersion="60003" version="7.00">
<report:Settings RWPageWidth="a4width" RWPageLength="a4length" RWLeftMargin="1.3cm" RWTopMargin="1.3cm" RWRightMargin="1.3cm" RWBottomMargin="1.3cm">
<report:FormatList>
<report:Format-SVG/>
<report:Format-PDF/>
<report:Format-image/>
</report:FormatList>
</report:Settings>
<report:Data RWFglReportName="estado18"/>
<report:Conflicts/>
<rtl:stylesheet>
<PXML>
<rtl:match name="Report" nameConstraint="Report" minOccurs="1" maxOccurs="1">
<MINIPAGE name="page root" width="max" length="max" alignment="near" fontName="Arial" fontSize="8">
<LAYOUTNODE name="header" width="min" length="min" alignment="center" port="firstPageHeader">
<WORDBOX name="Title" width="500" length="24" alignment="near" fontSize="15" fontBold="true" textAlignment="center" text="Estado de Cuentas Pendientes de Cobro"/>
<LAYOUTNODE name="espacio titulo" width="500" length="8"/>
</LAYOUTNODE>
<rtl:match name="Group codigo" nameConstraint="Group" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="cliente header" width="min" length="max" layoutDirection="leftToRight" bgColor="#cccccc" fontBold="true">
<rtl:input-variable name="x.cliente" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="cliente Value" width="290" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{x.cliente}}"/>
<rtl:input-variable name="x.limite" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="limite Value" width="210" length="12" alignment="baseline" floatingBehavior="enclosed" textAlignment="right" text="{{x.limite}}"/>
</MINIPAGE>
<MINIPAGE name="direccion header" width="min" length="max" layoutDirection="leftToRight" bgColor="#eeeeee">
<rtl:input-variable name="x.direccion" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="direccion Value" width="230" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{x.direccion}}"/>
<rtl:input-variable name="x.zona" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="zona Value" width="190" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{x.zona}}"/>
<rtl:input-variable name="x.corte" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="corte Value" width="80" length="12" alignment="baseline" floatingBehavior="enclosed" textAlignment="right" text="{{x.corte}}"/>
</MINIPAGE>
<MINIPAGE name="encabezado" width="min" length="max" bgColor="#eeeeee" fontBold="true" layoutDirection="leftToRight">
<WORDBOX name="h1" width="130" length="12" alignment="baseline" text="Documento"/>
<WORDBOX name="h2" width="80" length="12" alignment="baseline" text="Fecha"/>
<WORDBOX name="h3" width="100" length="12" alignment="baseline" textAlignment="right" text="Valor"/>
<WORDBOX name="h4" width="100" length="12" alignment="baseline" textAlignment="right" text="Balance"/>
<WORDBOX name="h5" width="60" length="12" alignment="baseline" textAlignment="right" text="Dias"/>
</MINIPAGE>
<rtl:match name="OnEveryRow" nameConstraint="OnEveryRow" minOccurs="0" maxOccurs="unbounded">
<MINIPAGE name="fila" width="min" length="max" layoutDirection="leftToRight">
<rtl:input-variable name="x.documento" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="documento Value" width="130" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{x.documento}}"/>
<rtl:input-variable name="x.fecha" type="FGLString" expectedLocation="expectedHere"/>
<WORDWRAPBOX name="fecha Value" width="80" length="12" alignment="baseline" floatingBehavior="enclosed" text="{{x.fecha}}"/>
<rtl:input-variable name="x.valor" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="valor Value" width="100" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,---,--&amp;.&amp;&amp;" value="{{x.valor}}"/>
<rtl:input-variable name="x.balance" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="balance Value" width="100" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,---,--&amp;.&amp;&amp;" value="{{x.balance}}"/>
<rtl:input-variable name="x.dias" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="dias Value" width="60" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="----&amp;" value="{{x.dias}}"/>
</MINIPAGE>
</rtl:match>
<MINIPAGE name="antiguedad header" width="min" length="max" layoutDirection="leftToRight" bgColor="#eeeeee" fontBold="true">
<WORDBOX name="a1" width="80" length="12" alignment="baseline" textAlignment="right" text="No vencido"/>
<WORDBOX name="a2" width="80" length="12" alignment="baseline" textAlignment="right" text="1 a 30"/>
<WORDBOX name="a3" width="80" length="12" alignment="baseline" textAlignment="right" text="31 a 45"/>
<WORDBOX name="a4" width="80" length="12" alignment="baseline" textAlignment="right" text="46 a 60"/>
<WORDBOX name="a5" width="80" length="12" alignment="baseline" textAlignment="right" text="Mas de 60"/>
<WORDBOX name="a6" width="90" length="12" alignment="baseline" textAlignment="right" text="Total"/>
</MINIPAGE>
<MINIPAGE name="antiguedad valores" width="min" length="max" layoutDirection="leftToRight" fontBold="true">
<rtl:input-variable name="nov" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="nov Value" width="80" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{nov}}"/>
<rtl:input-variable name="d1" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="d1 Value" width="80" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{d1}}"/>
<rtl:input-variable name="d2" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="d2 Value" width="80" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{d2}}"/>
<rtl:input-variable name="d3" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="d3 Value" width="80" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{d3}}"/>
<rtl:input-variable name="d4" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="d4 Value" width="80" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,--&amp;.&amp;&amp;" value="{{d4}}"/>
<rtl:input-variable name="total" type="FGLNumeric" expectedLocation="expectedHere"/>
<DECIMALFORMATBOX name="total Value" width="90" length="12" alignment="baseline" textAlignment="right" floatingBehavior="enclosed" format="--,---,---,--&amp;.&amp;&amp;" value="{{total}}"/>
</MINIPAGE>
<LAYOUTNODE name="espacio cliente" width="500" length="14"/>
</rtl:match>
</MINIPAGE>
</rtl:match>
</PXML>
</rtl:stylesheet>
</report:Report>
Binary file not shown.
Binary file not shown.
Binary file not shown.
-24
View File
@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<SemillaModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<valor>WwW0VXsgqcEZbOUMnVD20kgn+7/K40O9Ms5zZEGSzf7SikTV6wAEHjdzDEVwLKJIAPKFe9rp3MfPi7xnv40mu2980EsrpRTmllVIaTOE0KeeBoZekOGC1Tn18R+JuHetNBAchOdWIGpk6LRkEp0yQA==</valor>
<fecha>2026-07-16T10:42:51.0668064-04:00</fecha>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>k9ci+rdnRRpaPe2vZCrPGdlMXuTNtEdV3IRbSCIuuPw=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>Ut48SQO6/VuztmFtDFgReAN6xLxrX29XK49U0nIybLvk3c+ps6b8VAHIBkSI/zdy+8YzLszlHGn0WIQAp661HS1kZ1ZSXaZ8nSri1Zl8HyB8ArvCHJqmaBgwnkxVoX+T5OgEqbDHtsBRc0keq88xLF5UcFG1dEcMlvmiM6wTHhj6JSTgTYjtAy3oDdgniO/JLc/iDVJqwAiZEwCkYmayo9uBxv+Jz+IuLhsqrt6dFJHfBEJZA3jyMBNMdSriE1LbVyGcjpFCb482r7Sr5w+ngt8mtrA2cT5QP949lHiRpvbgvkiStF2X8urB4Vgs1UTNV/d/0zOsucUpfdPBJY+KGA==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIIJgDCCB2igAwIBAgIILvImiGW0S1gwDQYJKoZIhvcNAQELBQAwgbgxFzAVBgNVBGEMDlZBVERPLTQwMTAyMzY4MSMwIQYDVQQDDBpkaWdpZmlybWEgQ0EgU3Vib3JkaW5hZGEgMTESMBAGA1UECwwJZGlnaWZpcm1hMTswOQYDVQQKDDJDw6FtYXJhIGRlIENvbWVyY2lvIHkgUHJvZHVjY2nDs24gZGUgU2FudG8gRG9taW5nbzEaMBgGA1UEBwwRRGlzdHJpdG8gTmFjaW9uYWwxCzAJBgNVBAYTAkRPMB4XDTI1MDkwMzE1MDcwMFoXDTI3MDkwMzE1MDcwMFowgbYxOzA5BgNVBAkMMkNBTExFIENFTlRSQUwgTUFEUkVWSUVKQSBOT1JURSwwOTAxMCxTYW4gQ3Jpc3RvYmFsMSEwHwYDVQQDDBhKT1JHRSBSSUNBUkRPIFNVQkVSTyBJU0ExGjAYBgNVBAUTEUlEQ0RPLTAxMzAwMDQ4NjY1MRYwFAYDVQQqDA1KT1JHRSBSSUNBUkRPMRMwEQYDVQQEDApTVUJFUk8gSVNBMQswCQYDVQQGEwJETzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJDFW87AVh9FknnJSlXpHVzRnuS5hzcQlpXVweQvVxEAXksq6i2bX7UCrS6RFOyR1fm59daQuxyk3Ralk4StBMUXg1fpVe1WWi4+rDccIHtRf+SvC7bhCAITk6kUnWGLs03ZrAIxWmQQtQCF8KMIVhSqIGnKRR3UzKq0s9Mi/yBSkvLobuSUDJFpV80cdt17eww9BiHEMnyoedHJ+Dd/11UAFehnhNhzNvIJwdWu2TZO2SAKPmAHc2oZwHkCz0laQAbWwrq2vEXQ55Hw8mclhE3c/zqUjn/KDlmfXaTK2gilvGPnFjQqIR7PeXD9WfKMQZDDcJr9w59o+lGL7NNbHJkCAwEAAaOCBIwwggSIMHoGCCsGAQUFBwEDBG4wbDAIBgYEAI5GAQEwCwYGBACORgEDAgEUMAgGBgQAjkYBBDA0BgYEAI5GAQUwKjAoFiJodHRwczovL2Rwcy5jYW1hcmFzYW50b2RvbWluZ28uZG8vEwJFTjATBgYEAI5GAQYwCQYHBACORgEGATCB3AYIKwYBBQUHAQEEgc8wgcwwSAYIKwYBBQUHMAKGPGh0dHBzOi8vd3d3LmNhbWFyYXNhbnRvZG9taW5nby5kby9kaWdpZmlybWEvQ0NQU0RfY2FkZW5hLmNydDA/BggrBgEFBQcwAYYzaHR0cDovL29jc3AxLmNhbWFyYXNhbnRvZG9taW5nby5kby9wdWJsaWMvcGtpL29jc3AvMD8GCCsGAQUFBzABhjNodHRwOi8vb2NzcDIuY2FtYXJhc2FudG9kb21pbmdvLmRvL3B1YmxpYy9wa2kvb2NzcC8wHQYDVR0OBBYEFFdrvC9iM4+tPDIWPR+/gnqvDeTdMB8GA1UdIwQYMBaAFM7rpVkdIemjmSWnCkqsx5WQBhELMCoGA1UdEgQjMCGBH2RpZ2lmaXJtYUBjYW1hcmFzYW50b2RvbWluZ28uZG8wggHZBgNVHSAEggHQMIIBzDAJBgcEAIvsQAEAMIIBvQYLKwYBBAGBzHwBAwEwggGsMC4GCCsGAQUFBwIBFiJodHRwczovL2Nwcy5jYW1hcmFzYW50b2RvbWluZ28uZG8vMIIBeAYIKwYBBQUHAgIwggFqHoIBZgBDAGUAcgB0AGkAZgBpAGMAYQBkAG8AIABwAGEAcgBhACAAcAByAG8AYwBlAGQAaQBtAGkAZQBuAHQAbwBzACAAdAByAGkAYgB1AHQAYQByAGkAbwBzACAAZQBuACAAcAAxADIAIABlAG0AaQB0AGkAZABvACAAcABvAHIAIABDAEMAUABTAEQALAAgAHUAYgBpAGMAYQBkAG8AIABBAHYAZQAuACAAMgA3ACAAZABlACAAZgBlAGIAcgBlAHIAbwAgAGUAcwBxACAAdABpAHIAYQBkAGUAbgB0AGUAcwAgADIAMgA4ACAAdABvAHIAcgBlACAAZgByAGkAdQBzAGEALAAgAEwAYQAgAEUAcwBwAGUAcgBpAGwAbABhACwAIABTAGEAbgB0AG8AIABEAG8AbQBpAG4AZwBvACwAIABSAGUAcAD6AGIAbABpAGMAYQAgAEQAbwBtAGkAbgBpAGMAYQBuAGEwgY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDovL2NybDEuY2FtYXJhc2FudG9kb21pbmdvLmRvL3B1YmxpYy9wa2kvY3JsL0NDUFNELmNybDBAoD6gPIY6aHR0cDovL2NybDIuY2FtYXJhc2FudG9kb21pbmdvLmRvL3B1YmxpYy9wa2kvY3JsL0NDUFNELmNybDAOBgNVHQ8BAf8EBAMCBeAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMCEGA1UdEQQaMBiBFmpzb3RvQG1hcm1vdGVjaC5jb20uZG8wDQYJKoZIhvcNAQELBQADggIBAIiGfGfXGgO5zHP5BkVKAUHMkKrUP7G3ohexFPp53Io1WbdL3L7oE8EtArLQyySdWr+0Yxb/6VE74krBUb+RhpghKlIhOTqsJvOL8Bdo3prI23hZWi2A4wHZn99W3pISBU2PE8QTodoaR0yOpIgqyYCIZmgHGSExFymDHp8iwfqxSS3HWnXgK5eI5iU/Zisl9bPBhHrFR1j9WjnZTx7IxocGmvd/efn26dJ3MgTP/TUx0P7jatukcTUazl6N9Ht/rHFBSan9vzG+rgSPRvT/flIRhSJyUvVuBGv1+NJWy5R1HoazlVO0cR4QB+U3nvg6E1j0ceccybWjIowA38pU/YpI81UVXSl0dbtwrFPrRmMzfnvMATX8H1NrOb98cLlIss9U1yWQxdyTes4mItBTYjA0K0ESUFGKL3ZputaM7KDW85kWkjXQj/TJP4DClyzO4SjVx9ZFqSkz+yFzlvbfTU7clVshJHYxlmuO+nou19+2l7SPHz2UaikU4JAmdn9bNIypte31BF30rahUywK6ePT1nQ5xL1tSIe2m9BtyG/45yiHobm7kljEeBl4EzkY2mFEp84cH4s28BbRF/S2p8xkGFqNtDKa+DwcWd97IG+62en+/2vE75a9KRUxneW8Ipl6P/e5moXyLYLZS0lMGShBom8cTYdLFFRAPbksXIa5U</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</SemillaModel>
@@ -1,32 +0,0 @@
// check_cert_match.js
const fs = require('fs');
const crypto = require('crypto');
function pemToDer(pem) {
return Buffer.from(
pem.replace(/-----BEGIN CERTIFICATE-----/g, '')
.replace(/-----END CERTIFICATE-----/g, '')
.replace(/\s+/g, ''),
'base64'
);
}
function sha1Fingerprint(der) {
return crypto.createHash('sha1').update(der).digest('hex').toUpperCase().match(/.{2}/g).join(':');
}
// 1) Cert PEM que usa FourJs (el mismo con el que te funciona): p.ej. .\cert\marmotech\onlyCert.pem
const certPemFour = fs.readFileSync('.\\onlyCert.pem', 'utf8');
const fpFour = sha1Fingerprint(pemToDer(certPemFour));
console.log('Fingerprint PEM:', fpFour);
// 2) Extraer el cert del XML de FourJs (Signature.xml)
const xml = fs.readFileSync('.\\Signature.xml', 'utf8');
const m = xml.match(/<X509Certificate>([\s\S]*?)<\/X509Certificate>/i);
if (!m) throw new Error('No se encontró <X509Certificate> en Signature.xml');
const certFromXmlDer = Buffer.from(m[1].replace(/\s+/g, ''), 'base64');
const fpXml = sha1Fingerprint(certFromXmlDer);
console.log('Fingerprint en Signature.xml:', fpXml);
// Comparar
console.log('¿Coinciden? ', fpFour === fpXml ? 'SÍ ✅' : 'NO ❌');
@@ -1,25 +0,0 @@
// compara_cert_ok_vs_pem.js
const fs = require("fs");
const crypto = require("crypto");
const pemToB64 = (pem) =>
String(pem).replace(/-----BEGIN CERTIFICATE-----|-----END CERTIFICATE-----|\s+/g, "").trim();
const b64ToDer = (b64) => Buffer.from(b64, "base64");
const printInfo = (label, der) => {
const sha1 = crypto.createHash("sha1").update(der).digest("hex");
const sha256 = crypto.createHash("sha256").update(der).digest("hex");
console.log(`[${label}] sha1=${sha1} sha256=${sha256}`);
};
const xml = fs.readFileSync("Signature.xml", "utf8");
const m = xml.match(/<X509Certificate>([^<]+)<\/X509Certificate>/i);
if (!m) throw new Error("No se encontró <X509Certificate> en Signature.xml");
const okB64 = m[1].replace(/\s+/g, "");
const okDer = b64ToDer(okB64);
const pem = fs.readFileSync("onlyCert.pem", "utf8");
const pemDer = b64ToDer(pemToB64(pem));
printInfo("DGII_OK", okDer);
printInfo("NODE_PEM", pemDer);
console.log("\n¿Mismo certificado?:", okDer.equals(pemDer));

Some files were not shown because too many files have changed in this diff Show More