Compare commits

...
111 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
768 changed files with 65441 additions and 259985 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
+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)
+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
+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
+18 -18
View File
@@ -289,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
@@ -301,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
@@ -309,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
@@ -372,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,
@@ -402,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
@@ -905,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
@@ -1001,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"
@@ -1580,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,
@@ -1668,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,
@@ -1764,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,
@@ -1930,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
@@ -2011,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
@@ -2733,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
+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,
+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>
-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));
@@ -1,28 +0,0 @@
// list_x509_from_signature.js
const fs = require('fs');
const { X509Certificate } = require('crypto');
const xml = fs.readFileSync('./Signature.xml', 'utf8'); // firmado por FourJs (válido en DGII)
const certs = [...xml.matchAll(/<X509Certificate>([\s\S]*?)<\/X509Certificate>/gi)]
.map(m => m[1].replace(/\s+/g, ''));
if (!certs.length) {
console.error('No se encontraron bloques <X509Certificate> en Signature.xml');
process.exit(1);
}
certs.forEach((b64, i) => {
const pem = `-----BEGIN CERTIFICATE-----\n${b64.replace(/(.{64})/g,'$1\n')}\n-----END CERTIFICATE-----\n`;
const x = new X509Certificate(pem);
const sha1 = x.fingerprint.replace(/(..)(?=.)/g,'$1:'); // SHA1 fingerprint
const sha256 = x.fingerprint256.replace(/(..)(?=.)/g,'$1:'); // SHA256 fingerprint
const subject = x.subject; // "CN=..., O=..., C=..."
const issuer = x.issuer;
const isCA = x.ca; // boolean (true si es CA)
console.log(`[#${i}] isCA=${isCA}`);
console.log(` Subject : ${subject}`);
console.log(` Issuer : ${issuer}`);
console.log(` SHA1 : ${sha1}`);
console.log(` SHA256 : ${sha256}`);
console.log('---');
});
-58
View File
@@ -1,58 +0,0 @@
{
"name": "marmotech",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"node_modules/@xmldom/is-dom-node": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@xmldom/is-dom-node/-/is-dom-node-1.0.1.tgz",
"integrity": "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==",
"license": "MIT",
"engines": {
"node": ">= 16"
}
},
"node_modules/@xmldom/xmldom": {
"version": "0.8.10",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
"integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
"integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
"license": "(BSD-3-Clause OR GPL-2.0)",
"engines": {
"node": ">= 6.13.0"
}
},
"node_modules/xml-crypto": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-6.1.2.tgz",
"integrity": "sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w==",
"license": "MIT",
"dependencies": {
"@xmldom/is-dom-node": "^1.0.1",
"@xmldom/xmldom": "^0.8.10",
"xpath": "^0.0.33"
},
"engines": {
"node": ">=16"
}
},
"node_modules/xpath": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.33.tgz",
"integrity": "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==",
"license": "MIT",
"engines": {
"node": ">=0.6.0"
}
}
}
}
@@ -1,21 +0,0 @@
# MIT License
Copyright (c) 2023 Chris Barth
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-91
View File
@@ -1,91 +0,0 @@
# is-dom-node
![Build Status](https://img.shields.io/github/actions/workflow/status/xmldom/is-dom-node/ci.yml)
![Code Coverage](https://img.shields.io/codecov/c/github/xmldom/is-dom-node)
![NPM Version](https://img.shields.io/npm/v/@xmldom/is-dom-node)
![License](https://img.shields.io/npm/l/@xmldom/is-dom-node)
## Description
`@xmldom/is-dom-node` is a versatile TypeScript library designed to provide robust utility functions for working with DOM nodes. Whether you're developing for the browser or dealing with XML in NodeJS, this library offers a comprehensive set of functions for checking and asserting various types of DOM nodes. It's particularly useful when working with NodeJS libraries like [xpath](https://www.npmjs.com/package/xpath) and [@xmldom/xmldom](https://www.npmjs.com/package/@xmldom/xmldom), as it can validate the objects returned by these libraries.
## Installation
```shell
npm install @xmldom/is-dom-node
```
## Usage
Import the library and use it as follows:
```javascript
import * as isDomNode from "@xmldom/is-dom-node";
const element = document.createElement("div");
const result = isDomNode.isElementNode(element); // Output: true
```
### TypeScript Example
```typescript
import * as isDomNode from "@xmldom/is-dom-node";
function handleNode(node: Node) {
if (isDomNode.isElementNode(node)) {
// TypeScript now knows `node` is an Element
console.log(node.tagName);
} else if (isDomNode.isTextNode(node)) {
// TypeScript now knows `node` is a Text node
console.log(node.wholeText);
} else {
try {
// Assert that the node is a Comment node
isDomNode.assertIsCommentNode(node);
// TypeScript now knows `node` is a Comment node
console.log(node.nodeValue);
} catch (error) {
console.error("Node is not a Comment node:", error);
}
}
}
```
## API Overview
The API consists of two main types of functions:
### `is...` Functions
These functions return a boolean value indicating whether the given object meets certain criteria:
- `isNodeLike`: Checks if a given value resembles a DOM node.
- `isArrayOfNodes`: Checks if the given value is an array of DOM nodes.
- `isElementNode`, `isAttributeNode`, `isTextNode`, etc.: Check for specific types of DOM nodes.
### `assertIs...` Functions
These functions assert that a given object meets certain criteria and throw an error if it doesn't:
- `assertIsNodeLike`: Asserts that a given value is a DOM node.
- `assertIsArrayOfNodes`: Asserts that the given value is an array of DOM nodes.
- `assertIsElementNode`, `assertIsAttributeNode`, `assertIsTextNode`, etc.: Assert for specific types of DOM nodes.
### TypeScript Type Narrowing
Both the `is...` and `assertIs...` functions can be used for TypeScript type narrowing. After a successful check or assertion, TypeScript will recognize the specific type of the DOM node, allowing for more robust and error-free code.
## Features
- Lightweight
- Written in TypeScript
- Comprehensive tests
- Compatible with NodeJS XML libraries like `xpath` and `@xmldom/xmldom`
## Contributing
Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests.
## License
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.
@@ -1,33 +0,0 @@
export declare enum NodeTypes {
ELEMENT_NODE = 1,
ATTRIBUTE_NODE = 2,
TEXT_NODE = 3,
CDATA_SECTION_NODE = 4,
PROCESSING_INSTRUCTION_NODE = 7,
COMMENT_NODE = 8,
DOCUMENT_NODE = 9,
DOCUMENT_TYPE_NODE = 10,
DOCUMENT_FRAGMENT_NODE = 11
}
export declare function isNodeLike(value: any): value is Node;
export declare function assertIsNodeLike(value: unknown): asserts value is Node;
export declare function isArrayOfNodes(value: unknown): value is Node[];
export declare function assertIsArrayOfNodes(value: unknown): asserts value is Node[];
export declare const isElementNode: (value: unknown) => value is Element;
export declare const isAttributeNode: (value: unknown) => value is Attr;
export declare const isTextNode: (value: unknown) => value is Text;
export declare const isCDATASectionNode: (value: unknown) => value is CDATASection;
export declare const isProcessingInstructionNode: (value: unknown) => value is ProcessingInstruction;
export declare const isCommentNode: (value: unknown) => value is Comment;
export declare const isDocumentNode: (value: unknown) => value is Document;
export declare const isDocumentTypeNode: (value: unknown) => value is DocumentType;
export declare const isDocumentFragmentNode: (value: unknown) => value is DocumentFragment;
export declare const assertIsElementNode: (value: unknown) => asserts value is Element;
export declare const assertIsAttributeNode: (value: unknown) => asserts value is Attr;
export declare const assertIsTextNode: (value: unknown) => asserts value is Text;
export declare const assertIsCDATASectionNode: (value: unknown) => asserts value is CDATASection;
export declare const assertIsProcessingInstructionNode: (value: unknown) => asserts value is ProcessingInstruction;
export declare const assertIsCommentNode: (value: unknown) => asserts value is Comment;
export declare const assertIsDocumentNode: (value: unknown) => asserts value is Document;
export declare const assertIsDocumentTypeNode: (value: unknown) => asserts value is DocumentType;
export declare const assertIsDocumentFragmentNode: (value: unknown) => asserts value is DocumentFragment;
@@ -1,91 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.assertIsDocumentFragmentNode = exports.assertIsDocumentTypeNode = exports.assertIsDocumentNode = exports.assertIsCommentNode = exports.assertIsProcessingInstructionNode = exports.assertIsCDATASectionNode = exports.assertIsTextNode = exports.assertIsAttributeNode = exports.assertIsElementNode = exports.isDocumentFragmentNode = exports.isDocumentTypeNode = exports.isDocumentNode = exports.isCommentNode = exports.isProcessingInstructionNode = exports.isCDATASectionNode = exports.isTextNode = exports.isAttributeNode = exports.isElementNode = exports.assertIsArrayOfNodes = exports.isArrayOfNodes = exports.assertIsNodeLike = exports.isNodeLike = exports.NodeTypes = void 0;
var NodeTypes;
(function (NodeTypes) {
NodeTypes[NodeTypes["ELEMENT_NODE"] = 1] = "ELEMENT_NODE";
NodeTypes[NodeTypes["ATTRIBUTE_NODE"] = 2] = "ATTRIBUTE_NODE";
NodeTypes[NodeTypes["TEXT_NODE"] = 3] = "TEXT_NODE";
NodeTypes[NodeTypes["CDATA_SECTION_NODE"] = 4] = "CDATA_SECTION_NODE";
NodeTypes[NodeTypes["PROCESSING_INSTRUCTION_NODE"] = 7] = "PROCESSING_INSTRUCTION_NODE";
NodeTypes[NodeTypes["COMMENT_NODE"] = 8] = "COMMENT_NODE";
NodeTypes[NodeTypes["DOCUMENT_NODE"] = 9] = "DOCUMENT_NODE";
NodeTypes[NodeTypes["DOCUMENT_TYPE_NODE"] = 10] = "DOCUMENT_TYPE_NODE";
NodeTypes[NodeTypes["DOCUMENT_FRAGMENT_NODE"] = 11] = "DOCUMENT_FRAGMENT_NODE";
})(NodeTypes || (exports.NodeTypes = NodeTypes = {}));
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function isNodeLike(value) {
return (value &&
typeof value === "object" &&
Number.isInteger(value.nodeType) &&
value.nodeType >= 1 &&
value.nodeType <= 11 &&
typeof value.nodeName === "string" &&
typeof value.appendChild === "function" &&
typeof value.removeChild === "function");
}
exports.isNodeLike = isNodeLike;
function assertIsNodeLike(value) {
if (!isNodeLike(value)) {
throw new Error(`Value is not a Node-like object. Received: ${value}`);
}
}
exports.assertIsNodeLike = assertIsNodeLike;
function isArrayOfNodes(value) {
return Array.isArray(value) && value.every(isNodeLike);
}
exports.isArrayOfNodes = isArrayOfNodes;
function assertIsArrayOfNodes(value) {
if (!isArrayOfNodes(value)) {
throw new Error("Value is not an array of Nodes");
}
}
exports.assertIsArrayOfNodes = assertIsArrayOfNodes;
function isNodeOfType(type, value) {
return isNodeLike(value) && value.nodeType === type;
}
function assertIsNodeOfType(type, value) {
const typeName = Object.keys(NodeTypes).find((key) => NodeTypes[key] === type);
if (!isNodeOfType(type, value)) {
throw new Error(`Value is not of type ${typeName}`);
}
}
const isElementNode = (value) => isNodeOfType(NodeTypes.ELEMENT_NODE, value);
exports.isElementNode = isElementNode;
const isAttributeNode = (value) => isNodeOfType(NodeTypes.ATTRIBUTE_NODE, value);
exports.isAttributeNode = isAttributeNode;
const isTextNode = (value) => isNodeOfType(NodeTypes.TEXT_NODE, value);
exports.isTextNode = isTextNode;
const isCDATASectionNode = (value) => isNodeOfType(NodeTypes.CDATA_SECTION_NODE, value);
exports.isCDATASectionNode = isCDATASectionNode;
const isProcessingInstructionNode = (value) => isNodeOfType(NodeTypes.PROCESSING_INSTRUCTION_NODE, value);
exports.isProcessingInstructionNode = isProcessingInstructionNode;
const isCommentNode = (value) => isNodeOfType(NodeTypes.COMMENT_NODE, value);
exports.isCommentNode = isCommentNode;
const isDocumentNode = (value) => isNodeOfType(NodeTypes.DOCUMENT_NODE, value);
exports.isDocumentNode = isDocumentNode;
const isDocumentTypeNode = (value) => isNodeOfType(NodeTypes.DOCUMENT_TYPE_NODE, value);
exports.isDocumentTypeNode = isDocumentTypeNode;
const isDocumentFragmentNode = (value) => isNodeOfType(NodeTypes.DOCUMENT_FRAGMENT_NODE, value);
exports.isDocumentFragmentNode = isDocumentFragmentNode;
const assertIsElementNode = (value) => {
assertIsNodeOfType(NodeTypes.ELEMENT_NODE, value);
};
exports.assertIsElementNode = assertIsElementNode;
const assertIsAttributeNode = (value) => assertIsNodeOfType(NodeTypes.ATTRIBUTE_NODE, value);
exports.assertIsAttributeNode = assertIsAttributeNode;
const assertIsTextNode = (value) => assertIsNodeOfType(NodeTypes.TEXT_NODE, value);
exports.assertIsTextNode = assertIsTextNode;
const assertIsCDATASectionNode = (value) => assertIsNodeOfType(NodeTypes.CDATA_SECTION_NODE, value);
exports.assertIsCDATASectionNode = assertIsCDATASectionNode;
const assertIsProcessingInstructionNode = (value) => assertIsNodeOfType(NodeTypes.PROCESSING_INSTRUCTION_NODE, value);
exports.assertIsProcessingInstructionNode = assertIsProcessingInstructionNode;
const assertIsCommentNode = (value) => assertIsNodeOfType(NodeTypes.COMMENT_NODE, value);
exports.assertIsCommentNode = assertIsCommentNode;
const assertIsDocumentNode = (value) => assertIsNodeOfType(NodeTypes.DOCUMENT_NODE, value);
exports.assertIsDocumentNode = assertIsDocumentNode;
const assertIsDocumentTypeNode = (value) => assertIsNodeOfType(NodeTypes.DOCUMENT_TYPE_NODE, value);
exports.assertIsDocumentTypeNode = assertIsDocumentTypeNode;
const assertIsDocumentFragmentNode = (value) => assertIsNodeOfType(NodeTypes.DOCUMENT_FRAGMENT_NODE, value);
exports.assertIsDocumentFragmentNode = assertIsDocumentFragmentNode;
//# sourceMappingURL=index.js.map
File diff suppressed because one or more lines are too long
@@ -1,69 +0,0 @@
{
"name": "@xmldom/is-dom-node",
"version": "1.0.1",
"description": "TypeScript helper functions to narrow the type of object to a Node descendant",
"main": "dist/index.js",
"scripts": {
"build": "tsc",
"changelog": "gren changelog --override --generate --head main",
"lint": "eslint \"{src,test}/*.ts\" --cache && npm run prettier-check",
"lint:fix": "eslint --fix \"{src,test}/*.ts\" && npm run prettier-format",
"prepare": "tsc",
"prettier-check": "prettier --config .prettierrc.json --check .",
"prettier-format": "prettier --config .prettierrc.json --write .",
"prerelease": "git clean -xfd && npm ci && npm run lint && npm test && npm run build",
"release": "release-it",
"update:major": "npx npm-check-updates -i",
"tsc": "tsc",
"update:minor": "npx npm-check-updates -i -t minor",
"test": "npm run tsc && nyc mocha"
},
"repository": {
"type": "git",
"url": "git+https://github.com/xmldom/is-dom-node.git"
},
"keywords": [
"dom",
"node",
"typescript",
"narrow",
"guard"
],
"author": "Chris Barth <chrisjbarth@hotmail.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/xmldom/is-dom-node/issues"
},
"homepage": "https://github.com/xmldom/is-dom-node#readme",
"files": [
"dist/"
],
"devDependencies": {
"@cjbarth/github-release-notes": "^4.2.0",
"@istanbuljs/nyc-config-typescript": "^1.0.2",
"@types/jsdom": "^21.1.2",
"@types/mocha": "^10.0.2",
"@types/node": "^16.18.58",
"@typescript-eslint/eslint-plugin": "^6.7.5",
"@typescript-eslint/parser": "^6.7.5",
"@xmldom/xmldom": "^0.8.10",
"choma": "^1.2.1",
"eslint": "^8.51.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-deprecation": "^2.0.0",
"jsdom": "^22.1.0",
"mocha": "^10.2.0",
"nyc": "^15.1.0",
"prettier": "^3.0.3",
"prettier-plugin-packagejson": "^2.4.6",
"release-it": "^16.2.1",
"ts-node": "^10.9.1",
"typescript": "^5.2.2"
},
"engines": {
"node": ">= 16"
},
"publishConfig": {
"access": "public"
}
}
-459
View File
@@ -1,459 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.8.10](https://github.com/xmldom/xmldom/compare/0.8.9...0.8.10)
### Fixed
- dom: prevent iteration over deleted items [`#514`](https://github.com/xmldom/xmldom/pull/514)/ [`#499`](https://github.com/xmldom/xmldom/issues/499)
Thank you, [@qtow](https://github.com/qtow), for your contributions
## [0.8.9](https://github.com/xmldom/xmldom/compare/0.8.8...0.8.9)
### Fixed
- Set nodeName property in ProcessingInstruction [`#509`](https://github.com/xmldom/xmldom/pull/509) / [`#505`](https://github.com/xmldom/xmldom/issues/505)
Thank you, [@cjbarth](https://github.com/cjbarth), for your contributions
## [0.8.8](https://github.com/xmldom/xmldom/compare/0.8.7...0.8.8)
### Fixed
- extend list of HTML entities [`#489`](https://github.com/xmldom/xmldom/pull/489)
Thank you, [@zorkow](https://github.com/zorkow), for your contributions
## [0.8.7](https://github.com/xmldom/xmldom/compare/0.8.6...0.8.7)
### Fixed
- properly parse closing where the last attribute has no value [`#485`](https://github.com/xmldom/xmldom/pull/485) / [`#486`](https://github.com/xmldom/xmldom/issues/486)
Thank you, [@bulandent](https://github.com/bulandent), for your contributions
## [0.7.10](https://github.com/xmldom/xmldom/compare/0.7.9...0.7.10)
### Fixed
- properly parse closing where the last attribute has no value [`#485`](https://github.com/xmldom/xmldom/pull/485) / [`#486`](https://github.com/xmldom/xmldom/issues/486)
Thank you, [@bulandent](https://github.com/bulandent), for your contributions
## [0.8.6](https://github.com/xmldom/xmldom/compare/0.8.5...0.8.6)
### Fixed
- Properly check nodes before replacement [`#457`](https://github.com/xmldom/xmldom/pull/457) / [`#455`](https://github.com/xmldom/xmldom/issues/455) / [`#456`](https://github.com/xmldom/xmldom/issues/456)
Thank you, [@edemaine](https://github.com/edemaine), [@pedro-l9](https://github.com/pedro-l9), for your contributions
## [0.8.5](https://github.com/xmldom/xmldom/compare/0.8.4...0.8.5)
### Fixed
- fix: Restore ES5 compatibility [`#452`](https://github.com/xmldom/xmldom/pull/452) / [`#453`](https://github.com/xmldom/xmldom/issues/453)
Thank you, [@fengxinming](https://github.com/fengxinming), for your contributions
## [0.8.4](https://github.com/xmldom/xmldom/compare/0.8.3...0.8.4)
### Fixed
- Security: Prevent inserting DOM nodes when they are not well-formed [`CVE-2022-39353`](https://github.com/xmldom/xmldom/security/advisories/GHSA-crh6-fp67-6883)
In case such a DOM would be created, the part that is not well-formed will be transformed into text nodes, in which xml specific characters like `<` and `>` are encoded accordingly.
In the upcoming version 0.9.0 those text nodes will no longer be added and an error will be thrown instead.
This change can break your code, if you relied on this behavior, e.g. multiple root elements in the past. We consider it more important to align with the specs that we want to be aligned with, considering the potential security issues that might derive from people not being aware of the difference in behavior.
Related Spec: <https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity>
Thank you, [@frumioj](https://github.com/frumioj), [@cjbarth](https://github.com/cjbarth), [@markgollnick](https://github.com/markgollnick) for your contributions
## [0.8.3](https://github.com/xmldom/xmldom/compare/0.8.3...0.8.2)
### Fixed
- Avoid iterating over prototype properties [`#437`](https://github.com/xmldom/xmldom/pull/437) / [`#436`](https://github.com/xmldom/xmldom/issues/436)
Thank you, [@Supraja9726](https://github.com/Supraja9726) for your contributions
## [0.8.2](https://github.com/xmldom/xmldom/compare/0.8.1...0.8.2)
### Fixed
- fix(dom): Serialize `&gt;` as specified (#395) [`#58`](https://github.com/xmldom/xmldom/issues/58)
### Other
- docs: Add `nodeType` values to public interface description [`#396`](https://github.com/xmldom/xmldom/pull/396)
- test: Add executable examples for node and typescript [`#317`](https://github.com/xmldom/xmldom/pull/317)
- fix(dom): Serialize `&gt;` as specified [`#395`](https://github.com/xmldom/xmldom/pull/395)
- chore: Add minimal `Object.assign` ponyfill [`#379`](https://github.com/xmldom/xmldom/pull/379)
- docs: Refine release documentation [`#378`](https://github.com/xmldom/xmldom/pull/378)
- chore: update various dev dependencies
Thank you [@niklasl](https://github.com/niklasl), [@cburatto](https://github.com/cburatto), [@SheetJSDev](https://github.com/SheetJSDev), [@pyrsmk](https://github.com/pyrsmk) for your contributions
## [0.8.1](https://github.com/xmldom/xmldom/compare/0.8.0...0.8.1)
### Fixes
- Only use own properties in entityMap [`#374`](https://github.com/xmldom/xmldom/pull/374)
### Docs
- Add security policy [`#365`](https://github.com/xmldom/xmldom/pull/365)
- changelog: Correct contributor name and link [`#366`](https://github.com/xmldom/xmldom/pull/366)
- Describe release/publish steps [`#358`](https://github.com/xmldom/xmldom/pull/358), [`#376`](https://github.com/xmldom/xmldom/pull/376)
- Add snyk package health badge [`#360`](https://github.com/xmldom/xmldom/pull/360)
## [0.8.0](https://github.com/xmldom/xmldom/compare/0.7.5...0.8.0)
### Fixed
- Normalize all line endings according to XML specs [1.0](https://w3.org/TR/xml/#sec-line-ends) and [1.1](https://www.w3.org/TR/xml11/#sec-line-ends) \
BREAKING CHANGE: Certain combination of line break characters are normalized to a single `\n` before parsing takes place and will no longer be preserved.
- [`#303`](https://github.com/xmldom/xmldom/issues/303) / [`#307`](https://github.com/xmldom/xmldom/pull/307)
- [`#49`](https://github.com/xmldom/xmldom/issues/49), [`#97`](https://github.com/xmldom/xmldom/issues/97), [`#324`](https://github.com/xmldom/xmldom/issues/324) / [`#314`](https://github.com/xmldom/xmldom/pull/314)
- XMLSerializer: Preserve whitespace character references [`#284`](https://github.com/xmldom/xmldom/issues/284) / [`#310`](https://github.com/xmldom/xmldom/pull/310) \
BREAKING CHANGE: If you relied on the not spec compliant preservation of literal `\t`, `\n` or `\r` in **attribute values**.
To preserve those you will have to create XML that instead contains the correct numerical (or hexadecimal) equivalent (e.g. `&#x9;`, `&#xA;`, `&#xD;`).
- Drop deprecated exports `DOMImplementation` and `XMLSerializer` from `lib/dom-parser.js` [#53](https://github.com/xmldom/xmldom/issues/53) / [`#309`](https://github.com/xmldom/xmldom/pull/309)
BREAKING CHANGE: Use the one provided by the main package export.
- dom: Remove all links as part of `removeChild` [`#343`](https://github.com/xmldom/xmldom/issues/343) / [`#355`](https://github.com/xmldom/xmldom/pull/355)
### Chore
- ci: Restore latest tested node version to 16.x [`#325`](https://github.com/xmldom/xmldom/pull/325)
- ci: Split test and lint steps into jobs [`#111`](https://github.com/xmldom/xmldom/issues/111) / [`#304`](https://github.com/xmldom/xmldom/pull/304)
- Pinned and updated devDependencies
Thank you [@marrus-sh](https://github.com/marrus-sh), [@victorandree](https://github.com/victorandree), [@mdierolf](https://github.com/mdierolf), [@tsabbay](https://github.com/tsabbay), [@fatihpense](https://github.com/fatihpense) for your contributions
## 0.7.5
[Commits](https://github.com/xmldom/xmldom/compare/0.7.4...0.7.5)
### Fixes:
- Preserve default namespace when serializing [`#319`](https://github.com/xmldom/xmldom/issues/319) / [`#321`](https://github.com/xmldom/xmldom/pull/321)
Thank you, [@lupestro](https://github.com/lupestro)
## 0.7.4
[Commits](https://github.com/xmldom/xmldom/compare/0.7.3...0.7.4)
### Fixes:
- Restore ability to parse `__prototype__` attributes [`#315`](https://github.com/xmldom/xmldom/pull/315)
Thank you, [@dsimpsonOMF](https://github.com/dsimpsonOMF)
## 0.7.3
[Commits](https://github.com/xmldom/xmldom/compare/0.7.2...0.7.3)
### Fixes:
- Add doctype when parsing from string [`#277`](https://github.com/xmldom/xmldom/issues/277) / [`#301`](https://github.com/xmldom/xmldom/pull/301)
- Correct typo in error message [`#294`](https://github.com/xmldom/xmldom/pull/294)
Thank you, [@rrthomas](https://github.com/rrthomas)
### Refactor:
- Improve exports & require statements, new main package entry [`#233`](https://github.com/xmldom/xmldom/pull/233)
### Docs:
- Fix Stryker badge [`#298`](https://github.com/xmldom/xmldom/pull/298)
- Fix link to help-wanted issues [`#299`](https://github.com/xmldom/xmldom/pull/299)
### Chore:
- Execute stryker:dry-run on branches [`#302`](https://github.com/xmldom/xmldom/pull/302)
- Fix stryker config [`#300`](https://github.com/xmldom/xmldom/pull/300)
- Split test and lint scripts [`#297`](https://github.com/xmldom/xmldom/pull/297)
- Switch to stryker dashboard owned by org [`#292`](https://github.com/xmldom/xmldom/pull/292)
## 0.7.2
[Commits](https://github.com/xmldom/xmldom/compare/0.7.1...0.7.2)
### Fixes:
- Types: Add index.d.ts to packaged files [`#288`](https://github.com/xmldom/xmldom/pull/288)
Thank you, [@forty](https://github.com/forty)
## 0.7.1
[Commits](https://github.com/xmldom/xmldom/compare/0.7.0...0.7.1)
### Fixes:
- Types: Copy types from DefinitelyTyped [`#283`](https://github.com/xmldom/xmldom/pull/283)
Thank you, [@kachkaev](https://github.com/kachkaev)
### Chore:
- package.json: remove author, maintainers, etc. [`#279`](https://github.com/xmldom/xmldom/pull/279)
## 0.7.0
[Commits](https://github.com/xmldom/xmldom/compare/0.6.0...0.7.0)
Due to [`#271`](https://github.com/xmldom/xmldom/issue/271) this version was published as
- unscoped `xmldom` package to github (git tags [`0.7.0`](https://github.com/xmldom/xmldom/tree/0.7.0) and [`0.7.0+unscoped`](https://github.com/xmldom/xmldom/tree/0.7.0%2Bunscoped))
- scoped `@xmldom/xmldom` package to npm (git tag `0.7.0+scoped`)
For more details look at [`#278`](https://github.com/xmldom/xmldom/pull/278#issuecomment-902172483)
### Fixes:
- Security: Misinterpretation of malicious XML input [`CVE-2021-32796`](https://github.com/xmldom/xmldom/security/advisories/GHSA-5fg8-2547-mr8q)
- Implement `Document.getElementsByClassName` as specified [`#213`](https://github.com/xmldom/xmldom/pull/213), thank you, [@ChALkeR](https://github.com/ChALkeR)
- Inherit namespace prefix from parent when required [`#268`](https://github.com/xmldom/xmldom/pull/268)
- Handle whitespace in closing tags [`#267`](https://github.com/xmldom/xmldom/pull/267)
- Update `DOMImplementation` according to recent specs [`#210`](https://github.com/xmldom/xmldom/pull/210)
BREAKING CHANGE: Only if you "passed features to be marked as available as a constructor arguments" and expected it to "magically work".
- No longer serializes any namespaces with an empty URI [`#244`](https://github.com/xmldom/xmldom/pull/244)
(related to [`#168`](https://github.com/xmldom/xmldom/pull/168) released in 0.6.0)
BREAKING CHANGE: Only if you rely on ["unsetting" a namespace prefix](https://github.com/xmldom/xmldom/pull/168#issuecomment-886984994) by setting it to an empty string
- Set `localName` as part of `Document.createElement` [`#229`](https://github.com/xmldom/xmldom/pull/229), thank you, [@rrthomas](https://github.com/rrthomas)
### CI
- We are now additionally running tests against node v16
- Stryker tests on the master branch now run against node v14
### Docs
- Describe relations with and between specs: [`#211`](https://github.com/xmldom/xmldom/pull/211), [`#247`](https://github.com/xmldom/xmldom/pull/247)
## 0.6.0
[Commits](https://github.com/xmldom/xmldom/compare/0.5.0...0.6.0)
### Fixes
- Stop serializing empty namespace values like `xmlns:ds=""` [`#168`](https://github.com/xmldom/xmldom/pull/168)
BREAKING CHANGE: If your code expected empty namespaces attributes to be serialized.
Thank you, [@pdecat](https://github.com/pdecat) and [@FranckDepoortere](https://github.com/FranckDepoortere)
- Escape `<` to `&lt;` when serializing attribute values [`#198`](https://github.com/xmldom/xmldom/issues/198) / [`#199`](https://github.com/xmldom/xmldom/pull/199)
## 0.5.0
[Commits](https://github.com/xmldom/xmldom/compare/0.4.0...0.5.0)
### Fixes
- Avoid misinterpretation of malicious XML input - [`GHSA-h6q6-9hqw-rwfv`](https://github.com/xmldom/xmldom/security/advisories/GHSA-h6q6-9hqw-rwfv) (CVE-2021-21366)
- Improve error reporting; throw on duplicate attribute\
BREAKING CHANGE: It is currently not clear how to consistently deal with duplicate attributes, so it's also safer for our users to fail when detecting them.
It's possible to configure the `DOMParser.errorHandler` before parsing, to handle those errors differently.
To accomplish this and also be able to verify it in tests I needed to
- create a new `Error` type `ParseError` and export it
- Throw `ParseError` from `errorHandler.fatalError` and prevent those from being caught in `XMLReader`.
- export `DOMHandler` constructor as `__DOMHandler`
- Preserve quotes in DOCTYPE declaration
Since the only purpose of parsing the DOCTYPE is to be able to restore it when serializing, we decided that it would be best to leave the parsed `publicId` and `systemId` as is, including any quotes.
BREAKING CHANGE: If somebody relies on the actual unquoted values of those ids, they will need to take care of either single or double quotes and the right escaping.
(Without this change this would not have been possible because the SAX parser already dropped the information about the quotes that have been used in the source.)
https://www.w3.org/TR/2006/REC-xml11-20060816/#dtd
https://www.w3.org/TR/2006/REC-xml11-20060816/#IDAX1KS (External Entity Declaration)
- Fix breaking preprocessors' directives when parsing attributes [`#171`](https://github.com/xmldom/xmldom/pull/171)
- fix(dom): Escape `]]&gt;` when serializing CharData [`#181`](https://github.com/xmldom/xmldom/pull/181)
- Switch to (only) MIT license (drop problematic LGPL license option) [`#178`](https://github.com/xmldom/xmldom/pull/178)
- Export DOMException; remove custom assertions; etc. [`#174`](https://github.com/xmldom/xmldom/pull/174)
### Docs
- Update MDN links in `readme.md` [`#188`](https://github.com/xmldom/xmldom/pull/188)
## 0.4.0
[Commits](https://github.com/xmldom/xmldom/compare/0.3.0...0.4.0)
### Fixes
- **BREAKING** Restore `&nbsp;` behavior from v0.1.27 [`#67`](https://github.com/xmldom/xmldom/pull/67)
- **BREAKING** Typecheck source param before parsing [`#113`](https://github.com/xmldom/xmldom/pull/113)
- Include documents in package files list [`#156`](https://github.com/xmldom/xmldom/pull/156)
- Preserve doctype with sysid [`#144`](https://github.com/xmldom/xmldom/pull/144)
- Remove ES6 syntax from getElementsByClassName [`#91`](https://github.com/xmldom/xmldom/pull/91)
- Revert "Add lowercase of åäö in entityMap" due to duplicate entries [`#84`](https://github.com/xmldom/xmldom/pull/84)
- fix: Convert all line separators to LF [`#66`](https://github.com/xmldom/xmldom/pull/66)
### Docs
- Update CHANGELOG.md through version 0.3.0 [`#63`](https://github.com/xmldom/xmldom/pull/63)
- Update badges [`#78`](https://github.com/xmldom/xmldom/pull/78)
- Add .editorconfig file [`#104`](https://github.com/xmldom/xmldom/pull/104)
- Add note about import [`#79`](https://github.com/xmldom/xmldom/pull/79)
- Modernize & improve the example in readme.md [`#81`](https://github.com/xmldom/xmldom/pull/81)
### CI
- Add Stryker Mutator [`#70`](https://github.com/xmldom/xmldom/pull/70)
- Add Stryker action to update dashboard [`#77`](https://github.com/xmldom/xmldom/pull/77)
- Add Node GitHub action workflow [`#64`](https://github.com/xmldom/xmldom/pull/64)
- add & enable eslint [`#106`](https://github.com/xmldom/xmldom/pull/106)
- Use eslint-plugin-es5 to enforce ES5 syntax [`#107`](https://github.com/xmldom/xmldom/pull/107)
- Recover `vows` tests, drop `proof` tests [`#59`](https://github.com/xmldom/xmldom/pull/59)
- Add jest tessuite and first tests [`#114`](https://github.com/xmldom/xmldom/pull/114)
- Add jest testsuite with `xmltest` cases [`#112`](https://github.com/xmldom/xmldom/pull/112)
- Configure Renovate [`#108`](https://github.com/xmldom/xmldom/pull/108)
- Test European HTML entities [`#86`](https://github.com/xmldom/xmldom/pull/86)
- Updated devDependencies
### Other
- Remove files that are not of any use [`#131`](https://github.com/xmldom/xmldom/pull/131), [`#65`](https://github.com/xmldom/xmldom/pull/65), [`#33`](https://github.com/xmldom/xmldom/pull/33)
## 0.3.0
[Commits](https://github.com/xmldom/xmldom/compare/0.2.1...0.3.0)
- **BREAKING** Node >=10.x is now required.
- **BREAKING** Remove `component.json` (deprecated package manager https://github.com/componentjs/guide)
- **BREAKING** Move existing sources into `lib` subdirectory.
- **POSSIBLY BREAKING** Introduce `files` entry in `package.json` and remove use of `.npmignore`.
- [Add `Document.getElementsByClassName`](https://github.com/xmldom/xmldom/issues/24).
- [Add `Node` to the list of exports](https://github.com/xmldom/xmldom/pull/27)
- [Add lowercase of åäö in `entityMap`](https://github.com/xmldom/xmldom/pull/23).
- Move CHANGELOG to markdown file.
- Move LICENSE to markdown file.
## 0.2.1
[Commits](https://github.com/xmldom/xmldom/compare/0.2.0...0.2.1)
- Correct `homepage`, `repository` and `bugs` URLs in `package.json`.
## 0.2.0
[Commits](https://github.com/xmldom/xmldom/compare/v0.1.27...0.2.0)
- Includes all **BREAKING** changes introduced in [`xmldom-alpha@v0.1.28`](#0128) by the original authors.
- **POSSIBLY BREAKING** [remove the `Object.create` check from the `_extends` method of `dom.js` that added a `__proto__` property](https://github.com/xmldom/xmldom/commit/0be2ae910a8a22c9ec2cac042e04de4c04317d2a#diff-7d1c5d97786fdf9af5446a241d0b6d56L19-L22) ().
- **POSSIBLY BREAKING** [remove code that added a `__proto__` property](https://github.com/xmldom/xmldom/commit/366159a76a181ce9a0d83f5dc48205686cfaf9cc)
- formatting/corrections in `package.json`
## 0.1.31
[Commits](https://github.com/xmldom/xmldom/compare/v0.1.27...v0.1.31)
The patch versions (`v0.1.29` - `v0.1.31`) that have been released on the [v0.1.x branch](https://github.com/xmldom/xmldom/tree/0.1.x), to reflect the changed maintainers, **are branched off from [`v0.1.27`](#0127) so they don't include the breaking changes introduced in [`xmldom-alpha@v0.1.28`](#0128)**:
## Maintainer changes
After the last commit to the original repository <https://github.com/jindw/xmldom> on the 9th of May 2017, the first commit to <https://github.com/xmldom/xmldom> is from the 19th of December 2019. [The fork has been announced in the original repository on the 2nd of March 2020.](https://github.com/jindw/xmldom/issues/259)
The versions listed below have been published to one or both of the following packages:
- <https://www.npmjs.com/package/xmldom-alpha>
- <https://www.npmjs.com/package/xmldom>
It is currently not planned to continue publishing the `xmldom-alpha` package.
The new maintainers did not invest time to understand changes that led to the last `xmldom` version [`0.1.27`](#0127) published by the original maintainer, but consider it the basis for their work.
A timeline of all the changes that happened from that version until `0.3.0` is available in <https://github.com/xmldom/xmldom/issues/62>. Any related questions should be asked there.
## 0.1.28
[Commits](https://github.com/xmldom/xmldom/compare/v0.1.27...xmldom-alpha@v0.1.28)
Published by @jindw on the 9th of May 2017 as
- `xmldom-alpha@0.1.28`
- **BREAKING** includes [regression regarding `&nbsp;` (issue #57)](https://github.com/xmldom/xmldom/issues/57)
- [Fix `license` field in `package.json`](https://github.com/jindw/xmldom/pull/178)
- [Conditional converting of HTML entities](https://github.com/jindw/xmldom/pull/80)
- Fix `dom.js` serialization issue for missing document element ([example that failed on `toString()` before this change](https://github.com/xmldom/xmldom/blob/a58dcf7a265522e80ce520fe3be0cddb1b976f6f/test/parse/unclosedcomment.js#L10-L11))
- Add new module `entities.js`
## 0.1.27
Published by @jindw on the 28th of Nov 2016 as
- `xmldom@0.1.27`
- `xmldom-alpha@0.1.27`
- Various bug fixes.
## 0.1.26
Published on the 18th of Nov 2016
as `xmldom@0.1.26`
- Details unknown
## 0.1.25
Published on the 18th of Nov 2016 as
- `xmldom@0.1.25`
- Details unknown
## 0.1.24
Published on the 27th of November 2016 as
- `xmldom@0.1.24`
- `xmldom-alpha@0.1.24`
- Added node filter.
## 0.1.23
Published on the 5th of May 2016 as
- `xmldom-alpha@0.1.23`
- Add namespace support for nest node serialize.
- Various other bug fixes.
## 0.1.22
- Merge XMLNS serialization.
- Remove \r from source string.
- Print namespaces for child elements.
- Switch references to nodeType to use named constants.
- Add nodelist toString support.
## 0.1.21
- Fix serialize bug.
## 0.1.20
- Optimize invalid XML support.
- Add toString sorter for attributes output.
- Add html self closed node button.
- Add `*` NS support for getElementsByTagNameNS.
- Convert attribute's value to string in setAttributeNS.
- Add support for HTML entities for HTML docs only.
- Fix TypeError when Document is created with DocumentType.
## 0.1.19
- Fix [infinite loop on unclosed comment (jindw/xmldom#68)](https://github.com/jindw/xmldom/issues/68)
- Add error report for unclosed tag.
- Various other fixes.
## 0.1.18
- Add default `ns` support.
- parseFromString now renders entirely plain text documents as textNode.
- Enable option to ignore white space on parsing.
## 0.1.17
**Details missing for this and potential earlier version**
## 0.1.16
- Correctly handle multibyte Unicode greater than two byts. #57. #56.
- Initial unit testing and test coverage. #53. #46. #19.
- Create Bower `component.json` #52.
## 0.1.8
- Add: some test case from node-o3-xml(excludes xpath support)
- Fix: remove existed attribute before setting (bug introduced in v0.1.5)
- Fix: index direct access for childNodes and any NodeList collection(not w3c standard)
- Fix: remove last child bug
-8
View File
@@ -1,8 +0,0 @@
Copyright 2019 - present Christopher J. Brody and other contributors, as listed in: https://github.com/xmldom/xmldom/graphs/contributors
Copyright 2012 - 2017 @jindw <jindw@xidea.org> and other contributors, as listed in: https://github.com/jindw/xmldom/graphs/contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-50
View File
@@ -1,50 +0,0 @@
# Security Policy
The most up-to-date version of this document can be found at <https://github.com/xmldom/xmldom/security/policy>.
## Supported Versions
This repository contains the code for the libraries `xmldom` and `@xmldom/xmldom` on npm.
As long as we didn't publish v1, we aim to maintain the last two minor versions with security fixes. If it is possible we provide security fixes as path versions.
If you think there is a good reason to also patch an earlier version let us know in a github issue or the release discussion once the fix has been provided.
The maintainers will consider it and if we agree and have/find the required resources, a patch for that version will be provided.
Please notice that [we are no longer able to publish the (unscoped) `xmldom` package](https://github.com/xmldom/xmldom/issues/271),
and that all existing versions of `xmldom` are affected by at least one security vulnerability and should be considered deprecated.
You can still report issues regarding `xmldom` as described below.
If you need help with migrating from `xmldom` to `@xmldom/xmldom`, file a github issue or PR in the affected repository and mention @karfau.
## Reporting vulnerabilities
Please email reports about any security related issues you find to `security@xmldom.org`, which will forward it to the list of maintainers.
The maintainers will try to respond within 7 calendar days. (If nobody peplies after 7 days, please us send a reminder!)
As part of you communication please make sure to always hit "Reply all", so all maintainers are kept in the loop.
In addition, please include the following information along with your report:
- Your name and affiliation (if any).
- A description of the technical details of the vulnerabilities. It is very important to let us know how we can reproduce your findings.
- An explanation who can exploit this vulnerability, and what they gain when doing so -- write an attack scenario. This will help us evaluate your report quickly, especially if the issue is complex.
- Whether this vulnerability public or known to third parties. If it is, please provide details.
If you believe that an existing (public) issue is security-related, please send an email to `security@xmldom.org`.
The email should include the issue URL and a short description of why it should be handled according to this security policy.
Once an issue is reported, the maintainers use the following disclosure process:
- When a report is received, we confirm the issue, determine its severity and the affected versions.
- If we know of specific third-party services or software based on xmldom that require mitigation before publication, those projects will be notified.
- A [github security advisory](https://docs.github.com/en/code-security/security-advisories/about-github-security-advisories) is [created](https://docs.github.com/en/code-security/security-advisories/creating-a-security-advisory) (but not published) which details the problem and steps for mitigation.
- If the reporter provides a github account and agrees to it, we (add that github account as a collaborator on the advisuory)[https://docs.github.com/en/code-security/security-advisories/adding-a-collaborator-to-a-security-advisory].
- The vulnerability is fixed in a [private fork](https://docs.github.com/en/code-security/security-advisories/collaborating-in-a-temporary-private-fork-to-resolve-a-security-vulnerability) and potential workarounds are identified.
- The maintainers audit the existing code to find any potential similar problems.
- The release for the current minor version and the [security advisory are published](https://docs.github.com/en/code-security/security-advisories/publishing-a-security-advisory).
- The release(s) for previous minor version(s) are published.
We credit reporters for identifying security issues, if they confirm that they want to.
## Known vulnerabilities
See https://github.com/xmldom/xmldom/security/advisories?state=published
-43
View File
@@ -1,43 +0,0 @@
/// <reference lib="dom" />
declare module "@xmldom/xmldom" {
var DOMParser: DOMParserStatic;
var XMLSerializer: XMLSerializerStatic;
var DOMImplementation: DOMImplementationStatic;
interface DOMImplementationStatic {
new(): DOMImplementation;
}
interface DOMParserStatic {
new (): DOMParser;
new (options: Options): DOMParser;
}
interface XMLSerializerStatic {
new (): XMLSerializer;
}
interface DOMParser {
parseFromString(xmlsource: string, mimeType?: string): Document;
}
interface XMLSerializer {
serializeToString(node: Node): string;
}
interface Options {
locator?: any;
errorHandler?: ErrorHandlerFunction | ErrorHandlerObject | undefined;
}
interface ErrorHandlerFunction {
(level: string, msg: any): any;
}
interface ErrorHandlerObject {
warning?: ((msg: any) => any) | undefined;
error?: ((msg: any) => any) | undefined;
fatalError?: ((msg: any) => any) | undefined;
}
}
@@ -1,2 +0,0 @@
extends:
- 'plugin:es5/no-es2015'
@@ -1,203 +0,0 @@
'use strict'
/**
* Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.
*
* Works with anything that has a `length` property and index access properties, including NodeList.
*
* @template {unknown} T
* @param {Array<T> | ({length:number, [number]: T})} list
* @param {function (item: T, index: number, list:Array<T> | ({length:number, [number]: T})):boolean} predicate
* @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac `Array.prototype` by default,
* allows injecting a custom implementation in tests
* @returns {T | undefined}
*
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
* @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find
*/
function find(list, predicate, ac) {
if (ac === undefined) {
ac = Array.prototype;
}
if (list && typeof ac.find === 'function') {
return ac.find.call(list, predicate);
}
for (var i = 0; i < list.length; i++) {
if (Object.prototype.hasOwnProperty.call(list, i)) {
var item = list[i];
if (predicate.call(undefined, item, i, list)) {
return item;
}
}
}
}
/**
* "Shallow freezes" an object to render it immutable.
* Uses `Object.freeze` if available,
* otherwise the immutability is only in the type.
*
* Is used to create "enum like" objects.
*
* @template T
* @param {T} object the object to freeze
* @param {Pick<ObjectConstructor, 'freeze'> = Object} oc `Object` by default,
* allows to inject custom object constructor for tests
* @returns {Readonly<T>}
*
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
*/
function freeze(object, oc) {
if (oc === undefined) {
oc = Object
}
return oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object
}
/**
* Since we can not rely on `Object.assign` we provide a simplified version
* that is sufficient for our needs.
*
* @param {Object} target
* @param {Object | null | undefined} source
*
* @returns {Object} target
* @throws TypeError if target is not an object
*
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
* @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign
*/
function assign(target, source) {
if (target === null || typeof target !== 'object') {
throw new TypeError('target is not an object')
}
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key]
}
}
return target
}
/**
* All mime types that are allowed as input to `DOMParser.parseFromString`
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN
* @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec
* @see DOMParser.prototype.parseFromString
*/
var MIME_TYPE = freeze({
/**
* `text/html`, the only mime type that triggers treating an XML document as HTML.
*
* @see DOMParser.SupportedType.isHTML
* @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
* @see https://en.wikipedia.org/wiki/HTML Wikipedia
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
* @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec
*/
HTML: 'text/html',
/**
* Helper method to check a mime type if it indicates an HTML document
*
* @param {string} [value]
* @returns {boolean}
*
* @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
* @see https://en.wikipedia.org/wiki/HTML Wikipedia
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
* @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring */
isHTML: function (value) {
return value === MIME_TYPE.HTML
},
/**
* `application/xml`, the standard mime type for XML documents.
*
* @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration
* @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303
* @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
*/
XML_APPLICATION: 'application/xml',
/**
* `text/html`, an alias for `application/xml`.
*
* @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303
* @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration
* @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
*/
XML_TEXT: 'text/xml',
/**
* `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,
* but is parsed as an XML document.
*
* @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration
* @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec
* @see https://en.wikipedia.org/wiki/XHTML Wikipedia
*/
XML_XHTML_APPLICATION: 'application/xhtml+xml',
/**
* `image/svg+xml`,
*
* @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration
* @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1
* @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia
*/
XML_SVG_IMAGE: 'image/svg+xml',
})
/**
* Namespaces that are used in this code base.
*
* @see http://www.w3.org/TR/REC-xml-names
*/
var NAMESPACE = freeze({
/**
* The XHTML namespace.
*
* @see http://www.w3.org/1999/xhtml
*/
HTML: 'http://www.w3.org/1999/xhtml',
/**
* Checks if `uri` equals `NAMESPACE.HTML`.
*
* @param {string} [uri]
*
* @see NAMESPACE.HTML
*/
isHTML: function (uri) {
return uri === NAMESPACE.HTML
},
/**
* The SVG namespace.
*
* @see http://www.w3.org/2000/svg
*/
SVG: 'http://www.w3.org/2000/svg',
/**
* The `xml:` namespace.
*
* @see http://www.w3.org/XML/1998/namespace
*/
XML: 'http://www.w3.org/XML/1998/namespace',
/**
* The `xmlns:` namespace
*
* @see https://www.w3.org/2000/xmlns/
*/
XMLNS: 'http://www.w3.org/2000/xmlns/',
})
exports.assign = assign;
exports.find = find;
exports.freeze = freeze;
exports.MIME_TYPE = MIME_TYPE;
exports.NAMESPACE = NAMESPACE;
@@ -1,322 +0,0 @@
var conventions = require("./conventions");
var dom = require('./dom')
var entities = require('./entities');
var sax = require('./sax');
var DOMImplementation = dom.DOMImplementation;
var NAMESPACE = conventions.NAMESPACE;
var ParseError = sax.ParseError;
var XMLReader = sax.XMLReader;
/**
* Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:
*
* > XML parsed entities are often stored in computer files which,
* > for editing convenience, are organized into lines.
* > These lines are typically separated by some combination
* > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).
* >
* > To simplify the tasks of applications, the XML processor must behave
* > as if it normalized all line breaks in external parsed entities (including the document entity)
* > on input, before parsing, by translating all of the following to a single #xA character:
* >
* > 1. the two-character sequence #xD #xA
* > 2. the two-character sequence #xD #x85
* > 3. the single character #x85
* > 4. the single character #x2028
* > 5. any #xD character that is not immediately followed by #xA or #x85.
*
* @param {string} input
* @returns {string}
*/
function normalizeLineEndings(input) {
return input
.replace(/\r[\n\u0085]/g, '\n')
.replace(/[\r\u0085\u2028]/g, '\n')
}
/**
* @typedef Locator
* @property {number} [columnNumber]
* @property {number} [lineNumber]
*/
/**
* @typedef DOMParserOptions
* @property {DOMHandler} [domBuilder]
* @property {Function} [errorHandler]
* @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing
* defaults to `normalizeLineEndings`
* @property {Locator} [locator]
* @property {Record<string, string>} [xmlns]
*
* @see normalizeLineEndings
*/
/**
* The DOMParser interface provides the ability to parse XML or HTML source code
* from a string into a DOM `Document`.
*
* _xmldom is different from the spec in that it allows an `options` parameter,
* to override the default behavior._
*
* @param {DOMParserOptions} [options]
* @constructor
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser
* @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization
*/
function DOMParser(options){
this.options = options ||{locator:{}};
}
DOMParser.prototype.parseFromString = function(source,mimeType){
var options = this.options;
var sax = new XMLReader();
var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
var errorHandler = options.errorHandler;
var locator = options.locator;
var defaultNSMap = options.xmlns||{};
var isHTML = /\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;
var entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;
if(locator){
domBuilder.setDocumentLocator(locator)
}
sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
sax.domBuilder = options.domBuilder || domBuilder;
if(isHTML){
defaultNSMap[''] = NAMESPACE.HTML;
}
defaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;
var normalize = options.normalizeLineEndings || normalizeLineEndings;
if (source && typeof source === 'string') {
sax.parse(
normalize(source),
defaultNSMap,
entityMap
)
} else {
sax.errorHandler.error('invalid doc source')
}
return domBuilder.doc;
}
function buildErrorHandler(errorImpl,domBuilder,locator){
if(!errorImpl){
if(domBuilder instanceof DOMHandler){
return domBuilder;
}
errorImpl = domBuilder ;
}
var errorHandler = {}
var isCallback = errorImpl instanceof Function;
locator = locator||{}
function build(key){
var fn = errorImpl[key];
if(!fn && isCallback){
fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;
}
errorHandler[key] = fn && function(msg){
fn('[xmldom '+key+']\t'+msg+_locator(locator));
}||function(){};
}
build('warning');
build('error');
build('fatalError');
return errorHandler;
}
//console.log('#\n\n\n\n\n\n\n####')
/**
* +ContentHandler+ErrorHandler
* +LexicalHandler+EntityResolver2
* -DeclHandler-DTDHandler
*
* DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
* DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
* @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
*/
function DOMHandler() {
this.cdata = false;
}
function position(locator,node){
node.lineNumber = locator.lineNumber;
node.columnNumber = locator.columnNumber;
}
/**
* @see org.xml.sax.ContentHandler#startDocument
* @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
*/
DOMHandler.prototype = {
startDocument : function() {
this.doc = new DOMImplementation().createDocument(null, null, null);
if (this.locator) {
this.doc.documentURI = this.locator.systemId;
}
},
startElement:function(namespaceURI, localName, qName, attrs) {
var doc = this.doc;
var el = doc.createElementNS(namespaceURI, qName||localName);
var len = attrs.length;
appendElement(this, el);
this.currentElement = el;
this.locator && position(this.locator,el)
for (var i = 0 ; i < len; i++) {
var namespaceURI = attrs.getURI(i);
var value = attrs.getValue(i);
var qName = attrs.getQName(i);
var attr = doc.createAttributeNS(namespaceURI, qName);
this.locator &&position(attrs.getLocator(i),attr);
attr.value = attr.nodeValue = value;
el.setAttributeNode(attr)
}
},
endElement:function(namespaceURI, localName, qName) {
var current = this.currentElement
var tagName = current.tagName;
this.currentElement = current.parentNode;
},
startPrefixMapping:function(prefix, uri) {
},
endPrefixMapping:function(prefix) {
},
processingInstruction:function(target, data) {
var ins = this.doc.createProcessingInstruction(target, data);
this.locator && position(this.locator,ins)
appendElement(this, ins);
},
ignorableWhitespace:function(ch, start, length) {
},
characters:function(chars, start, length) {
chars = _toString.apply(this,arguments)
//console.log(chars)
if(chars){
if (this.cdata) {
var charNode = this.doc.createCDATASection(chars);
} else {
var charNode = this.doc.createTextNode(chars);
}
if(this.currentElement){
this.currentElement.appendChild(charNode);
}else if(/^\s*$/.test(chars)){
this.doc.appendChild(charNode);
//process xml
}
this.locator && position(this.locator,charNode)
}
},
skippedEntity:function(name) {
},
endDocument:function() {
this.doc.normalize();
},
setDocumentLocator:function (locator) {
if(this.locator = locator){// && !('lineNumber' in locator)){
locator.lineNumber = 0;
}
},
//LexicalHandler
comment:function(chars, start, length) {
chars = _toString.apply(this,arguments)
var comm = this.doc.createComment(chars);
this.locator && position(this.locator,comm)
appendElement(this, comm);
},
startCDATA:function() {
//used in characters() methods
this.cdata = true;
},
endCDATA:function() {
this.cdata = false;
},
startDTD:function(name, publicId, systemId) {
var impl = this.doc.implementation;
if (impl && impl.createDocumentType) {
var dt = impl.createDocumentType(name, publicId, systemId);
this.locator && position(this.locator,dt)
appendElement(this, dt);
this.doc.doctype = dt;
}
},
/**
* @see org.xml.sax.ErrorHandler
* @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
*/
warning:function(error) {
console.warn('[xmldom warning]\t'+error,_locator(this.locator));
},
error:function(error) {
console.error('[xmldom error]\t'+error,_locator(this.locator));
},
fatalError:function(error) {
throw new ParseError(error, this.locator);
}
}
function _locator(l){
if(l){
return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
}
}
function _toString(chars,start,length){
if(typeof chars == 'string'){
return chars.substr(start,length)
}else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
if(chars.length >= start+length || start){
return new java.lang.String(chars,start,length)+'';
}
return chars;
}
}
/*
* @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
* used method of org.xml.sax.ext.LexicalHandler:
* #comment(chars, start, length)
* #startCDATA()
* #endCDATA()
* #startDTD(name, publicId, systemId)
*
*
* IGNORED method of org.xml.sax.ext.LexicalHandler:
* #endDTD()
* #startEntity(name)
* #endEntity(name)
*
*
* @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
* IGNORED method of org.xml.sax.ext.DeclHandler
* #attributeDecl(eName, aName, type, mode, value)
* #elementDecl(name, model)
* #externalEntityDecl(name, publicId, systemId)
* #internalEntityDecl(name, value)
* @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
* IGNORED method of org.xml.sax.EntityResolver2
* #resolveEntity(String name,String publicId,String baseURI,String systemId)
* #resolveEntity(publicId, systemId)
* #getExternalSubset(name, baseURI)
* @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
* IGNORED method of org.xml.sax.DTDHandler
* #notationDecl(name, publicId, systemId) {};
* #unparsedEntityDecl(name, publicId, systemId, notationName) {};
*/
"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
DOMHandler.prototype[key] = function(){return null}
})
/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
function appendElement (hander,node) {
if (!hander.currentElement) {
hander.doc.appendChild(node);
} else {
hander.currentElement.appendChild(node);
}
}//appendChild and setAttributeNS are preformance key
exports.__DOMHandler = DOMHandler;
exports.normalizeLineEndings = normalizeLineEndings;
exports.DOMParser = DOMParser;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-4
View File
@@ -1,4 +0,0 @@
var dom = require('./dom')
exports.DOMImplementation = dom.DOMImplementation
exports.XMLSerializer = dom.XMLSerializer
exports.DOMParser = require('./dom-parser').DOMParser
-662
View File
@@ -1,662 +0,0 @@
var NAMESPACE = require("./conventions").NAMESPACE;
//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
//[5] Name ::= NameStartChar (NameChar)*
var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
var S_TAG = 0;//tag name offerring
var S_ATTR = 1;//attr name offerring
var S_ATTR_SPACE=2;//attr name end and space offer
var S_EQ = 3;//=space?
var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
var S_ATTR_END = 5;//attr value end and no space(quot end)
var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
var S_TAG_CLOSE = 7;//closed el<el />
/**
* Creates an error that will not be caught by XMLReader aka the SAX parser.
*
* @param {string} message
* @param {any?} locator Optional, can provide details about the location in the source
* @constructor
*/
function ParseError(message, locator) {
this.message = message
this.locator = locator
if(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);
}
ParseError.prototype = new Error();
ParseError.prototype.name = ParseError.name
function XMLReader(){
}
XMLReader.prototype = {
parse:function(source,defaultNSMap,entityMap){
var domBuilder = this.domBuilder;
domBuilder.startDocument();
_copy(defaultNSMap ,defaultNSMap = {})
parse(source,defaultNSMap,entityMap,
domBuilder,this.errorHandler);
domBuilder.endDocument();
}
}
function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
function fixedFromCharCode(code) {
// String.prototype.fromCharCode does not supports
// > 2 bytes unicode chars directly
if (code > 0xffff) {
code -= 0x10000;
var surrogate1 = 0xd800 + (code >> 10)
, surrogate2 = 0xdc00 + (code & 0x3ff);
return String.fromCharCode(surrogate1, surrogate2);
} else {
return String.fromCharCode(code);
}
}
function entityReplacer(a){
var k = a.slice(1,-1);
if (Object.hasOwnProperty.call(entityMap, k)) {
return entityMap[k];
}else if(k.charAt(0) === '#'){
return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
}else{
errorHandler.error('entity not found:'+a);
return a;
}
}
function appendText(end){//has some bugs
if(end>start){
var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
locator&&position(start);
domBuilder.characters(xt,0,end-start);
start = end
}
}
function position(p,m){
while(p>=lineEnd && (m = linePattern.exec(source))){
lineStart = m.index;
lineEnd = lineStart + m[0].length;
locator.lineNumber++;
//console.log('line++:',locator,startPos,endPos)
}
locator.columnNumber = p-lineStart+1;
}
var lineStart = 0;
var lineEnd = 0;
var linePattern = /.*(?:\r\n?|\n)|.*$/g
var locator = domBuilder.locator;
var parseStack = [{currentNSMap:defaultNSMapCopy}]
var closeMap = {};
var start = 0;
while(true){
try{
var tagStart = source.indexOf('<',start);
if(tagStart<0){
if(!source.substr(start).match(/^\s*$/)){
var doc = domBuilder.doc;
var text = doc.createTextNode(source.substr(start));
doc.appendChild(text);
domBuilder.currentElement = text;
}
return;
}
if(tagStart>start){
appendText(tagStart);
}
switch(source.charAt(tagStart+1)){
case '/':
var end = source.indexOf('>',tagStart+3);
var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, '');
var config = parseStack.pop();
if(end<0){
tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
end = tagStart+1+tagName.length;
}else if(tagName.match(/\s</)){
tagName = tagName.replace(/[\s<].*/,'');
errorHandler.error("end tag name: "+tagName+' maybe not complete');
end = tagStart+1+tagName.length;
}
var localNSMap = config.localNSMap;
var endMatch = config.tagName == tagName;
var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()
if(endIgnoreCaseMach){
domBuilder.endElement(config.uri,config.localName,tagName);
if(localNSMap){
for (var prefix in localNSMap) {
if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {
domBuilder.endPrefixMapping(prefix);
}
}
}
if(!endMatch){
errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case
}
}else{
parseStack.push(config)
}
end++;
break;
// end elment
case '?':// <?...?>
locator&&position(tagStart);
end = parseInstruction(source,tagStart,domBuilder);
break;
case '!':// <!doctype,<![CDATA,<!--
locator&&position(tagStart);
end = parseDCC(source,tagStart,domBuilder,errorHandler);
break;
default:
locator&&position(tagStart);
var el = new ElementAttributes();
var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
//elStartEnd
var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
var len = el.length;
if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
el.closed = true;
if(!entityMap.nbsp){
errorHandler.warning('unclosed xml attribute');
}
}
if(locator && len){
var locator2 = copyLocator(locator,{});
//try{//attribute position fixed
for(var i = 0;i<len;i++){
var a = el[i];
position(a.offset);
a.locator = copyLocator(locator,{});
}
domBuilder.locator = locator2
if(appendElement(el,domBuilder,currentNSMap)){
parseStack.push(el)
}
domBuilder.locator = locator;
}else{
if(appendElement(el,domBuilder,currentNSMap)){
parseStack.push(el)
}
}
if (NAMESPACE.isHTML(el.uri) && !el.closed) {
end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
} else {
end++;
}
}
}catch(e){
if (e instanceof ParseError) {
throw e;
}
errorHandler.error('element parse error: '+e)
end = -1;
}
if(end>start){
start = end;
}else{
//TODO: 这里有可能sax回退,有位置错误风险
appendText(Math.max(tagStart,start)+1);
}
}
}
function copyLocator(f,t){
t.lineNumber = f.lineNumber;
t.columnNumber = f.columnNumber;
return t;
}
/**
* @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
* @return end of the elementStartPart(end of elementEndPart for selfClosed el)
*/
function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
/**
* @param {string} qname
* @param {string} value
* @param {number} startIndex
*/
function addAttribute(qname, value, startIndex) {
if (el.attributeNames.hasOwnProperty(qname)) {
errorHandler.fatalError('Attribute ' + qname + ' redefined')
}
el.addValue(
qname,
// @see https://www.w3.org/TR/xml/#AVNormalize
// since the xmldom sax parser does not "interpret" DTD the following is not implemented:
// - recursive replacement of (DTD) entity references
// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA
value.replace(/[\t\n\r]/g, ' ').replace(/&#?\w+;/g, entityReplacer),
startIndex
)
}
var attrName;
var value;
var p = ++start;
var s = S_TAG;//status
while(true){
var c = source.charAt(p);
switch(c){
case '=':
if(s === S_ATTR){//attrName
attrName = source.slice(start,p);
s = S_EQ;
}else if(s === S_ATTR_SPACE){
s = S_EQ;
}else{
//fatalError: equal must after attrName or space after attrName
throw new Error('attribute equal must after attrName'); // No known test case
}
break;
case '\'':
case '"':
if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
){//equal
if(s === S_ATTR){
errorHandler.warning('attribute value must after "="')
attrName = source.slice(start,p)
}
start = p+1;
p = source.indexOf(c,start)
if(p>0){
value = source.slice(start, p);
addAttribute(attrName, value, start-1);
s = S_ATTR_END;
}else{
//fatalError: no end quot match
throw new Error('attribute value no end \''+c+'\' match');
}
}else if(s == S_ATTR_NOQUOT_VALUE){
value = source.slice(start, p);
addAttribute(attrName, value, start);
errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
start = p+1;
s = S_ATTR_END
}else{
//fatalError: no equal before
throw new Error('attribute value must after "="'); // No known test case
}
break;
case '/':
switch(s){
case S_TAG:
el.setTagName(source.slice(start,p));
case S_ATTR_END:
case S_TAG_SPACE:
case S_TAG_CLOSE:
s =S_TAG_CLOSE;
el.closed = true;
case S_ATTR_NOQUOT_VALUE:
case S_ATTR:
break;
case S_ATTR_SPACE:
el.closed = true;
break;
//case S_EQ:
default:
throw new Error("attribute invalid close char('/')") // No known test case
}
break;
case ''://end document
errorHandler.error('unexpected end of input');
if(s == S_TAG){
el.setTagName(source.slice(start,p));
}
return p;
case '>':
switch(s){
case S_TAG:
el.setTagName(source.slice(start,p));
case S_ATTR_END:
case S_TAG_SPACE:
case S_TAG_CLOSE:
break;//normal
case S_ATTR_NOQUOT_VALUE://Compatible state
case S_ATTR:
value = source.slice(start,p);
if(value.slice(-1) === '/'){
el.closed = true;
value = value.slice(0,-1)
}
case S_ATTR_SPACE:
if(s === S_ATTR_SPACE){
value = attrName;
}
if(s == S_ATTR_NOQUOT_VALUE){
errorHandler.warning('attribute "'+value+'" missed quot(")!');
addAttribute(attrName, value, start)
}else{
if(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){
errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
}
addAttribute(value, value, start)
}
break;
case S_EQ:
throw new Error('attribute value missed!!');
}
// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
return p;
/*xml space '\x20' | #x9 | #xD | #xA; */
case '\u0080':
c = ' ';
default:
if(c<= ' '){//space
switch(s){
case S_TAG:
el.setTagName(source.slice(start,p));//tagName
s = S_TAG_SPACE;
break;
case S_ATTR:
attrName = source.slice(start,p)
s = S_ATTR_SPACE;
break;
case S_ATTR_NOQUOT_VALUE:
var value = source.slice(start, p);
errorHandler.warning('attribute "'+value+'" missed quot(")!!');
addAttribute(attrName, value, start)
case S_ATTR_END:
s = S_TAG_SPACE;
break;
//case S_TAG_SPACE:
//case S_EQ:
//case S_ATTR_SPACE:
// void();break;
//case S_TAG_CLOSE:
//ignore warning
}
}else{//not space
//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
switch(s){
//case S_TAG:void();break;
//case S_ATTR:void();break;
//case S_ATTR_NOQUOT_VALUE:void();break;
case S_ATTR_SPACE:
var tagName = el.tagName;
if (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {
errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!')
}
addAttribute(attrName, attrName, start);
start = p;
s = S_ATTR;
break;
case S_ATTR_END:
errorHandler.warning('attribute space is required"'+attrName+'"!!')
case S_TAG_SPACE:
s = S_ATTR;
start = p;
break;
case S_EQ:
s = S_ATTR_NOQUOT_VALUE;
start = p;
break;
case S_TAG_CLOSE:
throw new Error("elements closed character '/' and '>' must be connected to");
}
}
}//end outer switch
//console.log('p++',p)
p++;
}
}
/**
* @return true if has new namespace define
*/
function appendElement(el,domBuilder,currentNSMap){
var tagName = el.tagName;
var localNSMap = null;
//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
var i = el.length;
while(i--){
var a = el[i];
var qName = a.qName;
var value = a.value;
var nsp = qName.indexOf(':');
if(nsp>0){
var prefix = a.prefix = qName.slice(0,nsp);
var localName = qName.slice(nsp+1);
var nsPrefix = prefix === 'xmlns' && localName
}else{
localName = qName;
prefix = null
nsPrefix = qName === 'xmlns' && ''
}
//can not set prefix,because prefix !== ''
a.localName = localName ;
//prefix == null for no ns prefix attribute
if(nsPrefix !== false){//hack!!
if(localNSMap == null){
localNSMap = {}
//console.log(currentNSMap,0)
_copy(currentNSMap,currentNSMap={})
//console.log(currentNSMap,1)
}
currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
a.uri = NAMESPACE.XMLNS
domBuilder.startPrefixMapping(nsPrefix, value)
}
}
var i = el.length;
while(i--){
a = el[i];
var prefix = a.prefix;
if(prefix){//no prefix attribute has no namespace
if(prefix === 'xml'){
a.uri = NAMESPACE.XML;
}if(prefix !== 'xmlns'){
a.uri = currentNSMap[prefix || '']
//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
}
}
}
var nsp = tagName.indexOf(':');
if(nsp>0){
prefix = el.prefix = tagName.slice(0,nsp);
localName = el.localName = tagName.slice(nsp+1);
}else{
prefix = null;//important!!
localName = el.localName = tagName;
}
//no prefix element has default namespace
var ns = el.uri = currentNSMap[prefix || ''];
domBuilder.startElement(ns,localName,tagName,el);
//endPrefixMapping and startPrefixMapping have not any help for dom builder
//localNSMap = null
if(el.closed){
domBuilder.endElement(ns,localName,tagName);
if(localNSMap){
for (prefix in localNSMap) {
if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {
domBuilder.endPrefixMapping(prefix);
}
}
}
}else{
el.currentNSMap = currentNSMap;
el.localNSMap = localNSMap;
//parseStack.push(el);
return true;
}
}
function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
if(/^(?:script|textarea)$/i.test(tagName)){
var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);
var text = source.substring(elStartEnd+1,elEndStart);
if(/[&<]/.test(text)){
if(/^script$/i.test(tagName)){
//if(!/\]\]>/.test(text)){
//lexHandler.startCDATA();
domBuilder.characters(text,0,text.length);
//lexHandler.endCDATA();
return elEndStart;
//}
}//}else{//text area
text = text.replace(/&#?\w+;/g,entityReplacer);
domBuilder.characters(text,0,text.length);
return elEndStart;
//}
}
}
return elStartEnd+1;
}
function fixSelfClosed(source,elStartEnd,tagName,closeMap){
//if(tagName in closeMap){
var pos = closeMap[tagName];
if(pos == null){
//console.log(tagName)
pos = source.lastIndexOf('</'+tagName+'>')
if(pos<elStartEnd){//忘记闭合
pos = source.lastIndexOf('</'+tagName)
}
closeMap[tagName] =pos
}
return pos<elStartEnd;
//}
}
function _copy (source, target) {
for (var n in source) {
if (Object.prototype.hasOwnProperty.call(source, n)) {
target[n] = source[n];
}
}
}
function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
var next= source.charAt(start+2)
switch(next){
case '-':
if(source.charAt(start + 3) === '-'){
var end = source.indexOf('-->',start+4);
//append comment source.substring(4,end)//<!--
if(end>start){
domBuilder.comment(source,start+4,end-start-4);
return end+3;
}else{
errorHandler.error("Unclosed comment");
return -1;
}
}else{
//error
return -1;
}
default:
if(source.substr(start+3,6) == 'CDATA['){
var end = source.indexOf(']]>',start+9);
domBuilder.startCDATA();
domBuilder.characters(source,start+9,end-start-9);
domBuilder.endCDATA()
return end+3;
}
//<!DOCTYPE
//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
var matchs = split(source,start);
var len = matchs.length;
if(len>1 && /!doctype/i.test(matchs[0][0])){
var name = matchs[1][0];
var pubid = false;
var sysid = false;
if(len>3){
if(/^public$/i.test(matchs[2][0])){
pubid = matchs[3][0];
sysid = len>4 && matchs[4][0];
}else if(/^system$/i.test(matchs[2][0])){
sysid = matchs[3][0];
}
}
var lastMatch = matchs[len-1]
domBuilder.startDTD(name, pubid, sysid);
domBuilder.endDTD();
return lastMatch.index+lastMatch[0].length
}
}
return -1;
}
function parseInstruction(source,start,domBuilder){
var end = source.indexOf('?>',start);
if(end){
var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
if(match){
var len = match[0].length;
domBuilder.processingInstruction(match[1], match[2]) ;
return end+2;
}else{//error
return -1;
}
}
return -1;
}
function ElementAttributes(){
this.attributeNames = {}
}
ElementAttributes.prototype = {
setTagName:function(tagName){
if(!tagNamePattern.test(tagName)){
throw new Error('invalid tagName:'+tagName)
}
this.tagName = tagName
},
addValue:function(qName, value, offset) {
if(!tagNamePattern.test(qName)){
throw new Error('invalid attribute:'+qName)
}
this.attributeNames[qName] = this.length;
this[this.length++] = {qName:qName,value:value,offset:offset}
},
length:0,
getLocalName:function(i){return this[i].localName},
getLocator:function(i){return this[i].locator},
getQName:function(i){return this[i].qName},
getURI:function(i){return this[i].uri},
getValue:function(i){return this[i].value}
// ,getIndex:function(uri, localName)){
// if(localName){
//
// }else{
// var qName = uri
// }
// },
// getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
// getType:function(uri,localName){}
// getType:function(i){},
}
function split(source,start){
var match;
var buf = [];
var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
reg.lastIndex = start;
reg.exec(source);//skip <
while(match = reg.exec(source)){
buf.push(match);
if(match[1])return buf;
}
}
exports.XMLReader = XMLReader;
exports.ParseError = ParseError;
-71
View File
@@ -1,71 +0,0 @@
{
"name": "@xmldom/xmldom",
"version": "0.8.10",
"description": "A pure JavaScript W3C standard-based (XML DOM Level 2 Core) DOMParser and XMLSerializer module.",
"keywords": [
"w3c",
"dom",
"xml",
"parser",
"javascript",
"DOMParser",
"XMLSerializer",
"ponyfill"
],
"homepage": "https://github.com/xmldom/xmldom",
"repository": {
"type": "git",
"url": "git://github.com/xmldom/xmldom.git"
},
"main": "lib/index.js",
"types": "index.d.ts",
"files": [
"CHANGELOG.md",
"LICENSE",
"readme.md",
"SECURITY.md",
"index.d.ts",
"lib"
],
"scripts": {
"lint": "eslint lib test",
"format": "prettier --write test",
"changelog": "auto-changelog --unreleased-only",
"start": "nodemon --watch package.json --watch lib --watch test --exec 'npm --silent run test && npm --silent run lint'",
"stryker": "stryker run",
"stryker:dry-run": "stryker run -m '' --reporters progress",
"test": "jest",
"testrelease": "npm test && eslint lib",
"version": "./changelog-has-version.sh",
"release": "np --no-yarn --test-script testrelease --branch release-0.8.x patch"
},
"engines": {
"node": ">=10.0.0"
},
"dependencies": {},
"devDependencies": {
"@stryker-mutator/core": "5.6.1",
"auto-changelog": "2.4.0",
"eslint": "8.25.0",
"eslint-config-prettier": "8.5.0",
"eslint-plugin-es5": "1.5.0",
"eslint-plugin-prettier": "4.2.1",
"get-stream": "6.0.1",
"jest": "27.5.1",
"nodemon": "2.0.20",
"np": "7.6.2",
"prettier": "2.7.1",
"xmltest": "1.5.0",
"yauzl": "2.10.0"
},
"bugs": {
"url": "https://github.com/xmldom/xmldom/issues"
},
"license": "MIT",
"auto-changelog": {
"prepend": true,
"remote": "upstream",
"tagPrefix": "",
"template": "./auto-changelog.hbs"
}
}
-356
View File
@@ -1,356 +0,0 @@
# @xmldom/xmldom
***Since version 0.7.0 this package is published to npm as [`@xmldom/xmldom`](https://www.npmjs.com/package/@xmldom/xmldom) and no longer as [`xmldom`](https://www.npmjs.com/package/xmldom), because [we are no longer able to publish `xmldom`](https://github.com/xmldom/xmldom/issues/271).***
*For better readability in the docs we will continue to talk about this library as "xmldom".*
[![license(MIT)](https://img.shields.io/npm/l/@xmldom/xmldom?color=blue&style=flat-square)](https://github.com/xmldom/xmldom/blob/master/LICENSE)
[![npm](https://img.shields.io/npm/v/@xmldom/xmldom?style=flat-square)](https://www.npmjs.com/package/@xmldom/xmldom)
[![snyk.io package health](https://snyk.io/advisor/npm-package/@xmldom/xmldom/badge.svg)](https://snyk.io/advisor/npm-package/@xmldom/xmldom)
[![bug issues](https://img.shields.io/github/issues/xmldom/xmldom/bug?color=red&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3Abug)
[![help-wanted issues](https://img.shields.io/github/issues/xmldom/xmldom/help-wanted?color=darkgreen&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3Ahelp-wanted)
[![Mutation report](https://img.shields.io/endpoint?style=flat-square&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fxmldom%2Fxmldom%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/xmldom/xmldom/master)
xmldom is a javascript [ponyfill](https://ponyfill.com/) to provide the following APIs [that are present in modern browsers](https://caniuse.com/xml-serializer) to other runtimes:
- convert an XML string into a DOM tree
```
new DOMParser().parseFromString(xml, mimeType) => Document
```
- create, access and modify a DOM tree
```
new DOMImplementation().createDocument(...) => Document
```
- serialize a DOM tree back into an XML string
```
new XMLSerializer().serializeToString(node) => string
```
The target runtimes `xmldom` supports are currently Node >= v10 (ES5) and Rhino ([not tested as part of CI](https://github.com/xmldom/xmldom/discussions/214)).
When deciding how to fix bugs or implement features, `xmldom` tries to stay as close as possible to the various [related specifications/standards](#specs).
As indicated by the version starting with `0.`, this implementation is not feature complete and some implemented features differ from what the specifications describe.
**Issues and PRs for such differences are always welcome, even when they only provide a failing test case.**
This project was forked from it's [original source](https://github.com/jindw/xmldom) in 2019, more details about that transition can be found in the [CHANGELOG](CHANGELOG.md#maintainer-changes).
## Usage
### Install:
> npm install @xmldom/xmldom
### Example:
[In NodeJS](examples/nodejs/src/index.js)
```javascript
const { DOMParser, XMLSerializer } = require('@xmldom/xmldom')
const source = `<xml xmlns="a">
<child>test</child>
<child/>
</xml>`
const doc = new DOMParser().parseFromString(source, 'text/xml')
const serialized = new XMLSerializer().serializeToString(doc)
```
Note: in Typescript ~and ES6~(see #316) you can use the `import` approach, as follows:
```typescript
import { DOMParser } from '@xmldom/xmldom'
```
## API Reference
* [DOMParser](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser):
```javascript
parseFromString(xmlsource,mimeType)
```
* **options extension** _by xmldom_ (not DOM standard!!)
```javascript
//added the options argument
new DOMParser(options)
//errorHandler is supported
new DOMParser({
/**
* locator is always need for error position info
*/
locator:{},
/**
* you can override the errorHandler for xml parser
* @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
*/
errorHandler:{warning:function(w){console.warn(w)},error:callback,fatalError:callback}
//only callback model
//errorHandler:function(level,msg){console.log(level,msg)}
})
```
* [XMLSerializer](https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer)
```javascript
serializeToString(node)
```
### DOM level2 method and attribute:
* [Node](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247)
readonly class properties (aka `NodeType`),
these can be accessed from any `Node` instance `node`:
`if (node.nodeType === node.ELEMENT_NODE) {...`
1. `ELEMENT_NODE` (`1`)
2. `ATTRIBUTE_NODE` (`2`)
3. `TEXT_NODE` (`3`)
4. `CDATA_SECTION_NODE` (`4`)
5. `ENTITY_REFERENCE_NODE` (`5`)
6. `ENTITY_NODE` (`6`)
7. `PROCESSING_INSTRUCTION_NODE` (`7`)
8. `COMMENT_NODE` (`8`)
9. `DOCUMENT_NODE` (`9`)
10. `DOCUMENT_TYPE_NODE` (`10`)
11. `DOCUMENT_FRAGMENT_NODE` (`11`)
12. `NOTATION_NODE` (`12`)
attribute:
- `nodeValue` | `prefix`
readonly attribute:
- `nodeName` | `nodeType` | `parentNode` | `childNodes` | `firstChild` | `lastChild` | `previousSibling` | `nextSibling` | `attributes` | `ownerDocument` | `namespaceURI` | `localName`
method:
* `insertBefore(newChild, refChild)`
* `replaceChild(newChild, oldChild)`
* `removeChild(oldChild)`
* `appendChild(newChild)`
* `hasChildNodes()`
* `cloneNode(deep)`
* `normalize()`
* `isSupported(feature, version)`
* `hasAttributes()`
* [DOMException](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html)
extends the Error type thrown as part of DOM API.
readonly class properties:
- `INDEX_SIZE_ERR` (`1`)
- `DOMSTRING_SIZE_ERR` (`2`)
- `HIERARCHY_REQUEST_ERR` (`3`)
- `WRONG_DOCUMENT_ERR` (`4`)
- `INVALID_CHARACTER_ERR` (`5`)
- `NO_DATA_ALLOWED_ERR` (`6`)
- `NO_MODIFICATION_ALLOWED_ERR` (`7`)
- `NOT_FOUND_ERR` (`8`)
- `NOT_SUPPORTED_ERR` (`9`)
- `INUSE_ATTRIBUTE_ERR` (`10`)
- `INVALID_STATE_ERR` (`11`)
- `SYNTAX_ERR` (`12`)
- `INVALID_MODIFICATION_ERR` (`13`)
- `NAMESPACE_ERR` (`14`)
- `INVALID_ACCESS_ERR` (`15`)
attributes:
- `code` with a value matching one of the above constants.
* [DOMImplementation](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-102161490)
method:
- `hasFeature(feature, version)`
- `createDocumentType(qualifiedName, publicId, systemId)`
- `createDocument(namespaceURI, qualifiedName, doctype)`
* [Document](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#i-Document) : Node
readonly attribute:
- `doctype` | `implementation` | `documentElement`
method:
- `createElement(tagName)`
- `createDocumentFragment()`
- `createTextNode(data)`
- `createComment(data)`
- `createCDATASection(data)`
- `createProcessingInstruction(target, data)`
- `createAttribute(name)`
- `createEntityReference(name)`
- `getElementsByTagName(tagname)`
- `importNode(importedNode, deep)`
- `createElementNS(namespaceURI, qualifiedName)`
- `createAttributeNS(namespaceURI, qualifiedName)`
- `getElementsByTagNameNS(namespaceURI, localName)`
- `getElementById(elementId)`
* [DocumentFragment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-B63ED1A3) : Node
* [Element](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-745549614) : Node
readonly attribute:
- `tagName`
method:
- `getAttribute(name)`
- `setAttribute(name, value)`
- `removeAttribute(name)`
- `getAttributeNode(name)`
- `setAttributeNode(newAttr)`
- `removeAttributeNode(oldAttr)`
- `getElementsByTagName(name)`
- `getAttributeNS(namespaceURI, localName)`
- `setAttributeNS(namespaceURI, qualifiedName, value)`
- `removeAttributeNS(namespaceURI, localName)`
- `getAttributeNodeNS(namespaceURI, localName)`
- `setAttributeNodeNS(newAttr)`
- `getElementsByTagNameNS(namespaceURI, localName)`
- `hasAttribute(name)`
- `hasAttributeNS(namespaceURI, localName)`
* [Attr](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-637646024) : Node
attribute:
- `value`
readonly attribute:
- `name` | `specified` | `ownerElement`
* [NodeList](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177)
readonly attribute:
- `length`
method:
- `item(index)`
* [NamedNodeMap](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1780488922)
readonly attribute:
- `length`
method:
- `getNamedItem(name)`
- `setNamedItem(arg)`
- `removeNamedItem(name)`
- `item(index)`
- `getNamedItemNS(namespaceURI, localName)`
- `setNamedItemNS(arg)`
- `removeNamedItemNS(namespaceURI, localName)`
* [CharacterData](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-FF21A306) : Node
method:
- `substringData(offset, count)`
- `appendData(arg)`
- `insertData(offset, arg)`
- `deleteData(offset, count)`
- `replaceData(offset, count, arg)`
* [Text](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1312295772) : CharacterData
method:
- `splitText(offset)`
* [CDATASection](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-667469212)
* [Comment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1728279322) : CharacterData
* [DocumentType](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-412266927)
readonly attribute:
- `name` | `entities` | `notations` | `publicId` | `systemId` | `internalSubset`
* Notation : Node
readonly attribute:
- `publicId` | `systemId`
* Entity : Node
readonly attribute:
- `publicId` | `systemId` | `notationName`
* EntityReference : Node
* ProcessingInstruction : Node
attribute:
- `data`
readonly attribute:
- `target`
### DOM level 3 support:
* [Node](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent)
attribute:
- `textContent`
method:
- `isDefaultNamespace(namespaceURI)`
- `lookupNamespaceURI(prefix)`
### DOM extension by xmldom
* [Node] Source position extension;
attribute:
- `lineNumber` //number starting from `1`
- `columnNumber` //number starting from `1`
## Specs
The implementation is based on several specifications:
<!-- Should open in new tab and the links in the SVG should be clickable there! -->
<a href="https://raw.githubusercontent.com/xmldom/xmldom/master/docs/specs.svg" target="_blank" rel="noopener noreferrer nofollow" >![Overview of related specifications and their relations](docs/specs.svg)</a>
### DOM Parsing and Serialization
From the [W3C DOM Parsing and Serialization (WD 2016)](https://www.w3.org/TR/2016/WD-DOM-Parsing-20160517/) `xmldom` provides an implementation for the interfaces:
- `DOMParser`
- `XMLSerializer`
Note that there are some known deviations between this implementation and the W3 specifications.
Note: [The latest version of this spec](https://w3c.github.io/DOM-Parsing/) has the status "Editors Draft", since it is under active development. One major change is that [the definition of the `DOMParser` interface has been moved to the HTML spec](https://w3c.github.io/DOM-Parsing/#the-domparser-interface)
### DOM
The original author claims that xmldom implements [DOM Level 2] in a "fully compatible" way and some parts of [DOM Level 3], but there are not enough tests to prove this. Both Specifications are now superseded by the [DOM Level 4 aka Living standard] wich has a much broader scope than xmldom.
xmldom implements the following interfaces (most constructors are currently not exposed):
- `Attr`
- `CDATASection`
- `CharacterData`
- `Comment`
- `Document`
- `DocumentFragment`
- `DocumentType`
- `DOMException` (constructor exposed)
- `DOMImplementation` (constructor exposed)
- `Element`
- `Entity`
- `EntityReference`
- `LiveNodeList`
- `NamedNodeMap`
- `Node` (constructor exposed)
- `NodeList`
- `Notation`
- `ProcessingInstruction`
- `Text`
more details are available in the (incomplete) [API Reference](#api-reference) section.
### HTML
xmldom does not have any goal of supporting the full spec, but it has some capability to parse, report and serialize things differently when "detecting HTML" (by checking the default namespace).
There is an upcoming change to better align the implementation with the latest specs, related to <https://github.com/xmldom/xmldom/issues/203>.
### SAX, XML, XMLNS
xmldom has an own SAX parser implementation to do the actual parsing, which implements some interfaces in alignment with the Java interfaces SAX defines:
- `XMLReader`
- `DOMHandler`
There is an idea/proposal to make it possible to replace it with something else in <https://github.com/xmldom/xmldom/issues/55>
-412
View File
@@ -1,412 +0,0 @@
Forge ChangeLog
===============
## 1.3.1 - 2022-03-29
### Fixes
- RFC 3447 and RFC 8017 allow for optional `DigestAlgorithm` `NULL` parameters
for `sha*` algorithms and require `NULL` paramters for `md2` and `md5`
algorithms.
## 1.3.0 - 2022-03-17
### Security
- Three RSA PKCS#1 v1.5 signature verification issues were reported by Moosa
Yahyazadeh (moosa-yahyazadeh@uiowa.edu).
- **HIGH**: Leniency in checking `digestAlgorithm` structure can lead to
signature forgery.
- The code is lenient in checking the digest algorithm structure. This can
allow a crafted structure that steals padding bytes and uses unchecked
portion of the PKCS#1 encoded message to forge a signature when a low
public exponent is being used. For more information, please see
["Bleichenbacher's RSA signature forgery based on implementation
error"](https://mailarchive.ietf.org/arch/msg/openpgp/5rnE9ZRN1AokBVj3VqblGlP63QE/)
by Hal Finney.
- CVE ID: [CVE-2022-24771](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24771)
- GHSA ID: [GHSA-cfm4-qjh2-4765](https://github.com/digitalbazaar/forge/security/advisories/GHSA-cfm4-qjh2-4765)
- **HIGH**: Failing to check tailing garbage bytes can lead to signature
forgery.
- The code does not check for tailing garbage bytes after decoding a
`DigestInfo` ASN.1 structure. This can allow padding bytes to be removed
and garbage data added to forge a signature when a low public exponent is
being used. For more information, please see ["Bleichenbacher's RSA
signature forgery based on implementation
error"](https://mailarchive.ietf.org/arch/msg/openpgp/5rnE9ZRN1AokBVj3VqblGlP63QE/)
by Hal Finney.
- CVE ID: [CVE-2022-24772](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24772)
- GHSA ID: [GHSA-x4jg-mjrx-434g](https://github.com/digitalbazaar/forge/security/advisories/GHSA-x4jg-mjrx-434g)
- **MEDIUM**: Leniency in checking type octet.
- `DigestInfo` is not properly checked for proper ASN.1 structure. This can
lead to successful verification with signatures that contain invalid
structures but a valid digest.
- CVE ID: [CVE-2022-24773](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24773)
- GHSA ID: [GHSA-2r2c-g63r-vccr](https://github.com/digitalbazaar/forge/security/advisories/GHSA-2r2c-g63r-vccr)
### Fixed
- [asn1] Add fallback to pretty print invalid UTF8 data.
- [asn1] `fromDer` is now more strict and will default to ensuring all input
bytes are parsed or throw an error. A new option `parseAllBytes` can disable
this behavior.
- **NOTE**: The previous behavior is being changed since it can lead to
security issues with crafted inputs. It is possible that code doing custom
DER parsing may need to adapt to this new behavior and optional flag.
- [rsa] Add and use a validator to check for proper structure of parsed ASN.1
`RSASSA-PKCS-v1_5` `DigestInfo` data. Additionally check that the hash
algorithm identifier is a known value from RFC 8017
`PKCS1-v1-5DigestAlgorithms`. An invalid `DigestInfo` or algorithm identifier
will now throw an error.
- **NOTE**: The previous lenient behavior is being changed to be more strict
since it could lead to security issues with crafted inputs. It is possible
that code may have to handle the errors from these stricter checks.
### Added
- [oid] Added missing RFC 8017 PKCS1-v1-5DigestAlgorithms algorithm
identifiers:
- `1.2.840.113549.2.2` / `md2`
- `2.16.840.1.101.3.4.2.4` / `sha224`
- `2.16.840.1.101.3.4.2.5` / `sha512-224`
- `2.16.840.1.101.3.4.2.6` / `sha512-256`
## 1.2.1 - 2022-01-11
### Fixed
- [tests]: Load entire module to improve top-level testing and coverage
reporting.
- [log]: Refactor logging setup to avoid use of `URLSearchParams`.
## 1.2.0 - 2022-01-07
### Fixed
- [x509] 'Expected' and 'Actual' issuers were backwards in verification failure
message.
### Added
- [oid,x509]: Added OID `1.3.14.3.2.29 / sha1WithRSASignature` for sha1 with
RSA. Considered a deprecated equivalent to `1.2.840.113549.1.1.5 /
sha1WithRSAEncryption`. See [discussion and
links](https://github.com/digitalbazaar/forge/issues/825).
### Changed
- [x509]: Reduce duplicate code. Add helper function to create a signature
digest given an signature algorithm OID. Add helper function to verify
signatures.
## 1.1.0 - 2022-01-06
### Fixed
- [x509]: Correctly compute certificate issuer and subject hashes to match
behavior of openssl.
- [pem]: Accept certificate requests with "NEW" in the label. "BEGIN NEW
CERTIFICATE REQUEST" handled as "BEGIN CERTIFICATE REQUEST".
## 1.0.0 - 2022-01-04
### Notes
- **1.0.0**!
- This project is over a decade old! Time for a 1.0.0 release.
- The URL related changes may expose bugs in some of the networking related
code (unrelated to the much wider used cryptography code). The automated and
manual test coverage for this code is weak at best. Issues or patches to
update the code or tests would be appreciated.
### Removed
- **SECURITY**, **BREAKING**: Remove `forge.debug` API. The API has the
potential for prototype pollution. This API was only briefly used by the
maintainers for internal project debug purposes and was never intended to be
used with untrusted user inputs. This API was not documented or advertised
and is being removed rather than fixed.
- **SECURITY**, **BREAKING**: Remove `forge.util.parseUrl()` (and
`forge.http.parseUrl` alias) and use the [WHATWG URL
Standard](https://url.spec.whatwg.org/). `URL` is supported by modern browers
and modern Node.js. This change is needed to address URL parsing security
issues. If `forge.util.parseUrl()` is used directly or through `forge.xhr` or
`forge.http` APIs, and support is needed for environments without `URL`
support, then a polyfill must be used.
- **BREAKING**: Remove `forge.task` API. This API was never used, documented,
or advertised by the maintainers. If anyone was using this API and wishes to
continue development it in other project, please let the maintainers know.
Due to use in the test suite, a modified version is located in
`tests/support/`.
- **BREAKING**: Remove `forge.util.makeLink`, `forge.util.makeRequest`,
`forge.util.parseFragment`, `forge.util.getQueryVariables`. Replace with
`URL`, `URLSearchParams`, and custom code as needed.
### Changed
- **BREAKING**: Increase supported Node.js version to 6.13.0 for URL support.
- **BREAKING**: Renamed `master` branch to `main`.
- **BREAKING**: Release process updated to use tooling that prefixes versions
with `v`. Other tools, scripts, or scanners may need to adapt.
- **BREAKING**: Remove docs related to Bower and
[forge-dist](https://github.com/digitalbazaar/forge-dist). Install using
[another method](./README.md#installation).
### Added
- OIDs for `surname`, `title`, and `givenName`.
### Fixed
- **BREAKING**: OID 2.5.4.5 name fixed from `serialName` to `serialNumber`.
Depending on how applications used this id to name association it could cause
compatibility issues.
## 0.10.0 - 2020-09-01
### Changed
- **BREAKING**: Node.js 4 no longer supported. The code *may* still work, and
non-invasive patches to keep it working will be considered. However, more
modern tools no longer support old Node.js versions making testing difficult.
### Removed
- **BREAKING**: Remove `util.getPath`, `util.setPath`, and `util.deletePath`.
`util.setPath` had a potential prototype pollution security issue when used
with unsafe inputs. These functions are not used by `forge` itself. They date
from an early time when `forge` was targeted at providing general helper
functions. The library direction changed to be more focused on cryptography.
Many other excellent libraries are more suitable for general utilities. If
you need a replacement for these functions, consider `get`, `set`, and `unset`
from [lodash](https://lodash.com/). But also consider the potential similar
security issues with those APIs.
## 0.9.2 - 2020-09-01
### Changed
- Added `util.setPath` security note to function docs and to README.
### Notes
- **SECURITY**: The `util.setPath` function has the potential to cause
prototype pollution if used with unsafe input.
- This function is **not** used internally by `forge`.
- The rest of the library is unaffected by this issue.
- **Do not** use unsafe input with this function.
- Usage with known input should function as expected. (Including input
intentionally using potentially problematic keys.)
- No code changes will be made to address this issue in 0.9.x. The current
behavior *could* be considered a feature rather than a security issue.
0.10.0 will be released that removes `util.getPath` and `util.setPath`.
Consider `get` and `set` from [lodash](https://lodash.com/) if you need
replacements. But also consider the potential similar security issues with
those APIs.
- https://snyk.io/vuln/SNYK-JS-NODEFORGE-598677
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-7720
## 0.9.1 - 2019-09-26
### Fixed
- Ensure DES-CBC given IV is long enough for block size.
## 0.9.0 - 2019-09-04
### Added
- Add ed25519.publicKeyFromAsn1 and ed25519.privateKeyFromAsn1 APIs.
- A few OIDs used in EV certs.
### Fixed
- Improve ed25519 NativeBuffer check.
## 0.8.5 - 2019-06-18
### Fixed
- Remove use of `const`.
## 0.8.4 - 2019-05-22
### Changed
- Replace all instances of Node.js `new Buffer` with `Buffer.from` and `Buffer.alloc`.
## 0.8.3 - 2019-05-15
### Fixed
- Use basic character set for code.
## 0.8.2 - 2019-03-18
### Fixed
- Fix tag calculation when continuing an AES-GCM block.
### Changed
- Switch to eslint.
## 0.8.1 - 2019-02-23
### Fixed
- Fix off-by-1 bug with kem random generation.
## 0.8.0 - 2019-01-31
### Fixed
- Handle creation of certificates with `notBefore` and `notAfter` dates less
than Jan 1, 1950 or greater than or equal to Jan 1, 2050.
### Added
- Add OID 2.5.4.13 "description".
- Add OID 2.16.840.1.113730.1.13 "nsComment".
- Also handle extension when creating a certificate.
- `pki.verifyCertificateChain`:
- Add `validityCheckDate` option to allow checking the certificate validity
period against an arbitrary `Date` or `null` for no check at all. The
current date is used by default.
- `tls.createConnection`:
- Add `verifyOptions` option that passes through to
`pki.verifyCertificateChain`. Can be used for the above `validityCheckDate`
option.
### Changed
- Support WebCrypto API in web workers.
- `rsa.generateKeyPair`:
- Use `crypto.generateKeyPair`/`crypto.generateKeyPairSync` on Node.js if
available (10.12.0+) and not in pure JS mode.
- Use JS fallback in `rsa.generateKeyPair` if `prng` option specified since
this isn't supported by current native APIs.
- Only run key generation comparison tests if keys will be deterministic.
- PhantomJS is deprecated, now using Headless Chrome with Karma.
- **Note**: Using Headless Chrome vs PhantomJS may cause newer JS features to
slip into releases without proper support for older runtimes and browsers.
Please report such issues and they will be addressed.
- `pki.verifyCertificateChain`:
- Signature changed to `(caStore, chain, options)`. Older `(caStore, chain,
verify)` signature is still supported. New style is to to pass in a
`verify` option.
## 0.7.6 - 2018-08-14
### Added
- Test on Node.js 10.x.
- Support for PKCS#7 detached signatures.
### Changed
- Improve webpack/browser detection.
## 0.7.5 - 2018-03-30
### Fixed
- Remove use of `const`.
## 0.7.4 - 2018-03-07
### Fixed
- Potential regex denial of service in form.js.
### Added
- Support for ED25519.
- Support for baseN/base58.
## 0.7.3 - 2018-03-05
- Re-publish with npm 5.6.0 due to file timestamp issues.
## 0.7.2 - 2018-02-27
### Added
- Support verification of SHA-384 certificates.
- `1.2.840.10040.4.3'`/`dsa-with-sha1` OID.
### Fixed
- Support importing PKCS#7 data with no certificates. RFC 2315 sec 9.1 states
certificates are optional.
- `asn1.equals` loop bug.
- Fortuna implementation bugs.
## 0.7.1 - 2017-03-27
### Fixed
- Fix digestLength for hashes based on SHA-512.
## 0.7.0 - 2017-02-07
### Fixed
- Fix test looping bugs so all tests are run.
- Improved ASN.1 parsing. Many failure cases eliminated. More sanity checks.
Better behavior in default mode of parsing BIT STRINGs. Better handling of
parsed BIT STRINGs in `toDer()`. More tests.
- Improve X.509 BIT STRING handling by using new capture modes.
### Changed
- Major refactor to use CommonJS plus a browser build system.
- Updated tests, examples, docs.
- Updated dependencies.
- Updated flash build system.
- Improve OID mapping code.
- Change test servers from Python to JavaScript.
- Improve PhantomJS support.
- Move Bower/bundle support to
[forge-dist](https://github.com/digitalbazaar/forge-dist).
- **BREAKING**: Require minimal digest algorithm dependencies from individual
modules.
- Enforce currently supported bit param values for byte buffer access. May be
**BREAKING** for code that depended on unspecified and/or incorrect behavior.
- Improve `asn1.prettyPrint()` BIT STRING display.
### Added
- webpack bundler support via `npm run build`:
- Builds `.js`, `.min.js`, and basic sourcemaps.
- Basic build: `forge.js`.
- Build with extra utils and networking support: `forge.all.js`.
- Build WebWorker support: `prime.worker.js`.
- Browserify support in package.json.
- Karma browser testing.
- `forge.options` field.
- `forge.options.usePureJavaScript` flag.
- `forge.util.isNodejs` flag (used to select "native" APIs).
- Run PhantomJS tests in Travis-CI.
- Add "Donations" section to README.
- Add IRC to "Contact" section of README.
- Add "Security Considerations" section to README.
- Add pbkdf2 usePureJavaScript test.
- Add rsa.generateKeyPair async and usePureJavaScript tests.
- Add .editorconfig support.
- Add `md.all.js` which includes all digest algorithms.
- Add asn1 `equals()` and `copy()`.
- Add asn1 `validate()` capture options for BIT STRING contents and value.
### Removed
- **BREAKING**: Can no longer call `forge({...})` to create new instances.
- Remove a large amount of old cruft.
### Migration from 0.6.x to 0.7.x
- (all) If you used the feature to create a new forge instance with new
configuration options you will need to rework your code. That ability has
been removed due to implementation complexity. The main rare use was to set
the option to use pure JavaScript. That is now available as a library global
flag `forge.options.usePureJavaScript`.
- (npm,bower) If you used the default main file there is little to nothing to
change.
- (npm) If you accessed a sub-resource like `forge/js/pki` you should either
switch to just using the main `forge` and access `forge.pki` or update to
`forge/lib/pki`.
- (bower) If you used a sub-resource like `forge/js/pki` you should switch to
just using `forge` and access `forge.pki`. The bower release bundles
everything in one minified file.
- (bower) A configured workerScript like
`/bower_components/forge/js/prime.worker.js` will need to change to
`/bower_components/forge/dist/prime.worker.min.js`.
- (all) If you used the networking support or flash socket support, you will
need to use a custom build and/or adjust where files are loaded from. This
functionality is not included in the bower distribution by default and is
also now in a different directory.
- (all) The library should now directly support building custom bundles with
webpack, browserify, or similar.
- (all) If building a custom bundle ensure the correct dependencies are
included. In particular, note there is now a `md.all.js` file to include all
digest algorithms. Individual files limit what they include by default to
allow smaller custom builds. For instance, `pbdkf2.js` has a `sha1` default
but does not include any algorithm files by default. This allows the
possibility to include only `sha256` without the overhead of `sha1` and
`sha512`.
### Notes
- This major update requires updating the version to 0.7.x. The existing
work-in-progress "0.7.x" branch will be painfully rebased on top of this new
0.7.x and moved forward to 0.8.x or later as needed.
- 0.7.x is a start of simplifying forge based on common issues and what has
appeared to be the most common usage. Please file issues with feedback if the
changes are problematic for your use cases.
## 0.6.x - 2016 and earlier
- See Git commit log or https://github.com/digitalbazaar/forge.

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