Files

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