1846 lines
58 KiB
Plaintext
1846 lines
58 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 xbienes,xservicios,valor_recibido_b,valor_recibido_d,debito1,credito1 decimal(12,2)
|
|
DEFINE term_sp SMALLINT
|
|
DEFINE fecha_control date
|
|
DEFINE dias SMALLINT
|
|
DEFINE cod_mon char(10)
|
|
DEFINE ototal_bruto,ototal_desc,ototal_itbis,monto_orden,itbis DECIMAL(16,2)
|
|
DEFINE hoy,fecha1,fecha2 DATE
|
|
DEFINE debe_ir CHAR(1)
|
|
DEFINE cuenta CHAR(8)
|
|
DEFINE total1,valor DECIMAL(12,2)
|
|
DEFINE cat,dpto,refe CHAR(1)
|
|
|
|
DEFINE p,l,niv SMALLINT
|
|
DEFINE idx2 INTEGER
|
|
DEFINE valor2 DECIMAL(13,2)
|
|
|
|
DEFINE idx1 SMALLINT
|
|
|
|
DEFINE cuenta_itibis,cuenta_mayor CHAR(8),
|
|
credito decimal(12,2)
|
|
|
|
DEFINE cod_sp1,cod_sp2 SMALLINT
|
|
DEFINE valor3 DECIMAL(12,2)
|
|
|
|
DEFINE datos_usu RECORD
|
|
status_t CHAR(1),
|
|
us_crea CHAR(30),
|
|
fech_crea CHAR(30),
|
|
us_mod CHAR(30),
|
|
fech_mod CHAR(30)
|
|
END RECORD
|
|
|
|
DEFINE supl DYNAMIC ARRAY OF RECORD
|
|
cod_sp SMALLINT,
|
|
cod_sp_sec SMALLINT,
|
|
nom_sp CHAR(100)
|
|
END RECORD
|
|
|
|
DEFINE cuentas DYNAMIC ARRAY 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),
|
|
tipo_cta CHAR(50)
|
|
|
|
END RECORD
|
|
DEFINE descripcion CHAR(30)
|
|
|
|
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
|
|
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
CONNECT to "smarmotech" AS "MSQL_c" user usuarios USING clave
|
|
CONNECT to "marmotech" AS "IFMX" 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
|
|
ON ACTION nuevo
|
|
CALL cppcad000()
|
|
ON ACTION buscar
|
|
CALL cppcmd000()
|
|
ON ACTION salir
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
##funcion par los gastos
|
|
{
|
|
FUNCTION cgastos()
|
|
|
|
DEFINE codigo_gasto SMALLINT, des_gasto CHAR(30)
|
|
|
|
|
|
DECLARE bgastos CURSOR FOR
|
|
SELECT a.codigo_fiscal, a.descripcion FROM cgtb00074 a
|
|
|
|
CALL cgastos.clear()
|
|
|
|
FOREACH bgastos INTO codigo_gasto,des_gasto
|
|
CALL cgastos.additem(kventas,dventas)
|
|
END FOREACH
|
|
|
|
|
|
}
|
|
|
|
|
|
####### Proceso para Insertar Una Factura ###########
|
|
|
|
FUNCTION cppcad000()
|
|
|
|
LET hoy = null
|
|
LET fecha1 = TODAY
|
|
|
|
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
|
|
|
|
LET tipo_ncf=NULL
|
|
LET descripcion_ncf=NULL
|
|
LET itbis =NULL
|
|
LET ncf = NULL
|
|
|
|
|
|
|
|
INPUT BY NAME factura.*,ITBIS,TIPO_NCF,cod_mon,NCF WITHOUT DEFAULTS
|
|
BEFORE INPUT
|
|
|
|
CALL cuentas.clear()
|
|
|
|
AFTER FIELD itbis
|
|
IF itbis IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD itbis
|
|
END IF
|
|
ON KEY (control-p)
|
|
NEXT FIELD cod_sp
|
|
|
|
#BEFORE FIELD cod_mon
|
|
# CALL busca_moneda()
|
|
|
|
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 tipo_ncf
|
|
IF tipo_ncf IS NOT NULL THEN
|
|
SELECT a.descripcion INTO descripcion_ncf FROM cgtb00074 a
|
|
WHERE a.codigo_fiscal=tipo_ncf
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_ncf
|
|
END IF
|
|
|
|
display BY NAME descripcion_ncf
|
|
END IF
|
|
|
|
{AFTER FIELD cod_mon
|
|
IF cod_mon IS NOT NULL THEN
|
|
SELECT a.ncf INTO chncf FROM cotb00031 a
|
|
WHERE a.cod_mon = cod_mon
|
|
|
|
IF chncf = 'NO' THEN
|
|
EXIT INPUT
|
|
END IF
|
|
END IF}
|
|
AFTER FIELD ncf
|
|
|
|
IF NCF IS NOT NULL THEN
|
|
if Length(ncf CLIPPED ) <> 11 THEN
|
|
call fgl_winmessage('mensaje','La longitud no es valida debe tener 11 posiciones',1)
|
|
NEXT FIELD ncf
|
|
|
|
ELSE
|
|
|
|
LET conteo=0
|
|
SELECT count(*) INTO conteo FROM cptb00004 a
|
|
WHERE cod_sp=factura.cod_sp and cod_sp_sec=factura.cod_sp_sec and a.ncf=ncf
|
|
|
|
IF conteo > 0 THEN
|
|
call fgl_winmessage('mensaje','Este NCF ya esta registrado',1)
|
|
|
|
NEXT FIELD ncf
|
|
END IF
|
|
|
|
END IF
|
|
END IF
|
|
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
|
|
|
|
SELECT cuenta_no INTO cuenta FROM cotb00001
|
|
WHERE cod_sp=factura.cod_sp AND cod_sp_sec=factura.cod_sp_sec
|
|
|
|
If cuenta IS NULL THEN
|
|
LET numero_msg = 393
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp_sec
|
|
END IF
|
|
|
|
|
|
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
|
|
SELECT b.term_sp INTO term_sp FROM cotb00001 b
|
|
WHERE b.cod_sp=factura.cod_sp AND
|
|
b.cod_sp_sec=factura.cod_sp_sec
|
|
|
|
SELECT a.dias INTO dias FROM cotb00024 a
|
|
WHERE a.term_sp=term_sp
|
|
LET fecha_control = factura.fecha_orig
|
|
|
|
LET factura.fecha_proc = fecha_control + dias
|
|
|
|
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
|
|
{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 NOT null THEN
|
|
SET CONNECTION "MSQL_c"
|
|
|
|
LET ototal_bruto=0
|
|
LET ototal_desc=0
|
|
LET ototal_itbis=0
|
|
|
|
SELECT UNIQUE a.tipo,b.total_flete,b.total_otro,b.total_valor
|
|
INTO factura.tipo_oc,ototal_bruto,ototal_desc,ototal_itbis FROM cotb00014 a,cotb00029 b
|
|
WHERE a.num_oc = b.num_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)
|
|
SET CONNECTION "IFMX"
|
|
NEXT FIELD orden_no
|
|
END IF
|
|
DISPLAY BY NAME factura.tipo_oc
|
|
# BUSCA LO RECIBIDO
|
|
IF factura.tipo_oc = "01" THEN
|
|
SELECT SUM(a.cantidad_2*precio),SUM((a.cantidad_2*precio)*(b.porc_desc/100))
|
|
INTO valor_recibido_b,valor_recibido_d FROM intb00006 a,cotb00015 b
|
|
WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec AND
|
|
b.tipo = factura.tipo_oc AND a.orden_compra = factura.orden_no AND
|
|
a.orden_compra = b.num_oc AND
|
|
a.status_t IS null
|
|
GROUP BY b.porc_Desc
|
|
END IF
|
|
|
|
IF factura.tipo_oc = "02" THEN
|
|
SELECT SUM(a.cantidad_2*precio),SUM((a.cantidad_2*precio)*(b.porc_desc/100))
|
|
INTO valor_recibido_b,valor_recibido_d FROM iptb00006 a,cotb00015 b
|
|
WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec AND
|
|
b.tipo = factura.tipo_oc AND a.orden_compra = factura.orden_no AND
|
|
a.orden_compra = b.num_oc AND
|
|
a.status_t IS null
|
|
GROUP BY b.porc_Desc
|
|
END IF
|
|
#5401
|
|
IF factura.tipo_oc = "03" THEN
|
|
SELECT SUM(a.cantidad_2*precio),SUM((a.cantidad_2*precio)*(b.porc_desc/100)) INTO valor_recibido_b,valor_recibido_d FROM iptb00006 a,cotb00015 b
|
|
WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec AND
|
|
b.tipo = factura.tipo_oc AND a.orden_compra = factura.orden_no AND
|
|
a.orden_compra = b.num_oc AND
|
|
a.status_t IS null
|
|
|
|
END IF
|
|
|
|
|
|
LET monto_orden = ototal_bruto-ototal_Desc
|
|
LET valor_recibido_b = valor_recibido_b - valor_recibido_d
|
|
DISPLAY BY NAME monto_orden,valor_recibido_b
|
|
SET CONNECTION "IFMX"
|
|
# VERIFICA SI LA ORDEN TIENE FACTURA EN CXP
|
|
# SELECT a.cod_sp FROM cptb00001 a WHERE a.orden_no = factura.orden_no AND
|
|
# a.status_t IS NULL
|
|
# IF STATUS <> NOTFOUND THEN
|
|
# CALL fgl_winmessage("INFO","EXISTEN FACTURAS CON ESTE NUMERO DE ORDEN","INFO")
|
|
# END IF
|
|
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
|
|
|
|
CALL contab()
|
|
IF int_flag THEN
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
DISPLAY BY NAME Xbienes,Xservicios
|
|
|
|
LET debito1 = debito1 + cuentas[curr1].debito
|
|
|
|
LET credito1 = cuentas[idx].credito + credito1
|
|
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 a.num_doc
|
|
|
|
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
|
|
|
|
|
|
INSERT INTO cptb00001
|
|
(tipo_doc,num_doc,cod_sp,cod_sp_sec,fecha_orig,fecha_proc,orden_no,tipo,aplica_a,
|
|
cta_ctble,valor,detalle,us_crea,fech_crea,bienes,servicios)
|
|
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,usuarios,
|
|
GETDATE(),xbienes,xservicios)
|
|
IF ncf IS NOT NULL THEN
|
|
INSERT INTO cptb00004 (cod_sp, cod_sp_sec, num_doc,codigo_fiscal, ncf,
|
|
monto_itbi, US_CREA, FECH_CREA,cod_moneda,tipo_doc)
|
|
values(factura.cod_sp,factura.cod_sp_sec,factura.num_doc, tipo_ncf,ncf,itbis,suser_sname(),getdate(),
|
|
cod_mon,'FT')
|
|
END IF
|
|
|
|
FOR idx = 1 TO arr_fac1.getLength()
|
|
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
|
|
(tipo_doc,num_doc,cod_sp,cod_sp_sec,fecha_orig,fecha_proc,orden_no,tipo,aplica_a,
|
|
valor,detalle,us_crea,fech_crea,bienes,servicios)
|
|
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,
|
|
arr_fac1[idx].valor,factura.detalle,SUSER_SNAME(),GETDATE(),0,0)
|
|
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
|
|
}
|
|
##para buscar las cuentas contables
|
|
|
|
SELECT cuenta_no INTO cuenta FROM cotb00001
|
|
WHERE cod_sp=factura.cod_sp AND cod_sp_sec=factura.cod_sp_sec
|
|
LET credito=factura.valor_fac
|
|
|
|
FOR idx = 1 TO cuentas.getLength()
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
IF idx = 1 THEN
|
|
|
|
IF cuenta IS NOT NULL then
|
|
INSERT INTO cptb00003
|
|
(fecha,cod_sp,cod_sp_sec,factura,cuenta_no
|
|
,detalles,debito,credito,us_crea,fech_crea)
|
|
VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuenta,factura.detalle,
|
|
0,credito,SUSER_SNAME(),GETDATE())
|
|
END IF
|
|
|
|
IF cuenta_itibis IS NOT NULL THEN
|
|
INSERT INTO cptb00003
|
|
(fecha,cod_sp,cod_sp_sec,factura,cuenta_no
|
|
,detalles,debito,credito,us_crea,fech_crea)
|
|
VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuenta_itibis,factura.detalle,
|
|
0,itbis,SUSER_SNAME(),GETDATE())
|
|
END IF
|
|
|
|
|
|
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
|
|
(fecha,cod_sp,cod_sp_sec,factura,cuenta_no,departamento,num_doc,cod_aux,cod_sec
|
|
,detalles,debito,credito,us_crea,fech_crea)
|
|
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,
|
|
SUSER_SNAME(),GETDATE())
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
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,a.codigo_fiscal,a.ncf
|
|
FROM cod_sp,cod_sp_sec,num_doc,fecha_orig,fecha_proc,
|
|
valor,detalle,tipo_ncf,ncf
|
|
|
|
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 b.cod_sp,b.cod_sp_sec,b.num_doc,CONVERT(CHAR(10),b.fecha_orig,103), ",
|
|
"CONVERT(CHAR(10),b.fecha_proc,103),b.valor,b.detalle,b.status_t,b.us_crea, ",
|
|
"CAST(b.fech_crea AS CHAR(16)),b.us_mod,CAST(b.fech_mod AS CHAR(16)),a.codigo_fiscal, ",
|
|
" a.ncf,ISNULL(a.monto_itbi,0) ",
|
|
" FROM cptb00001 b LEFT OUTER join cptb00004 a ON b.num_doc = a.num_doc and ",
|
|
" b.cod_sp = a.cod_sp AND b.cod_sp_sec = a.cod_sp_sec ",
|
|
" WHERE ",
|
|
" b.status_t is null AND b.tipo_doc = 'FT' And ",
|
|
criterio clipped," ORDER BY b.cod_sp,b.cod_sp_sec"
|
|
|
|
DISPLAY selec
|
|
PREPARE busca FROM selec
|
|
DECLARE datos SCROLL CURSOR FOR busca
|
|
OPEN datos
|
|
|
|
#### Buscando el primer registro
|
|
|
|
FETCH FIRST datos INTO factura.*,datos_usu.*,tipo_ncf,ncf,itbis
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor
|
|
DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,itbis ATTRIBUTE(BLUE)
|
|
|
|
MENU "OPCION"
|
|
COMMAND "Siguiente"
|
|
"Presenta en pantalla el proximo registro encontrado"
|
|
FETCH NEXT datos INTO factura.*,datos_usu.*,tipo_ncf
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
|
|
CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor
|
|
|
|
DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Anterior"
|
|
|
|
"Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS datos INTO factura.*,datos_usu.*,tipo_ncf
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor
|
|
|
|
DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Primero"
|
|
"Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST datos INTO factura.*,datos_usu.*,tipo_ncf
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor
|
|
|
|
DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Ultimo"
|
|
"Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST datos INTO factura.*,datos_usu.*,tipo_ncf
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor
|
|
|
|
DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf 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
|
|
SELECT a.descripcion INTO descripcion_ncf FROM cgtb00074 a
|
|
WHERE a.codigo_fiscal=tipo_ncf
|
|
|
|
SELECT a.codigo_fiscal,a.ncf,a.monto_itbi
|
|
INTO tipo_ncf, ncf,itbis FROM cptb00004 a
|
|
WHERE a.cod_sp=factura.cod_sp AND a.cod_sp_sec=factura.cod_sp_sec
|
|
AND a.num_doc=factura.num_doc
|
|
|
|
DISPLAY BY NAME tipo_ncf, ncf,itbis,descripcion_ncf
|
|
|
|
IF debe_ir = "N" THEN
|
|
INPUT BY NAME factura.fecha_orig,factura.fecha_proc,factura.valor_fac,itbis,
|
|
factura.tipo_oc,factura.orden_no,tipo_ncf,cod_mon,ncf,
|
|
factura.detalle WITHOUT DEFAULTS
|
|
AFTER FIELD itbis
|
|
IF itbis IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD itbis
|
|
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 not null THEN
|
|
SET CONNECTION "MSQL_c"
|
|
|
|
LET ototal_bruto=0
|
|
LET ototal_desc=0
|
|
LET ototal_itbis=0
|
|
|
|
SELECT UNIQUE a.tipo,b.total_flete,b.total_otro,b.total_valor
|
|
INTO factura.tipo_oc,ototal_bruto,ototal_desc,ototal_itbis FROM cotb00014 a,cotb00029 b
|
|
WHERE a.num_oc = b.num_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)
|
|
SET CONNECTION "IFMX"
|
|
NEXT FIELD orden_no
|
|
END IF
|
|
DISPLAY BY NAME factura.tipo_oc
|
|
# BUSCA LO RECIBIDO
|
|
IF factura.tipo_oc = "01" THEN
|
|
SELECT SUM(a.cantidad_2*precio),SUM((a.cantidad_2*precio)*(b.porc_desc/100))
|
|
INTO valor_recibido_b,valor_recibido_d FROM intb00006 a,cotb00015 b
|
|
WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec AND
|
|
b.tipo = factura.tipo_oc AND a.orden_compra = factura.orden_no AND
|
|
a.orden_compra = b.num_oc AND
|
|
a.status_t IS null
|
|
GROUP BY b.porc_Desc
|
|
END IF
|
|
|
|
IF factura.tipo_oc = "02" THEN
|
|
SELECT SUM(a.cantidad_2*precio),SUM((a.cantidad_2*precio)*(b.porc_desc/100))
|
|
INTO valor_recibido_b,valor_recibido_d FROM iptb00006 a,cotb00015 b
|
|
WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec AND
|
|
b.tipo = factura.tipo_oc AND a.orden_compra = factura.orden_no AND
|
|
a.orden_compra = b.num_oc AND
|
|
a.status_t IS null
|
|
GROUP BY b.porc_Desc
|
|
END IF
|
|
|
|
IF factura.tipo_oc = "03" THEN
|
|
SELECT SUM(a.cantidad_2*precio),SUM((a.cantidad_2*precio)*(b.porc_desc/100)) INTO valor_recibido_b,valor_recibido_d FROM iptb00006 a,cotb00015 b
|
|
WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec AND
|
|
b.tipo = factura.tipo_oc AND a.orden_compra = factura.orden_no AND
|
|
a.orden_compra = b.num_oc AND
|
|
a.status_t IS null
|
|
|
|
END IF
|
|
|
|
|
|
LET monto_orden = ototal_bruto-ototal_Desc
|
|
LET valor_recibido_b = valor_recibido_b - valor_recibido_d
|
|
DISPLAY BY NAME monto_orden,valor_recibido_b
|
|
SET CONNECTION "IFMX"
|
|
# VERIFICA SI LA ORDEN TIENE FACTURA EN CXP
|
|
SELECT a.cod_sp FROM cptb00001 a WHERE a.orden_no = factura.orden_no AND
|
|
a.status_t IS NULL
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL fgl_winmessage("INFO","EXISTEN FACTURAS CON ESTE NUMERO DE ORDEN","INFO")
|
|
END IF
|
|
#BEFORE FIELD cod_mon
|
|
# CALL busca_moneda()
|
|
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
|
|
############## TERMINA INPUT ARRAY#####################################
|
|
|
|
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
|
|
|
|
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,detalle,
|
|
us_mod,fech_mod,valor) =
|
|
(factura.fecha_orig,factura.fecha_proc,
|
|
factura.orden_no,factura.tipo_oc,
|
|
factura.detalle,
|
|
usuarios,GETDATE(),factura.valor_fac)
|
|
WHERE @num_doc = factura.num_doc
|
|
AND @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@tipo_doc = "FT"
|
|
|
|
#NCF
|
|
|
|
IF ncf IS NOT NULL THEN
|
|
SELECT a.cod_sp FROM cptb00004 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_Sec = factura.cod_sp_sec AND
|
|
a.num_doc = factura.num_doc
|
|
IF STATUS = NOTFOUND THEN
|
|
INSERT INTO cptb00004 (cod_sp, cod_sp_sec, num_doc,codigo_fiscal, ncf,
|
|
monto_itbi, US_CREA, FECH_CREA,cod_moneda,tipo_Doc)
|
|
values(factura.cod_sp,factura.cod_sp_sec,factura.num_doc, tipo_ncf,ncf,itbis,suser_sname(),getdate(),
|
|
cod_mon,'FT')
|
|
ELSE
|
|
UPDATE cptb00004 SET codigo_fiscal = tipo_ncf,
|
|
ncf = ncf,
|
|
monto_itbi = itbis
|
|
WHERE cod_sp = factura.cod_sp AND cod_sp_sec = factura.cod_sp_sec AND
|
|
num_doc = factura.num_doc
|
|
END IF
|
|
END IF
|
|
|
|
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
|
|
(tipo_doc,num_doc,cod_sp,cod_sp_sec,fecha_orig,fecha_proc,orden_no,tipo,aplica_a,
|
|
valor,detalle,us_crea,fech_crea,bienes,servicios)
|
|
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,
|
|
arrfac[idx].valor,factura.detalle,SUSER_SNAME(),GETDATE(),0,0)
|
|
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
|
|
|
|
|
|
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"
|
|
|
|
|
|
|
|
|
|
##para buscar las cuentas contables
|
|
|
|
SELECT cuenta_no INTO cuenta FROM cotb00001
|
|
WHERE cod_sp=factura.cod_sp AND cod_sp_sec=factura.cod_sp_sec
|
|
LET credito=factura.valor_fac
|
|
|
|
INSERT INTO cptb00003
|
|
(fecha,cod_sp,cod_sp_sec,factura,cuenta_no
|
|
,detalles,debito,credito,us_mod,fech_mod)
|
|
VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuenta,factura.detalle,
|
|
0,factura.valor_fac,SUSER_SNAME(),GETDATE())
|
|
|
|
|
|
IF cuenta_itibis IS NOT NULL AND itbis > 0 THEN
|
|
INSERT INTO cptb00003 (fecha,cod_sp,cod_sp_sec,factura,cuenta_no
|
|
,detalles,debito,credito,us_mod,fech_mod)
|
|
VALUES (factura.fecha_orig,factura.cod_sp,
|
|
factura.cod_sp_sec,factura.num_doc,cuenta_itibis,factura.detalle,
|
|
0,itbis,SUSER_SNAME(),GETDATE())
|
|
|
|
END IF
|
|
|
|
FOR idx = 1 TO cuentas.getLength()
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
|
|
|
|
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
|
|
(fecha,cod_sp,cod_sp_sec,factura,cuenta_no,departamento,num_doc,cod_aux,cod_sec
|
|
,detalles,debito,credito,us_crea,fech_crea)
|
|
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,
|
|
SUSER_SNAME(),GETDATE())
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
|
|
IF debe_ir = "S" THEN
|
|
LET handler = configureOutput("SVG")
|
|
|
|
START REPORT apl_fact TO XML HANDLER handler
|
|
|
|
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
|
|
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"
|
|
|
|
DELETE FROM cptb00004
|
|
WHERE @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@num_doc = factura.num_doc
|
|
|
|
# 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"
|
|
|
|
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()
|
|
DEFINE tdebito,tcredito,diferencia DEC(12,2)
|
|
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,c.tipo_cuenta
|
|
FROM cptb00003 a,cotb00001 b,cgtb00001 c
|
|
WHERE a.cod_sp = factura.cod_sp AND
|
|
a.cod_sp_sec = factura.cod_sp_sec AND
|
|
a.cod_sp = b.cod_sp AND
|
|
a.cod_sp_Sec = b.cod_sp_Sec AND
|
|
a.factura = factura.num_doc AND
|
|
a.cuenta_no = c.cuenta_no AND
|
|
a.cuenta_no <> b.cuenta_no
|
|
|
|
|
|
LET idx2 = 1
|
|
LET tdebito = 0
|
|
LET tcredito = 0
|
|
FOREACH busca_ctas INTO cuentas[idx2].*
|
|
LET tdebito = tdebito + cuentas[idx2].debito
|
|
LET tcredito = tcredito + cuentas[idx2].credito
|
|
LET idx2 = idx2 + 1
|
|
END FOREACH
|
|
CALL SET_COUNT(idx2 - 1)
|
|
DISPLAY BY NAME tdebito,tcredito
|
|
LABEL arreglo1:
|
|
LET int_flag = FALSE
|
|
INPUT ARRAY cuentas WITHOUT DEFAULTS FROM cuentas1.*
|
|
|
|
|
|
BEFORE ROW
|
|
LET curr = ARR_CURR()
|
|
LET curr1 = SCR_LINE()
|
|
|
|
ON KEY (control-W)
|
|
LET curr1 = arr_curr()
|
|
LET scr_l = scr_line()
|
|
CASE
|
|
WHEN INFIELD (cuenta_no)
|
|
CALL busca_cuenta()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 159
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_emp
|
|
END IF
|
|
LET descripcion = cuentas1[curr1].descripcion
|
|
LET cuentas[curr].cuenta_no = cuentas1[curr1].cuenta_no
|
|
|
|
DISPLAY BY NAME cuentas[curr].cuenta_no,descripcion
|
|
END CASE
|
|
|
|
|
|
AFTER FIELD cuenta_no
|
|
|
|
IF cuentas[curr].cuenta_no IS NOT NULL THEN
|
|
SELECT a.descripcion,a.cata,a.depto,a.nivel,a.ref,a.tipo_cuenta
|
|
INTO descripcion,cat,dpto,niv,refe,cuentas[curr].tipo_cta
|
|
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)
|
|
DISPLAY cuentas[curr].tipo_cta TO cuentas1[scr_line()].tipo_cta
|
|
IF cuentas[curr].tipo_cta <> 'BIENES' AND cuentas[curr].tipo_cta <> 'SERVICIOS' AND
|
|
cuentas[curr].tipo_cta <> 'IMPUESTOS'
|
|
THEN
|
|
CALL fgl_winmessage("ERROR","DEBE DIGITAR CUENTA IDENTIFICADA <BIEN> o <SERVICIOS>","INFO")
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
IF cuentas[curr].tipo_cta = 'IMPUESTOS' THEN
|
|
LET cuentas[curr].debito =itbis
|
|
DISPLAY cuentas[curr].debito TO cuentas1[curr1].debito
|
|
END IF
|
|
IF cuentas[curr].cuenta_no = cuenta_mayor THEN
|
|
CALL msg(192)
|
|
NEXT FIELD cuenta_no
|
|
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
|
|
|
|
END IF
|
|
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
|
|
AFTER INPUT
|
|
LET tdebito =0
|
|
LET tcredito=0
|
|
LET xbienes = 0
|
|
LET xservicios = 0
|
|
FOR idx = 1 TO cuentas.getLength()
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
IF cuentas[idx].tipo_cta = 'BIENES' THEN
|
|
LET xbienes = xbienes + cuentas[idx].debito
|
|
END IF
|
|
IF cuentas[idx].tipo_cta = 'SERVICIOS' THEN
|
|
LET xservicios = xservicios + cuentas[idx].debito
|
|
END IF
|
|
LET tdebito = tdebito + cuentas[idx].debito
|
|
LET tcredito = tcredito + cuentas[idx].credito
|
|
END IF
|
|
END FOR
|
|
DISPLAY BY NAME tdebito,tcredito
|
|
|
|
|
|
LET tdebito = 0
|
|
LET tcredito = 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 tdebito = tdebito + cuentas[idx].debito
|
|
LET tcredito = cuentas[idx].credito + tcredito
|
|
END FOR
|
|
|
|
LET tcredito = tcredito + factura.valor_fac
|
|
LET diferencia = tdebito-tcredito
|
|
|
|
DISPLAY BY NAME diferencia,tdebito,tcredito
|
|
IF diferencia <> 0 THEN
|
|
CALL msg(174)
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
END INPUT
|
|
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
|
|
|
|
FUNCTION busca_monedas()
|
|
DEFINE pmoneda ui.combobox,
|
|
kmoneda SMALLINT,kdescripcion CHAR(30)
|
|
|
|
DECLARE moneda CURSOR FOR
|
|
SELECT a.cod_mon,a.descrip_mon FROM cotb00031 a
|
|
WHERE a.status_t is null
|
|
ORDER BY a.descrip_mon
|
|
LET pmoneda = ui.combobox.forname("formonly.cod_mon")
|
|
CALL pmoneda.clear()
|
|
FOREACH moneda INTO kmoneda,kdescripcion
|
|
CALL pmoneda.additem(kmoneda,kdescripcion)
|
|
END FOREACH
|
|
|
|
END FUNCTION
|
|
|
|
|
|
FUNCTION busca_cuenta()
|
|
OPEN WINDOW cons_cuenta AT 10,5 WITH FORM "cgfmwd004" ATTRIBUTE
|
|
(BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
|
|
|
|
CONSTRUCT BY NAME criterio ON cuenta_no,descripcion
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
LET selec =
|
|
"SELECT cuenta_no,descripcion,nivel FROM cgtb00001 ",
|
|
"WHERE ",criterio clipped," and nivel=3 AND status_t is null ORDER BY 1"
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE busca5 CURSOR FOR comando
|
|
OPEN busca5
|
|
|
|
LET idx = 1
|
|
WHILE STATUS != NOTFOUND
|
|
FETCH busca5 INTO cuentas1[idx].*
|
|
IF status = notfound THEN
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
LET idx = idx + 1
|
|
END WHILE
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
CALL set_count (idx - 1)
|
|
DISPLAY ARRAY cuentas1 TO s_cuentas.*
|
|
LET curr1 = arr_curr()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
CLOSE WINDOW cons_cuenta
|
|
END FUNCTION
|
|
|