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>
439 lines
14 KiB
Plaintext
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
|