Añadir modulo COMPRAS (coprmt001, coprmt009, coprmt016)

- coprmt001 (Suplidores): agregar campos faltantes (tipo_doc,rnc,cuenta_no)
  al RECORD interno de ApiMaintainC() en api_test.4gl, y unificar la
  aridad de RETURNING en las 3 llamadas (POST/PATCH/DELETE) - el
  enlazador exige el mismo numero de valores de retorno en todo el modulo.
- coprmt009 (Ordenes de Compra): reemplazar fgl_report_loadCurrentSettings/
  selectDevice/selectPreview/commitCurrentSettings (no disponibles en este
  FGL) por om.XmlWriter.createFileWriter en coprorden.4gl; agregar
  verificacion defensiva en lugarentrega.4gl (ui.combobox.forname puede
  devolver NULL si el formulario actual no tiene el combo "bodega"); quitar
  "ordenes.bodega" de los INPUT BY NAME (campo oculto, no se puede enlazar).
  Pendiente: probar el flujo completo de creacion de orden (se corto por
  una caida de conexion transitoria durante la prueba).
- coprmt016 (Terminos de Pago): CRUD simple, sin cambios de codigo.
- mbsERP.4pw: crear modulo COMPRAS (estaba vacio) con librerias
  FUNCIONES_CO y FORMULARIOS_CO, y registrar los 3 programas.
- otrodir/smarmotech.sch: diccionario de esquema completo (antes faltaba
  en este directorio, causaba fallos de link en api_test.4gl).
- .gitignore: excluir logs de STARTLOG() (bin/*.TXT) y archivos .err de
  compilacion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Abel López
2026-08-25 16:58:59 -04:00
co-authored by Claude Sonnet 5
parent 347e8139fc
commit acacf34eea
8 changed files with 8963 additions and 33 deletions
+2
View File
@@ -33,6 +33,8 @@ mydatabase.db
# ── Logs de ejecución ── # ── Logs de ejecución ──
*.log *.log
*.err
PROYECTO/bin/*.TXT
# ── Spool de reportes (salida temporal de impresión) ── # ── Spool de reportes (salida temporal de impresión) ──
PROYECTO/spool/ PROYECTO/spool/
+2 -2
View File
@@ -677,7 +677,7 @@ FUNCTION copcmf001()
suplidores.id_maintainx, suplidores.id_maintainx,
suplidores.*, suplidores.*,
usuarios) usuarios)
RETURNING answer RETURNING answer, answer2
DISPLAY answer2 DISPLAY answer2
IF answer != 1 THEN IF answer != 1 THEN
@@ -754,7 +754,7 @@ FUNCTION copcmf001()
suplidores.id_maintainx, suplidores.id_maintainx,
suplidores.*, suplidores.*,
usuarios) usuarios)
RETURNING answer RETURNING answer, answer2
IF answer != 1 THEN IF answer != 1 THEN
ROLLBACK WORK ROLLBACK WORK
+11 -2
View File
@@ -136,7 +136,12 @@ FUNCTION copcad009()
LABEL atras: LABEL atras:
INPUT BY NAME ordenes.*, cod_mon, salida WITHOUT DEFAULTS -- ordenes.bodega no se incluye: es un combo oculto (tabIndex=-1) en
-- cofmmt009 y "ordenes.*" fallaba con "Field (bodega) not found in form".
INPUT BY NAME ordenes.num_oc, ordenes.tipo, ordenes.fech_oc, ordenes.num_pr,
ordenes.cod_sp, ordenes.cod_sp_sec, ordenes.term_sp, ordenes.via,
ordenes.enviada, ordenes.fech_enviada, ordenes.pago, ordenes.fech_pago,
ordenes.cierre, ordenes.cod_pt, cod_mon, salida WITHOUT DEFAULTS
BEFORE INPUT BEFORE INPUT
LET salida = "SVG" LET salida = "SVG"
LET ordenes.fech_oc = TODAY LET ordenes.fech_oc = TODAY
@@ -1436,7 +1441,11 @@ FUNCTION copcmf009()
CONTINUE MENU CONTINUE MENU
END IF END IF
INPUT BY NAME ordenes.*, salida, cod_mon -- ordenes.bodega excluido (ver nota en copcad009()).
INPUT BY NAME ordenes.num_oc, ordenes.tipo, ordenes.fech_oc, ordenes.num_pr,
ordenes.cod_sp, ordenes.cod_sp_sec, ordenes.term_sp, ordenes.via,
ordenes.enviada, ordenes.fech_enviada, ordenes.pago, ordenes.fech_pago,
ordenes.cierre, ordenes.cod_pt, salida, cod_mon
WITHOUT DEFAULTS WITHOUT DEFAULTS
ATTRIBUTE(YELLOW) ATTRIBUTE(YELLOW)
BEFORE INPUT BEFORE INPUT
+7 -15
View File
@@ -28,10 +28,11 @@ FUNCTION orden(xflete1,xarr_ordenes,xordenes,x,x1,xship_to,xmoneda,r_output,knot
total_1 DECIMAL(12,2), total_1 DECIMAL(12,2),
descu_valor DECIMAL(12,2) descu_valor DECIMAL(12,2)
END RECORD END RECORD
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings() DEFINE handler om.SaxDocumentHandler,
r_filename STRING, -- filename of Report Design Document including .4rp extension r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output VARCHAR(10), -- output format option r_output VARCHAR(10), -- output format option
preview INTEGER, preview INTEGER,
p_reportfile STRING,
xvalor DEC(12,2), xvalor DEC(12,2),
x RECORD x RECORD
nom_sp LIKE cotb00001.nom_sp, nom_sp LIKE cotb00001.nom_sp,
@@ -78,20 +79,11 @@ FUNCTION orden(xflete1,xarr_ordenes,xordenes,x,x1,xship_to,xmoneda,r_output,knot
END RECORD, uso STRING END RECORD, uso STRING
IF xarr_ordenes.getLength() > 0 THEN IF xarr_ordenes.getLength() > 0 THEN
LET r_filename ='coprmt009.4rp' -- La API de configuracion de reportes (fgl_report_*) no esta
#LET r_output='SVG' -- disponible en este FGL; se escribe el XML directo a un archivo
LET preview = 1 -- en FGLSPOOL en lugar de usar la plantilla .4rp con vista previa.
LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/coprmt009_orden.xml"
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET handler = om.XmlWriter.createFileWriter(p_reportfile)
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
# CALL fgl_winmessage("veprrp049",r_output,"stop")
# CALL fgl_winmessage("veprrp049",preview,"stop")
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
--run the report --run the report
IF handler IS NOT NULL THEN -- report engine was configured ok IF handler IS NOT NULL THEN -- report engine was configured ok
+30 -1
View File
@@ -117,6 +117,7 @@
<File filePath="otrodir/ircodigosMovimientos.4gl"/> <File filePath="otrodir/ircodigosMovimientos.4gl"/>
<File filePath="otrodir/localidades.4gl"/> <File filePath="otrodir/localidades.4gl"/>
<File filePath="otrodir/lugarentrega.4gl"/> <File filePath="otrodir/lugarentrega.4gl"/>
<File filePath="otrodir/tipoOrden.4gl"/>
<File filePath="otrodir/mensajes.4gl"/> <File filePath="otrodir/mensajes.4gl"/>
<File filePath="otrodir/msg.4gl"/> <File filePath="otrodir/msg.4gl"/>
<File filePath="ccdir/numeroDepositos.4gl"/> <File filePath="ccdir/numeroDepositos.4gl"/>
@@ -170,7 +171,35 @@
<Library binaryName="FORMULARIOS_AC" id="749078683" label="FORMULARIOS_AC"/> <Library binaryName="FORMULARIOS_AC" id="749078683" label="FORMULARIOS_AC"/>
<Library binaryName="FUNCIONES_AC" id="1581383228" label="FUNCIONES_AC"/> <Library binaryName="FUNCIONES_AC" id="1581383228" label="FUNCIONES_AC"/>
</Group> </Group>
<Group id="634755826" label="COMPRAS"/> <Group id="634755826" label="COMPRAS">
<Library binaryName="FUNCIONES_CO" id="-700000015" label="FUNCIONES_CO">
<File filePath="codir/coprgb000.4gl"/>
<File filePath="codir/coprfu009.4gl"/>
<File filePath="codir/coprorden.4gl"/>
<File filePath="codir/entrega_parciales.4gl"/>
</Library>
<Library binaryName="FORMULARIOS_CO" id="-700000016" label="FORMULARIOS_CO">
<File filePath="codir/cofmmt001.4fd"/>
<File filePath="codir/cofmwd019.per"/>
<File filePath="codir/cofmmt009.per"/>
<File filePath="codir/cofmwd005.per"/>
<File filePath="codir/cofmwd012.per"/>
<File filePath="codir/cofmwd014.per"/>
<File filePath="codir/cofmmt016.per"/>
</Library>
<Application binaryName="coprmt001" dependencies="-1026233879,-764824792,-700000015,-700000016" id="-700000017" label="coprmt001">
<Configuration commandLineArguments="alopez Lopez2023" id="-700000018" label="Configuration"/>
<File filePath="codir/coprmt001.4gl"/>
</Application>
<Application binaryName="coprmt009" dependencies="-1026233879,-764824792,-700000015,-700000016" id="-700000019" label="coprmt009">
<Configuration commandLineArguments="alopez Lopez2023 70" id="-700000020" label="Configuration"/>
<File filePath="codir/coprmt009.4gl"/>
</Application>
<Application binaryName="coprmt016" dependencies="-1026233879,-764824792,-700000015,-700000016" id="-700000021" label="coprmt016">
<Configuration commandLineArguments="alopez Lopez2023" id="-700000022" label="Configuration"/>
<File filePath="codir/coprmt016.4gl"/>
</Application>
</Group>
<Group id="-1298100213" label="CONTABILIDAD GENERAL"> <Group id="-1298100213" label="CONTABILIDAD GENERAL">
<Application binaryName="cgprmt001" dependencies="2055924299,-1026233879" id="-1385997751" label="cgprmt001"> <Application binaryName="cgprmt001" dependencies="2055924299,-1026233879" id="-1385997751" label="cgprmt001">
<Configuration id="-340886821" label="Configuration"/> <Configuration id="-340886821" label="Configuration"/>
+12 -11
View File
@@ -1,9 +1,9 @@
{ {
------------------------------------------------------------------ ------------------------------------------------------------------
PROGRAMA : MaintainX_API PROGRAMA : MaintainX_API
OBJETIVO : Código que ejecuta los POST, GET Y PUT ENTRE MAINTAINX OBJETIVO : Cdigo que ejecuta los POST, GET Y PUT ENTRE MAINTAINX
Y GÉNERO Y GNERO
PROGRAMADOR : Ing. Elvis García. PROGRAMADOR : Ing. Elvis Garca.
FECHA REALIZACION : Agosto 15, 2024. FECHA REALIZACION : Agosto 15, 2024.
------------------------------------------------------------------ ------------------------------------------------------------------
} }
@@ -83,7 +83,7 @@ END MAIN}
FUNCTION ApiMaintainC(metodo, idApi, Data, usuario) --FUNCION PARA COMPRAS FUNCTION ApiMaintainC(metodo, idApi, Data, usuario) --FUNCION PARA COMPRAS
DEFINE data RECORD DEFINE data RECORD
area_sp VARCHAR(10), area_sp VARCHAR(10),
ciu_sp VARCHAR(30), ciu_sp VARCHAR(30),
cod_pais VARCHAR(3), cod_pais VARCHAR(3),
@@ -91,6 +91,7 @@ FUNCTION ApiMaintainC(metodo, idApi, Data, usuario) --FUNCION PARA COMPRAS
cod_sp_sec SMALLINT, cod_sp_sec SMALLINT,
cont_sp VARCHAR(30), cont_sp VARCHAR(30),
contactID INTEGER, contactID INTEGER,
cuenta_no VARCHAR(10),
dir_sp VARCHAR(60), dir_sp VARCHAR(60),
email VARCHAR(60), email VARCHAR(60),
fax_sp VARCHAR(25), fax_sp VARCHAR(25),
@@ -98,13 +99,15 @@ FUNCTION ApiMaintainC(metodo, idApi, Data, usuario) --FUNCION PARA COMPRAS
fech_mod DATETIME YEAR TO FRACTION, fech_mod DATETIME YEAR TO FRACTION,
id_maintainx INTEGER, id_maintainx INTEGER,
nom_sp VARCHAR(41), nom_sp VARCHAR(41),
rnc VARCHAR(11),
status_t VARCHAR(1), status_t VARCHAR(1),
tel_sp VARCHAR(25), tel_sp VARCHAR(25),
term_sp SMALLINT, term_sp SMALLINT,
tipo_doc VARCHAR(10),
us_crea VARCHAR(50), us_crea VARCHAR(50),
us_mod VARCHAR(50) us_mod VARCHAR(50)
END RECORD, END RECORD,
usuario STRING usuario STRING
DEFINE response RECORD DEFINE response RECORD
name STRING, name STRING,
@@ -445,12 +448,10 @@ FUNCTION ApiMaintainC(metodo, idApi, Data, usuario) --FUNCION PARA COMPRAS
EXIT CASE EXIT CASE
END CASE END CASE
IF answer2 IS NOT NULL THEN IF answer2 IS NOT NULL THEN
DISPLAY answer2 DISPLAY answer2
RETURN answer, answer2 END IF
ELSE RETURN answer, answer2
RETURN answer
END IF
END FUNCTION END FUNCTION
+7 -2
View File
@@ -3,11 +3,16 @@ FUNCTION lugarentregas()
DEFINE ketiquetas SMALLINT, detiquetas CHAR(30), DEFINE ketiquetas SMALLINT, detiquetas CHAR(30),
cbodegas ui.ComboBox cbodegas ui.ComboBox
LET cbodegas = ui.combobox.forname("formonly.bodega") LET cbodegas = ui.combobox.forname("formonly.bodega")
IF cbodegas IS NULL THEN
-- El formulario actual no tiene un combo "bodega" visible
-- (ej. cofmmt009); no hay nada que llenar.
RETURN
END IF
DECLARE bbodegas CURSOR FOR DECLARE bbodegas CURSOR FOR
SELECT a.cod_bodega,a.descripcion FROM intb00009 a WHERE a.lugar_entega = 'SI' SELECT a.cod_bodega,a.descripcion FROM intb00009 a WHERE a.lugar_entega = 'SI'
ORDER BY a.descripcion ORDER BY a.descripcion
CALL cbodegas.clear() CALL cbodegas.clear()
FOREACH bbodegas INTO ketiquetas,detiquetas FOREACH bbodegas INTO ketiquetas,detiquetas
CALL cbodegas.additem(ketiquetas,detiquetas) CALL cbodegas.additem(ketiquetas,detiquetas)
END FOREACH END FOREACH
File diff suppressed because it is too large Load Diff