Files
MBS/PROYECTO/cgdir/cgprmt003.4gl
T

999 lines
32 KiB
Plaintext

{
-----------------------------------------------------------------------------
PROGRAMA : CGPRMT003
OBJETIVO : Capturar e imprimir los volantes de caja chica, tanto
provisional como definitivo.
PROGRAMADOR : Ing. Juan F. Soto
FECHA : Septiembre 29, 1993.
-----------------------------------------------------------------------------
}
GLOBALS
"cgprgb000.4gl"
DEFINE c_entra RECORD LIKE intb00001.*
DEFINE codigo_zap,encontre CHAR(1)
DEFINE unidad CHAR(3)
DEFINE descripcion,nombre_req,nombre_ctrl,nombre_n CHAR(30)
DEFINE p_valor DECIMAL(12,2)
DEFINE bien ARRAY[200] OF RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30),
unidad CHAR(3)
END RECORD
DEFINE p_volante RECORD
fecha DATE,
departamento_ctrl SMALLINT,
departamento_req SMALLINT,
numero INTEGER,
tipo CHAR(1),
monto DECIMAL(12,2),
preparado_por CHAR(20),
recibido_por CHAR(20),
autorizado_por CHAR(20)
END RECORD
DEFINE arr_volante ARRAY[3] OF RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion CHAR(30),
unidad CHAR(3),
valor DECIMAL(12,2)
END RECORD
DEFINE desc_volante CHAR(15)
FUNCTION cgprmt003()
OPTIONS
FORM LINE 9,
PROMPT LINE 22,
COMMENT LINE 23,
ERROR LINE 24
CALL pantalla()
DISPLAY "cgprmt003" AT 4,3
DISPLAY "Volante Caja Chica" AT 6,30
OPEN FORM cgfmmt003 FROM "cgfmmt003"
DISPLAY FORM cgfmmt003
MENU "OPCION:"
COMMAND "Adicionar" "<Esc> Adiciona Registro <Ctrl-C> Cancela Operacion"
LET int_flag = false
CALL cgpcad03()
COMMAND "Consultar-Modificar"
"<Esc> Busca informacion <Ctrl-C> Cancela operacion"
LET int_flag = false
CALL cgpcmod03()
COMMAND "Salir"
"Retorna al menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION cgpcad03()
INITIALIZE p_volante.* TO NULL
LET hoy = today
ERROR "WARNING:NO PUEDES AGREGAR MAS DE 3 REQUERIMIENTOS EN UN SOLO VOLANTE"
INPUT BY NAME p_volante.* WITHOUT DEFAULTS ATTRIBUTE (BOLD)
# Pantallas de consultas departamentales
ON KEY (CONTROL-W)
IF INFIELD(departamento_ctrl) THEN
CALL busca_depto()
LET p_volante.departamento_ctrl = ws[curr].departamento
LET nombre_ctrl = ws[curr].nombre
END IF
IF INFIELD(departamento_req) THEN
CALL busca_depto()
LET p_volante.departamento_req = ws[curr].departamento
LET nombre_req = ws[curr].nombre
END IF
AFTER FIELD preparado_por
IF p_volante.preparado_por is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD preparado_por
END IF
AFTER FIELD recibido_por
IF p_volante.recibido_por is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD recibido_por
END IF
AFTER FIELD autorizado_por
IF p_volante.autorizado_por is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD autorizado_por
END IF
# Desplegue de la fecha en todo momento
BEFORE FIELD fecha
LET p_volante.fecha = hoy
DISPLAY BY NAME p_volante.fecha
AFTER FIELD fecha
LET hoy = p_volante.fecha
AFTER FIELD departamento_ctrl
# Controla la numeracion por departamento
IF p_volante.departamento_ctrl is not null THEN
SELECT @numero INTO p_volante.numero FROM cgtb00008
WHERE @departamento = p_volante.departamento_ctrl
IF status = notfound THEN
LET numero_msg = 169
CALL msg(numero_msg)
NEXT FIELD departamento_ctrl
END IF
LET p_volante.numero = p_volante.numero + 1
SELECT nom_dpto INTO nombre_ctrl FROM adtb00001
WHERE departamento = p_volante.departamento_ctrl and status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD departamento_ctrl
END IF
DISPLAY BY NAME p_volante.numero,nombre_ctrl
END IF
AFTER FIELD departamento_req
SELECT nom_dpto INTO nombre_req FROM adtb00001
WHERE departamento = p_volante.departamento_req and status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD departamento_req
END IF
DISPLAY BY NAME nombre_req
AFTER FIELD tipo
CASE
WHEN p_volante.tipo = "P"
LET desc_volante = "PROVISIONAL"
WHEN p_volante.tipo = "D"
LET desc_volante = "DEFINITIVO"
WHEN p_volante.tipo = "R"
LET desc_volante = "REPOSICION"
END CASE
DISPLAY BY NAME desc_volante
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
EXIT INPUT
END INPUT
# Captura del detalle del volante
INPUT ARRAY arr_volante FROM s_volante.*
ON KEY (CONTROL-B)
LET curr = arr_curr()
LET scr_l = scr_line()
CALL busca_bienes()
LET arr_volante[curr].cod_n = bien[curr1].cod_n
LET arr_volante[curr].cod_grupo = bien[curr1].cod_grupo
LET arr_volante[curr].cod_tipo = bien[curr1].cod_tipo
LET arr_volante[curr].cod_sec = bien[curr1].cod_sec
DISPLAY arr_volante[curr].cod_n to s_volante[scr_l].cod_n
DISPLAY arr_volante[curr].cod_grupo to s_volante[scr_l].cod_grupo
DISPLAY arr_volante[curr].cod_tipo to s_volante[scr_l].cod_tipo
DISPLAY arr_volante[curr].cod_sec to s_volante[scr_l].cod_sec
LET descripcion = bien[curr1].descrip_esp
LET unidad = bien[curr1].unidad
AFTER FIELD cod_n
LET curr = arr_curr()
LET scr_l = scr_line()
IF arr_volante[curr].cod_n is not null THEN
LET verdad = "N"
CALL repite()
IF verdad = "S" THEN
LET verdad = "N"
NEXT FIELD cod_grupo
END IF
END IF
AFTER FIELD cod_grupo
IF arr_volante[curr].cod_grupo is not null THEN
LET verdad = "N"
CALL repite()
IF verdad = "S" THEN
LET verdad = "N"
NEXT FIELD cod_tipo
END IF
END IF
AFTER FIELD cod_tipo
IF arr_volante[curr].cod_tipo is not null THEN
LET verdad = "N"
CALL repite()
IF verdad = "S" THEN
LET verdad = "N"
NEXT FIELD cod_sec
END IF
END IF
AFTER FIELD cod_sec
LET codigo_zap = "N"
IF arr_volante[curr].cod_n = 9 and
arr_volante[curr].cod_grupo = 9 and
arr_volante[curr].cod_tipo = 99 and
arr_volante[curr].cod_sec = 999 THEN
LET codigo_zap = "S"
END IF
IF arr_volante[curr].cod_sec is not null THEN
IF arr_volante[curr].cod_n is null or
arr_volante[curr].cod_grupo is null or
arr_volante[curr].cod_tipo is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
SELECT descrip_esp,unidad_med INTO descripcion,unidad FROM intb00001
WHERE cod_n = arr_volante[curr].cod_n and
cod_grupo = arr_volante[curr].cod_grupo and
cod_tipo = arr_volante[curr].cod_tipo and
cod_sec = arr_volante[curr].cod_sec and
status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
CALL busca_bienes()
LET arr_volante[curr].cod_n = bien[curr1].cod_n
LET arr_volante[curr].cod_grupo = bien[curr1].cod_grupo
LET arr_volante[curr].cod_tipo = bien[curr1].cod_tipo
LET arr_volante[curr].cod_sec = bien[curr1].cod_sec
DISPLAY arr_volante[curr].cod_n to s_volante[scr_l].cod_n
DISPLAY arr_volante[curr].cod_grupo to s_volante[scr_l].cod_grupo
DISPLAY arr_volante[curr].cod_tipo to s_volante[scr_l].cod_tipo
DISPLAY arr_volante[curr].cod_sec to s_volante[scr_l].cod_sec
LET descripcion = bien[curr1].descrip_esp
LET unidad = bien[curr1].unidad
END IF
LET arr_volante[curr].descripcion = descripcion
LET arr_volante[curr].unidad = unidad
DISPLAY arr_volante[curr].descripcion to s_volante[scr_l].descripcion
DISPLAY arr_volante[curr].unidad to s_volante[scr_l].unidad
END IF
BEFORE FIELD descripcion
IF codigo_zap = "N" THEN
NEXT FIELD valor
END IF
AFTER FIELD descripcion
IF codigo_zap = "S" THEN
IF arr_volante[curr].descripcion is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD descripcion
END IF
END IF
AFTER FIELD valor
IF arr_volante[curr].cod_sec is not null THEN
IF arr_volante[curr].valor is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD valor
END IF
END IF
# Chequea que el valor de los items no exceda el valor del volante
LET p_valor = 0
FOR idx = 1 TO arr_count()
LET p_valor = arr_volante[idx].valor + p_valor
END FOR
IF p_valor > p_volante.monto THEN
LET numero_msg = 168
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF arr_volante[curr].cod_sec is not null THEN
IF arr_volante[curr].valor is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD valor
END IF
END IF
EXIT INPUT
END INPUT
START REPORT volante TO "C:\\archivo"
# Actualiza el ultimo numero del volante
UPDATE cgtb00008 set numero = p_volante.numero
WHERE departamento = p_volante.departamento_ctrl
# Actualizacion de la tabla volantes de pago
FOR idx = 1 TO arr_count()
IF arr_volante[idx].cod_n is not null and
arr_volante[idx].cod_grupo is not null and
arr_volante[idx].cod_tipo is not null and
arr_volante[idx].cod_sec is not null THEN
# Inserta los datos a la tabla que controla los datos de caja chica
# e imprime volante de caja chica
INSERT INTO cgtb00007
VALUES (p_volante.fecha,p_volante.numero,arr_volante[idx].cod_n,
arr_volante[idx].cod_grupo,arr_volante[idx].cod_tipo,
arr_volante[idx].cod_sec,arr_volante[idx].descripcion,
arr_volante[idx].unidad,p_volante.monto,arr_volante[idx].valor,
null, p_volante.departamento_ctrl,p_volante.departamento_req,
p_volante.preparado_por,p_volante.recibido_por,
p_volante.autorizado_por,p_volante.tipo,null,user,current,null,
null)
OUTPUT TO REPORT volante(p_volante.*,arr_volante[idx].*)
END IF
END FOR
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LET numero_msg = 1
CALL msg(numero_msg)
DISPLAY " " AT 1,50
FINISH REPORT volante
RUN "TYPE C:\\ARCHIVO > %USPRINT%"
END FUNCTION
FUNCTION cgpcmod03()
# Captura de informacion para busqueda del documento
ERROR
"WARNING:NO PUEDES AGREGAR MAS DE 3 REQUERIMIENTOS EN UN SOLO VOLANTE"
CONSTRUCT BY NAME criterio ON cgtb00007.numero,cgtb00007.departamento_ctrl,
cgtb00007.departamento_req
LET selec =
"SELECT fecha,departamento_ctrl,departamento_req,numero,status_volante, ",
" monto,preparado_por,recibido_por,autorizado_por,status_volante, ",
" monto ",
"FROM cgtb00007 WHERE ",criterio clipped," ORDER BY numero"
PREPARE comando FROM selec
DECLARE busca SCROLL CURSOR FOR comando
OPEN busca
FETCH FIRST busca INTO p_volante.*
IF status = notfound THEN
RETURN
END IF
# Busqueda del nombre del departamento que posee el control de los volantes
# de caja chica
SELECT nom_dpto INTO nombre_ctrl FROM adtb00001
WHERE departamento = p_volante.departamento_ctrl and status_t is null
# Busqueda del nombre del departamento que requiere el volante
SELECT nom_dpto INTO nombre_req FROM adtb00001
WHERE departamento = p_volante.departamento_req and status_t is null
DISPLAY BY NAME nombre_ctrl,nombre_req
CASE
WHEN p_volante.tipo = "P"
LET desc_volante = "PROVISIONAL"
WHEN p_volante.tipo = "D"
LET desc_volante = "DEFINITIVO"
WHEN p_volante.tipo = "R"
LET desc_volante = "REPOSICION"
END CASE
DISPLAY BY NAME p_volante.*,desc_volante
MENU "OPCION"
COMMAND "Siguiente"
FETCH NEXT busca INTO p_volante.*
IF status = notfound THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT nom_dpto INTO nombre_ctrl FROM adtb00001
WHERE departamento = p_volante.departamento_ctrl and status_t is null
# Busqueda del nombre del departamento que requiere el volante
SELECT nom_dpto INTO nombre_req FROM adtb00001
WHERE departamento = p_volante.departamento_req and status_t is null
DISPLAY BY NAME nombre_ctrl,nombre_req
CASE
WHEN p_volante.tipo = "P"
LET desc_volante = "PROVISIONAL"
WHEN p_volante.tipo = "D"
LET desc_volante = "DEFINITIVO"
WHEN p_volante.tipo = "R"
LET desc_volante = "REPOSICION"
END CASE
DISPLAY BY NAME p_volante.*,desc_volante
COMMAND "Anterior"
FETCH PREVIOUS busca INTO p_volante.*
IF status = notfound THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT nom_dpto INTO nombre_ctrl FROM adtb00001
WHERE departamento = p_volante.departamento_ctrl and status_t is null
# Busqueda del nombre del departamento que requiere el volante
SELECT nom_dpto INTO nombre_req FROM adtb00001
WHERE departamento = p_volante.departamento_req and status_t is null
DISPLAY BY NAME nombre_ctrl,nombre_req
CASE
WHEN p_volante.tipo = "P"
LET desc_volante = "PROVISIONAL"
WHEN p_volante.tipo = "D"
LET desc_volante = "DEFINITIVO"
WHEN p_volante.tipo = "R"
LET desc_volante = "REPOSICION"
END CASE
DISPLAY BY NAME p_volante.*,desc_volante
COMMAND "Primero"
FETCH FIRST busca INTO p_volante.*
LET numero_msg = 4
CALL msg(numero_msg)
SELECT nom_dpto INTO nombre_ctrl FROM adtb00001
WHERE departamento = p_volante.departamento_ctrl and status_t is null
# Busqueda del nombre del departamento que requiere el volante
SELECT nom_dpto INTO nombre_req FROM adtb00001
WHERE departamento = p_volante.departamento_req and status_t is null
DISPLAY BY NAME nombre_ctrl,nombre_req
CASE
WHEN p_volante.tipo = "P"
LET desc_volante = "PROVISIONAL"
WHEN p_volante.tipo = "D"
LET desc_volante = "DEFINITIVO"
WHEN p_volante.tipo = "R"
LET desc_volante = "REPOSICION"
END CASE
DISPLAY BY NAME p_volante.*,desc_volante
COMMAND "Ultimo"
FETCH LAST busca INTO p_volante.*
LET numero_msg = 5
CALL msg(numero_msg)
SELECT nom_dpto INTO nombre_ctrl FROM adtb00001
WHERE departamento = p_volante.departamento_ctrl and status_t is null
# Busqueda del nombre del departamento que requiere el volante
SELECT nom_dpto INTO nombre_req FROM adtb00001
WHERE departamento = p_volante.departamento_req and status_t is null
DISPLAY BY NAME nombre_ctrl,nombre_req
CASE
WHEN p_volante.tipo = "P"
LET desc_volante = "PROVISIONAL"
WHEN p_volante.tipo = "D"
LET desc_volante = "DEFINITIVO"
WHEN p_volante.tipo = "R"
LET desc_volante = "REPOSICION"
END CASE
DISPLAY BY NAME p_volante.*,desc_volante
COMMAND "Escoger"
INPUT BY NAME p_volante.preparado_por THRU
p_volante.autorizado_por WITHOUT DEFAULTS
# Busca el detalle del volante de caja chica
DECLARE busca1 CURSOR FOR
SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,b.descripcion,b.unidad,
b.valor
FROM cgtb00007 b
WHERE b.numero = p_volante.numero and b.status_t is null
ORDER BY 1,2,3,4
LET idx = 1
FOREACH busca1 INTO arr_volante[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
INPUT ARRAY arr_volante WITHOUT DEFAULTS FROM s_volante.*
ON KEY (CONTROL-B)
LET curr = arr_curr()
LET scr_l = scr_line()
CALL busca_bienes()
LET arr_volante[curr].cod_n = bien[curr1].cod_n
LET arr_volante[curr].cod_grupo = bien[curr1].cod_grupo
LET arr_volante[curr].cod_tipo = bien[curr1].cod_tipo
LET arr_volante[curr].cod_sec = bien[curr1].cod_sec
DISPLAY arr_volante[curr].cod_n to s_volante[scr_l].cod_n
DISPLAY arr_volante[curr].cod_grupo to s_volante[scr_l].cod_grupo
DISPLAY arr_volante[curr].cod_tipo to s_volante[scr_l].cod_tipo
DISPLAY arr_volante[curr].cod_sec to s_volante[scr_l].cod_sec
LET arr_volante[curr].descripcion = bien[curr1].descrip_esp
LET arr_volante[curr].unidad = bien[curr1].unidad
DISPLAY arr_volante[curr].descripcion to s_volante[scr_l].descripcion
DISPLAY arr_volante[curr].unidad to s_volante[scr_l].unidad
AFTER FIELD cod_n
LET curr = arr_curr()
LET scr_l = scr_line()
IF arr_volante[curr].cod_n is not null THEN
LET verdad = "N"
CALL repite()
IF verdad = "S" THEN
LET verdad = "N"
NEXT FIELD cod_grupo
END IF
END IF
AFTER FIELD cod_grupo
IF arr_volante[curr].cod_grupo is not null THEN
LET verdad = "N"
CALL repite()
IF verdad = "S" THEN
LET verdad = "N"
NEXT FIELD cod_tipo
END IF
END IF
AFTER FIELD cod_tipo
IF arr_volante[curr].cod_tipo is not null THEN
LET verdad = "N"
CALL repite()
IF verdad = "S" THEN
LET verdad = "N"
NEXT FIELD cod_sec
END IF
END IF
AFTER FIELD cod_sec
LET codigo_zap = "N"
IF arr_volante[curr].cod_n = 9 and
arr_volante[curr].cod_grupo = 9 and
arr_volante[curr].cod_tipo = 99 and
arr_volante[curr].cod_sec = 999 THEN
LET codigo_zap = "S"
END IF
IF arr_volante[curr].cod_sec is not null THEN
IF arr_volante[curr].cod_n is null or
arr_volante[curr].cod_grupo is null or
arr_volante[curr].cod_tipo is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
SELECT descrip_esp INTO descripcion FROM intb00001
WHERE cod_n = arr_volante[curr].cod_n and
cod_grupo = arr_volante[curr].cod_grupo and
cod_tipo = arr_volante[curr].cod_tipo and
cod_sec = arr_volante[curr].cod_sec and
status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
CALL busca_bienes()
LET arr_volante[curr].cod_n = bien[curr1].cod_n
LET arr_volante[curr].cod_grupo = bien[curr1].cod_grupo
LET arr_volante[curr].cod_tipo = bien[curr1].cod_tipo
LET arr_volante[curr].cod_sec = bien[curr1].cod_sec
DISPLAY arr_volante[curr].cod_n to s_volante[scr_l].cod_n
DISPLAY arr_volante[curr].cod_grupo to s_volante[scr_l].cod_grupo
DISPLAY arr_volante[curr].cod_tipo to s_volante[scr_l].cod_tipo
DISPLAY arr_volante[curr].cod_sec to s_volante[scr_l].cod_sec
LET descripcion = bien[curr1].descrip_esp
LET unidad = bien[curr1].unidad
NEXT FIELD valor
END IF
DISPLAY arr_volante[curr].descripcion to s_volante[scr_l].descripcion
DISPLAY arr_volante[curr].unidad to s_volante[scr_l].unidad
END IF
BEFORE FIELD descripcion
IF codigo_zap = "N" THEN
NEXT FIELD valor
END IF
AFTER FIELD descripcion
IF codigo_zap = "S" THEN
IF arr_volante[curr].descripcion is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD descripcion
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
EXIT INPUT
END INPUT
# Actualizacion de la tabla volantes de caja chica
DELETE FROM cgtb00007 WHERE numero = p_volante.numero and
departamento_ctrl = p_volante.departamento_ctrl
START REPORT volante TO "C:\\ARCHIVO"
FOR idx = 1 TO arr_count()
IF arr_volante[idx].cod_n is not null and
arr_volante[idx].cod_grupo is not null and
arr_volante[idx].cod_tipo is not null and
arr_volante[idx].cod_sec is not null THEN
# Inserta los datos a la tabla que controla los datos de caja chica
INSERT INTO cgtb00007 values
(p_volante.fecha,p_volante.numero,arr_volante[idx].cod_n,
arr_volante[idx].cod_grupo,arr_volante[idx].cod_tipo,
arr_volante[idx].cod_sec,arr_volante[idx].descripcion,
arr_volante[idx].unidad,
p_volante.monto,arr_volante[idx].valor,
null, p_volante.departamento_ctrl,p_volante.departamento_req,
p_volante.preparado_por,p_volante.recibido_por,
p_volante.autorizado_por,p_volante.tipo,
null,user,current,null,null)
# Impresion del volante de caja chica
OUTPUT TO REPORT volante(p_volante.*,arr_volante[idx].*)
END IF
END FOR
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LET numero_msg = 13
CALL msg(numero_msg)
DISPLAY " " AT 1,50
FINISH REPORT volante
RUN "TYPE C:\\ARCHIVO > %USPRINT%"
COMMAND KEY ("N") "aNular"
PROMPT "Esta seguro de querer anular este documento" FOR CHAR opt4
LET opt4 = upshift(opt4)
IF opt4 = "S" THEN
UPDATE cgtb00007 set status_t = "E"
WHERE numero = p_volante.numero
END IF
COMMAND "Retornar"
EXIT MENU
END MENU
END FUNCTION
# Funcion para la consulta alfabetica de los bienes y servicios
FUNCTION busca_bienes()
OPEN WINDOW servicio AT 5,3 WITH FORM "cgfmwd003" ATTRIBUTE (BORDER,
FORM LINE FIRST + 1,COMMENT LINE LAST -1,PROMPT LINE LAST -2)
LABEL vuelve:
CONSTRUCT BY NAME criterio ON intb00001.cod_n,intb00001.cod_grupo,
intb00001.cod_tipo, intb00001.cod_sec,
intb00001.descrip_esp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
GOTO salir
END IF
LET selec1 =
"SELECT COUNT(*) FROM intb00001 ",
"WHERE ",criterio clipped," AND status_t is null"
PREPARE comando30 FROM selec1
DECLARE busca4 CURSOR FOR comando30
OPEN busca4
FETCH busca4 INTO regi
IF regi > 200 THEN
LET numero_msg = 235
CALL msg(numero_msg)
GOTO vuelve
END IF
LET selec =
"SELECT cod_n,cod_grupo,cod_tipo,cod_sec,descrip_esp,unidad_med ",
"FROM intb00001 ",
"WHERE ",criterio clipped," AND status_t is null ORDER BY 5"
PREPARE comando1 FROM selec
DECLARE busca2 CURSOR FOR comando1
OPEN busca2
LET encontre = "S"
LET idx = 1
WHILE status != notfound
FETCH busca2 INTO bien[idx].*
IF status = notfound THEN
IF idx = 1 THEN
LET encontre = "N"
END IF
EXIT WHILE
END IF
LET idx = idx + 1
END WHILE
# Si no encuentra en la tabla ningun registro con el criterio dado se pregunta
# si desea agregar registros
IF encontre = "N" THEN
LET encontre = "S"
LET numero_msg = 3
CALL msg(numero_msg)
GOTO salir
END IF
# Desplegue de informacion
CALL set_count(idx-1)
DISPLAY ARRAY bien TO s_bien.*
LET curr1 = arr_curr()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
END IF
LABEL salir:
CLOSE WINDOW servicio
END FUNCTION
#Funcion para agregar articulos a la tabla de bienes y servicios
FUNCTION bienes()
OPEN WINDOW captura AT 7,3 WITH FORM "cgfmwd002" ATTRIBUTE (BORDER,
FORM LINE FIRST +1 ,COMMENT LINE LAST -1,PROMPT LINE LAST -2)
INITIALIZE c_entra.* TO NULL
INPUT BY NAME c_entra.* WITHOUT DEFAULTS
AFTER FIELD cod_sec
SELECT * INTO c_entra.* FROM intb00001
WHERE cod_n = c_entra.cod_n and cod_grupo = c_entra.cod_grupo and
cod_tipo = c_entra.cod_tipo and cod_sec = c_entra.cod_sec
IF c_entra.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF status != notfound THEN
LET numero_msg = 12
CALL msg(numero_msg)
DISPLAY BY NAME c_entra.*
NEXT FIELD cod_n
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
END INPUT
IF int_flag THEN
LET int_flag = false
GOTO sale
END IF
# Inserta los datos en la tabla de bienes y servicios
INSERT INTO intb00001 values
(c_entra.cod_n,c_entra.cod_grupo,c_entra.cod_tipo,c_entra.cod_sec,
c_entra.descrip_esp,c_entra.descrip_ing,c_entra.unidad_med,null,
USER,CURRENT,null,null)
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LABEL sale:
CLOSE WINDOW captura
LET arr_volante[curr].cod_n = c_entra.cod_n
LET arr_volante[curr].cod_grupo = c_entra.cod_grupo
LET arr_volante[curr].cod_tipo = c_entra.cod_tipo
LET arr_volante[curr].cod_sec = c_entra.cod_sec
LET arr_volante[curr].descripcion = c_entra.descrip_esp
LET arr_volante[curr].unidad = c_entra.unidad_med
DISPLAY arr_volante[curr].cod_n to s_volante[scr_l].cod_n
DISPLAY arr_volante[curr].cod_grupo to s_volante[scr_l].cod_grupo
DISPLAY arr_volante[curr].cod_tipo to s_volante[scr_l].cod_tipo
DISPLAY arr_volante[curr].cod_sec to s_volante[scr_l].cod_sec
DISPLAY arr_volante[curr].descripcion to s_volante[scr_l].descripcion
DISPLAY arr_volante[curr].unidad to s_volante[scr_l].unidad
END FUNCTION
FUNCTION repite()
DEFINE ant_art RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT
END RECORD
IF arr_volante[curr].cod_n != 9 and
arr_volante[curr].cod_grupo != 9 and
arr_volante[curr].cod_tipo != 99 and
arr_volante[curr].cod_sec != 999 THEN
LET verdad = null
LET ant_art.cod_n = arr_volante[curr].cod_n
LET ant_art.cod_grupo = arr_volante[curr].cod_grupo
LET ant_art.cod_tipo = arr_volante[curr].cod_tipo
LET ant_art.cod_sec = arr_volante[curr].cod_sec
FOR idx = 1 TO arr_count()
IF idx != curr THEN
IF arr_volante[idx].cod_n IS NOT NULL AND
arr_volante[idx].cod_grupo IS NOT NULL AND
arr_volante[idx].cod_tipo IS NOT NULL AND
arr_volante[idx].cod_sec IS NOT NULL THEN
IF arr_volante[idx].cod_n = ant_art.cod_n AND
arr_volante[idx].cod_grupo = ant_art.cod_grupo AND
arr_volante[idx].cod_tipo = ant_art.cod_tipo AND
arr_volante[idx].cod_sec = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET verdad = "S"
ELSE
IF verdad != "S" THEN
LET verdad = "N"
END IF
END IF
END IF
END IF
END FOR
END IF
END FUNCTION
# Impresion del volante de caja chica
REPORT volante(x,z)
DEFINE x RECORD
fecha DATE,
departamento_ctrl SMALLINT,
departamento_req SMALLINT,
numero INTEGER,
tipo CHAR(1),
monto DECIMAL(12,2),
preparado_por CHAR(20),
recibido_por CHAR(20),
autorizado_por CHAR(20)
END RECORD
DEFINE z RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion CHAR(30),
unidad CHAR(3),
valor DECIMAL(12,2)
END RECORD
DEFINE comp_on,comp_off,negras_on,negras_off,doble CHAR(2)
OUTPUT
LEFT MARGIN 0
PAGE LENGTH 33
TOP MARGIN 0
ORDER BY x.numero
FORMAT
BEFORE GROUP OF x.numero
LET negras_on = ASCII 27, ASCII 69
LET negras_off = ASCII 27, ASCII 70
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doble = ASCII 14
PRINT COLUMN 1,negras_on,doble, "RAYOVAC",negras_off
PRINT COLUMN 60, "No. ",negras_on,doble,x.numero using "&&&&&&"
SKIP 1 LINE
PRINT COLUMN 20, "Comprobante de Caja Chica",
COLUMN 60, x.fecha using "dd/mmm/yyyy"
SKIP 1 LINE
PRINT COLUMN 27, negras_on,desc_volante,negras_off
PRINT
PRINT COLUMN 1, "Vale por RD$",x.monto using "##,###.##",
COLUMN 25, "Cargo a: ",x.departamento_req using "####",
" ",nombre_req
PRINT COLUMN 1, "Para Cubrir lo Siguente:"
SKIP 1 LINE
ON EVERY ROW
PRINT COLUMN 1, z.cod_n using "&","-",z.cod_grupo using "&","-",
z.cod_tipo using "&&","-",z.cod_sec using "&&&",
COLUMN 12, z.descripcion," ",z.unidad,
COLUMN 40, z.valor using "$$,$$#.##"
AFTER GROUP OF x.numero
PRINT comp_on
PRINT COLUMN 22, "____________________________________"
PRINT COLUMN 22, "| A Contabilizar |",
COLUMN 93, "Preparado Por: ",x.preparado_por
PRINT COLUMN 1,
"=========================================================================",
"============"
PRINT COLUMN 1, "|",
COLUMN 49, "| Deber",
COLUMN 67, "| Haber |"
PRINT COLUMN 1, "|Cuenta |",
COLUMN 11, "depto |",
COLUMN 22, "Catalogo |",
COLUMN 33, "Referencia |",
COLUMN 44, " Pesos |",
COLUMN 53, " Ctvs. |",
COLUMN 63, " Pesos |",
COLUMN 73, " Ctvs. |",
COLUMN 93, "Recibido Por: ",x.recibido_por
PRINT COLUMN 1,
"=========================================================================",
"============"
PRINT COLUMN 1, "| |",
COLUMN 11, " |",
COLUMN 21, " |",
COLUMN 31, " |",
COLUMN 43, " |",
COLUMN 53, " |",
COLUMN 63, " |",
COLUMN 73, " |"
PRINT COLUMN 1, "| |",
COLUMN 11, " |",
COLUMN 21, " |",
COLUMN 31, " |",
COLUMN 43, " |",
COLUMN 53, " |",
COLUMN 63, " |",
COLUMN 73, " |"
PRINT COLUMN 1, "| |",
COLUMN 11, " |",
COLUMN 21, " |",
COLUMN 31, " |",
COLUMN 43, " |",
COLUMN 53, " |",
COLUMN 63, " |",
COLUMN 73, " |"
PRINT COLUMN 1, "| |",
COLUMN 11, " |",
COLUMN 21, " |",
COLUMN 31, " |",
COLUMN 43, " |",
COLUMN 53, " |",
COLUMN 63, " |",
COLUMN 73, " |",
COLUMN 93, "Autorizado Por: ",x.autorizado_por clipped
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"--------"
PRINT COLUMN 1, "|Fecha |",
COLUMN 30, "Concepto",
COLUMN 73, " |"
PRINT COLUMN 1, "| |",
COLUMN 73, " |"
PRINT COLUMN 1, "| |",
COLUMN 73, " |"
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"--------"
PRINT comp_off
END REPORT