Files
MBS/MOVIL401/MBSinventario/resources/desglose.4gl
T

261 lines
11 KiB
Plaintext

DEFINE pdesglose RECORD
descripcion VARCHAR(100),
unidad_med VARCHAR(4),
tipo_inventario VARCHAR(100),
seccion,tramo INT,
lado_2,lado_1,lado_3,cantidad,cantidad2 DEC(12,5),
tono,calidad VARCHAR(100),
observacion VARCHAR(100),
idproducto VARCHAR(25),
bodega,codid,codn,codgrupo,codtipo,codsec INT,
factor DEC(12,5),
fecha DATE
END RECORD,
recinfo DYNAMIC ARRAY OF RECORD
info STRING,
info2 STRING,
id INT,
cantidad2 DEC(12,5),
lado_1,lado_2,lado_3,seccion,tramo DEC(12,5)
END RECORD,
kcodid,xidrow,idx INT,
totalcantidad2 DEC(12,5)
FUNCTION desglose(pcodid,pbodega,pfecha,xtipo_inventario,pcodseccion, pcodtramo)
DEFINE pcodid,pbodega,pcodseccion, pcodtramo INT,
pfecha DATE,
xtipo_inventario VARCHAR(50)
LET pdesglose.tipo_inventario = xtipo_inventario
LET pdesglose.codid = pcodid
LET pdesglose.bodega = pbodega
LET pdesglose.fecha = pfecha
CALL limpiad()
LET totalcantidad2 =0
CALL busca_desglose()
IF idx > 1 THEN
OPEN WINDOW w21 WITH FORM "desglose_detalle"
DISPLAY ARRAY recinfo TO scr_info.* ATTRIBUTES(ACCESSORYTYPE=DISCLOSUREINDICATOR,
DETAILACTION=Actualiza)
BEFORE DISPLAY
LET xidrow = 0
ON ACTION padiciona ATTRIBUTE(IMAGE="fa-plus")
CALL limpiad()
# CALL seccion()
CALL busca_informacion()
# CALL tramo(pdesglose.seccion,pdesglose.bodega)
CALL entra_desglose()
CALL busca_desglose()
ON ACTION borrar ATTRIBUTE(IMAGE="fa-minus")
LET xidrow = recinfo[arr_curr()].id
DELETE FROM desglose WHERE idrow =xidrow
CALL recinfo.deleteElement(arr_curr())
CONTINUE DISPLAY
CALL busca_desglose()
ON ACTION actualiza ATTRIBUTE(TEXT="Actualiza")
LET xidrow = recinfo[arr_curr()].id
CALL busca_informacion()
CALL entra_desglose()
CALL busca_desglose()
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
CLOSE WINDOW w21
ELSE
CALL busca_informacion()
CALL entra_desglose()
CALL busca_desglose()
END IF
RETURN totalcantidad2
END FUNCTION
FUNCTION entra_desglose()
DEFINE respuesta VARCHAR(3)
OPEN WINDOW w20 WITH FORM "desglose"
DIALOG ATTRIBUTES(UNBUFFERED)
INPUT BY NAME pdesglose.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
CALL seccion()
IF pdesglose.seccion IS NOT NULL THEN
CALL tramo(pdesglose.seccion,pdesglose.bodega)
END IF
DISPLAY BY NAME pdesglose.seccion
CALL dialog.setActionActive('cancel',FALSE)
AFTER FIELD seccion
CALL tramo(pdesglose.seccion,pdesglose.bodega)
AFTER FIELD cantidad
IF pdesglose.lado_2 > 0 THEN
LET pdesglose.cantidad2 = pdesglose.cantidad * pdesglose.lado_1 *pdesglose.lado_2
END IF
IF pdesglose.lado_3 > 0 THEN
LET pdesglose.cantidad2 = pdesglose.cantidad2 * pdesglose.lado_3
END IF
DISPLAY BY NAME pdesglose.cantidad2
ON ACTION save
IF pdesglose.cantidad IS NULL THEN
ERROR "CANTIDAD EN BLANCO"
NEXT FIELD cantidad
END IF
IF pdesglose.idproducto IS NULL THEN
ERROR "COD BARRA EN BLANCO"
NEXT FIELD idproducto
END IF
IF pdesglose.cantidad2 IS NULL THEN
ERROR "CANTIDAD EN BLANCO"
NEXT FIELD cantidad1
END IF
IF pdesglose.lado_3 IS NULL THEN
LET pdesglose.lado_3 =0
END IF
IF pdesglose.seccion IS NULL THEN
ERROR "SECCION EN BLANCO"
NEXT FIELD seccion
END IF
IF pdesglose.tramo IS NULL THEN
ERROR "TRAMO EN BLANCO"
NEXT FIELD tramo
END IF
IF pdesglose.lado_2 > 0 THEN
LET pdesglose.cantidad2 = pdesglose.cantidad * pdesglose.lado_1 *pdesglose.lado_2
END IF
IF pdesglose.lado_3 > 0 THEN
LET pdesglose.cantidad2 = pdesglose.cantidad2 * pdesglose.lado_3
END IF
DISPLAY BY NAME pdesglose.cantidad2
SELECT a.idrow FROM desglose a WHERE a.idrow = xidrow
IF STATUS = NOTFOUND THEN
SELECT DISTINCT a.idproducto FROM desglose a WHERE a.idproducto = pdesglose.idproducto
IF STATUS <> NOTFOUND THEN
ERROR "ID PRODUCTO EXISTE"
NEXT FIELD idproducto
END IF
INSERT INTO desglose (descrip_esp,tipo_inventario,
unidad_med,codid,factor_conv,lado_1,lado_2,lado_3,
cantidad,cantidad2,observacion,
idproducto,cod_bodega,cod_seccion,cod_tramo,fecha,
cod_n,cod_grupo,cod_tipo,cod_sec,fecha,tono,calidad)
VALUES (pdesglose.descripcion,pdesglose.tipo_inventario,pdesglose.unidad_med,
pdesglose.codid,pdesglose.factor,
pdesglose.lado_1,pdesglose.lado_2,pdesglose.lado_3,pdesglose.cantidad,
pdesglose.cantidad2,pdesglose.observacion,pdesglose.idproducto,
pdesglose.bodega,pdesglose.seccion,pdesglose.tramo,pdesglose.fecha,
pdesglose.codn,pdesglose.codgrupo,pdesglose.codtipo,pdesglose.codsec,
pdesglose.fecha,pdesglose.tono,pdesglose.calidad)
ERROR "ADICION EXITOSA"
ELSE
UPDATE desglose SET (descrip_esp,tipo_inventario,
unidad_med,codid,factor_conv,lado_1,lado_2,lado_3,
cantidad,cantidad2,observacion,
idproducto,cod_bodega,cod_seccion,cod_tramo,fecha,
tono,calidad) =
(pdesglose.descripcion,pdesglose.tipo_inventario,pdesglose.unidad_med,
pdesglose.codid,pdesglose.factor,
pdesglose.lado_1,pdesglose.lado_2,pdesglose.lado_3,pdesglose.cantidad,
pdesglose.cantidad2,pdesglose.observacion,pdesglose.idproducto,
pdesglose.bodega,pdesglose.Seccion,pdesglose.tramo,pdesglose.fecha,
pdesglose.tono,pdesglose.calidad)
WHERE idrow =xidrow
ERROR "ACTUALIZACION EXITOSA"
END IF
IF pdesglose.cantidad2 IS NOT NULL THEN
LET totalcantidad2 = totalcantidad2 + pdesglose.cantidad2
END IF
AFTER INPUT
IF pdesglose.cantidad2 IS NULL THEN
ERROR "CANTIDAD EN BLANCO"
NEXT FIELD cantidad
END IF
IF pdesglose.lado_3 IS NULL THEN
LET pdesglose.lado_3 =0
END IF
CONTINUE DIALOG
END INPUT
ON ACTION CANCEL
EXIT DIALOG
END DIALOG
CLOSE WINDOW w20
END FUNCTION
FUNCTION busca_informacion()
IF xidrow > 0 THEN
SELECT a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.cantidad2,
a.observacion,a.idproducto,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
a.tono,a.calidad,a.cod_seccion,a.cod_tramo
INTO pdesglose.lado_1,pdesglose.lado_2,pdesglose.lado_3,
pdesglose.cantidad,pdesglose.cantidad2,pdesglose.observacion,pdesglose.idproducto,
pdesglose.codn,pdesglose.codgrupo,pdesglose.codtipo,pdesglose.codsec,
pdesglose.tono,pdesglose.calidad,pdesglose.seccion,pdesglose.tramo
FROM desglose a
WHERE a.idrow = xidrow
END IF
SELECT a.descrip_esp,a.unidad_med,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
INTO pdesglose.descripcion,pdesglose.unidad_med,
pdesglose.codn,pdesglose.codgrupo,pdesglose.codtipo,pdesglose.codsec
FROM productos a WHERE a.tipo_inventario = pdesglose.tipo_inventario AND a.codid = pdesglose.codid
END FUNCTION
FUNCTION busca_desglose()
DEFINE idproducto STRING
DECLARE busca_d CURSOR FOR
SELECT a.descrip_esp,' ',
a.idrow,a.cantidad2,
a.lado_1,a.lado_2,a.lado_3,a.cod_seccion,a.cod_tramo,a.idproducto,
a.tono,a.calidad
FROM desglose a WHERE a.fecha = pdesglose.fecha AND a.codid = pdesglose.codid AND
a.cod_bodega = pdesglose.bodega
LET idx = 1
LET totalcantidad2 =0
FOREACH busca_d INTO recinfo[idx].*,idproducto
IF recinfo[idx].info IS NOT NULL THEN
LET recinfo[idx].info2 = recinfo[idx].lado_1 USING "&&.##","x",
recinfo[idx].lado_2 USING "&&.##","x",
recinfo[idx].lado_3 USING "&&.##", "CA-",
recinfo[idx].cantidad2 USING "<<<.###",
"-",idproducto CLIPPED
LET totalcantidad2 = totalcantidad2 + recinfo[idx].cantidad2
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION
FUNCTION limpiad()
LET xidrow = NULL
LET pdesglose.lado_1=NULL
LET pdesglose.lado_2=NULL
LET pdesglose.lado_3=NULL
LET pdesglose.cantidad=NULL
LET pdesglose.cantidad2=NULL
LET pdesglose.observacion=NULL
LET pdesglose.idproducto=NULL
LET pdesglose.seccion = NULL
LET pdesglose.tramo =NULL
END FUNCTION