Files
MBS/PROYECTO/irdir/irautorizareq.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

439 lines
14 KiB
Plaintext

{
PROGRAMA: irautorizareq
OBJETIVO: Mostrar al usuario las requisiciones autorizadas
FECHA : Mayo 9, 2022
}
GLOBALS "irprgb000.4gl"
DEFINE
r INT,
arr_busqueda1 DYNAMIC ARRAY OF RECORD
procesar VARCHAR(3),
estado VARCHAR(20),
idestado INT,
num_oc INT,
tipo_documento VARCHAR(100),
numeroid INT,
fecha DATE,
nombre, observacion1, origen, destino, usuario VARCHAR(100),
vendedor VARCHAR(100),
archivo VARCHAR(200),
cod_mov1 INT,
us_crea VARCHAR(50),
rtipo_cliente, rsec_cliente, bodega, bodega_destino INT
END RECORD,
nombreusuario, email, vendedor VARCHAR(100),
tienedespiece BOOLEAN,
cuentaimp INT
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 curr INT
FUNCTION irautorizadas(xusuario)
DEFINE
data RECORD
rnumeroDoc,
rcodMov,
rtipo_cliente,
num_oc,
tipo_cliente,
sec_cliente,
bodega,
bodega_destino
INT,
nombre VARCHAR(100)
END RECORD,
xusuario VARCHAR(50)
CALL arr_busqueda1.clear()
INITIALIZE curr TO NULL
CALL buscadataReq(xusuario)
IF r = 1 THEN
RETURN data.*
END IF
OPEN WINDOW w1 WITH FORM "irautorizareq"
INPUT ARRAY arr_busqueda1
FROM sbusqueda.*
ATTRIBUTE(WITHOUT DEFAULTS, UNBUFFERED)
BEFORE INPUT
DISPLAY 'REQUISICIONES TRANSACCIONES AUTORIZADAS' TO etiqueta
CALL DIALOG.setActionActive("accept", FALSE)
{ BEFORE ROW
LET r = arr_curr()
IF arr_busqueda1[r].archivo IS NULL THEN
CALL DIALOG.setActionActive( "tfile", FALSE )
ELSE
CALL DIALOG.setActionActive( "tfile", TRUE )
END IF}
CALL estadosprocesos(1)
ON ACTION tfile
LET r = arr_curr()
IF arr_busqueda1[r].archivo IS NOT NULL THEN
CALL ui.Interface.frontCall(
"standard", "launchURL", [arr_busqueda1[r].archivo], [])
END IF
ON ACTION imprimir ATTRIBUTE(TEXT = "Imprimir", IMAGE = "printer")
IF arr_busqueda1[arr_curr()].numeroid > 0 THEN
CALL buscadoc(
arr_busqueda1[arr_curr()].numeroid,
arr_busqueda1[arr_curr()].cod_mov1)
LET data.rnumeroDoc = arr_busqueda1[arr_curr()].numeroid
LET data.rcodMov = arr_busqueda1[arr_curr()].cod_mov1
LET data.rtipo_cliente = arr_busqueda1[arr_curr()].rtipo_cliente
LET data.sec_cliente = arr_busqueda1[arr_curr()].rsec_cliente
LET data.nombre = arr_busqueda1[arr_curr()].nombre
LET data.num_oc = arr_busqueda1[arr_curr()].num_oc
LET data.bodega = arr_busqueda1[arr_curr()].bodega
LET data.bodega_destino =
arr_busqueda1[arr_curr()].bodega_destino
LET nombreUsuario = arr_busqueda1[arr_curr()].usuario
DISPLAY data.*
DISPLAY nombreUsuario
CALL impdocumento()
END IF
ON ACTION procesar ATTRIBUTE(TEXT = "Procesa", IMAGE = "")
LET curr = arr_curr()
IF arr_busqueda1[curr].numeroid > 0 THEN
LET data.rnumeroDoc = arr_busqueda1[curr].numeroid
LET data.rcodMov = arr_busqueda1[curr].cod_mov1
LET data.rtipo_cliente = arr_busqueda1[curr].rtipo_cliente
LET data.sec_cliente = arr_busqueda1[curr].rsec_cliente
LET data.nombre = arr_busqueda1[curr].nombre
LET data.num_oc = arr_busqueda1[curr].num_oc
LET data.bodega = arr_busqueda1[curr].bodega
LET data.bodega_destino = arr_busqueda1[curr].bodega_destino
EXIT INPUT
END IF
ON CHANGE observacion1
IF arr_busqueda1[arr_curr()].numeroid > 0 THEN
UPDATE irtb00057
SET observacion = arr_busqueda1[arr_curr()].observacion1,
us_mod = usuarios,
fech_mod = getdate()
WHERE numero_doc = arr_busqueda1[arr_curr()].numeroid
END IF
ON CHANGE idestado
IF arr_busqueda1[arr_curr()].numeroid > 0 THEN
UPDATE irtb00057
SET idestado = arr_busqueda1[arr_curr()].idestado,
observacion = arr_busqueda1[arr_curr()].observacion1,
us_mod = usuarios,
fech_mod = getdate()
WHERE numero_doc = arr_busqueda1[arr_curr()].numeroid
END IF
AFTER INPUT
IF int_flag THEN
LET data.rnumeroDoc = NULL
LET data.rcodMov = NULL
LET data.rtipo_cliente = NULL
LET data.sec_cliente = NULL
LET data.nombre = NULL
LET data.num_oc = NULL
LET data.bodega = NULL
LET data.bodega_destino = NULL
LET int_flag = FALSE
END IF
EXIT INPUT
END INPUT
CLOSE WINDOW w1
RETURN data.*
END FUNCTION
FUNCTION buscadataReq(pusuario)
DEFINE pusuario VARCHAR(50)
DECLARE buscar CURSOR FOR
SELECT ' ',
b.estado,
b.idestado,
b.num_oc,
CAST(a.cod_mov AS VARCHAR(10)) || ' ' || a.descrip_mov,
b.numero_doc,
b.fecha,
'',
b.observacion,
(SELECT p1.descripcion
FROM intb00009 p1
WHERE p1.cod_bodega = b.bodega)
AS ORIGEN,
(SELECT p2.descripcion
FROM intb00009 p2
WHERE p2.cod_bodega = b.bodega_destino),
' ',
' '
,
b.url_destino,
b.cod_mov,
b.us_crea,
'0',
'0',
b.bodega,
b.bodega_destino
FROM irtb00005 a,
irtb00057 b
INNER
JOIN irtb00048 d
ON d.bodega = b.bodega AND d.usuario = pusuario
WHERE a.cod_mov = b.cod_mov
AND b.estado = 'AUTORIZADA'
AND b.status_t IS NULL
LET r = 1
CALL arr_busqueda1.clear()
FOREACH buscar INTO arr_busqueda1[r].*
CALL usuarioSistema(
arr_busqueda1[r].us_crea)
RETURNING nombreUsuario, email
LET arr_busqueda1[r].usuario = nombreUsuario
LET r = r + 1
END FOREACH
END FUNCTION
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
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
FROM irtb00057 a INNER JOIN irtb00005 b ON b.cod_mov = a.cod_mov
INNER
JOIN intb00009 c
ON c.cod_bodega = a.bodega
#-> Se eliminaron los JOIN a prtb00012 y adtb00003: una requisicion de
# REPUESTOS no puede tener orden de pedido de cliente ni nada de ventas,
# y el join por sec_vend rompia la consulta (-4104 f.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
FUNCTION impdocumento()
DEFINE
idx_l INT,
xcodigo VARCHAR(50)
LET r_filename = "irprmt020_1.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 '&&&&&&&'
OUTPUT TO REPORT requiere(
p_irtb57.*, arr_irtb58[idx].*, despiece1[idx].*, xcodigo)
END IF
END FOR
FINISH REPORT requiere
END FUNCTION
REPORT requiere(x, 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 RECORD
numero_doc INT,
cod_mov SMALLINT,
fecha DATE,
num_oc INT,
orden_trabajo INT,
observacion VARCHAR(200),
tipo_cliente SMALLINT,
sec_cliente INT,
cliente VARCHAR(100),
bodega SMALLINT,
bodega_destino SMALLINT,
estado VARCHAR(50),
ruta_documento, url_file VARCHAR(250),
idstado VARCHAR(60)
END RECORD,
etiqueta VARCHAR(100),
total_cantidad, total_medida DEC(12, 5)
ORDER BY codigo
FORMAT
FIRST PAGE HEADER
SELECT a.nombre INTO p_companias.nombre FROM companias a
LET hora = CURRENT
PRINTX p_companias.nombre,
hora,
x.*,
nombreMov,
nombreBodega,
nombreBodegaDestino,
nombreUsuario,
vendedor
BEFORE GROUP OF codigo
PRINTX dEtalle.*
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