705 lines
24 KiB
Plaintext
705 lines
24 KiB
Plaintext
{
|
|
==========================================================================
|
|
PROGRAMA : VEPRMT032
|
|
OBJETIVO : ADMINISTRAR LOS KIT DE LOS PRODUCTOS TERMINADOS
|
|
DESARROLLADO POR : ING. JUAN SOTO
|
|
FECHA : 17/10/2014
|
|
==========================================================================
|
|
}
|
|
GLOBALS "veprgb000.4gl"
|
|
DEFINE dproducto DYNAMIC ARRAY OF RECORD
|
|
pcodn SMALLINT,
|
|
pcodgrupo SMALLINT,
|
|
pcodtipo SMALLINT,
|
|
pcodsec SMALLINT,
|
|
descripcion_p1 VARCHAR(100),
|
|
cantidad DEC(12,5),
|
|
precio DEC(12,2),
|
|
porc_desc DEC(12,2),
|
|
valor DEC(12,2)
|
|
END RECORD
|
|
DEFINE x1 RECORD
|
|
kit_id INT,
|
|
descripcion VARCHAR(100),
|
|
disponible VARCHAR(10),
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion_p VARCHAR(100),
|
|
factor,cantidad_kit DEC(12,5),
|
|
valor_total DEC(12,2),
|
|
porc_Desc1 DEC(12,2),
|
|
costeo_orden CHAR(2)
|
|
END RECORD ,
|
|
pkit int,pdescripcion VARCHAR(100),
|
|
cuenta_reg SMALLINT
|
|
|
|
DEFINE arr_producto DYNAMIC ARRAY OF RECORD
|
|
pcodn SMALLINT,
|
|
pcodgrupo SMALLINT,
|
|
pcodtipo SMALLINT,
|
|
pcodsec SMALLINT,
|
|
descripcion_p1 VARCHAR(100),
|
|
factor_d,unidades DEC(12,5),
|
|
cantidad DEC(12,5),
|
|
precio DEC(12,2),
|
|
porc_desc DEC(12,2),
|
|
valor DEC(12,2)
|
|
END RECORD
|
|
|
|
MAIN
|
|
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(4) RETURNING impresor
|
|
CALL STARTLOG("veprmt32.txt")
|
|
|
|
CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave
|
|
|
|
CALL veprmt032()
|
|
|
|
END MAIN
|
|
|
|
FUNCTION veprmt032()
|
|
DEFINE mproducto RECORD
|
|
kit_id INT,
|
|
descripcion VARCHAR(100),
|
|
disponible VARCHAR(10),
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion_p VARCHAR(100),
|
|
factor,cantidad_kit DEC(12,5),
|
|
valor_total DEC(12,2),
|
|
porc_Desc1 DEC(12,2),
|
|
costeo_orden CHAR(2)
|
|
END RECORD,
|
|
|
|
exito BOOLEAN,
|
|
modifica VARCHAR(3),
|
|
pprecio DEC(12,2)
|
|
|
|
OPEN FORM w1 FROM "vefmmt032"
|
|
DISPLAY FORM w1
|
|
|
|
DIALOG ATTRIBUTES(UNBUFFERED)
|
|
INPUT BY NAME mproducto.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
LET p_vetb50.ventas = 3
|
|
LET p_vetb50.tipo_cliente = NULL
|
|
LET p_vetb50.sec_cliente=NULL
|
|
LET mproducto.disponible='SI'
|
|
# IF mproducto.costeo_orden IS NULL THEN
|
|
LET mproducto.costeo_orden = "NO"
|
|
# END IF
|
|
ON ACTION copiar
|
|
CALL copia_kit()
|
|
AFTER FIELD cod_sec
|
|
IF mproducto.cod_sec IS NOT NULL THEN
|
|
CALL producto(mproducto.cod_n,mproducto.cod_grupo,mproducto.cod_tipo,mproducto.cod_sec)
|
|
RETURNING pdescripcion,mproducto.factor
|
|
|
|
IF pdescripcion IS NULL THEN
|
|
|
|
CALL msg(3)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
LET modifica ="NO"
|
|
SELECT COUNT(*) INTO cuenta_reg
|
|
FROM vetb00029 a
|
|
WHERE a.cod_n = mproducto.cod_n AND
|
|
a.cod_grupo = mproducto.cod_grupo AND
|
|
a.cod_tipo = mproducto.cod_tipo AND
|
|
a.cod_sec = mproducto.cod_sec
|
|
|
|
IF cuenta_reg > 1 THEN
|
|
|
|
LET opt = fgl_winquestion("ADICIONA","DESEA MODIFICAR KIT EXISTENTE?","NO","YES|NO","QUESTION",0)
|
|
IF opt = "YES" THEN
|
|
|
|
LET modifica = 'SI'
|
|
CALL visualiza_kit(mproducto.cod_n,mproducto.cod_grupo,mproducto.cod_tipo,mproducto.cod_sec,pkit,"'SI','NO'")
|
|
RETURNING pkit,mproducto.valor_total,mproducto.descripcion
|
|
#CALL visualiza_detalle_kit(pkit) RETURNING arr_producto
|
|
|
|
LET mproducto.kit_id = pkit
|
|
# SELECT DISTINCT a.id_kit FROM prtb00013 a WHERE a.id_kit = mproducto.kit_id
|
|
|
|
# IF STATUS <> NOTFOUND THEN
|
|
# CALL FGL_WINMESSAGE("ERROR","KIT TIENE ORDEN, DEBES ADICIONAR UNO NUEVO","INFO")
|
|
# NEXT FIELD cod_Sec
|
|
# END IF
|
|
|
|
CALL consulta(mproducto.*) RETURNING mproducto.kit_id
|
|
ELSE
|
|
LET modifica = 'NO'
|
|
END IF
|
|
|
|
|
|
ELSE
|
|
LET modifica = 'NO'
|
|
SELECT a.id_kit,a.disponible,a.descripcion,a.porc_desc,a.factor_conv,a.cantidad_Venta
|
|
INTO mproducto.kit_id,mproducto.disponible,mproducto.descripcion,mproducto.porc_desc1,
|
|
mproducto.factor,mproducto.cantidad_kit
|
|
FROM vetb00029 a
|
|
WHERE a.cod_n = mproducto.cod_n AND
|
|
a.cod_grupo = mproducto.cod_grupo AND
|
|
a.cod_tipo = mproducto.cod_tipo AND
|
|
a.cod_sec = mproducto.cod_sec
|
|
|
|
IF STATUS <> NOTFOUND THEN
|
|
LET opt = fgl_winquestion("ADICIONA","DESEA MODIFICAR KIT EXISTENTE?","NO","YES|NO","QUESTION",0)
|
|
IF opt = "YES" THEN
|
|
LET modifica = 'SI'
|
|
# SELECT DISTINCT a.id_kit FROM prtb00013 a WHERE a.id_kit = mproducto.kit_id
|
|
|
|
# IF STATUS <> NOTFOUND THEN
|
|
# CALL FGL_WINMESSAGE("ERROR","KIT TIENE ORDEN, DEBES ADICIONAR UNO NUEVO","INFO")
|
|
# NEXT FIELD cod_Sec
|
|
# END IF
|
|
|
|
ELSE
|
|
LET modifica = 'NO'
|
|
END IF
|
|
END IF
|
|
|
|
END IF
|
|
|
|
|
|
LET mproducto.descripcion_p = pdescripcion
|
|
DISPLAY BY NAME mproducto.descripcion_p
|
|
DISPLAY BY NAME mproducto.*
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF mproducto.cod_sec IS NOT NULL THEN
|
|
CALL producto(mproducto.cod_n,mproducto.cod_grupo,mproducto.cod_tipo,mproducto.cod_sec)
|
|
RETURNING pdescripcion,mproducto.factor
|
|
IF pdescripcion IS NULL THEN
|
|
|
|
CALL msg(3)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
DECLARE buscate CURSOR FOR
|
|
|
|
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.descrip_esp,b.cantidad,b.precio,b.porc_desc
|
|
FROM iptb00002 a LEFT OUTER join vetb00030 b ON
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_Sec
|
|
|
|
WHERE b.id_kit = mproducto.kit_id AND
|
|
a.status_t IS NULL
|
|
|
|
LET idx = 1
|
|
FOREACH buscate INTO arr_producto[idx].pcodn,arr_producto[idx].pcodgrupo,
|
|
arr_producto[idx].pcodtipo,arr_producto[idx].pcodsec,
|
|
arr_producto[idx].descripcion_p1,
|
|
arr_producto[idx].cantidad,arr_producto[idx].precio,
|
|
arr_producto[idx].porc_desc
|
|
|
|
IF arr_producto[idx].porc_desc IS NULL THEN
|
|
LET arr_producto[idx].porc_desc=0
|
|
END IF
|
|
|
|
LET arr_producto[idx].valor = arr_producto[idx].cantidad * (arr_producto[idx].precio-
|
|
(arr_producto[idx].porc_desc * arr_producto[idx].precio)/100)
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
END IF
|
|
END INPUT
|
|
|
|
INPUT ARRAY arr_producto FROM sproducto.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
IF modifica ="NO" THEN
|
|
CALL arr_producto.clear()
|
|
END IF
|
|
AFTER FIELD pcodsec
|
|
LET idx = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF arr_producto[idx].pcodsec IS NOT NULL THEN
|
|
IF arr_producto[idx].pcodn = mproducto.cod_n AND
|
|
arr_producto[idx].pcodgrupo = mproducto.cod_grupo AND
|
|
arr_producto[idx].pcodtipo = mproducto.cod_tipo AND
|
|
arr_producto[idx].pcodsec = mproducto.cod_sec THEN
|
|
CALL fgl_Winmessage("ERROR","ESTE CODIGO NO PUEDE SER IGUAL QUE EL CODIGO PRINCIPAL","INFO")
|
|
NEXT FIELD pcodsec
|
|
END IF
|
|
|
|
CALL producto(arr_producto[idx].pcodn,arr_producto[idx].pcodgrupo,
|
|
arr_producto[idx].pcodtipo,arr_producto[idx].pcodsec)
|
|
RETURNING pdescripcion,arr_producto[idx].factor_d
|
|
|
|
IF pdescripcion IS NULL THEN
|
|
CALL msg(3)
|
|
NEXT FIELD pcodn
|
|
END IF
|
|
|
|
END IF
|
|
LET arr_producto[idx].descripcion_p1 = pdescripcion
|
|
DISPLAY arr_producto[idx].descripcion_p1 TO sproducto[scr_l].descripcion_p1
|
|
SELECT a.precio INTO pprecio
|
|
FROM vetb00025 a,seg0009 b
|
|
WHERE a.cod_n = arr_producto[idx].pcodn AND
|
|
a.cod_grupo = arr_producto[idx].pcodgrupo AND
|
|
a.cod_tipo = arr_producto[idx].pcodtipo AND
|
|
a.cod_sec = arr_producto[idx].pcodsec AND
|
|
a.ventas = 3 AND
|
|
b.usuario = usuarios AND
|
|
a.cod_lista = b.cod_lista
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage("ERROR","PRODUCTO NO TIENE PRECIO, NO PUEDES VENDERLO","INFO")
|
|
LET pprecio = 0
|
|
# NEXT FIELD pcodn
|
|
END IF
|
|
IF mproducto.porc_Desc1 IS NOT NULL THEN
|
|
LET arr_producto[idx].porc_desc = mproducto.porc_Desc1
|
|
DISPLAY arr_producto[idx].porc_desc TO sproducto[scr_line()].porc_desc
|
|
END IF
|
|
|
|
LET arr_producto[idx].precio = pprecio
|
|
DISPLAY arr_producto[idx].precio TO sproducto[scr_l].precio
|
|
AFTER FIELD porc_desc
|
|
IF arr_producto[idx].porc_desc IS NULL THEN
|
|
LET arr_producto[idx].porc_desc=0
|
|
END IF
|
|
LET arr_producto[idx].valor = arr_producto[idx].cantidad * (arr_producto[idx].precio-
|
|
(arr_producto[idx].porc_desc * arr_producto[idx].precio)/100)
|
|
DISPLAY arr_producto[idx].valor TO sproducto[scr_l].valor
|
|
AFTER ROW
|
|
IF arr_producto[idx].porc_desc IS NULL THEN
|
|
LET arr_producto[idx].porc_desc=0
|
|
END IF
|
|
|
|
LET arr_producto[idx].valor = arr_producto[idx].cantidad * (arr_producto[idx].precio-
|
|
(arr_producto[idx].porc_desc * arr_producto[idx].precio)/100)
|
|
DISPLAY arr_producto[idx].valor TO sproducto[scr_l].valor
|
|
|
|
CALL calcula_valor(arr_producto) RETURNING mproducto.valor_total,mproducto.factor
|
|
DISPLAY BY NAME mproducto.valor_total
|
|
|
|
# AFTER INPUT
|
|
# IF INT_FLAG THEN
|
|
# CALL msg(2)
|
|
# LET INT_FLAG = FALSE
|
|
|
|
# EXIT PROGRAM
|
|
# END IF
|
|
END INPUT
|
|
ON ACTION guardar
|
|
IF arr_producto.getLength()<= 0 THEN
|
|
CALL fgl_winmessage("ERROR","NO PUEDE GUARDAR KIT SIN ELEMENTOS","INFO")
|
|
CONTINUE DIALOG
|
|
END IF
|
|
CALL inserta(mproducto.*,arr_producto,modifica) RETURNING exito,mproducto.kit_id
|
|
IF exito THEN
|
|
COMMIT WORK
|
|
DISPLAY BY NAME mproducto.kit_id
|
|
CALL fgl_winmessage("ERROR","ADICION EXITOSA","INFO")
|
|
CALL arr_producto.clear()
|
|
CLEAR FORM
|
|
ELSE
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","LA TRANSACCION NO SE ACTUALIZO CON EXITO","INFO")
|
|
END IF
|
|
CONTINUE DIALOG
|
|
# ON ACTION buscar
|
|
# CALL buscar_kit()
|
|
ON ACTION CANCEL
|
|
LET INT_FLAG = FALSE
|
|
EXIT PROGRAM
|
|
END DIALOG
|
|
END FUNCTION
|
|
FUNCTION inserta(x,z,modificacion)
|
|
DEFINE x RECORD
|
|
kit_id INT,
|
|
descripcion VARCHAR(100),
|
|
disponible VARCHAR(10),
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion_p VARCHAR(100),
|
|
factor,cantidad_kit DEC(12,5),
|
|
valor_total DEC(12,2),
|
|
porc_Desc1 DEC(12,2),
|
|
costeo_orden CHAR(2)
|
|
END RECORD
|
|
DEFINE z DYNAMIC ARRAY OF RECORD
|
|
pcodn SMALLINT,
|
|
pcodgrupo SMALLINT,
|
|
pcodtipo SMALLINT,
|
|
pcodsec SMALLINT,
|
|
descripcion_p1 VARCHAR(100),
|
|
factor_d,unidades DEC(12,5),
|
|
cantidad DEC(12,5),
|
|
precio DEC(12,2),
|
|
porc_desc DEC(12,2),
|
|
valor DEC(12,2)
|
|
|
|
END RECORD,
|
|
modificacion VARCHAR(3),
|
|
x_exito BOOLEAN
|
|
LET x_exito = TRUE
|
|
BEGIN WORK
|
|
IF x.costeo_orden IS NULL THEN
|
|
LET x.costeo_orden = "NO"
|
|
END IF
|
|
|
|
IF modificacion = "NO" THEN
|
|
SELECT MAX(a.id_kit) INTO x.kit_id FROM vetb00029 a
|
|
IF x.kit_id IS NULL THEN
|
|
LET x.kit_id = 1
|
|
END IF
|
|
LET x.kit_id = x.kit_id +1
|
|
# WHENEVER ERROR CONTINUE
|
|
IF x.costeo_orden IS NULL THEN
|
|
LET x.costeo_orden = "NO"
|
|
END IF
|
|
|
|
INSERT INTO vetb00029
|
|
(id_kit,
|
|
descripcion,
|
|
disponible,
|
|
cod_n,
|
|
cod_grupo,
|
|
cod_tipo,
|
|
cod_sec,
|
|
valor_total,
|
|
us_crea,
|
|
fech_crea,
|
|
porc_desc,
|
|
costeo_orden,
|
|
factor_conv
|
|
,cantidad_venta)
|
|
VALUES
|
|
(x.kit_id,
|
|
x.descripcion,
|
|
x.disponible,
|
|
x.cod_n,
|
|
x.cod_grupo,
|
|
x.cod_tipo,
|
|
x.cod_sec,
|
|
x.valor_total,
|
|
usuarios,
|
|
getdate(),
|
|
x.porc_Desc1,
|
|
x.costeo_orden,
|
|
x.factor
|
|
,x.cantidad_kit)
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","SE PRODUJO UN ERROR EN LA TABLA vetb00029","INFO")
|
|
LET x_exito = FALSE
|
|
RETURN x_exito
|
|
END IF
|
|
FOR curr = 1 TO z.getLength()
|
|
IF z[curr].pcodsec IS NOT NULL THEN
|
|
INSERT INTO vetb00030
|
|
(id_kit,
|
|
cod_n,
|
|
cod_grupo,
|
|
cod_tipo,
|
|
cod_sec,
|
|
cantidad,
|
|
porc_desc,
|
|
precio)
|
|
VALUES
|
|
(x.kit_id,
|
|
z[curr].pcodn,
|
|
z[curr].pcodgrupo,
|
|
z[curr].pcodtipo,
|
|
z[curr].pcodsec,
|
|
z[curr].cantidad,
|
|
z[curr].porc_desc,
|
|
z[curr].precio)
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","SE PRODUJO UN ERROR EN LA TABLA vetb00030","INFO")
|
|
LET x_exito = FALSE
|
|
EXIT FOR
|
|
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
ELSE
|
|
|
|
UPDATE vetb00029 SET disponible = x.disponible,
|
|
descripcion = x.descripcion,
|
|
valor_total = x.valor_total,
|
|
porc_desc = x.porc_Desc1,
|
|
costeo_orden = x.costeo_orden
|
|
WHERE id_kit = x.kit_id
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","SE PRODUJO UN ERROR EN LA TABLA vetb00029","INFO")
|
|
LET x_exito = FALSE
|
|
RETURN x_exito
|
|
END IF
|
|
DELETE FROM vetb00030 WHERE id_kit = x.kit_id
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","SE PRODUJO UN ERROR EN LA TABLA vetb00030","INFO")
|
|
LET x_exito = FALSE
|
|
RETURN x_exito
|
|
END IF
|
|
|
|
LET x_exito = TRUE
|
|
FOR curr = 1 TO z.getLength()
|
|
IF z[curr].pcodsec IS NOT NULL THEN
|
|
INSERT INTO vetb00030
|
|
(id_kit,
|
|
cod_n,
|
|
cod_grupo,
|
|
cod_tipo,
|
|
cod_sec,
|
|
cantidad,
|
|
porc_desc,
|
|
precio)
|
|
VALUES
|
|
(x.kit_id,
|
|
z[curr].pcodn,
|
|
z[curr].pcodgrupo,
|
|
z[curr].pcodtipo,
|
|
z[curr].pcodsec,
|
|
z[curr].cantidad,
|
|
z[curr].porc_desc,
|
|
z[curr].precio)
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","SE PRODUJO UN ERROR EN LA TABLA vetb00030","INFO")
|
|
LET x_exito = FALSE
|
|
EXIT FOR
|
|
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
END IF
|
|
RETURN x_exito,x.kit_id
|
|
END FUNCTION
|
|
FUNCTION calcula_valor(z)
|
|
DEFINE z DYNAMIC ARRAY OF RECORD
|
|
pcodn SMALLINT,
|
|
pcodgrupo SMALLINT,
|
|
pcodtipo SMALLINT,
|
|
pcodsec SMALLINT,
|
|
descripcion_p1 VARCHAR(100),
|
|
factor_d,unidades DEC(12,5),
|
|
cantidad DEC(12,5),
|
|
precio DEC(12,2),
|
|
porc_desc DEC(12,2),
|
|
valor DEC(12,2)
|
|
END RECORD,
|
|
valor1,valor DEC(12,2),
|
|
cantidad_k,factor DEC(12,5)
|
|
LET valor1 = 0
|
|
LET valor = 0
|
|
FOR curr = 1 TO z.getLength()
|
|
IF z[curr].pcodsec IS NOT NULL THEN
|
|
LET factor = z[curr].factor_d
|
|
LET z[curr].cantidad = z[curr].factor_d * z[curr].unidades
|
|
LET valor1 = z[curr].cantidad * (z[curr].precio-(z[curr].precio*(z[curr].porc_desc/100)))
|
|
LET valor = valor + valor1
|
|
END IF
|
|
END FOR
|
|
RETURN valor,factor
|
|
END FUNCTION
|
|
FUNCTION producto(x)
|
|
DEFINE x RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT
|
|
END RECORD,
|
|
xdescripcion VARCHAR(100),
|
|
xfactor DEC(12,5)
|
|
|
|
SELECT a.descrip_esp,b.factor_conv INTO xdescripcion,xfactor
|
|
FROM iptb00002 a LEFT OUTER JOIN iptb00001 b ON a.cod_n = b.cod_n
|
|
AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_Sec = b.cod_sec
|
|
WHERE a.cod_n = x.cod_n AND
|
|
a.cod_grupo = x.cod_grupo AND
|
|
a.cod_tipo = x.cod_tipo AND
|
|
a.cod_sec = x.cod_sec AND
|
|
a.status_t IS NULL
|
|
RETURN xdescripcion,xfactor
|
|
END FUNCTION
|
|
|
|
FUNCTION consulta(x)
|
|
DEFINE x RECORD
|
|
kit_id INT,
|
|
descripcion VARCHAR(100),
|
|
disponible VARCHAR(10),
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion_p VARCHAR(100),
|
|
factor,cantidad_kit DEC(12,5),
|
|
valor_total DEC(12,2),
|
|
porc_desc1 DEC(12,2),
|
|
costeo_orden CHAR(2)
|
|
END RECORD
|
|
|
|
DECLARE busca SCROLL CURSOR FOR
|
|
SELECT a.id_kit,a.disponible,a.descripcion,a.valor_total,b.descrip_esp,a.costeo_orden
|
|
FROM vetb00029 a,iptb00002 b
|
|
WHERE a.cod_n = x.cod_n AND
|
|
a.cod_grupo = x.cod_grupo AND
|
|
a.cod_tipo = x.cod_tipo AND
|
|
a.cod_sec = x.cod_sec AND
|
|
a.id_kit = x.kit_id AND
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_sec
|
|
OPEN busca
|
|
|
|
FETCH FIRST busca INTO x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
LET x1.* = x.*
|
|
CALL desplega()
|
|
MENU "NAVEGACION"
|
|
COMMAND "Siguiente"
|
|
FETCH NEXT busca INTO x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
LET x1.* = x.*
|
|
|
|
COMMAND "Anterior"
|
|
FETCH PREVIOUS busca INTO x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
DISPLAY BY NAME x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
COMMAND "Primero"
|
|
FETCH FIRST busca INTO x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
DISPLAY BY NAME x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
COMMAND "Ultimo"
|
|
FETCH LAST busca INTO x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
DISPLAY BY NAME x.kit_id,x.disponible,x.descripcion,x.valor_total,x.descripcion_p,x.costeo_orden
|
|
COMMAND "Actualiza"
|
|
RETURN x.kit_id
|
|
COMMAND "Salir"
|
|
EXIT MENU
|
|
END MENU
|
|
|
|
RETURN x.kit_id
|
|
END FUNCTION
|
|
FUNCTION desplega()
|
|
DEFINE xkit INT,
|
|
mensaje STRING
|
|
DECLARE busca1 CURSOR FOR
|
|
SELECT a.cod_n,a.cod_Grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.precio,a.porc_Desc,
|
|
b.descrip_esp
|
|
FROM vetb00030 a,iptb00002 b
|
|
WHERE a.cod_n = b.cod_n AND
|
|
a.cod_Grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_Sec AND
|
|
a.id_kit =x1.kit_id
|
|
|
|
|
|
LET idx = 1
|
|
FOREACH busca1 INTO dproducto[idx].pcodn,dproducto[idx].pcodgrupo,
|
|
dproducto[idx].pcodtipo,dproducto[idx].pcodsec,
|
|
dproducto[idx].cantidad,dproducto[idx].precio,
|
|
dproducto[idx].porc_desc,dproducto[idx].descripcion_p1
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
DISPLAY ARRAY dproducto TO sproducto.*
|
|
ON ACTION DUPLICA
|
|
CALL duplica_kit(x1.kit_id) RETURNING xkit
|
|
LET mensaje = "COPIA KIT ",xkit USING "&&&&&"," EXITOSA"
|
|
CALL fgl_winmessage("INFO",mensaje,"INFO")
|
|
EXIT PROGRAM
|
|
BEFORE DISPLAY
|
|
DISPLAY BY NAME x1.kit_id,x1.disponible,x1.descripcion,x1.valor_total,x1.descripcion_p
|
|
AFTER DISPLAY
|
|
END DISPLAY
|
|
END FUNCTION
|
|
{
|
|
FUNCTION busar_kit()
|
|
CONSTRUCT criterio ON a.id_kit,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
|
|
FROM kit_id,cod_n,cod_grupo,cod_tipo,cod_Sec
|
|
LET selec =
|
|
" SELECT a.id_kit,a.descripcion,a.disponible,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec"
|
|
kit_id INT,
|
|
descripcion VARCHAR(100),
|
|
disponible VARCHAR(10),
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion_p VARCHAR(100),
|
|
valor_total DEC(12,2)
|
|
|
|
END FUNCTION
|
|
}
|
|
FUNCTION copia_kit()
|
|
DEFINE codn2,codgrupo2,codtipo2,codsec2 SMALLINT,
|
|
valor_total DEC(12,2)
|
|
DEFINE arr_d DYNAMIC ARRAY OF RECORD
|
|
area SMALLINT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion VARCHAR(100),
|
|
cantidad DEC(12,5),
|
|
precio DEC(12,2),
|
|
porc_desc DEC(12,2)
|
|
END RECORD
|
|
INPUT BY NAME codn2,codgrupo2,codtipo2,codsec2
|
|
AFTER FIELD codsec2
|
|
IF codsec2 IS NOT NULL THEN
|
|
CALL producto(codn2,codgrupo2,codtipo2,codsec2)
|
|
RETURNING pdescripcion,x1.factor
|
|
|
|
IF pdescripcion IS NULL THEN
|
|
|
|
CALL msg(3)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
DISPLAY pdescripcion TO descripcion_p
|
|
SELECT DISTINCT a.cod_n FROM vetb00029 a
|
|
WHERE a.cod_n = codn2 AND
|
|
a.cod_grupo = codgrupo2 AND
|
|
a.cod_tipo = codtipo2 AND
|
|
a.cod_sec = codsec2
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage("INFO","NO EXISTEN KIT CON ESTE CODIGO","INFO")
|
|
NEXT FIELD codn2
|
|
ELSE
|
|
CALL visualiza_kit(codn2,codgrupo2,codtipo2,codsec2,pkit,"'SI','NO'")
|
|
RETURNING pkit,valor_total,pdescripcion
|
|
CALL visualiza_detalle_kit(pkit) RETURNING arr_d
|
|
|
|
END IF
|
|
END IF
|
|
AFTER INPUT
|
|
IF INT_FLAG THEN
|
|
EXIT INPUT
|
|
END IF
|
|
FOR idx = 1 TO arr_d.getLength()
|
|
LET arr_producto[idx].pcodn = arr_d[idx].cod_n
|
|
LET arr_producto[idx].pcodgrupo = arr_d[idx].cod_grupo
|
|
LET arr_producto[idx].pcodtipo = arr_d[idx].cod_tipo
|
|
LET arr_producto[idx].pcodsec = arr_d[idx].cod_sec
|
|
LET arr_producto[idx].descripcion_p1 = arr_d[idx].descripcion
|
|
LET arr_producto[idx].cantidad = arr_d[idx].cantidad
|
|
LET arr_producto[idx].precio = arr_d[idx].precio
|
|
LET arr_producto[idx].porc_desc = arr_d[idx].porc_desc
|
|
|
|
END FOR
|
|
END INPUT
|
|
IF INT_FLAG THEN
|
|
LET INT_FLAG = FALSE
|
|
RETURN
|
|
END IF
|
|
END FUNCTION |