Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,912 @@
|
||||
{
|
||||
-----------------------------------------------------------------------------
|
||||
PROGRAMA : CPPRMT002
|
||||
OBJETIVO : Aplicacion de Notas de Debito y Credito.
|
||||
REALIZADO POR : Tadeo A. Ferreras
|
||||
FECHA : Junio 27, 1993
|
||||
MODIFICADO POR : JUAN F. SOTO
|
||||
FECHA MODIFICA : ENERO 16, 1996
|
||||
DESCRIPCION : INCLUSION DEL CAMPO MONTO Y ELIMINACION DE LOS CAMPOS TIPO
|
||||
DE ORDEN Y NUMERO DE ORDEN.
|
||||
-----------------------------------------------------------------------------
|
||||
}
|
||||
GLOBALS "cpprgb000.4gl"
|
||||
|
||||
DEFINE supl1 DYNAMIC ARRAY OF RECORD
|
||||
cod_sp SMALLINT,
|
||||
cod_sp_sec SMALLINT,
|
||||
nom_sp CHAR(45)
|
||||
END RECORD ,
|
||||
valor_ctrl DECIMAL(12,2)
|
||||
|
||||
DEFINE aplicar,numero INTEGER
|
||||
DEFINE cod1_sp,cod1_sp_sec,p_orden SMALLINT
|
||||
DEFINE p_tipo CHAR(2)
|
||||
DEFINE val_pen,valor_fac1,valor2 DECIMAL(12,2)
|
||||
DEFINE nom_tipo CHAR(15)
|
||||
|
||||
MAIN
|
||||
DEFER INTERRUPT
|
||||
CALL ARG_VAL(1) RETURNING usuarios
|
||||
CALL ARG_VAL(2) RETURNING clave
|
||||
|
||||
CONNECT to "smarmotech" USER usuarios USING clave
|
||||
SELECT a.* INTO p_companias.* FROM companias a
|
||||
|
||||
CALL cpprmt002()
|
||||
END MAIN
|
||||
|
||||
FUNCTION cpprmt002()
|
||||
#WHENEVER ERROR CONTINUE
|
||||
OPTIONS
|
||||
FORM LINE 8,
|
||||
ERROR LINE 24,
|
||||
COMMENT LINE 22,
|
||||
PROMPT LINE 23
|
||||
|
||||
|
||||
OPEN FORM cpfmmt002 FROM "cpfmmt002"
|
||||
DISPLAY FORM cpfmmt002
|
||||
#DISPLAY "cpprmt002" AT 4,3
|
||||
#DISPLAY "Aplicacion de Nota de Debito y Nota de Credito" AT 6,16
|
||||
|
||||
MENU "OPCION"
|
||||
COMMAND "Adicionar" "<Esc> Adiciona Registro <Delete> Cancela Operacion"
|
||||
CLEAR FORM
|
||||
CALL cppcad001()
|
||||
COMMAND "Consultar-modificar"
|
||||
"<Esc> Busca Registro <Delete> Cancela Operacion"
|
||||
CLEAR FORM
|
||||
CALL cppcmf001()
|
||||
COMMAND "Salir"
|
||||
EXIT MENU
|
||||
END MENU
|
||||
END FUNCTION
|
||||
|
||||
###### Funcion que adiciona informacion referente a la aplicacion de un pago
|
||||
FUNCTION cppcad001()
|
||||
DEFINE porc_p DECIMAL(10,2)
|
||||
DEFINE emp SMALLINT
|
||||
DEFINE hoy DATE
|
||||
LET hoy = NULL
|
||||
|
||||
LABEL volver:
|
||||
|
||||
#### Aceptando los valores a insertar referentes al pago
|
||||
INPUT BY NAME recibo.* WITHOUT DEFAULTS
|
||||
ON KEY (control-W)
|
||||
|
||||
CASE
|
||||
WHEN INFIELD(cod_sp)
|
||||
CALL busca_suplidor1()
|
||||
|
||||
IF recibo.cod_sp IS NULL OR recibo.cod_sp = 0 THEN
|
||||
NEXT FIELD cod_sp
|
||||
ELSE
|
||||
DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,nom_sup
|
||||
NEXT FIELD fecha_orig
|
||||
END IF
|
||||
EXIT CASE
|
||||
|
||||
WHEN INFIELD(cod_sp_sec)
|
||||
CALL busca_suplidor1()
|
||||
IF recibo.cod_sp IS NULL OR recibo.cod_sp = 0 THEN
|
||||
NEXT FIELD cod_sp
|
||||
ELSE
|
||||
DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,nom_sup
|
||||
NEXT FIELD fecha_orig
|
||||
END IF
|
||||
EXIT CASE
|
||||
|
||||
END CASE
|
||||
AFTER FIELD cod_sp
|
||||
IF recibo.cod_sp IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD cod_sp
|
||||
END IF
|
||||
AFTER FIELD monto
|
||||
IF recibo.monto IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD monto
|
||||
END IF
|
||||
AFTER FIELD cod_sp_sec
|
||||
IF recibo.cod_sp_sec IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD cod_sp_sec
|
||||
END IF
|
||||
|
||||
##### Selecionando datos referentes al suplidor
|
||||
|
||||
SELECT a.nom_sp INTO nom_sup FROM cotb00001 a
|
||||
WHERE a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec
|
||||
|
||||
IF status = notfound THEN
|
||||
LET numero_msg = 3
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD cod_sp
|
||||
END IF
|
||||
|
||||
DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,nom_sup
|
||||
|
||||
####### Controla que el documento que digite el usuario no exista como
|
||||
####### otro documento que no sea una factura
|
||||
|
||||
SELECT unique a.num_doc FROM cptb00001 a
|
||||
WHERE (a.cod_sp = recibo.cod_sp and a.cod_sp_sec = recibo.cod_sp_sec and
|
||||
a.tipo_doc not in ("FT","CP","CK") and a.num_doc=recibo.num_doc) and
|
||||
a.status_t IS NULL
|
||||
|
||||
IF status != notfound THEN
|
||||
LET numero_msg = 234
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD num_doc
|
||||
END IF
|
||||
|
||||
AFTER FIELD tipo_doc
|
||||
IF recibo.tipo_doc IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD tipo_doc
|
||||
END IF
|
||||
##### Igualando la descripcion de la operacion dependiendo de la clave
|
||||
##### digitada en el proceso.
|
||||
|
||||
CASE
|
||||
WHEN recibo.tipo_doc = "CK"
|
||||
LET nom_tipo = "CHEQUE"
|
||||
EXIT CASE
|
||||
WHEN recibo.tipo_doc = "NC"
|
||||
LET nom_tipo = "NOTA DE CREDITO"
|
||||
EXIT CASE
|
||||
WHEN recibo.tipo_doc = "CP"
|
||||
LET nom_tipo = "PAGO ADELANTADO"
|
||||
EXIT CASE
|
||||
WHEN recibo.tipo_doc = "ND"
|
||||
LET nom_tipo = "NOTA DE DEBITO"
|
||||
EXIT CASE
|
||||
END CASE
|
||||
SELECT a.num_doc INTO numero FROM cptb00007 a
|
||||
WHERE a.tipo_doc = recibo.tipo_doc
|
||||
|
||||
LET recibo.num_doc = numero + 1
|
||||
DISPLAY BY NAME recibo.num_doc,nom_tipo ATTRIBUTE (BOLD)
|
||||
|
||||
AFTER FIELD num_doc
|
||||
IF recibo.num_doc IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD num_doc
|
||||
ELSE
|
||||
|
||||
###### Chequeando que el numero de registro a procesar no exista en la
|
||||
###### Maestra de pago.
|
||||
|
||||
SELECT UNIQUE a.tipo_doc,a.num_doc FROM cptb00001 a
|
||||
WHERE a.tipo_doc = recibo.tipo_doc and a.num_doc = recibo.num_doc
|
||||
|
||||
IF status != NOTFOUND THEN
|
||||
LET numero_msg = 12
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD tipo_doc
|
||||
END IF
|
||||
END IF
|
||||
|
||||
IF recibo.tipo_doc[1] != "C" THEN
|
||||
NEXT FIELD cod_sp
|
||||
END IF
|
||||
|
||||
# Tiene comentario hasta que se hagan los cheques por el computador
|
||||
|
||||
AFTER FIELD fecha_orig
|
||||
IF recibo.fecha_orig IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD fecha_orig
|
||||
END IF
|
||||
|
||||
LET p_fechas = recibo.fecha_orig
|
||||
CALL prd(p_fechas,usuarios) RETURNING bandera
|
||||
IF bandera = 1 THEN
|
||||
LET bandera = 0
|
||||
NEXT FIELD fecha_orig
|
||||
END IF
|
||||
|
||||
AFTER INPUT
|
||||
|
||||
####### Creando la facilidad para cancelar proceso mediante DELETE o SUPR
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
CLEAR FORM
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
EXIT INPUT
|
||||
END INPUT
|
||||
|
||||
INPUT ARRAY arr_recibo FROM s_recibo.*
|
||||
|
||||
ON KEY (CONTROL-W)
|
||||
LET curr = arr_curr()
|
||||
LET scr_l = scr_line()
|
||||
|
||||
###### Proceso para abrir window en caso de desconocer el numero de orden
|
||||
###### perteneciente a la factura que se aplicara el pago.
|
||||
CASE
|
||||
WHEN INFIELD (aplica_a)
|
||||
CALL busca_aplicacion()
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = false
|
||||
NEXT FIELD orden_no
|
||||
END IF
|
||||
IF existe = "N" THEN
|
||||
LET existe = "S"
|
||||
NEXT FIELD aplica_a
|
||||
END IF
|
||||
|
||||
DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a
|
||||
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
|
||||
LET bandera = 0
|
||||
CALL repetir()
|
||||
IF bandera = 1 THEN
|
||||
NEXT FIELD orden_no
|
||||
END IF
|
||||
END CASE
|
||||
BEFORE ROW
|
||||
LET curr = arr_curr()
|
||||
LET scr_l = scr_line()
|
||||
|
||||
IF recibo.tipo_doc = "CP" THEN
|
||||
NEXT FIELD valor_pag
|
||||
END IF
|
||||
|
||||
AFTER FIELD aplica_a
|
||||
IF arr_recibo[curr].aplica_a IS NOT NULL THEN
|
||||
IF arr_recibo[curr].aplica_a = recibo.num_doc THEN
|
||||
IF (recibo.tipo_doc != "NC" AND recibo.tipo_doc != "ND") THEN
|
||||
LET numero_msg = 131
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD aplica_a
|
||||
END IF
|
||||
END IF
|
||||
|
||||
LET bandera = 0
|
||||
CALL repetir()
|
||||
IF bandera = 1 THEN
|
||||
NEXT FIELD aplica_a
|
||||
END IF
|
||||
|
||||
# Controla que la factura pertenezca al suplidor
|
||||
|
||||
# Busca el valor pendiente de la factura
|
||||
IF arr_recibo[curr].aplica_a != recibo.num_doc THEN
|
||||
|
||||
SELECT unique a.num_doc FROM cptb00001 a
|
||||
WHERE a.num_doc = arr_recibo[curr].aplica_a and
|
||||
a.cod_sp=recibo.cod_sp and a.cod_sp_sec=recibo.cod_sp_sec
|
||||
# AND a.tipo_doc = "FT"
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
LET numero_msg = 126
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD aplica_a
|
||||
END IF
|
||||
|
||||
SELECT sum(a.valor) INTO valor_fac1 FROM cptb00001 a
|
||||
WHERE a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec
|
||||
AND a.aplica_a=arr_recibo[curr].aplica_a AND
|
||||
a.status_t IS NULL
|
||||
|
||||
IF valor_fac1 IS NULL THEN
|
||||
LET valor_fac1 = 0
|
||||
END IF
|
||||
|
||||
IF valor_fac IS NULL THEN
|
||||
LET valor_fac = 0
|
||||
END IF
|
||||
IF valor_fac1 < 0 THEN
|
||||
LET valor_fac1 = valor_fac1 * -1
|
||||
END IF
|
||||
####### Calculando el valor pendiente de la factura
|
||||
|
||||
LET arr_recibo[curr].valor_pen = (valor_fac + valor_fac1)
|
||||
IF arr_recibo[curr].valor_pen < 0 THEN
|
||||
LET arr_recibo[curr].valor_pen=arr_recibo[curr].valor_pen* -1
|
||||
END IF
|
||||
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen
|
||||
|
||||
DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag
|
||||
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
|
||||
END IF
|
||||
END IF
|
||||
|
||||
AFTER FIELD valor_pag
|
||||
|
||||
IF arr_recibo[curr].aplica_a IS NOT NULL THEN
|
||||
IF arr_recibo[curr].valor_pag IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD valor_pag
|
||||
END IF
|
||||
|
||||
IF arr_recibo[curr].valor_pag < 0 THEN
|
||||
LET numero_msg = 300
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD valor_pag
|
||||
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
|
||||
|
||||
LET valor_ctrl = 0
|
||||
FOR idx = 1 TO arr_count()
|
||||
IF arr_recibo[idx].valor_pag IS not NULL THEN
|
||||
LET valor_ctrl = valor_ctrl + arr_recibo[idx].valor_pag
|
||||
END IF
|
||||
END FOR
|
||||
IF valor_ctrl != recibo.monto THEN
|
||||
LET numero_msg = 168
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD aplica_a
|
||||
END IF
|
||||
END INPUT
|
||||
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
CLEAR FORM
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
FOR idx = 1 to arr_count()
|
||||
|
||||
IF arr_recibo[idx].aplica_a IS NOT NULL AND
|
||||
arr_recibo[idx].valor_pag > 0 THEN
|
||||
|
||||
###### En caso de que sea una nota de credito almacenar con valor en
|
||||
###### negativo.
|
||||
|
||||
IF recibo.tipo_doc != "NC" THEN
|
||||
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1
|
||||
END IF
|
||||
IF recibo.tipo_doc = "ND" THEN
|
||||
LET p_tipo = "ND"
|
||||
ELSE
|
||||
LET p_tipo = NULL
|
||||
END IF
|
||||
##### Proceso para insertar valores
|
||||
INSERT INTO cptb00001 (tipo_Doc,num_doc,cod_sp,cod_sp_sec,fecha_orig,fecha_proc,aplica_a,cta_ctble,
|
||||
valor,detalle,us_crea,fech_crea)
|
||||
VALUES(recibo.tipo_doc,recibo.num_doc,recibo.cod_sp,recibo.cod_sp_sec,
|
||||
recibo.fecha_orig,recibo.fecha_orig,
|
||||
arr_recibo[idx].aplica_a,recibo.cta_ctble,
|
||||
arr_recibo[idx].valor_pag,recibo.detalle,SUSER_SNAME(),GETDATE())
|
||||
END IF
|
||||
END FOR
|
||||
|
||||
|
||||
LET numero_msg = 1
|
||||
CALL msg(numero_msg)
|
||||
CLEAR FORM
|
||||
|
||||
GOTO volver
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION cppcmf001()
|
||||
|
||||
DEFINE usuario RECORD
|
||||
us_crea CHAR(9),
|
||||
fech_crea LIKE cptb00001.fech_crea
|
||||
END RECORD
|
||||
DEFINE tipo_doc CHAR(2)
|
||||
|
||||
#WHENEVER ERROR CONTINUE
|
||||
##### Creando el criterio de busqueda
|
||||
|
||||
CONSTRUCT CRITERIO ON b.tipo_doc,b.num_doc,b.cod_sp,b.cod_sp_sec
|
||||
FROM tipo_doc,num_doc,cod_sp,cod_sp_sec
|
||||
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
CLEAR FORM
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
###### Selecionando la informacion a modificar
|
||||
|
||||
IF tipo_doc = "CP" THEN
|
||||
|
||||
LET selec = "SELECT UNIQUE b.tipo_doc,b.num_doc,b.cta_ctble,b.cod_sp, ",
|
||||
" b.cod_sp_sec,b.fecha_orig,b.detalle ",
|
||||
"FROM cptb00001 b ",
|
||||
"WHERE b.status_t IS NULL AND b.tipo_doc != 'FT' AND ",
|
||||
" b.aplica_a IS NULL AND ",criterio clipped," ORDER BY 1,2"
|
||||
ELSE
|
||||
LET selec = "SELECT UNIQUE b.tipo_doc,b.num_doc,b.cta_ctble,b.cod_sp, ",
|
||||
" b.cod_sp_sec,b.fecha_orig,b.detalle ",
|
||||
"FROM cptb00001 b ",
|
||||
"WHERE b.status_t IS NULL AND b.tipo_doc != 'FT' AND ",
|
||||
criterio clipped," ORDER BY 1,2"
|
||||
END IF
|
||||
PREPARE busca FROM selec
|
||||
DECLARE datos SCROLL CURSOR FOR busca
|
||||
OPEN datos
|
||||
|
||||
FETCH FIRST datos INTO recibo.*
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 3
|
||||
CALL msg(numero_msg)
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
# Busca el monto del documento
|
||||
|
||||
SELECT SUM(@valor) INTO recibo.monto
|
||||
FROM cptb00001
|
||||
WHERE @num_doc = recibo.num_doc and
|
||||
@tipo_doc = recibo.tipo_doc
|
||||
|
||||
IF recibo.monto < 0 THEN
|
||||
LET recibo.monto = recibo.monto * -1
|
||||
END IF
|
||||
###### Selecionado datos referentes al suplidor
|
||||
|
||||
SELECT nom_sp INTO nom_sup FROM cotb00001
|
||||
WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec
|
||||
|
||||
###### Selecionando nombre de la cuenta a que afectara
|
||||
|
||||
SELECT descripcion INTO nom_cuenta FROM cgtb00001
|
||||
WHERE cuenta_no = recibo.cta_ctble
|
||||
|
||||
DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto
|
||||
|
||||
LABEL vuelve:
|
||||
MENU "OPCION"
|
||||
COMMAND "Siguiente"
|
||||
"Presenta en pantalla el proximo registro encontrado"
|
||||
FETCH NEXT datos INTO recibo.*
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 4
|
||||
CALL msg(numero_msg)
|
||||
END IF
|
||||
|
||||
# Busca el monto del documento
|
||||
|
||||
SELECT SUM(valor) INTO recibo.monto
|
||||
FROM cptb00001
|
||||
WHERE num_doc = recibo.num_doc and
|
||||
tipo_doc = recibo.tipo_doc
|
||||
|
||||
IF recibo.monto < 0 THEN
|
||||
LET recibo.monto = recibo.monto * -1
|
||||
END IF
|
||||
SELECT nom_sp INTO nom_sup FROM cotb00001
|
||||
WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec
|
||||
|
||||
SELECT descripcion INTO nom_cuenta FROM cgtb00001
|
||||
WHERE cuenta_no = recibo.cta_ctble
|
||||
|
||||
DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto
|
||||
|
||||
COMMAND "Anterior"
|
||||
"Presenta en pantalla el registro anterior encontrado"
|
||||
FETCH PREVIOUS datos INTO recibo.*
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 5
|
||||
CALL msg(numero_msg)
|
||||
END IF
|
||||
|
||||
# Busca el monto del documento
|
||||
|
||||
SELECT SUM(valor) INTO recibo.monto
|
||||
FROM cptb00001
|
||||
WHERE num_doc = recibo.num_doc and
|
||||
tipo_doc = recibo.tipo_doc
|
||||
SELECT nom_sp INTO nom_sup FROM cotb00001
|
||||
WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec
|
||||
|
||||
IF recibo.monto < 0 THEN
|
||||
LET recibo.monto = recibo.monto * -1
|
||||
END IF
|
||||
SELECT descripcion INTO nom_cuenta FROM cgtb00001
|
||||
WHERE cuenta_no = recibo.cta_ctble
|
||||
|
||||
DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto
|
||||
|
||||
COMMAND "Primero"
|
||||
"Presenta en pantalla el primer registro encontrado"
|
||||
FETCH FIRST datos INTO recibo.*
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 5
|
||||
CALL msg(numero_msg)
|
||||
END IF
|
||||
|
||||
# Busca el monto del documento
|
||||
|
||||
SELECT SUM(valor) INTO recibo.monto
|
||||
FROM cptb00001
|
||||
WHERE num_doc = recibo.num_doc and
|
||||
tipo_doc = recibo.tipo_doc
|
||||
|
||||
IF recibo.monto < 0 THEN
|
||||
LET recibo.monto = recibo.monto * -1
|
||||
END IF
|
||||
|
||||
SELECT nom_sp INTO nom_sup FROM cotb00001
|
||||
WHERE cod_sp = recibo.cod_sp AND cod_sp_sec = recibo.cod_sp_sec
|
||||
|
||||
SELECT descripcion INTO nom_cuenta FROM cgtb00001
|
||||
WHERE cuenta_no = recibo.cta_ctble
|
||||
|
||||
DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto
|
||||
|
||||
COMMAND "Ultimo"
|
||||
"Presenta en pantalla el ultimo registro encontrado"
|
||||
FETCH LAST datos INTO recibo.*
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 4
|
||||
CALL msg(numero_msg)
|
||||
END IF
|
||||
|
||||
# Busca el monto del documento
|
||||
|
||||
SELECT SUM(valor) INTO recibo.monto
|
||||
FROM cptb00001
|
||||
WHERE num_doc = recibo.num_doc and
|
||||
tipo_doc = recibo.tipo_doc
|
||||
IF recibo.monto < 0 THEN
|
||||
LET recibo.monto = recibo.monto * -1
|
||||
END IF
|
||||
SELECT nom_sp INTO nom_sup FROM cotb00001
|
||||
WHERE cod_sp = recibo.cod_sp and cod_sp_sec = recibo.cod_sp_sec
|
||||
|
||||
SELECT descripcion INTO nom_cuenta FROM cgtb00001
|
||||
WHERE cuenta_no = recibo.cta_ctble
|
||||
|
||||
DISPLAY BY NAME recibo.*,nom_sup,nom_cuenta,recibo.monto
|
||||
|
||||
COMMAND "Escoger"
|
||||
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
|
||||
|
||||
##### Aceptando los valores en los campos a modificar
|
||||
LET p_fechas = recibo.fecha_orig
|
||||
CALL prd(p_fechas,usuarios) RETURNING bandera
|
||||
IF bandera = 1 THEN
|
||||
LET bandera = 0
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
INPUT BY NAME recibo.fecha_orig,recibo.detalle,
|
||||
recibo.monto WITHOUT DEFAULTS
|
||||
|
||||
AFTER FIELD monto
|
||||
IF recibo.monto IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD monto
|
||||
END IF
|
||||
{AFTER FIELD cod_sp_sec
|
||||
SELECT nom_sp INTO nom_sup FROM cotb00001
|
||||
WHERE cod_sp = recibo.cod_sp AND cod_sp_sec = recibo.cod_sp_sec
|
||||
|
||||
DISPLAY BY NAME nom_sup
|
||||
}
|
||||
AFTER FIELD fecha_orig
|
||||
IF recibo.fecha_orig IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD fecha_orig
|
||||
END IF
|
||||
|
||||
LET p_fechas = recibo.fecha_orig
|
||||
CALL prd(p_fechas,usuarios) RETURNING bandera
|
||||
IF bandera = 1 THEN
|
||||
LET bandera = 0
|
||||
NEXT FIELD fecha_orig
|
||||
END IF
|
||||
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
RETURN
|
||||
END IF
|
||||
END INPUT
|
||||
|
||||
##### Buscando la informaciona desplegar en el arreglo
|
||||
DECLARE buscar2 CURSOR FOR
|
||||
SELECT a.aplica_a,valor*-1 FROM cptb00001 a
|
||||
WHERE a.tipo_doc = recibo.tipo_doc and a.num_doc = recibo.num_doc AND
|
||||
a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec AND
|
||||
a.status_t IS NULL ORDER BY 1
|
||||
|
||||
LET idx = 1
|
||||
FOREACH buscar2 INTO arr_recibo[idx].*
|
||||
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pen
|
||||
LET arr_recibo[idx].valor_pen = NULL
|
||||
IF arr_recibo[idx].valor_pag < 0 THEN
|
||||
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1
|
||||
END IF
|
||||
LET idx = idx + 1
|
||||
END FOREACH
|
||||
CALL SET_COUNT(idx - 1)
|
||||
|
||||
##### Aceptando los valores que se digitaran en el arreglo
|
||||
|
||||
INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.*
|
||||
|
||||
BEFORE ROW
|
||||
LET curr = arr_curr()
|
||||
LET scr_l = scr_line()
|
||||
|
||||
AFTER FIELD aplica_a
|
||||
IF arr_recibo[curr].aplica_a IS NOT NULL THEN
|
||||
|
||||
# Busca si el numero de factura pertenece al cliente
|
||||
IF arr_recibo[curr].aplica_a != recibo.num_doc THEN
|
||||
# Busca el valor pendiente de la factura
|
||||
|
||||
SELECT unique a.num_doc FROM cptb00001 a
|
||||
WHERE a.num_doc = arr_recibo[curr].aplica_a and
|
||||
a.cod_sp=recibo.cod_sp and a.cod_sp_sec=recibo.cod_sp_sec
|
||||
#and a.tipo_doc = "FT"
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
LET numero_msg = 126
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD aplica_a
|
||||
END IF
|
||||
|
||||
SELECT sum(a.valor) INTO valor_fac1 FROM cptb00001 a
|
||||
WHERE a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec AND
|
||||
a.aplica_a=arr_recibo[curr].aplica_a AND a.status_t IS NULL
|
||||
|
||||
IF valor_fac1 IS NULL THEN
|
||||
LET valor_fac1 = 0
|
||||
END IF
|
||||
|
||||
IF valor_fac IS NULL THEN
|
||||
LET valor_fac = 0
|
||||
END IF
|
||||
IF valor_fac1 < 0 THEN
|
||||
LET valor_fac1 = valor_fac1 * -1
|
||||
END IF
|
||||
####### Calculando el valor pendiente de la factura
|
||||
|
||||
LET arr_recibo[curr].valor_pen = (valor_fac + valor_fac1)
|
||||
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen
|
||||
|
||||
DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag
|
||||
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
|
||||
END IF
|
||||
# Busca el valor pendiente de la factura
|
||||
IF recibo.tipo_doc = "CK" THEN
|
||||
SELECT SUM(a.valor) INTO valor_fac1 FROM cptb00001 a
|
||||
WHERE a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec AND
|
||||
a.aplica_a = arr_recibo[curr].aplica_a AND a.status_t IS NULL
|
||||
END IF
|
||||
|
||||
LET arr_recibo[curr].valor_pen = valor_fac1
|
||||
DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen
|
||||
END IF
|
||||
|
||||
AFTER FIELD valor_pag
|
||||
|
||||
IF arr_recibo[curr].aplica_a IS NOT NULL THEN
|
||||
IF arr_recibo[curr].valor_pag IS NULL THEN
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD valor_pag
|
||||
END IF
|
||||
IF arr_recibo[curr].valor_pag < 0 THEN
|
||||
LET numero_msg = 300
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD valor_pag
|
||||
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
|
||||
LET valor_ctrl = 0
|
||||
FOR idx = 1 TO arr_count()
|
||||
IF arr_recibo[idx].valor_pag IS not NULL THEN
|
||||
LET valor_ctrl = valor_ctrl + arr_recibo[idx].valor_pag
|
||||
END IF
|
||||
END FOR
|
||||
IF valor_ctrl != recibo.monto THEN
|
||||
LET numero_msg = 168
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD aplica_a
|
||||
END IF
|
||||
EXIT INPUT
|
||||
END INPUT
|
||||
|
||||
###### Proceso de actualizacion de los datos.
|
||||
|
||||
IF recibo.tipo_doc = "CP" THEN
|
||||
DELETE FROM cptb00001 WHERE @tipo_doc = recibo.tipo_doc and
|
||||
@num_doc = recibo.num_doc AND
|
||||
@cod_sp = recibo.cod_sp and
|
||||
@cod_sp_sec= recibo.cod_sp_sec AND
|
||||
@aplica_a IS NULL
|
||||
ELSE
|
||||
DELETE FROM cptb00001 WHERE @tipo_doc = recibo.tipo_doc and
|
||||
@num_doc = recibo.num_doc AND
|
||||
@cod_sp = recibo.cod_sp and
|
||||
@cod_sp_sec= recibo.cod_sp_sec
|
||||
END IF
|
||||
|
||||
FOR idx = 1 to arr_count()
|
||||
IF arr_recibo[idx].aplica_a IS NOT NULL AND
|
||||
arr_recibo[idx].valor_pag > 0 THEN
|
||||
|
||||
IF recibo.tipo_doc != "NC" THEN
|
||||
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1
|
||||
END IF
|
||||
IF recibo.tipo_doc = "ND" THEN
|
||||
LET p_tipo = "ND"
|
||||
ELSE
|
||||
LET p_tipo = NULL
|
||||
END IF
|
||||
|
||||
INSERT INTO cptb00001 (tipo_Doc,num_doc,cod_sp,cod_sp_sec,fecha_orig,fecha_proc,aplica_a,cta_ctble,
|
||||
valor,detalle,us_crea,fech_crea,us_mod,fech_mod)
|
||||
VALUES(recibo.tipo_doc,recibo.num_doc,recibo.cod_sp,recibo.cod_sp_sec,
|
||||
recibo.fecha_orig,recibo.fecha_orig,
|
||||
arr_recibo[idx].aplica_a,recibo.cta_ctble,
|
||||
arr_recibo[idx].valor_pag,recibo.detalle,SUSER_SNAME(),GETDATE(),
|
||||
SUSER_SNAME(),GETDATE())
|
||||
END IF
|
||||
END FOR
|
||||
|
||||
LET numero_msg = 13
|
||||
CALL msg(numero_msg)
|
||||
|
||||
####### Proceso para anular logicamente un registro
|
||||
|
||||
COMMAND KEY ("L") "eLiminar"
|
||||
UPDATE cptb00001 SET status_t ='E',
|
||||
us_mod = usuarios,
|
||||
fech_mod = getdate()
|
||||
WHERE @tipo_doc = recibo.tipo_doc and @num_doc = recibo.num_doc and
|
||||
@cod_sp = recibo.cod_sp and @cod_sp_sec=recibo.cod_sp_sec
|
||||
|
||||
LET numero_msg = 82
|
||||
CALL msg(numero_msg)
|
||||
|
||||
COMMAND "Retornar"
|
||||
CLEAR FORM
|
||||
EXIT MENU
|
||||
END MENU
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION busca_aplicacion()
|
||||
OPEN WINDOW busqueda1 AT 10,10 WITH FORM "cpfmwd002"
|
||||
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
|
||||
|
||||
CONSTRUCT criterio ON a.aplica_a FROM aplica_a
|
||||
|
||||
LET selec =
|
||||
"SELECT a.aplica_a,SUM(a.valor) FROM cptb00001 a ",
|
||||
"WHERE a.cod_sp = ? AND a.cod_sp_sec = ? AND a.status_t IS NULL AND ",
|
||||
" a.aplica_a IS NOT NULL AND a.tipo_doc != 'CP' AND ",
|
||||
criterio CLIPPED, " GROUP BY a.aplica_a ",
|
||||
"HAVING SUM(a.valor) != 0 ",
|
||||
"ORDER BY a.aplica_a "
|
||||
|
||||
PREPARE comando1 FROM selec
|
||||
DECLARE aplicar CURSOR FOR comando1
|
||||
OPEN aplicar USING recibo.cod_sp,recibo.cod_sp_sec
|
||||
|
||||
LET existe = "N"
|
||||
LET idx = 1
|
||||
WHILE STATUS != NOTFOUND
|
||||
FETCH aplicar INTO aplica_wd[idx].*
|
||||
|
||||
IF status = NOTFOUND THEN
|
||||
EXIT WHILE
|
||||
END IF
|
||||
|
||||
LET aplica_wd[idx].pendiente = aplica_wd[idx].pendiente * -1
|
||||
LET existe = "S"
|
||||
|
||||
LET idx = idx + 1
|
||||
END WHILE
|
||||
IF existe = "N" and idx = 1 THEN
|
||||
LET numero_msg = 127
|
||||
CALL msg(numero_msg)
|
||||
GOTO salir
|
||||
END IF
|
||||
|
||||
CALL set_count(idx-1)
|
||||
DISPLAY ARRAY aplica_wd TO consart.*
|
||||
LET curr1 = arr_curr()
|
||||
|
||||
LET arr_recibo[curr].aplica_a = aplica_wd[curr1].aplica_a
|
||||
LET arr_recibo[curr].valor_pen = aplica_wd[curr1].pendiente
|
||||
LABEL salir:
|
||||
CLOSE WINDOW busqueda1
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION repetir()
|
||||
|
||||
DEFINE ant_art RECORD
|
||||
orden_no INTEGER,
|
||||
aplica_a CHAR(10),
|
||||
valor_pag INTEGER
|
||||
END RECORD
|
||||
|
||||
FOR idx = 1 to arr_count()
|
||||
IF idx != curr THEN
|
||||
IF arr_recibo[idx].aplica_a IS NOT NULL THEN
|
||||
IF arr_recibo[curr].aplica_a = arr_recibo[idx].aplica_a THEN
|
||||
LET numero_msg = 21
|
||||
CALL msg(numero_msg)
|
||||
LET bandera = 1
|
||||
ELSE
|
||||
IF bandera != 0 THEN
|
||||
LET bandera = 0
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
END FOR
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION busca_suplidor1()
|
||||
LET int_flag = FALSE
|
||||
OPEN WINDOW busca_sp1 AT 10,3 WITH FORM "cpfmwd001"
|
||||
ATTRIBUTE(BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST)
|
||||
|
||||
CONSTRUCT criterio ON a.nom_sp FROM nom_sp
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
CLOSE WINDOW busca_sp1
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
LET selec = "SELECT a.cod_sp,a.cod_sp_sec,a.nom_sp FROM cotb00001 a ",
|
||||
"WHERE a.status_t IS NULL AND ",criterio CLIPPED," ORDER BY 3 "
|
||||
|
||||
PREPARE comando2 FROM selec
|
||||
DECLARE busc CURSOR FOR comando2
|
||||
|
||||
LET idx = 1
|
||||
FOREACH busc INTO supl1[idx].*
|
||||
LET idx = idx + 1
|
||||
END FOREACH
|
||||
CALL SET_COUNT(idx -1)
|
||||
|
||||
DISPLAY ARRAY supl1 TO s_suplid.*
|
||||
LET curr = ARR_CURR()
|
||||
|
||||
LET recibo.cod_sp = supl1[curr].cod_sp
|
||||
LET recibo.cod_sp_sec = supl1[curr].cod_sp_sec
|
||||
LET nom_sup = supl1[curr].nom_sp
|
||||
CLOSE WINDOW busca_sp1
|
||||
END FUNCTION
|
||||
|
||||
Reference in New Issue
Block a user