- 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>
868 lines
32 KiB
Plaintext
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() |