Files
MBS/PROYECTO/irdir/imprequisicion.4gl
T
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

165 lines
6.5 KiB
Plaintext

GLOBALS "irprgb000.4gl"
DEFINE xcodigo VARCHAR(50)
DEFINE despiece1 DYNAMIC ARRAY OF RECORD
id_etiqueta SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
lado_1 DEC(12,5),
lado_2 DEC(12,5),
lado_3 DEC(12,5),
cantidad DEC(12,5),
medida DEC(12,5),
secuencia,id_despiece INT,
bodega SMALLINT
END RECORD
DEFINE vendedor VARCHAR(100)
FUNCTION impdocumentos(numeroid,codmov)
DEFINE numeroid,codmov INT
CALL buscadoc(numeroid,codmov)
LET r_filename = "irprmt020.4rp"
iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET r_output="PDF"
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
RETURN
END IF
START REPORT requiere TO XML HANDLER HANDLER
FOR idx = 1 TO arr_irtb58.getLength()
IF arr_irtb58[idx].cod_Sec IS NOT NULL THEN
LET xcodigo =arr_irtb58[idx].cod_n USING '&&&&&','-',
arr_irtb58[idx].cod_grupo USING '&&&&&','-',
arr_irtb58[idx].cod_tipo USING '&&&&&&','-',
arr_irtb58[idx].cod_sec USING '&&&&&&&'
DISPLAY arr_irtb58[idx].*
DISPLAY xcodigo
OUTPUT TO REPORT requiere(arr_irtb58[idx].*,despiece[idx].*, xcodigo)
END IF
END FOR
FINISH REPORT requiere
LET tienedespiece = FALSE
END FUNCTION
REPORT requiere(detalle,xdespiece,codigo)
DEFINE hora STRING,
detalle RECORD
area INT,
cod_n,cod_grupo,cod_tipo,cod_sec INT,
descripcion VARCHAR(100),
unidad_med VARCHAR(4),
cantidad_1,cantidad,cantidad_o1,cantidad1,factor_conv DEC(12,5)
END RECORD,
xdespiece RECORD
id_etiqueta SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
lado_1 DEC(12,5),
lado_2 DEC(12,5),
lado_3 DEC(12,5),
cantidad DEC(12,5),
medida DEC(12,5),
secuencia,id_despiece INT,
bodega SMALLINT
END RECORD,
codigo VARCHAR(50),
x INT,
etiqueta VARCHAR(100)
ORDER BY codigo
FORMAT
FIRST PAGE HEADER
SELECT a.nombre INTO p_companias.nombre FROM companias a
LET hora = CURRENT
PRINTX hora,p_companias.nombre
BEFORE GROUP OF codigo
PRINTX detalle.*,p_irtb57.*,
nombreMov,nombreBodega,nombreBodegaDestino,nombreUsuario
ON EVERY ROW
SELECT a.descripcion INTO etiqueta FROM vetb00026 a
WHERE a.codid = xdespiece.id_etiqueta
LET total_cantidad = total_cantidad + xdespiece.cantidad
PRINTX codigo,xdespiece.*,tienedespiece,etiqueta,total_cantidad,total_medida
END REPORT
FUNCTION buscadoc(numid,codmov)
DEFINE numid,codmov INT
LET vendedor = null
SELECT a.numero_Doc,a.cod_mov,a.fecha,a.num_oc,a.tipo_cliente,a.sec_cliente,a.nombre,a.bodega,a.bodega_destino,
a.estado,a.url_destino,a.observacion,b.descrip_mov,c.descripcion,
'('||ISNULL(CAST(f.num_emp AS VARCHAR(10)),' ')||')'||ISNULL(rtrim(f.nom1_emp),' ')||' '||ISNULL(f.apell1_emp,' ')
INTO p_irtb57.numero_doc,p_irtb57.cod_mov,p_irtb57.fecha,p_irtb57.num_oc,p_irtb57.tipo_cliente,p_irtb57.sec_cliente,
p_irtb57.cliente,p_irtb57.bodega,p_irtb57.bodega_destino,p_irtb57.estado,
p_irtb57.url_file,p_irtb57.observacion,nombreMov,nombreBodega,vendedor
FROM irtb00057 a INNER JOIN irtb00005 b ON b.cod_mov = a.cod_mov
INNER JOIN intb00009 c ON c.cod_bodega = a.bodega
LEFT OUTER JOIN prtb00012 d ON d.num_oc = a.num_oc
LEFT OUTER JOIN adtb00003 f ON f.num_emp = d.sec_vend
WHERE a.numero_doc = numid AND a.cod_mov = codmov
#BODEGA DESTINO
IF p_irtb57.bodega_destino IS NOT NULL THEN
SELECT a.descripcion INTO nombreBodegaDestino FROM intb00009 a WHERE a.cod_bodega = p_irtb57.bodega_destino
END IF
DECLARE buscardetalle CURSOR FOR
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descripcion,a.unidad_med,
a.cantidad_1,a.cantidad_2,
c.id_etiqueta,
c.lado_1,c.lado_2,c.lado_3,c.cantidad,c.medida
FROM irtb00058 a
LEFT OUTER JOIN irtb00060 c ON c.cod_n =a.cod_n AND c.cod_grupo = a.cod_grupo AND
c.cod_tipo = a.cod_tipo AND c.cod_sec = a.cod_Sec AND
c.id_despiece = a.numero_Doc
WHERE a.numero_Doc = numid AND a.cod_mov = codmov
LET idx = 1
CALL arr_irtb58.clear()
LET tienedespiece = FALSE
FOREACH buscardetalle INTO arr_irtb58[idx].area,
arr_irtb58[idx].cod_n,
arr_irtb58[idx].cod_grupo,
arr_irtb58[idx].cod_tipo,
arr_irtb58[idx].cod_sec,
arr_irtb58[idx].descripcion,
arr_irtb58[idx].unidad_med,
arr_irtb58[idx].cantidad_1,
arr_irtb58[idx].cantidad,
#arr_irtb58[idx].factor_conv,
despiece1[idx].id_etiqueta,
despiece1[idx].lado_1,
despiece1[idx].lado_2,
despiece1[idx].lado_3,
despiece1[idx].cantidad,
despiece1[idx].medida
IF despiece1[idx].cantidad > 0 THEN
LET tienedespiece = TRUE
ELSE
LET tienedespiece = FALSE
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION