1485 lines
44 KiB
Plaintext
1485 lines
44 KiB
Plaintext
{
|
|
-----------------------------------------------------------------------------
|
|
PROGRAMA : CPPRMT001
|
|
OBJETIVO : Mantenimiento de Factura Proveedor
|
|
REALIZADO POR : Tadeo A. Ferreras
|
|
FECHA : Junio 17, 1993
|
|
MODIFICADO POR : Juan F. Soto
|
|
FECHA : Enero 16, 1996
|
|
DESCRIPCION : Buscar conjuntamente con los pre-pagos las NOTAS DE DEBITO
|
|
-----------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "cpprgb000.4gl"
|
|
|
|
DEFINE hoy,fecha1,fecha2 DATE
|
|
DEFINE debe_ir CHAR(1)
|
|
DEFINE cuenta CHAR(8)
|
|
DEFINE total1,valor_cxp,valor,valor_f DECIMAL(12,2)
|
|
DEFINE cat,dpto,refe,tiene_cta,chequea,ctrl_cxp CHAR(1)
|
|
DEFINE ctrl_reg,orden_ant,aplicar INTEGER
|
|
DEFINE p,l,niv,cod1_sp,cod1_sp_sec SMALLINT
|
|
DEFINE idx2,p_orden INTEGER
|
|
DEFINE pbase,flete,gasto,pvalor,tvalor DECIMAL(16,2)
|
|
DEFINE val_pen,valor_fac1,valor2 DECIMAL(13,2)
|
|
DEFINE nom_tipo CHAR(15)
|
|
DEFINE idx1 SMALLINT
|
|
DEFINE nombre,apellido CHAR(14)
|
|
DEFINE tipo_emp CHAR(1)
|
|
|
|
DEFINE buscar_oc RECORD
|
|
orden_no INTEGER,
|
|
fecha_orig DATE,
|
|
cod_sp SMALLINT,
|
|
cod_sp_sec SMALLINT,
|
|
nom_sup CHAR(30)
|
|
END RECORD
|
|
|
|
DEFINE cod_sp1,cod_sp2 SMALLINT
|
|
DEFINE total_v DECIMAL(12,2)
|
|
DEFINE valor3 DECIMAL(12,2)
|
|
|
|
DEFINE datos_usu RECORD
|
|
status_t CHAR(1),
|
|
us_crea CHAR(9),
|
|
fech_crea LIKE cptb00001.fech_crea,
|
|
us_mod CHAR(9),
|
|
fech_mod LIKE cptb00001.fech_mod
|
|
END RECORD
|
|
|
|
DEFINE supl ARRAY[200] OF RECORD
|
|
cod_sp SMALLINT,
|
|
cod_sp_sec SMALLINT,
|
|
nom_sp CHAR(30)
|
|
END RECORD
|
|
|
|
DEFINE cuentas ARRAY[200] OF RECORD
|
|
cuenta_no CHAR(8),
|
|
departamento SMALLINT,
|
|
cod_aux SMALLINT,
|
|
sec_aux SMALLINT,
|
|
num_doc CHAR(10),
|
|
debito DECIMAL(12,2),
|
|
credito DECIMAL(12,2)
|
|
END RECORD
|
|
DEFINE descripcion CHAR(30)
|
|
|
|
DEFINE arrfac1 DYNAMIC ARRAY OF RECORD
|
|
tipo CHAR(1),
|
|
aplica_a CHAR(10),
|
|
tipo_doc CHAR(2),
|
|
valor_prep DECIMAL(12,2),
|
|
valor DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE arrfac DYNAMIC ARRAY OF RECORD
|
|
tipo CHAR(1),
|
|
aplica_a CHAR(10),
|
|
tipo_doc CHAR(2),
|
|
valor_prep DECIMAL(12,2),
|
|
valor DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE arr_fac1 DYNAMIC ARRAY OF RECORD
|
|
tipo CHAR(1),
|
|
aplica_a CHAR(10),
|
|
tipo_doc CHAR(2),
|
|
valor_prep DECIMAL(12,2),
|
|
valor DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE j RECORD
|
|
cod_sp SMALLINT,
|
|
cod_sp_sec SMALLINT,
|
|
nom_sup CHAR(30),
|
|
num_doc CHAR(10),
|
|
valor_fac DECIMAL(12,2),
|
|
detalle CHAR(30),
|
|
tipo CHAR(1),
|
|
aplica_a CHAR(10),
|
|
valor DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
|
|
|
|
|
|
|
|
DEFINE ordenes DYNAMIC ARRAY OF RECORD
|
|
orden_no LIKE cptb00001.orden_no,
|
|
tipo LIKE cptb00001.tipo
|
|
END RECORD
|
|
DEFINE i INTEGER
|
|
|
|
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 cpprmt001()
|
|
END MAIN
|
|
|
|
FUNCTION cpprmt001()
|
|
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 24,
|
|
COMMENT LINE 22,
|
|
PROMPT LINE 23
|
|
|
|
|
|
OPEN FORM cpfmmt001 FROM "cpfmmt001"
|
|
DISPLAY FORM cpfmmt001
|
|
DISPLAY "cpprmt001" AT 4,3
|
|
DISPLAY "Registro de Facturas" AT 6,29
|
|
|
|
MENU "OPCION"
|
|
COMMAND "Adicionar"
|
|
"<Esc>Adiciona Registro <Delete>Cancela Operacion <Ctrl-P>Codigo del Suplidor"
|
|
CALL cppcad000()
|
|
COMMAND "Consultar-modificar"
|
|
"<Esc> Busca Registro <Delete> Cancela Operacion"
|
|
CALL cppcmd000()
|
|
COMMAND "Salir"
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
####### Proceso para Insertar Una Factura ###########
|
|
|
|
FUNCTION cppcad000()
|
|
DEFINE porc_p DECIMAL(10,2)
|
|
DEFINE emp SMALLINT
|
|
LET hoy = null
|
|
|
|
LABEL volver:
|
|
INITIALIZE factura TO NULL
|
|
|
|
LET factura.cod_sp = cod_sp1
|
|
LET factura.cod_sp_sec = cod_sp2
|
|
LET factura.fecha_orig = fecha1
|
|
LET factura.fecha_proc = fecha2
|
|
INPUT BY NAME factura.* WITHOUT DEFAULTS
|
|
ON KEY (control-p)
|
|
NEXT FIELD cod_sp
|
|
|
|
ON KEY (control-w)
|
|
|
|
CASE
|
|
WHEN INFIELD(cod_sp)
|
|
CALL busca_suplidor()
|
|
LET int_flag = FALSE
|
|
IF factura.cod_sp_sec IS NULL OR factura.cod_sp_sec = 0 THEN
|
|
NEXT FIELD cod_sp
|
|
ELSE
|
|
DISPLAY BY NAME factura.cod_sp,factura.cod_sp_sec,nom_sup
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
EXIT CASE
|
|
|
|
WHEN INFIELD(cod_sp_sec)
|
|
CALL busca_suplidor()
|
|
LET int_flag = FALSE
|
|
IF factura.cod_sp_sec IS NULL OR factura.cod_sp_sec = 0 THEN
|
|
NEXT FIELD cod_sp
|
|
ELSE
|
|
DISPLAY BY NAME factura.cod_sp,factura.cod_sp_sec,nom_sup ATTRIBUTE(BLUE)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
EXIT CASE
|
|
END CASE
|
|
|
|
AFTER FIELD cod_sp ### Codigo Suplidor
|
|
|
|
If factura.cod_sp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
|
|
AFTER FIELD cod_sp_sec ### Secuencia Suplidor
|
|
IF factura.cod_sp_sec IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp_sec
|
|
END IF
|
|
|
|
SELECT a.nom_sp INTO nom_sup FROM cotb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
LET cod_sp1 = factura.cod_sp
|
|
LET cod_sp2 = factura.cod_sp_sec
|
|
DISPLAY BY NAME nom_sup ATTRIBUTE (BLUE)#### Nombre del suplidor
|
|
|
|
BEFORE FIELD num_doc
|
|
LET factura.num_doc = NULL
|
|
DISPLAY BY NAME factura.num_doc
|
|
|
|
AFTER FIELD num_doc #### Numero del documento o factura
|
|
|
|
IF factura.num_doc IS NULL OR factura.num_doc[1] = " " THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
SELECT UNIQUE a.num_doc,a.status_t
|
|
INTO factura.num_doc,datos_usu.status_t
|
|
FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND
|
|
a.cod_sp_sec = factura.cod_sp_sec AND
|
|
a.num_doc = factura.num_doc AND
|
|
a.tipo_doc = "FT"
|
|
|
|
##### Proceso para evitar se digite el mismo numero de factura
|
|
##### Para el mismo suplidor
|
|
|
|
IF datos_usu.status_t = "E" THEN
|
|
LET numero_msg = 36
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
IF status != NOTFOUND THEN
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
BEFORE FIELD fecha_orig
|
|
IF fecha1 IS NULL OR fecha1 > TODAY THEN
|
|
LET fecha1 = today
|
|
END IF
|
|
LET factura.fecha_orig = fecha1
|
|
DISPLAY BY NAME factura.fecha_orig
|
|
|
|
AFTER FIELD fecha_orig
|
|
IF factura.fecha_orig IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_orig
|
|
END IF
|
|
IF factura.fecha_orig > TODAY THEN
|
|
LET numero_msg = 189
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_orig
|
|
END IF
|
|
LET fecha1 = factura.fecha_orig
|
|
LET p_fechas = factura.fecha_orig
|
|
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD fecha_orig
|
|
END IF
|
|
|
|
BEFORE FIELD fecha_proc
|
|
IF factura.cod_sp = 23 THEN
|
|
LET factura.fecha_proc = factura.fecha_orig
|
|
DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE)
|
|
NEXT FIELD valor_fac
|
|
END IF
|
|
DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE)
|
|
|
|
{AFTER FIELD fecha_proc
|
|
IF factura.cod_sp = 23 THEN
|
|
LET factura.fecha_proc = factura.fecha_orig
|
|
DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE)
|
|
END IF
|
|
|
|
IF factura.fecha_proc IS NULL OR factura.fecha_proc > TODAY THEN
|
|
LET factura.fecha_proc = today
|
|
END IF
|
|
DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE)
|
|
|
|
LET fecha2 = factura.fecha_proc
|
|
}
|
|
AFTER FIELD valor_fac
|
|
IF factura.valor_fac IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor_fac
|
|
END IF
|
|
IF factura.valor_fac < 0 THEN
|
|
LET valor = 0
|
|
NEXT FIELD valor_fac
|
|
END IF
|
|
IF factura.cod_sp = 21 OR
|
|
factura.cod_sp = 22 THEN
|
|
NEXT FIELD tipo_oc
|
|
ELSE
|
|
NEXT FIELD detalle
|
|
END IF
|
|
AFTER FIELD tipo_oc
|
|
IF factura.tipo_oc is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
#NEXT FIELD tipo_oc
|
|
END IF
|
|
|
|
AFTER FIELD orden_no
|
|
IF factura.orden_no is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
#NEXT FIELD tipo_oc
|
|
END IF
|
|
|
|
SELECT UNIQUE a.tipo,a.num_oc FROM cotb00014 a
|
|
WHERE a.tipo = factura.tipo_oc AND
|
|
a.num_oc = factura.orden_no AND
|
|
a.cod_sp = factura.cod_sp AND
|
|
a.cod_sp_sec = factura.cod_sp_sec AND
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 358
|
|
CALL msg(numero_msg)
|
|
# NEXT FIELD tipo_oc
|
|
END IF
|
|
|
|
BEFORE FIELD detalle
|
|
LET factura.detalle = NULL
|
|
DISPLAY BY NAME factura.detalle ATTRIBUTE(BLUE)
|
|
AFTER INPUT
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
##### Proceso Para abortar OPERACION ######
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
CALL contab()
|
|
IF int_flag THEN
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
DECLARE buscar4 CURSOR FOR
|
|
SELECT UNIQUE "N",a.num_doc,a.tipo_doc,a.valor *-1 FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a =a.num_doc
|
|
AND a.tipo_doc IN ("ND") AND a.tipo = "ND" AND
|
|
a.status_t IS NULL
|
|
ORDER BY 2
|
|
|
|
LET idx = 1
|
|
FOREACH buscar4 INTO arrfac[idx].*
|
|
LET arr_fac1[idx].tipo = "N"
|
|
LET arr_fac1[idx].aplica_a = arrfac[idx].aplica_a
|
|
LET arr_fac1[idx].tipo_doc = arrfac[idx].tipo_doc
|
|
LET arr_fac1[idx].valor_prep = arrfac[idx].valor_prep
|
|
LET arr_fac1[idx].valor = arrfac[idx].valor_prep
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
DECLARE buscar CURSOR FOR
|
|
SELECT UNIQUE "N",a.num_doc,a.tipo_doc,SUM(a.valor*-1) FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a is null
|
|
AND a.tipo_doc IN ("CP") AND
|
|
a.status_t IS NULL
|
|
GROUP BY a.num_doc,a.tipo_doc
|
|
ORDER BY a.num_doc
|
|
|
|
LET idx1 = idx
|
|
FOREACH buscar INTO arrfac[idx].*
|
|
SELECT SUM(a.valor) INTO valor1 FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a IS NOT NULL AND a.num_doc = arrfac[idx].aplica_a AND
|
|
a.tipo_doc = "CP" AND a.status_t IS NULL
|
|
|
|
IF valor1 IS NULL THEN
|
|
LET valor1 = 0
|
|
END IF
|
|
LET arrfac[idx].valor_prep = arrfac[idx].valor_prep + valor1
|
|
LET arrfac[idx].valor = arrfac[idx].valor_prep
|
|
|
|
IF arrfac[idx].valor > 0 THEN
|
|
LET arr_fac1[idx1].tipo = "N"
|
|
LET arr_fac1[idx1].aplica_a = arrfac[idx].aplica_a
|
|
LET arr_fac1[idx1].tipo_doc = arrfac[idx].tipo_doc
|
|
LET arr_fac1[idx1].valor_prep = arrfac[idx].valor_prep
|
|
LET arr_fac1[idx1].valor = arrfac[idx].valor
|
|
LET idx1 = idx1 + 1
|
|
END IF
|
|
LET idx = idx + 1
|
|
|
|
END FOREACH
|
|
|
|
LET l = 1
|
|
FOR p = 1 TO idx
|
|
IF arr_fac1[p].aplica_a is not null THEN
|
|
IF arr_fac1[l].valor_prep > 0 THEN
|
|
LET arr_fac1[l].tipo = "N"
|
|
LET arr_fac1[l].aplica_a = arrfac[p].aplica_a
|
|
LET arr_fac1[l].tipo_doc = arrfac[p].tipo_doc
|
|
LET arr_fac1[l].valor_prep = arrfac[p].valor_prep
|
|
LET arr_fac1[l].valor = arrfac[p].valor_prep
|
|
LET l = l + 1
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
CALL SET_COUNT(l - 1)
|
|
LABEL volver1:
|
|
INPUT ARRAY arr_fac1 WITHOUT DEFAULTS FROM factura1.*
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET fila = scr_line()
|
|
|
|
AFTER FIELD valor ##### Valor del documento o factura
|
|
|
|
IF arr_fac1[curr].valor IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor
|
|
END IF
|
|
|
|
IF arr_fac1[curr].valor > arr_fac1[curr].valor_prep THEN
|
|
LET numero_msg = 162
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor
|
|
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
|
|
|
|
LET total1 = 0
|
|
FOR k = 1 TO arr_curr()
|
|
IF arr_fac1[k].tipo = "S" THEN
|
|
LET total1 = total1 + arr_fac1[k].valor
|
|
END IF
|
|
END FOR
|
|
|
|
IF total1 > factura.valor_fac THEN
|
|
LET numero_msg = 162
|
|
CALL msg(numero_msg)
|
|
GOTO volver1
|
|
END IF
|
|
###### Insertando registros en la Maestra de cuentas por Pagar ####
|
|
|
|
LET cod_sp1 = factura.cod_sp
|
|
BEGIN WORK
|
|
INSERT INTO cptb00001 values ("FT",factura.num_doc,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.fecha_orig,factura.fecha_proc,
|
|
factura.orden_no,factura.tipo_oc,
|
|
factura.num_doc,null,factura.valor_fac,factura.detalle,null,SUSER_SNAME(),
|
|
GETDATE(),null,null)
|
|
|
|
FOR idx = 1 TO ARR_COUNT()
|
|
IF arr_fac1[idx].tipo = "S" AND arr_fac1[idx].valor > 0 THEN
|
|
IF arr_fac1[idx].tipo_doc = "CP" THEN
|
|
LET arrfac[idx].valor = arrfac[idx].valor * -1
|
|
|
|
INSERT INTO cptb00001 values (arr_fac1[idx].tipo_doc,
|
|
arr_fac1[idx].aplica_a,
|
|
factura.cod_sp,factura.cod_sp_sec,factura.fecha_orig,
|
|
factura.fecha_proc,ordenes[idx].*,factura.num_doc,
|
|
null,arr_fac1[idx].valor,null,null,SUSER_SNAME(),GETDATE(),null,null)
|
|
ELSE
|
|
UPDATE cptb00001 set aplica_a = factura.num_doc
|
|
WHERE num_doc = arr_fac1[idx].aplica_a and
|
|
tipo_doc = "ND" AND
|
|
tipo = "ND"
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
DELETE FROM cptb00003 WHERE @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@factura = factura.num_doc AND fecha > "01/01/2008"
|
|
|
|
IF factura.cod_sp = 22 THEN
|
|
LET cuenta = "2114"
|
|
END IF
|
|
|
|
IF factura.cod_sp = 23 THEN
|
|
LET cuenta = "2113"
|
|
END IF
|
|
|
|
IF factura.cod_sp = 24 THEN
|
|
LET cuenta = "2116"
|
|
END IF
|
|
|
|
|
|
FOR idx = 1 TO ctrl_reg
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
IF idx = 1 THEN
|
|
INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuenta,null,null,null,null,null,
|
|
0,factura.valor_fac,NULL,SUSER_SNAME(),GETDATE(),NULL,NUll)
|
|
END IF
|
|
|
|
IF cuentas[idx].debito <> 0 OR
|
|
cuentas[idx].credito <> 0 THEN
|
|
|
|
IF cuentas[idx].debito IS NULL THEN
|
|
LET cuentas[idx].debito = 0
|
|
END IF
|
|
|
|
IF cuentas[idx].credito IS NULL THEN
|
|
LET cuentas[idx].credito = 0
|
|
END IF
|
|
|
|
INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuentas[idx].cuenta_no,
|
|
cuentas[idx].departamento,cuentas[idx].num_doc,cuentas[idx].cod_aux,
|
|
cuentas[idx].sec_aux,factura.detalle,cuentas[idx].debito,cuentas[idx].credito,
|
|
NULL,SUSER_SNAME(),GETDATE(),NULL,NUll)
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
COMMIT WORK
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
|
|
GOTO volver
|
|
END FUNCTION
|
|
|
|
###### Proceso de Modificacion de registros
|
|
|
|
FUNCTION cppcmd000()
|
|
|
|
##### Criterio de Busqueda de informacion a consultar y/o modificar
|
|
|
|
CONSTRUCT CRITERIO ON b.cod_sp,b.cod_sp_sec,b.num_doc,b.fecha_orig,
|
|
b.fecha_proc,b.valor,b.detalle
|
|
FROM cod_sp,cod_sp_sec,num_doc,fecha_orig,fecha_proc,
|
|
valor,detalle
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
##### Busquedas de los datos generales
|
|
|
|
LET selec =
|
|
"SELECT UNIQUE b.cod_sp,b.cod_sp_sec,b.num_doc,b.fecha_orig, ",
|
|
" b.fecha_proc,b.valor,b.detalle,b.status_t,b.us_crea, ",
|
|
" b.fech_crea,b.us_mod,b.fech_mod ",
|
|
"FROM cptb00001 b ",
|
|
"WHERE b.status_t is null AND b.tipo_doc = 'FT' AND ",
|
|
criterio clipped," ORDER BY 1,2"
|
|
|
|
PREPARE busca FROM selec
|
|
DECLARE datos SCROLL CURSOR FOR busca
|
|
OPEN datos
|
|
|
|
#### Buscando el primer registro
|
|
|
|
FETCH FIRST datos INTO factura.*,datos_usu.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
SELECT nom_sp INTO nom_sup FROM cotb00001
|
|
WHERE cod_sp = factura.cod_sp and
|
|
cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME factura.*,nom_sup ATTRIBUTE(BLUE)
|
|
|
|
MENU "OPCION"
|
|
COMMAND "Siguiente"
|
|
"Presenta en pantalla el proximo registro encontrado"
|
|
FETCH NEXT datos INTO factura.*,datos_usu.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
|
|
SELECT nom_sp INTO nom_sup FROM cotb00001
|
|
WHERE cod_sp = factura.cod_sp and
|
|
cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME factura.*,nom_sup ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Anterior"
|
|
"Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS datos INTO factura.*,datos_usu.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
SELECT nom_sp INTO nom_sup FROM cotb00001
|
|
WHERE cod_sp = factura.cod_sp and
|
|
cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME factura.*,nom_sup ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Primero"
|
|
"Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST datos INTO factura.*,datos_usu.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
SELECT nom_sp INTO nom_sup FROM cotb00001
|
|
WHERE cod_sp = factura.cod_sp and
|
|
cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME factura.*,nom_sup ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Ultimo"
|
|
"Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST datos INTO factura.*,datos_usu.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
SELECT nom_sp INTO nom_sup FROM cotb00001
|
|
WHERE cod_sp = factura.cod_sp and
|
|
cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME factura.*,nom_sup ATTRIBUTE(BLUE)
|
|
|
|
###### Escoger registro para modificar
|
|
|
|
COMMAND "Escoger"
|
|
"<Esc>Actualiza Registro <Delete>Cancela Operacion <Ctrl-P> Codigo Suplidor"
|
|
|
|
LET p_fechas = factura.fecha_orig
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
LET debe_ir = "N"
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
LET debe_ir = "S"
|
|
RETURN
|
|
END IF
|
|
|
|
IF debe_ir = "N" THEN
|
|
INPUT BY NAME factura.fecha_orig,factura.fecha_proc,factura.valor_fac,
|
|
factura.tipo_oc,factura.orden_no,
|
|
factura.detalle WITHOUT DEFAULTS
|
|
{
|
|
AFTER FIELD tipo_oc
|
|
IF factura.tipo_oc is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_oc
|
|
END IF
|
|
AFTER FIELD orden_no
|
|
IF factura.orden_no is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_oc
|
|
END IF
|
|
|
|
SELECT UNIQUE a.tipo,a.num_oc FROM cotb00014 a
|
|
WHERE a.tipo = factura.tipo_oc AND
|
|
a.num_oc = factura.orden_no AND
|
|
a.cod_sp = factura.cod_sp AND
|
|
a.cod_sp_sec = factura.cod_sp_sec AND
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 358
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_oc
|
|
END IF
|
|
}
|
|
AFTER FIELD fecha_orig
|
|
IF factura.fecha_orig IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_orig
|
|
END IF
|
|
|
|
LET p_fechas = factura.fecha_orig
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD fecha_orig
|
|
END IF
|
|
|
|
AFTER FIELD fecha_proc
|
|
IF factura.fecha_proc IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_proc
|
|
END IF
|
|
|
|
DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE)
|
|
|
|
AFTER FIELD valor_fac
|
|
IF factura.valor_fac IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor_fac
|
|
END IF
|
|
{
|
|
IF factura.cod_sp = 21 OR
|
|
factura.cod_sp = 22 THEN
|
|
NEXT FIELD tipo_oc
|
|
ELSE
|
|
NEXT FIELD detalle
|
|
END IF
|
|
}
|
|
AFTER INPUT
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
##### Proceso Para abortar OPERACION ######
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
END IF
|
|
LET debe_ir = "N"
|
|
CALL contab()
|
|
DECLARE busca2 CURSOR FOR
|
|
SELECT "S",a.num_doc,a.tipo_doc,a.valor * -1,a.valor * -1
|
|
FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a = factura.num_doc AND
|
|
a.tipo = "ND" AND
|
|
a.status_t IS NULL
|
|
ORDER BY 2
|
|
LET idx = 1
|
|
FOREACH busca2 INTO arrfac[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
DECLARE busca3 CURSOR FOR
|
|
SELECT "N",a.num_doc,a.tipo_doc,a.valor * -1,a.valor * -1
|
|
FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a = a.num_doc AND
|
|
a.tipo = "ND" AND
|
|
a.status_t IS NULL
|
|
ORDER BY 2
|
|
|
|
FOREACH busca3 INTO arrfac[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
DECLARE buscar1 CURSOR FOR
|
|
SELECT "S",a.num_doc,a.tipo_doc,a.valor * -1,a.valor * -1
|
|
FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a = factura.num_doc AND a.tipo_doc in ("CP") AND
|
|
a.status_t IS NULL
|
|
ORDER BY 2
|
|
|
|
FOREACH buscar1 INTO arrfac[idx].*
|
|
SELECT SUM(a.valor) INTO valor2 FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a IS NULL AND a.num_doc = arrfac[idx].aplica_a AND
|
|
a.tipo_doc in ("CP") AND a.status_t IS NULL
|
|
|
|
SELECT SUM(a.valor) INTO valor1 FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a IS NOT NULL AND a.num_doc = arrfac[idx].aplica_a AND
|
|
a.tipo_doc in ("CP") AND a.status_t IS NULL AND
|
|
a.aplica_a != arrfac[idx].aplica_a
|
|
|
|
IF valor1 IS NULL THEN
|
|
LET valor1 = 0
|
|
END IF
|
|
|
|
IF valor2 IS NULL THEN
|
|
LET valor2 = 0
|
|
END IF
|
|
LET arrfac[idx].valor = arrfac[idx].valor_prep
|
|
LET arrfac[idx].valor_prep = valor2 - valor1
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
DECLARE buscar20 CURSOR FOR
|
|
SELECT UNIQUE "N",a.num_doc,a.tipo_doc,SUM(a.valor*-1) FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a is null
|
|
AND a.tipo_doc IN ("CP") AND
|
|
a.status_t IS NULL
|
|
GROUP BY a.num_doc,a.tipo_doc
|
|
ORDER BY a.num_doc
|
|
|
|
LET idx1 = idx
|
|
FOREACH buscar20 INTO arrfac[idx].*
|
|
SELECT SUM(a.valor) INTO valor1 FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.aplica_a IS NOT NULL AND a.num_doc = arrfac[idx].aplica_a AND
|
|
a.tipo_doc = "CP" AND a.status_t IS NULL
|
|
|
|
IF valor1 IS NULL THEN
|
|
LET valor1 = 0
|
|
END IF
|
|
LET arrfac[idx].valor_prep = arrfac[idx].valor_prep + valor1
|
|
LET arrfac[idx].valor = arrfac[idx].valor_prep
|
|
|
|
IF arrfac[idx].valor > 0 THEN
|
|
LET arr_fac1[idx1].tipo = "N"
|
|
LET arr_fac1[idx1].aplica_a = arrfac[idx].aplica_a
|
|
LET arr_fac1[idx1].tipo_doc = arrfac[idx].tipo_doc
|
|
LET arr_fac1[idx1].valor_prep = arrfac[idx].valor_prep
|
|
LET arr_fac1[idx1].valor = arrfac[idx].valor
|
|
LET idx1 = idx1 + 1
|
|
END IF
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL SET_COUNT(idx - 1)
|
|
LABEL volver2:
|
|
INPUT ARRAY arrfac WITHOUT DEFAULTS FROM factura1.*
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET fila = scr_line()
|
|
|
|
AFTER FIELD aplica_a
|
|
IF arrfac[curr].tipo IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo
|
|
END IF
|
|
|
|
IF arrfac[curr].aplica_a IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
|
|
IF arrfac[curr].tipo_doc = "CP" THEN
|
|
SELECT SUM(a.valor) INTO valor3 FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.tipo_doc = "CP" AND a.num_doc = arrfac[curr].aplica_a AND
|
|
a.aplica_a IS NOT NULL AND a.num_doc != arrfac[curr].aplica_a AND
|
|
a.status_t IS NULL
|
|
|
|
SELECT SUM(a.valor * -1) INTO valor2
|
|
FROM cptb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.tipo_doc = "CP" AND a.num_doc = arrfac[curr].aplica_a AND
|
|
a.aplica_a IS NULL AND a.status_t IS NULL
|
|
|
|
IF valor2 IS NULL THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
IF valor2 IS NULL THEN
|
|
LET valor2 = 0
|
|
END IF
|
|
IF valor3 IS NULL THEN
|
|
LET valor3 = 0
|
|
END IF
|
|
LET arrfac[curr].valor_prep = valor2 + valor3
|
|
IF arrfac[curr].valor IS NULL THEN
|
|
LET arrfac[curr].valor = arrfac[curr].valor_prep
|
|
END IF
|
|
IF arrfac[curr].valor > arrfac[curr].valor_prep THEN
|
|
LET numero_msg = 162
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor
|
|
END IF
|
|
ELSE
|
|
SELECT unique valor*-1 INTO valor2 FROM cptb00001
|
|
WHERE num_doc = arrfac[curr].aplica_a and
|
|
tipo_doc = "ND" and
|
|
cod_sp = factura.cod_sp and
|
|
cod_sp_sec = factura.cod_sp_sec
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
END IF
|
|
|
|
DISPLAY arrfac[curr].aplica_a,arrfac[curr].tipo_doc,arrfac[curr].valor_prep,
|
|
arrfac[curr].valor
|
|
TO factura1[fila].aplica_a,factura1[fila].tipo_doc,factura1[fila].valor_prep,
|
|
factura1[fila].valor
|
|
|
|
AFTER FIELD valor ##### Valor del documento o factura
|
|
|
|
IF arrfac[curr].valor IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor
|
|
END IF
|
|
|
|
IF arrfac[curr].valor > arrfac[curr].valor_prep THEN
|
|
LET numero_msg = 162
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor
|
|
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
|
|
|
|
LET total1 = 0
|
|
FOR k = 1 TO arr_curr()
|
|
IF arrfac[k].tipo = "S" THEN
|
|
LET total1 = total1 + arrfac[k].valor
|
|
END IF
|
|
END FOR
|
|
|
|
IF total1 > factura.valor_fac THEN
|
|
LET numero_msg = 162
|
|
CALL msg(numero_msg)
|
|
GOTO volver2
|
|
END IF
|
|
|
|
###### Insertando registros en la Maestra de cuentas por Pagar ####
|
|
|
|
LET cod_sp1 = factura.cod_sp
|
|
BEGIN WORK
|
|
DELETE FROM cptb00001
|
|
WHERE @aplica_a = factura.num_doc AND
|
|
@cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@tipo_doc = "CP" AND fecha_orig > "01/01/2008"
|
|
|
|
UPDATE cptb00001 set (fecha_orig,fecha_proc,orden_no,tipo,valor,detalle,
|
|
us_mod,fech_mod) =
|
|
(factura.fecha_orig,factura.fecha_proc,
|
|
factura.orden_no,factura.tipo_oc,
|
|
factura.valor_fac,factura.detalle,
|
|
SUSER_SNAME(),GETDATE())
|
|
WHERE @num_doc = factura.num_doc
|
|
AND @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@tipo_doc = "FT"
|
|
|
|
LET k = 0
|
|
FOR idx = 1 to ARR_COUNT()
|
|
LET k = k + 1
|
|
IF arrfac[idx].tipo = "S" AND arrfac[idx].valor > 0 THEN
|
|
LET arrfac[idx].valor = arrfac[idx].valor * -1
|
|
IF arrfac[idx].tipo_doc = "CP" THEN
|
|
INSERT INTO cptb00001 values (arrfac[idx].tipo_doc,
|
|
arrfac[idx].aplica_a,
|
|
factura.cod_sp,factura.cod_sp_sec,factura.fecha_orig,
|
|
factura.fecha_proc,ordenes[idx].*,factura.num_doc,
|
|
null,arrfac[idx].valor,null,null,SUSER_SNAME(),GETDATE(),SUSER_SNAME(),
|
|
GETDATE())
|
|
ELSE
|
|
UPDATE cptb00001 SET aplica_a = factura.num_doc
|
|
WHERE num_doc = arr_fac1[idx].aplica_a and
|
|
tipo_doc = "ND" AND
|
|
tipo = "ND"
|
|
END IF
|
|
END IF
|
|
IF arrfac[idx].tipo = "N" THEN
|
|
UPDATE cptb00001 SET aplica_a = num_doc
|
|
WHERE num_doc = arrfac[idx].aplica_a and
|
|
tipo_doc = "ND" AND
|
|
tipo = "ND"
|
|
END IF
|
|
END FOR
|
|
|
|
IF k IS NULL OR k = 0 THEN
|
|
LET k = 1
|
|
END IF
|
|
|
|
IF debe_ir = "N" THEN
|
|
DELETE FROM cptb00003 WHERE @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@factura = factura.num_doc AND fecha > "01/01/2008"
|
|
|
|
IF factura.cod_sp = 22 THEN
|
|
LET cuenta = "2114"
|
|
END IF
|
|
|
|
IF factura.cod_sp = 23 THEN
|
|
LET cuenta = "2113"
|
|
END IF
|
|
|
|
IF factura.cod_sp = 24 THEN
|
|
LET cuenta = "2116"
|
|
END IF
|
|
|
|
|
|
FOR idx = 1 TO ctrl_reg
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
|
|
IF idx = 1 THEN
|
|
INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuenta,null,null,null,null,null,
|
|
0,factura.valor_fac,NULL,SUSER_SNAME(),GETDATE(),NULL,NUll)
|
|
END IF
|
|
|
|
IF cuentas[idx].debito <> 0 OR
|
|
cuentas[idx].credito <> 0 THEN
|
|
|
|
IF cuentas[idx].debito IS NULL THEN
|
|
LET cuentas[idx].debito = 0
|
|
END IF
|
|
|
|
IF cuentas[idx].credito IS NULL THEN
|
|
LET cuentas[idx].credito = 0
|
|
END IF
|
|
|
|
INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuentas[idx].cuenta_no,
|
|
cuentas[idx].departamento,cuentas[idx].num_doc,cuentas[idx].cod_aux,
|
|
cuentas[idx].sec_aux,factura.detalle,cuentas[idx].debito,cuentas[idx].credito,
|
|
NULL,SUSER_SNAME(),GETDATE(),NULL,NUll)
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
END IF
|
|
COMMIT WORK
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
|
|
IF debe_ir = "S" THEN
|
|
START REPORT apl_fact TO "%USHOME%\\archivo"
|
|
|
|
FOR idx = 1 TO k
|
|
|
|
IF arrfac[idx].tipo IS NOT NULL THEN
|
|
LET j.cod_sp = factura.cod_sp
|
|
LET j.cod_sp_sec = factura.cod_sp_sec
|
|
LET j.nom_sup = nom_sup
|
|
LET j.num_doc = factura.num_doc
|
|
LET j.valor_fac = factura.valor_fac
|
|
LET j.detalle = factura.detalle
|
|
LET j.tipo = arrfac[idx].tipo
|
|
LET j.aplica_a = arrfac[idx].aplica_a
|
|
LET j.valor = arrfac[idx].valor
|
|
|
|
OUTPUT TO REPORT apl_fact(j.*)
|
|
END IF
|
|
END FOR
|
|
FINISH REPORT apl_fact
|
|
##### Proceso Para Anular una Factura
|
|
END IF
|
|
|
|
COMMAND KEY ("L") "eLiminar"
|
|
|
|
LET bandera = 0
|
|
LET p_fechas = factura.fecha_orig
|
|
{
|
|
CALL prd(p_fechas)
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
}
|
|
# Inserta en la tabla Historica Registros Eliminados
|
|
BEGIN WORK
|
|
INSERT INTO cptb00006 select *from cptb00001
|
|
WHERE @tipo_doc = "FT" AND
|
|
@cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@aplica_a = factura.num_doc
|
|
|
|
UPDATE cptb00006 set us_mod = SUSER_SNAME(),
|
|
fech_mod = GETDATE()
|
|
WHERE @tipo_doc = "FT" AND
|
|
@cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@aplica_a = factura.num_doc
|
|
#-------------------------------------------------------------------------
|
|
|
|
DELETE FROM cptb00001
|
|
WHERE @tipo_doc = "FT" AND
|
|
@cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@aplica_a = factura.num_doc and fecha_orig > "01/01/2008"
|
|
|
|
# Inserta en la tabla Historica Registros Eliminados
|
|
INSERT INTO cptb00005 select *from cptb00003
|
|
WHERE @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@factura = factura.num_doc
|
|
|
|
UPDATE cptb00005 set us_mod = SUSER_SNAME(),
|
|
fech_mod = GETDATE()
|
|
WHERE @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@factura = factura.num_doc
|
|
#--------------------------------------------------------------------------
|
|
|
|
DELETE FROM cptb00003
|
|
WHERE @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@factura = factura.num_doc and fecha > "01/01/2008"
|
|
COMMIT WORK
|
|
LET numero_msg = 82
|
|
CALL msg(numero_msg)
|
|
|
|
COMMAND "Retornar"
|
|
CLEAR FORM
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
#### Busqueda de datos generales referente a un suplidor
|
|
FUNCTION busca_suplidor()
|
|
LET int_flag = FALSE
|
|
OPEN WINDOW busca_sp 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_sp
|
|
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 comando1 FROM selec
|
|
DECLARE busc CURSOR FOR comando1
|
|
|
|
LET idx = 1
|
|
FOREACH busc INTO supl[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL SET_COUNT(idx -1)
|
|
|
|
DISPLAY ARRAY supl TO s_suplid.*
|
|
LET curr = ARR_CURR()
|
|
|
|
LET factura.cod_sp = supl[curr].cod_sp
|
|
LET factura.cod_sp_sec = supl[curr].cod_sp_sec
|
|
LET nom_sup = supl[curr].nom_sp
|
|
CLOSE WINDOW busca_sp
|
|
END FUNCTION
|
|
|
|
FUNCTION contab()
|
|
LET int_flag = FALSE
|
|
OPEN WINDOW cpfmwd007 AT 10,3 WITH FORM "cpfmwd007"
|
|
ATTRIBUTE(BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST)
|
|
|
|
DECLARE busca_ctas CURSOR FOR
|
|
SELECT a.cuenta_no,a.departamento,a.cod_aux,a.cod_sec,a.num_doc,
|
|
a.debito,a.credito
|
|
FROM cptb00003 a
|
|
WHERE a.cod_sp = factura.cod_sp AND
|
|
a.cod_sp_sec = factura.cod_sp_sec AND
|
|
a.factura = factura.num_doc AND
|
|
a.cuenta_no NOT IN ("21-03","21-02")
|
|
|
|
LET idx2 = 1
|
|
FOREACH busca_ctas INTO cuentas[idx2].*
|
|
LET idx2 = idx2 + 1
|
|
END FOREACH
|
|
CALL SET_COUNT(idx2 - 1)
|
|
|
|
LABEL arreglo1:
|
|
LET int_flag = FALSE
|
|
INPUT ARRAY cuentas WITHOUT DEFAULTS FROM cuentas1.*
|
|
BEFORE ROW
|
|
LET curr = ARR_CURR()
|
|
LET curr1 = SCR_LINE()
|
|
|
|
AFTER FIELD cuenta_no
|
|
IF cuentas[curr].cuenta_no IS NOT NULL THEN
|
|
SELECT a.descripcion,a.cata,a.depto,a.nivel,a.ref
|
|
INTO descripcion,cat,dpto,niv,refe
|
|
FROM cgtb00001 a
|
|
WHERE a.status_t IS NULL AND a.cuenta_no = cuentas[curr].cuenta_no
|
|
AND a.nivel = 3
|
|
|
|
IF STATUS = NOTFOUND OR descripcion IS NULL THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
|
|
DISPLAY BY NAME descripcion ATTRIBUTE(BLUE)
|
|
|
|
IF cuentas[curr].cuenta_no = "21-02" or
|
|
cuentas[curr].cuenta_no = "21-03" THEN
|
|
LET numero_msg = 192
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
END IF
|
|
|
|
IF cat = "S" THEN
|
|
IF cuentas[curr].cod_aux IS NULL THEN
|
|
LET cuentas[curr].cod_aux = factura.cod_sp
|
|
END IF
|
|
IF cuentas[curr].sec_aux IS NULL THEN
|
|
LET cuentas[curr].sec_aux = factura.cod_sp_sec
|
|
END IF
|
|
END IF
|
|
|
|
IF refe = "S" THEN
|
|
IF cuentas[curr].num_doc IS NULL THEN
|
|
LET cuentas[curr].num_doc = factura.orden_no
|
|
END IF
|
|
END IF
|
|
|
|
DISPLAY cuentas[curr].cod_aux,cuentas[curr].sec_aux,cuentas[curr].num_doc
|
|
TO cuentas1[curr1].cod_aux,cuentas1[curr1].sec_aux,cuentas1[curr1].num_doc
|
|
BEFORE FIELD departamento
|
|
IF dpto = "N" OR dpto IS NULL THEN
|
|
LET cuentas[curr].departamento = NULL
|
|
NEXT FIELD cod_aux
|
|
END IF
|
|
|
|
AFTER FIELD departamento
|
|
IF cuentas[curr].departamento IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
|
|
SELECT UNIQUE a.departamento FROM adtb00001 a
|
|
WHERE a.status_t IS NULL AND a.departamento = cuentas[curr].departamento
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
|
|
BEFORE FIELD cod_aux
|
|
IF cat = "N" OR cat IS NULL THEN
|
|
|
|
LET cuentas[curr].cod_aux = NULL
|
|
LET cuentas[curr].sec_aux = NULL
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
AFTER FIELD cod_aux
|
|
IF cat = "N" OR cat IS NULL THEN
|
|
|
|
LET cuentas[curr].cod_aux = NULL
|
|
LET cuentas[curr].sec_aux = NULL
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
BEFORE FIELD num_doc
|
|
IF refe = "N" OR refe IS NULL THEN
|
|
|
|
LET cuentas[curr].num_doc = NULL
|
|
NEXT FIELD debito
|
|
END IF
|
|
|
|
AFTER FIELD num_doc
|
|
IF refe = "N" OR refe IS NULL THEN
|
|
|
|
LET cuentas[curr].num_doc = NULL
|
|
NEXT FIELD debito
|
|
END IF
|
|
|
|
AFTER ROW
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT INPUT
|
|
END IF
|
|
|
|
IF cuentas[curr].cuenta_no is not null THEN
|
|
IF cuentas[curr].debito = 0 and
|
|
cuentas[curr].credito = 0 THEN
|
|
LET numero_msg = 207
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
END IF
|
|
|
|
END INPUT
|
|
IF int_flag THEN
|
|
GOTO sale
|
|
END IF
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF cuentas[idx].cuenta_no is not null THEN
|
|
IF cuentas[idx].cuenta_no = "21-02" or
|
|
cuentas[idx].cuenta_no = "21-03" THEN
|
|
LET chequea = "S"
|
|
LET valor_cxp = valor_cxp + cuentas[idx].debito
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF chequea = "S" THEN
|
|
IF valor_f != valor_cxp THEN
|
|
LET numero_msg = 206
|
|
CALL msg(numero_msg)
|
|
SLEEP 2
|
|
RETURN
|
|
#NEXT FIELD debito
|
|
END IF
|
|
END IF
|
|
|
|
# Controla las cuentas por pagar si se digito una cuenta perteneciente
|
|
# a las cuentas por pagar y no se le dice al programa que no afecta
|
|
# las cuentas por pagar
|
|
LET tiene_cta = "N"
|
|
FOR idx = 1 TO arr_count()
|
|
IF cuentas[idx].cuenta_no is not null THEN
|
|
LET tiene_cta = "S"
|
|
END IF
|
|
END FOR
|
|
IF tiene_cta = "N" THEN
|
|
LET numero_msg = 84
|
|
CALL msg(numero_msg)
|
|
GOTO arreglo1
|
|
#RETURN
|
|
END IF
|
|
|
|
LET valor = 0
|
|
LET monto = 0
|
|
|
|
#LET ctrl_reg = 0
|
|
FOR idx = 1 TO arr_count()
|
|
IF cuentas[idx].debito is null THEN
|
|
LET cuentas[idx].debito = 0
|
|
END IF
|
|
|
|
IF cuentas[idx].credito is null THEN
|
|
LET cuentas[idx].credito = 0
|
|
END IF
|
|
|
|
LET valor = valor + cuentas[idx].debito
|
|
LET monto = cuentas[idx].credito + monto
|
|
LET ctrl_reg = idx
|
|
END FOR
|
|
|
|
LET valor = valor - monto
|
|
|
|
IF valor != factura.valor_fac THEN
|
|
LET numero_msg = 213
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
GOTO arreglo1
|
|
END IF
|
|
LABEL sale:
|
|
CLOSE WINDOW cpfmwd007
|
|
END FUNCTION
|
|
|
|
REPORT apl_fact(x)
|
|
|
|
DEFINE x RECORD
|
|
cod_sp SMALLINT,
|
|
cod_sp_sec SMALLINT,
|
|
nom_sup CHAR(30),
|
|
num_doc CHAR(10),
|
|
valor_fac DECIMAL(12,2),
|
|
detalle CHAR(30),
|
|
tipo CHAR(1),
|
|
aplica_a CHAR(10),
|
|
valor DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE cod1,dias SMALLINT
|
|
DEFINE direccion,p_descrip CHAR(30)
|
|
DEFINE p_casa,p_zona,p_numero CHAR(10)
|
|
DEFINE doble_on CHAR(2)
|
|
DEFINE doble_off CHAR(2)
|
|
DEFINE negrillas_on CHAR(6)
|
|
DEFINE negrillas_off CHAR(6)
|
|
DEFINE comp_on CHAR(2)
|
|
DEFINE comp_off CHAR(2)
|
|
DEFINE doce CHAR(2)
|
|
DEFINE normal CHAR(2)
|
|
DEFINE normall CHAR(3)
|
|
DEFINE comprimido CHAR(3)
|
|
DEFINE hora CHAR(5)
|
|
DEFINE tipo CHAR(2)
|
|
DEFINE imp_cli CHAR(1)
|
|
DEFINE credito, debito, tcredito, tdebito, tbalance,t_valor1,t_valor2,
|
|
limite,b_balance,v1_30,v31_45,v46_60,vm_60,p_valor,t_valor3
|
|
DECIMAL(12,2)
|
|
OUTPUT
|
|
TOP MARGIN 0
|
|
LEFT MARGIN 0
|
|
BOTTOM MARGIN 2
|
|
PAGE LENGTH 66
|
|
|
|
FORMAT
|
|
PAGE HEADER
|
|
LET doble_on = ASCII 14
|
|
LET doble_off = ASCII 20
|
|
LET negrillas_on = ASCII 027, ASCII 098
|
|
LET negrillas_off = ASCII 027, ASCII 099
|
|
LET comp_on = ASCII 31
|
|
LET comp_off = ASCII 30
|
|
LET comprimido = ASCII 031
|
|
LET doce = ASCII 27, ASCII 77
|
|
LET normal = ASCII 27, ASCII 80
|
|
LET normall = ASCII 030
|
|
LET hora = time
|
|
LET lj = (86 - LENGTH(p_companias.nombre CLIPPED))/2
|
|
PRINT COLUMN 1, comp_off,negrillas_on
|
|
PRINT COLUMN 1, "cpprmt001",
|
|
COLUMN lj, p_companias.nombre CLIPPED,
|
|
COLUMN 79, "Pag. ",pageno using "###"
|
|
PRINT COLUMN 16, " Sistema de Cuentas por Pagar",
|
|
COLUMN 79, today using "dd/mm/yyyy"
|
|
PRINT COLUMN 16, " Modificacion de Factura",
|
|
COLUMN 82, hora
|
|
|
|
SKIP 1 LINE
|
|
LET b_balance = 0
|
|
|
|
PRINT COLUMN 1, "Factura No. : ",x.num_doc
|
|
PRINT COLUMN 1, "Suplidor : ",x.cod_sp using "&&","-",
|
|
x.cod_sp_sec using "&&&&",
|
|
" ", x.nom_sup clipped
|
|
PRINT COLUMN 1, "Fecha Aplic.: ", today USING "dd/mm/yyyy"
|
|
PRINT COLUMN 1, "Valor Fact. : ", x.valor_fac
|
|
USING "###,###,###.##"
|
|
PRINT COLUMN 1, "Observacion : ", x.detalle CLIPPED
|
|
SKIP 1 LINE
|
|
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------",
|
|
"--------------------------------"
|
|
|
|
PRINT COLUMN 1, "Tipo",
|
|
COLUMN 20, "Aplica",
|
|
COLUMN 65, "Monto "
|
|
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------",
|
|
"--------------------------------"
|
|
PRINT COLUMN 1, negrillas_off
|
|
|
|
LET debito = 0
|
|
|
|
ON EVERY ROW
|
|
|
|
LET debito = debito + x.valor
|
|
|
|
PRINT COLUMN 1, x.tipo,
|
|
COLUMN 20, x.aplica_a,
|
|
COLUMN 60, x.valor USING "###,###,###.##"
|
|
|
|
ON LAST ROW
|
|
PRINT comp_off
|
|
END REPORT
|
|
|