Files
MBS/PROYECTO/ipdir/ipprmt017.4gl
T
jpegueroandClaude Sonnet 5 bb9d9a05a1 Corregir ipprmt017: columnas sin titulo, toolbar incompleto y checkbox Elimina
- Agregar titulo a columnas Unidad y Moneda, ocultar campo interno idrow
- Agregar a ToolBar1 los botones Busca Informacion, Limpia Screen,
  Conversion Moneda y Cancela operacion (estaban definidos como
  ActionDefault pero nunca agregados a la barra, por eso no se veian)
- Capturar el idrow generado al insertar un precio nuevo (antes quedaba
  NULL en memoria, rompiendo el eliminar de esa misma fila en la misma
  sesion)
- Corregir el checkbox "Elimina": el clic con mouse marcaba la casilla
  visualmente pero no actualizaba el valor real hasta perder el foco con
  Tab (bug de renderizado de GST). Se cambio el trigger de AFTER FIELD a
  ON CHANGE, que si sincroniza el valor de inmediato con clic de mouse

Pendiente: falta la prueba final completa del flujo eliminar en
ipprmt017 (se hizo hasta confirmar que ON CHANGE captura el valor
correctamente, falta probar el guardado + verificacion en BD)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 17:00:17 -04:00

868 lines
32 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : IPPRMT017
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Precio por Cliente
PROGRAMADOR : JUAN SOTO
FECHA REALIZACION : Febrero 1997
MODIFICADO POR : JUAN SOTO
DESCRIPCION MOD : ADICION LISTA DE PRECIOS EN TAB SEPARADOS
ADMINISTRACION PRECIOS POR ITEMS
------------------------------------------------------------------
}
GLOBALS "ipprgb000.4gl"
DEFINE cliente_dir RECORD LIKE vetb00005.*,
costo_std,costo_lq,existencia DEC (12,5)
DEFINE ventas ui.combobox,
guarda_info CHAR(6)
DEFINE descuento RECORD LIKE vetb00013.*
DEFINE arr_clientes DYNAMIC ARRAY OF RECORD
tipo_cliente LIKE vetb00004.tipo_cliente,
sec_cliente LIKE vetb00004.sec_cliente,
nombre CHAR(30)
END RECORD
DEFINE listproduct DYNAMIC ARRAY OF RECORD
elimina CHAR(1),
idrow INT,
codlista SMALLINT,
codn SMALLINT,
codgrupo SMALLINT,
codtipo SMALLINT,
codsec SMALLINT,
descripcion_p CHAR(50),
unidad_med CHAR(4),
tipoCliente SMALLINT,
secCliente INT,
nombreCliente CHAR(30),
ventas SMALLINT,
moneda CHAR(4),
pprecio DEC(12,2),
costo_std1 DEC(12,4),
costo_r DEC(12,4),
fecha_lq DATE,
existencia DEC(12,4)
END RECORD,
respuesta CHAR(3)
MAIN
DEFER INTERRUPT
CALL STARTLOG("ipprmt017.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL ipprmt017()
END MAIN
FUNCTION ipprmt017()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 9,
ERROR LINE 23,
HELP FILE "ippray000.exe",
HELP KEY CONTROL-W,
COMMENT LINE 21
OPEN WINDOW w1 AT 5,10 WITH FORM "ipfmmt017"
MENU
ON ACTION nuevo ATTRIBUTE(TEXT="Nuevo",IMAGE="imagenes\precio.png")
CLEAR FORM
CALL listproduct.clear()
LET int_flag = FALSE
CALL ippcad017()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION ippcad017()
## Captura los datos que va a contener el registro
# WHENEVER ERROR CONTINUE
DEFINE noreg INT
DIALOG ATTRIBUTES (UNBUFFERED, FIELD ORDER FORM)
CONSTRUCT criterio ON iptb00002.cod_n,iptb00002.cod_grupo,iptb00002.cod_tipo,iptb00002.cod_sec,
iptb00002.descrip_esp,vetb00025.cod_lista,vetb00025.ventas
FROM codn,codgrupo,codtipo,codsec,descripcion_p,codlista,ventas
BEFORE CONSTRUCT
CALL cventas()
END CONSTRUCT
ON ACTION limpia
CALL listproduct.clear()
CLEAR FORM
ON ACTION buscaLista
LET selec2 = " SELECT CONVERT(CHAR(10),MAX(a.fecha_lq),103) ",
" FROM cttb00013 a ",
" WHERE a.cod_n = ? AND ",
" a.cod_grupo = ? AND ",
" a.cod_tipo = ? AND ",
" a.cod_sec = ? AND ",
" a.status_t IS NULL "
PREPARE bfecha FROM selec2
LET selec = "SELECT count(*) ",
" FROM vetb00061 INNER JOIN ",
" vetb00025 ON vetb00061.ventas = vetb00025.ventas AND vetb00025.status_t is null LEFT OUTER JOIN ",
" vetb00004 ON vetb00025.sec_cliente = vetb00004.sec_cliente AND vetb00025.tipo_cliente = vetb00004.tipo_cliente RIGHT OUTER JOIN ",
" iptb00002 ON vetb00025.cod_n = iptb00002.cod_n AND vetb00025.cod_grupo = iptb00002.cod_grupo AND vetb00025.cod_tipo = iptb00002.cod_tipo AND ",
" vetb00025.cod_sec = iptb00002.cod_sec ",
" WHERE ",criterio CLIPPED
PREPARE cmdcuenta FROM selec
EXECUTE cmdcuenta INTO noreg
LET selec =
"SELECT vetb00025.idrow,vetb00025.cod_lista,iptb00002.cod_n,iptb00002.cod_grupo,iptb00002.cod_tipo,iptb00002.cod_sec, ",
"iptb00002.descrip_esp,iptb00002.unidad_med, ",
" vetb00025.tipo_cliente,vetb00025.sec_cliente,vetb00004.nombre,vetb00061.simbolo,vetb00025.precio,",
" '0',vetb00025.ventas ",
" FROM vetb00061 INNER JOIN ",
" vetb00025 ON vetb00061.ventas = vetb00025.ventas AND vetb00025.status_t is null LEFT OUTER JOIN ",
" vetb00004 ON vetb00025.sec_cliente = vetb00004.sec_cliente AND vetb00025.tipo_cliente = vetb00004.tipo_cliente RIGHT OUTER JOIN ",
" iptb00002 ON vetb00025.cod_n = iptb00002.cod_n AND vetb00025.cod_grupo = iptb00002.cod_grupo AND vetb00025.cod_tipo = iptb00002.cod_tipo AND ",
" vetb00025.cod_sec = iptb00002.cod_sec ",
" WHERE ",criterio CLIPPED
LET progreso = 0
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
PREPARE comando FROM selec
DECLARE lista CURSOR FOR comando
LET idx = 1
FOREACH lista INTO listproduct[idx].idrow,listproduct[idx].codlista,
listproduct[idx].codn,
listproduct[idx].codgrupo,
listproduct[idx].codtipo,listproduct[idx].codsec,
listproduct[idx].descripcion_p,listproduct[idx].unidad_med,
listproduct[idx].tipocliente,listproduct[idx].secCliente,
listproduct[idx].nombreCliente,listproduct[idx].moneda,
listproduct[idx].pprecio,
listproduct[idx].costo_r,
listproduct[idx].ventas
# BUSCA FECHA DE LA ULTIMA LIQUIDACION
EXECUTE bfecha INTO fecha1 USING listproduct[idx].codn,
listproduct[idx].codgrupo,
listproduct[idx].codtipo,
listproduct[idx].codsec
LET listproduct[idx].elimina = 'N'
LET listproduct[idx].costo_r = 0
SELECT AVG(a.costo_lq) INTO listproduct[idx].costo_r
FROM cttb00013 a
WHERE a.cod_n = listproduct[idx].codn AND
a.cod_grupo = listproduct[idx].codgrupo AND
a.cod_tipo = listproduct[idx].codtipo AND
a.cod_sec = listproduct[idx].codsec AND
a.fecha_lq= fecha1 AND
a.status_t IS NULL
LET listproduct[idx].fecha_lq = fecha1
CALL busca_info(listproduct[idx].codn,listproduct[idx].codgrupo,
listproduct[idx].codtipo,listproduct[idx].codsec,
listproduct[idx].tipoCliente,
listproduct[idx].secCliente) RETURNING listproduct[idx].existencia,
listproduct[idx].costo_std1,
listproduct[idx].costo_r
LET progreso = (idx /noreg )*100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
IF listproduct[idx].codlista IS NULL THEN
LET listproduct[idx].codlista=1
END IF
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS CON ESA CONDICION","INFO")
CONTINUE DIALOG
END IF
CALL set_count(idx-1)
INPUT ARRAY listproduct WITHOUT DEFAULTS FROM lproducto2.*
BEFORE INPUT
CALL cventas()
LET INT_FLAG = FALSE
BEFORE ROW
LET curr1 = arr_curr()
LET scr_l = scr_line()
IF listproduct[curr1].codlista IS NULL THEN
LET listproduct[curr1].codlista = 1
DISPLAY listproduct[curr1].codlista TO lproducto2[scr_l].codlista
END IF
ON CHANGE elimina
LET curr1 = arr_curr()
LET listproduct[curr1].elimina = listproduct[curr1].elimina
AFTER FIELD seccliente
LET curr1 = arr_curr()
LET scr_l = scr_line()
LET p_vetb25.tipo_cliente =listproduct[curr1].tipoCliente
LET p_vetb25.sec_cliente =listproduct[curr1].secCliente
LET p_vetb25.ventas =listproduct[curr1].ventas
IF listproduct[curr1].secCliente IS NOT NULL AND listproduct[curr1].secCliente <> 0 THEN
LET listproduct[curr1].nombreCliente = NULL
SELECT a.nombre INTO listproduct[curr1].nombreCliente FROM vetb00004 a
WHERE a.tipo_cliente = p_vetb25.tipo_cliente and
a.sec_cliente = p_vetb25.sec_cliente and
a.status_t is NULL
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD tipocliente
END IF
DISPLAY listproduct[curr1].nombreCliente TO lproducto2[scr_l].nombrecliente
END IF
AFTER FIELD pprecio
IF listproduct[curr1].codsec IS NOT NULL THEN
IF listproduct[curr1].pprecio < 0 OR listproduct[curr1].pprecio IS null THEN
CALL msg(16)
NEXT FIELD pprecio
END IF
END IF
AFTER FIELD codsec
IF listproduct[curr1].codn IS NOT NULL THEN
SELECT a.descrip_esp,a.descrip_ing,a.unidad_med
INTO m_articulos.descrip_esp ,m_articulos.descrip_ing ,m_articulos.unidad_med
FROM iptb00002 a
WHERE a.cod_n=listproduct[curr1].codn and
a.cod_grupo=listproduct[curr1].codgrupo and
a.cod_tipo=listproduct[curr1].codtipo and
a.cod_sec=listproduct[curr1].codsec and
a.status_t is NULL
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD codn
END IF
LET listproduct[curr1].descripcion_p = m_articulos.descrip_esp
LET listproduct[curr1].unidad_med = m_articulos.unidad_med
DISPLAY listproduct[curr1].descripcion_p TO lproducto2[scr_l].descripcion_p
DISPLAY listproduct[curr1].unidad_med TO lproducto2[scr_l].unidadmed
DISPLAY listproduct[curr1].pprecio TO lproducto2[scr_l].pprecio
NEXT FIELD ventas
END IF
AFTER FIELD ventas
IF listproduct[curr1].ventas IS NOT NULL THEN
SELECT DISTINCT a.simbolo INTO listproduct[curr1].moneda
FROM vetb00061 a
WHERE a.ventas = listproduct[curr1].ventas
DISPLAY listproduct[curr1].moneda TO lproducto2[scr_l].moneda
IF listproduct[curr1].tipoCliente IS NOT NULL AND listproduct[curr1].tipoCliente <> 0 THEN
# CONTROL INTEGRIDAD VENTAS / CLIENTES
SELECT a.tipo_cliente FROM vetb00060 a
WHERE a.ventas = p_vetb25.ventas AND
a.tipo_cliente = p_vetb25.tipo_cliente
IF STATUS = NOTFOUND THEN
CALL msg(386)
NEXT FIELD tipocliente
END IF
END IF
END IF
ON ACTION guardar
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET guarda_info = fgl_winquestion("Guardar","Esta seguro de actualizar precios?","yes","yes|no","question",0)
LET guarda_info = UPSHIFT(guarda_info)
IF guarda_info = "YES" THEN
BEGIN WORK
FOR idx = 1 TO listproduct.getLength()
IF listproduct[idx].pprecio IS NOT null THEN
IF listproduct[idx].codlista IS NULL THEN
NEXT FIELD codlista
END IF
SELECT DISTINCT a.idrow FROM vetb00025 a
WHERE a.idrow = listproduct[idx].idrow
IF STATUS <> NOTFOUND THEN
UPDATE vetb00025 SET cod_lista = listproduct[idx].codlista,
cod_n = listproduct[idx].codn,
cod_Grupo = listproduct[idx].codgrupo,
cod_tipo = listproduct[idx].codtipo,
cod_Sec = listproduct[idx].codsec,
tipo_cliente = listproduct[idx].tipocliente,
sec_cliente = listproduct[idx].secCliente,
ventas = listproduct[idx].ventas,
precio = listproduct[idx].Pprecio,
us_mod = usuarios,
fech_mod = GETDATE()
WHERE idrow = listproduct[idx].idrow
INSERT INTO vetb00091 (cod_lista,cod_n,cod_Grupo,cod_tipo,
cod_Sec ,tipo_cliente,sec_cliente,ventas,precio,
us_mod,fech_mod,accion,fecha_inicial)
VALUES
(listproduct[idx].codlista,
listproduct[idx].codn,listproduct[idx].codgrupo,
listproduct[idx].codtipo,
listproduct[idx].codsec,
listproduct[idx].tipocliente,
listproduct[idx].secCliente,
listproduct[idx].ventas,
listproduct[idx].Pprecio,
usuarios,
GETDATE(),"ACTUALIZADO",getdate())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("Error","NO PUDE ACTUALIZAR INFORMACION","STOP")
EXIT FOR
END IF
ELSE
IF listproduct[idx].tipoCliente IS NULL THEN
LET listproduct[idx].tipoCliente = 0
END IF
IF listproduct[idx].secCliente IS NULL THEN
LET listproduct[idx].secCliente = 0
END IF
INSERT INTO vetb00025 (ventas,cod_n,cod_grupo,cod_tipo,cod_Sec,tipo_cliente,sec_cliente,
precio,us_crea,fech_crea,cod_lista)
VALUES (listproduct[idx].ventas,listproduct[idx].codn,listproduct[idx].codgrupo,
listproduct[idx].codtipo,listproduct[idx].codsec,listproduct[idx].tipocliente,
listproduct[idx].seccliente,listproduct[idx].pprecio,usuarios,GETDATE(),
listproduct[idx].codlista)
LET selec = "SELECT @@IDENTITY"
PREPARE getIdrow FROM selec
EXECUTE getIdrow INTO listproduct[idx].idrow
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("Error","NO PUDE ACTUALIZAR INFORMACION","STOP")
EXIT FOR
END IF
INSERT INTO vetb00091 (cod_lista,cod_n,cod_Grupo,cod_tipo,
cod_Sec ,tipo_cliente,sec_cliente,ventas,precio,
us_mod,fech_mod,accion,fecha_inicial)
VALUES
(listproduct[idx].codlista,
listproduct[idx].codn,listproduct[idx].codgrupo,
listproduct[idx].codtipo,
listproduct[idx].codsec,
listproduct[idx].tipocliente,
listproduct[idx].secCliente,
listproduct[idx].ventas,
listproduct[idx].Pprecio,
usuarios,
GETDATE(),"NUEVO",getdate())
END IF
# ACTUALIZA PRODUCTOS TIENDA ONLINE
IF listproduct[idx].ventas = '3' THEN
UPDATE iptb00016 SET precio_usd = listproduct[idx].pprecio,fech_mod = getdate(),
us_mod = usuarios
WHERE cod_n = listproduct[idx].codn AND
cod_grupo = listproduct[idx].codgrupo AND
cod_tipo = listproduct[idx].codtipo AND
cod_sec = listproduct[idx].codsec
END IF
END IF
IF listproduct[idx].elimina = "S" THEN
# CALL fgl_winmessage("o",listproduct[idx].idrow,"info")
INSERT INTO vetb00091 (cod_lista,cod_n,cod_Grupo,cod_tipo,
cod_Sec ,tipo_cliente,sec_cliente,ventas,precio,
us_mod,fech_mod,accion,fecha_inicial)
VALUES
(listproduct[idx].codlista,
listproduct[idx].codn,listproduct[idx].codgrupo,
listproduct[idx].codtipo,
listproduct[idx].codsec,
listproduct[idx].tipocliente,
listproduct[idx].secCliente,
listproduct[idx].ventas,
listproduct[idx].Pprecio,
usuarios,
GETDATE(),"BOORADO",getdate())
DELETE FROM vetb00025
WHERE idrow = listproduct[idx].idrow
END IF
END FOR
COMMIT WORK
END IF
CALL fgl_winmessage("Mensajes","Actualizacion Exitosa","info")
CALL listproduct.clear()
CLEAR FORM
LET progreso = 0
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
END INPUT
ON ACTION cancel
LET respuesta = fgl_winquestion("Pregunta","Esta seguro de salir del programa?","no","yes|no","question",0)
IF respuesta = "yes" THEN
RETURN
LET progreso = 0
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
ELSE
CALL listproduct.clear()
LET progreso = 0
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
CONTINUE DIALOG
END IF
LET INT_FLAG = FALSE
END DIALOG
END FUNCTION
{
FUNCTION ippcmf017()
# WHENEVER ERROR CONTINUE
MESSAGE ""
LET int_flag = false
## Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT criterio ON a.ventas,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec
FROM ventas,cod_n,cod_grupo,cod_tipo,cod_sec
BEFORE CONSTRUCT
CALL cventas()
AFTER CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
END CONSTRUCT
LET SELEC = "SELECT a.* FROM vetb00025 a ",
"WHERE a.status_t IS NULL AND ",criterio clipped,
" ORDER BY a.ventas,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec"
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO p_vetb25.*
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
SELECT descrip_esp,descrip_ing,unidad_med
INTO descrip1,descrip2,medida
FROM iptb00002
WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and
cod_tipo = p_vetb25.cod_tipo and cod_sec= p_vetb25.cod_sec
LET nom_cliente = NULL
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = p_vetb25.tipo_cliente and
sec_cliente = p_vetb25.sec_cliente
LET descripcion = descrip1 CLIPPED
DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO p_vetb25.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and
cod_tipo = p_vetb25.cod_tipo and cod_sec = p_vetb25.cod_sec
LET nom_cliente = NULL
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = p_vetb25.tipo_cliente and
sec_cliente = p_vetb25.sec_cliente
LET descripcion = descrip1 CLIPPED
DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO p_vetb25.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and
cod_tipo = p_vetb25.cod_tipo and cod_sec= p_vetb25.cod_sec
LET nom_cliente = NULL
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = p_vetb25.tipo_cliente and
sec_cliente = p_vetb25.sec_cliente
LET descripcion = descrip1 CLIPPED
DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO p_vetb25.*
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and
cod_tipo = p_vetb25.cod_tipo and cod_sec = p_vetb25.cod_sec
LET nom_cliente = NULL
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = p_vetb25.tipo_cliente and
sec_cliente = p_vetb25.sec_cliente
LET descripcion = descrip1 CLIPPED
DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO p_vetb25.*
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and
cod_tipo = p_vetb25.cod_tipo and cod_sec = p_vetb25.cod_sec
LET nom_cliente = NULL
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = p_vetb25.tipo_cliente and
sec_cliente = p_vetb25.sec_cliente
LET descripcion = descrip1 CLIPPED
DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
COMMAND "Escoger"
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
IF p_vetb25.status_t= "E" THEN
LET numero_msg= 36
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME p_vetb25.precio WITHOUT DEFAULTS
AFTER FIELD precio
IF p_vetb25.precio IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD precio
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF p_vetb25.precio IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD precio
END IF
EXIT INPUT
END INPUT
#### Verifica si el usuario presiono la tecla <Delete>
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF p_vetb25.tipo_cliente is NULL AND p_vetb25.sec_cliente is NULL THEN
UPDATE vetb00025 SET precio = p_vetb25.precio,
us_mod = USER,
fech_mod = CURRENT
WHERE ventas = p_vetb25.ventas and cod_n = p_vetb25.cod_n and
cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and
cod_sec = p_vetb25.cod_sec and tipo_cliente is NULL and
sec_cliente is NULL
ELSE
UPDATE vetb00025 SET precio = p_vetb25.precio,
us_mod = USER,
fech_mod = CURRENT
WHERE ventas = p_vetb25.ventas and cod_n = p_vetb25.cod_n and
cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and
cod_sec=p_vetb25.cod_sec and tipo_cliente=p_vetb25.tipo_cliente and
sec_cliente = p_vetb25.sec_cliente
END IF
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar" "Elimina registro que esta en la pantalla"
UPDATE vetb00025 SET status_t ="E"
WHERE ventas = p_vetb25.ventas and cod_n = p_vetb25.cod_n and
cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and
cod_sec=p_vetb25.cod_sec and tipo_cliente =p_vetb25.tipo_cliente and
sec_cliente = p_vetb25.sec_cliente
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
}
FUNCTION busca_pt1()
OPEN WINDOW busqueda AT 7,12 WITH FORM "ipfmwd008"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET int_flag = false
CONSTRUCT BY NAME criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
a.descrip_esp
LET selec2 =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp ",
"FROM iptb00002 a ",
"WHERE a.status_t is NULL AND ", criterio clipped,
" ORDER BY 5 "
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO sale9
END IF
PREPARE busca_pila FROM selec2
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 12
CALL msg(numero_msg)
END IF
END IF
DECLARE buscar_pila CURSOR FOR busca_pila
LET idx = 1
FOREACH buscar_pila INTO pilas[idx].*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE " <Esc> Selecciona Producto Terminado donde esta el cursor"
DISPLAY ARRAY pilas TO s_pilas.*
LET curr1 = arr_curr()
LET m_articulos.cod_n = pilas[curr1].cod_n
LET m_articulos.cod_grupo = pilas[curr1].cod_grupo
LET m_articulos.cod_tipo = pilas[curr1].cod_tipo
LET m_articulos.cod_sec = pilas[curr1].cod_sec
LET descuento.cod_n = pilas[curr1].cod_n
LET descuento.cod_grupo = pilas[curr1].cod_grupo
LET descuento.cod_tipo = pilas[curr1].cod_tipo
LET descuento.cod_sec = pilas[curr1].cod_sec
LET descrip1 = pilas[curr1].descrip_esp
LABEL sale9:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION consulta_clientes()
OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd002_ip"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET int_flag = false
CONSTRUCT criterio ON a.nombre FROM nombre
LET selec2 = "SELECT a.tipo_cliente, a.sec_cliente, a.nombre ",
" FROM vetb00004 a",
" WHERE ",
"a.status_t is NULL AND ",
criterio clipped,
"ORDER BY 1,2 "
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_c
END IF
PREPARE busca_clientes FROM selec2
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
END IF
DECLARE buscar_clientes CURSOR FOR busca_clientes
LET idx = 1
FOREACH buscar_clientes INTO arr_clientes[idx].*
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE " <Esc> Selecciona Cliente donde esta el cursor"
DISPLAY ARRAY arr_clientes TO s_clientes.*
LET curr1 = arr_curr()
LET cliente_dir.tipo_cliente = arr_clientes[curr1].tipo_cliente
LET cliente_dir.sec_cliente = arr_clientes[curr1].sec_cliente
LET descrip1 = arr_clientes[curr1].nombre
LABEL salir_consulta_c:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION cventas()
DEFINE kventas SMALLINT, dventas CHAR(30)
LET ventas = ui.combobox.forname("formonly.ventas")
DECLARE bventas CURSOR FOR
SELECT a.ventas,a.descripcion FROM vetb00061 a
CALL ventas.clear()
FOREACH bventas INTO kventas,dventas
CALL ventas.additem(kventas,dventas)
END FOREACH
END FUNCTION
FUNCTION busca_info(pcodn,pcodgrupo,pcodtipo,pcodsec,ptipocliente,pseccliente)
DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec,ptipocliente SMALLINT,
pseccliente INT,
costo_r DEC(12,2)
# EXISTENCIA
LET existencia = 0
SELECT SUM(a.cantidad_2) INTO existencia
FROM iptb00006 a
WHERE a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND
a.status_t IS NULL
# BUSCA COSTO
LET costo_std = 0
LET costo_lq = 0
SELECT a.material+a.labor+a.gastos INTO costo_std
FROM iptb00004 a
WHERE a.ano = YEAR(TODAY) and
a.mes_ini = "01" AND a.mes_fin = "12" AND
a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND
a.status_t IS NULL
LET selec =
"SELECT CONVERT(CHAR(10),max(a.fecha_lq),103)
FROM cttb00013 a
WHERE a.cod_n = ? AND
a.cod_grupo = ? AND
a.cod_tipo = ? AND
a.cod_sec = ? AND
a.status_t IS NULL
"
PREPARE cfecha FROM selec
EXECUTE cfecha INTO fecha1 USING pcodn,pcodgrupo,
pcodtipo,pcodsec
SELECT avg(a.costo_lq) INTO costo_r
FROM cttb00013 a
WHERE a.fecha_lq = fecha1 AND a.cod_n = pcodn AND
a.cod_grupo = pcodgrupo AND
a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND
a.status_t IS NULL
RETURN existencia,costo_std,costo_r
END FUNCTION
# CALL consulta_clientes()