2693 lines
93 KiB
Plaintext
2693 lines
93 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
|
|
-----------------------------------------------------------------------------
|
|
}
|
|
IMPORT FGL fgldialog
|
|
|
|
GLOBALS "cpprgb000.4gl"
|
|
DEFINE ent_num CHAR(150)
|
|
DEFINE hoy, fecha1, fecha2 DATE
|
|
DEFINE
|
|
debe_ir CHAR(1),
|
|
pdocumentoEntrada, cod_mon VARCHAR(2),
|
|
titulo_moneda VARCHAR(60)
|
|
DEFINE cuenta CHAR(8)
|
|
DEFINE total1, valor_cxp, valor, valor_f, monto_orden 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 valor2, pbase, flete, gasto, pvalor, tvalor DECIMAL(16, 2)
|
|
DEFINE
|
|
tiempo, pano CHAR(4),
|
|
entrada_no CHAR(25),
|
|
numero_ent CHAR(2)
|
|
DEFINE nom_tipo CHAR(15)
|
|
DEFINE idx1, ultimo 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 v_term_sp SMALLINT
|
|
|
|
DEFINE cod_sp1, cod_sp2 SMALLINT
|
|
DEFINE total_v DECIMAL(12, 2)
|
|
DEFINE valor3 DECIMAL(12, 2)
|
|
DEFINE credito DECIMAL(12, 2)
|
|
|
|
DEFINE datos_usu RECORD
|
|
status_t CHAR(1),
|
|
us_crea CHAR(50),
|
|
fech_crea VARCHAR(25),
|
|
us_mod CHAR(50),
|
|
fech_mod VARCHAR(25)
|
|
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
|
|
tipo1 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,
|
|
opc CHAR(3),
|
|
detalle1, detalle2 STRING
|
|
|
|
DEFINE entradas_atadas DYNAMIC ARRAY OF RECORD
|
|
tipo CHAR(2),
|
|
descrip CHAR(30),
|
|
entrada INTEGER,
|
|
orden INTEGER,
|
|
valor DECIMAL(12, 2)
|
|
END RECORD
|
|
|
|
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"
|
|
ON ACTION Adicionar
|
|
CALL cppcad000()
|
|
ON ACTION Consultar_modificar
|
|
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, fecha1, fecha2, v_term_sp 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.*, v_term_sp ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
--CALL dialog.setFieldActive("fecha_proc", FALSE)
|
|
#CALL tipoorden()
|
|
CALL proveedores()
|
|
CALL condiciones_pago()
|
|
CALL cuentas.clear()
|
|
|
|
LET v_term_sp = 1
|
|
|
|
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, a.documentoEntrada, a.cuenta_no
|
|
INTO nom_sup, pdocumentoEntrada, cuenta
|
|
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 status != NOTFOUND THEN
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
IF datos_usu.status_t = "E" THEN
|
|
LET numero_msg = 36
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
AFTER FIELD v_term_sp
|
|
LET v_term_sp = ui.Dialog.getCurrent().getFieldValue("v_term_sp")
|
|
CALL calcular_vencimiento()
|
|
|
|
IF pdocumentoEntrada = "SI" THEN
|
|
CALL entradas_atadas.clear()
|
|
CALL ataduras_entradas(factura.cod_sp, factura.cod_sp_sec, nom_sup)
|
|
|
|
IF entradas_atadas.getLength() = 0 THEN
|
|
CALL fgl_winmessage("Aviso",
|
|
"Debe atar al menos un reporte de entrada o ACTIVO para este proveedor.",
|
|
"stop")
|
|
NEXT FIELD v_term_sp
|
|
END IF
|
|
|
|
LET factura.tipo = entradas_atadas[1].tipo
|
|
LET factura.reporteEntrada = entradas_atadas[1].entrada
|
|
LET factura.orden_no = entradas_atadas[1].orden
|
|
DISPLAY BY NAME factura.valor_fac
|
|
END IF
|
|
NEXT FIELD valor_fac
|
|
|
|
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
|
|
|
|
CALL prd(factura.fecha_orig, usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
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 calcular_vencimiento()
|
|
DISPLAY BY NAME factura.fecha_proc
|
|
NEXT FIELD v_term_sp
|
|
|
|
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
|
|
CALL calcular_vencimiento()
|
|
DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE)
|
|
NEXT FIELD valor_fac
|
|
|
|
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
|
|
--ELSE
|
|
-- NEXT FIELD detalle
|
|
--END IF
|
|
|
|
{ BEFORE FIELD bodega
|
|
IF pdocumentoEntrada = "NO" THEN
|
|
NEXT FIELD ncf
|
|
ELSE
|
|
IF factura.tipo = '02' THEN
|
|
CALL bodegas(1)
|
|
ELSE
|
|
IF factura.tipo = '03' THEN
|
|
CALL bodegas(3)
|
|
END IF
|
|
IF factura.tipo = '01' THEN
|
|
CALL bodegas(4)
|
|
END IF
|
|
END IF
|
|
END IF
|
|
AFTER FIELD bodega
|
|
IF pdocumentoEntrada = "SI" THEN
|
|
CALL buscaEntradas(
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.tipo,
|
|
factura.bodega,
|
|
nom_sup)
|
|
RETURNING factura.reporteEntrada,
|
|
factura.orden_no,
|
|
monto_orden,
|
|
titulo_moneda,
|
|
cod_mon
|
|
IF factura.reporteEntrada = 0 THEN
|
|
CALL msg(1685)
|
|
NEXT FIELD bodega
|
|
END IF
|
|
|
|
IF factura.orden_no IS NOT NULL THEN
|
|
SELECT term_sp INTO v_term_sp FROM cotb00014
|
|
WHERE num_oc = factura.orden_no AND tipo = factura.tipo
|
|
AND cod_sp = factura.cod_sp AND cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME v_term_sp
|
|
CALL calcular_vencimiento()
|
|
END IF
|
|
END IF
|
|
AFTER FIELD reporteEntrada
|
|
IF pdocumentoEntrada = "SI" THEN
|
|
IF factura.reporteEntrada IS NOT NULL THEN
|
|
IF factura.tipo IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD tipo_oc
|
|
END IF
|
|
IF factura.bodega IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD bodega
|
|
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
|
|
END IF
|
|
|
|
AFTER FIELD tipo
|
|
IF factura.tipo IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo
|
|
END IF
|
|
IF factura.tipo = 10 THEN
|
|
NEXT FIELD detalle
|
|
END IF}
|
|
BEFORE FIELD detalle
|
|
LET factura.detalle = NULL
|
|
DISPLAY BY NAME factura.detalle ATTRIBUTE(BLUE)
|
|
AFTER FIELD detalle
|
|
EXIT INPUT
|
|
|
|
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].tipo1 = "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_CP 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 = "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].tipo1 = "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].tipo1 = "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].tipo1 = "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
|
|
--- GENERA LA SECUENCIA PARA LA ENTRADA AL DIARIO EN LA TABLA DEL MAYOR
|
|
SELECT a.ref
|
|
INTO entrada_no
|
|
FROM cotb00047 a
|
|
WHERE a.cod_sp = factura.cod_sp
|
|
|
|
LET numero_ent = entrada_no[4, 5]
|
|
|
|
LET pano = YEAR(factura.fecha_orig)
|
|
|
|
LET tiempo = MONTH(factura.fecha_orig) USING "&&", pano[3, 4]
|
|
|
|
BEGIN WORK
|
|
|
|
CALL controlNumericoED(
|
|
numero_ent, factura.fecha_orig, usuarios)
|
|
RETURNING entrada_no
|
|
|
|
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,
|
|
ref,
|
|
term_sp)
|
|
VALUES("FT",
|
|
factura.num_doc,
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.fecha_orig,
|
|
factura.fecha_proc,
|
|
factura.orden_no,
|
|
factura.tipo,
|
|
factura.num_doc,
|
|
NULL,
|
|
factura.valor_fac,
|
|
factura.detalle,
|
|
usuarios,
|
|
GETDATE(),
|
|
entrada_no,
|
|
v_term_sp)
|
|
|
|
FOR idx = 1 TO ARR_COUNT()
|
|
IF arr_fac1[idx].tipo1 = "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,
|
|
cta_ctble,
|
|
valor,
|
|
detalle,
|
|
status_t,
|
|
us_crea,
|
|
fech_crea,
|
|
us_mod,
|
|
fech_mod,
|
|
ref)
|
|
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,
|
|
entrada_no)
|
|
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
|
|
|
|
FOR idx = 1 TO entradas_atadas.getLength()
|
|
IF entradas_atadas[idx].entrada IS NOT NULL THEN
|
|
INSERT INTO cptb00010(
|
|
num_doc, cod_sp, cod_sp_sec, reporteEntrada, tipo, num_oc, valor)
|
|
VALUES(factura.num_doc,
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
entradas_atadas[idx].entrada,
|
|
entradas_atadas[idx].tipo,
|
|
entradas_atadas[idx].orden,
|
|
entradas_atadas[idx].valor)
|
|
END IF
|
|
END FOR
|
|
|
|
FOR idx = 1 TO entradas_atadas.getLength()
|
|
IF entradas_atadas[idx].orden > 0 THEN
|
|
UPDATE cotb00014
|
|
SET pago = 'S', us_mod = usuarios, fech_mod = GETDATE()
|
|
WHERE num_oc = entradas_atadas[idx].orden
|
|
END IF
|
|
END FOR
|
|
|
|
LET ent_num = NULL
|
|
|
|
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"
|
|
|
|
DELETE FROM cgtb00004
|
|
WHERE @cod_sp = factura.cod_sp
|
|
AND @cod_sp_sec = factura.cod_sp_sec
|
|
AND @factura_proveedor = factura.num_doc
|
|
|
|
{ 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
|
|
}
|
|
LET credito = factura.valor_fac
|
|
|
|
FOR idx = 1 TO ctrl_reg
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
IF idx = 1 THEN
|
|
|
|
INSERT INTO cptb00003(
|
|
fecha,
|
|
cod_sp,
|
|
cod_sp_sec,
|
|
factura,
|
|
cuenta_no,
|
|
detalles,
|
|
debito,
|
|
credito,
|
|
us_crea,
|
|
fech_crea,
|
|
ref,
|
|
reporteEntrada,
|
|
bodega)
|
|
VALUES(factura.fecha_orig,
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.num_doc,
|
|
cuenta,
|
|
factura.detalle,
|
|
0,
|
|
factura.valor_fac,
|
|
usuarios,
|
|
GETDATE(),
|
|
entrada_no,
|
|
factura.reporteEntrada,
|
|
factura.bodega)
|
|
|
|
----------------------------------------------------------------------------------------------
|
|
|
|
INITIALIZE detalle1, detalle2 TO NULL
|
|
|
|
LET detalle1 =
|
|
"REGISTRO FACTURA ",
|
|
factura.num_doc,
|
|
" ",
|
|
factura.cod_sp,
|
|
"-",
|
|
factura.cod_sp_sec,
|
|
" ",
|
|
nom_sup[1, 50]
|
|
|
|
INSERT INTO cgtb00004(
|
|
fecha,
|
|
tipo,
|
|
ref,
|
|
cuenta_no,
|
|
debito,
|
|
credito,
|
|
detalles,
|
|
us_crea,
|
|
fech_crea,
|
|
cod_sp,
|
|
cod_sp_sec,
|
|
nombre_proveedor,
|
|
factura_proveedor,
|
|
valor_original,
|
|
departamento,
|
|
detalle_1,
|
|
detalle_2,
|
|
ordenCompras)
|
|
VALUES(factura.fecha_orig,
|
|
1,
|
|
entrada_no,
|
|
cuenta,
|
|
0,
|
|
credito,
|
|
factura.detalle,
|
|
usuarios,
|
|
getdate(),
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
nom_sup,
|
|
factura.num_doc,
|
|
factura.valor_fac,
|
|
cuentas[idx].departamento,
|
|
detalle1,
|
|
detalle2,
|
|
factura.orden_no)
|
|
|
|
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,
|
|
ref,
|
|
reporteEntrada,
|
|
bodega)
|
|
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,
|
|
cuentas[idx].num_doc,
|
|
cuentas[idx].debito,
|
|
cuentas[idx].credito,
|
|
usuarios,
|
|
GETDATE(),
|
|
entrada_no,
|
|
factura.reporteEntrada,
|
|
factura.bodega)
|
|
|
|
INSERT INTO cgtb00004(
|
|
fecha,
|
|
tipo,
|
|
ref,
|
|
cuenta_no,
|
|
departamento,
|
|
detalles,
|
|
debito,
|
|
credito,
|
|
us_crea,
|
|
fech_crea,
|
|
cod_sp,
|
|
cod_sp_sec,
|
|
nombre_proveedor,
|
|
factura_proveedor,
|
|
detalle_1,
|
|
detalle_2,
|
|
ordenCompras)
|
|
VALUES(factura.fecha_orig,
|
|
1,
|
|
entrada_no,
|
|
cuentas[idx].cuenta_no,
|
|
cuentas[idx].departamento,
|
|
factura.detalle,
|
|
cuentas[idx].debito,
|
|
cuentas[idx].credito,
|
|
suser_sname(),
|
|
getdate(),
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
nom_sup,
|
|
factura.num_doc,
|
|
detalle1,
|
|
detalle2,
|
|
factura.orden_no)
|
|
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
|
|
BEFORE CONSTRUCT
|
|
CALL proveedores()
|
|
AFTER CONSTRUCT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
END CONSTRUCT
|
|
|
|
##### 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.us_crea, ",
|
|
" b.fech_crea,b.us_mod,b.fech_mod, b.term_sp ",
|
|
"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.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.num_doc,
|
|
factura.fecha_orig,
|
|
factura.fecha_proc,
|
|
factura.valor_fac,
|
|
factura.detalle,
|
|
datos_usu.us_crea,
|
|
datos_usu.fech_crea,
|
|
datos_usu.us_mod,
|
|
datos_usu.fech_mod,
|
|
v_term_sp
|
|
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
|
|
|
|
CALL condiciones_pago()
|
|
DISPLAY BY NAME factura.*, nom_sup, v_term_sp ATTRIBUTE(BLUE)
|
|
|
|
MENU "OPCION"
|
|
COMMAND "Siguiente"
|
|
"Presenta en pantalla el proximo registro encontrado"
|
|
FETCH NEXT datos
|
|
INTO factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.num_doc,
|
|
factura.fecha_orig,
|
|
factura.fecha_proc,
|
|
factura.valor_fac,
|
|
factura.detalle,
|
|
datos_usu.us_crea,
|
|
datos_usu.fech_crea,
|
|
datos_usu.us_mod,
|
|
datos_usu.fech_mod,
|
|
v_term_sp
|
|
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
|
|
CALL condiciones_pago()
|
|
DISPLAY BY NAME factura.*, nom_sup, v_term_sp ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Anterior"
|
|
"Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS datos
|
|
INTO factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.num_doc,
|
|
factura.fecha_orig,
|
|
factura.fecha_proc,
|
|
factura.valor_fac,
|
|
factura.detalle,
|
|
datos_usu.us_crea,
|
|
datos_usu.fech_crea,
|
|
datos_usu.us_mod,
|
|
datos_usu.fech_mod,
|
|
v_term_sp
|
|
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
|
|
CALL condiciones_pago()
|
|
DISPLAY BY NAME factura.*, nom_sup, v_term_sp ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST datos
|
|
INTO factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.num_doc,
|
|
factura.fecha_orig,
|
|
factura.fecha_proc,
|
|
factura.valor_fac,
|
|
factura.detalle,
|
|
datos_usu.us_crea,
|
|
datos_usu.fech_crea,
|
|
datos_usu.us_mod,
|
|
datos_usu.fech_mod,
|
|
v_term_sp
|
|
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
|
|
CALL condiciones_pago()
|
|
DISPLAY BY NAME factura.*, nom_sup, v_term_sp ATTRIBUTE(BLUE)
|
|
|
|
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST datos
|
|
INTO factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
factura.num_doc,
|
|
factura.fecha_orig,
|
|
factura.fecha_proc,
|
|
factura.valor_fac,
|
|
factura.detalle,
|
|
datos_usu.us_crea,
|
|
datos_usu.fech_crea,
|
|
datos_usu.us_mod,
|
|
datos_usu.fech_mod,
|
|
v_term_sp
|
|
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
|
|
|
|
CALL condiciones_pago()
|
|
DISPLAY BY NAME factura.*, nom_sup, v_term_sp 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
|
|
|
|
INITIALIZE pdocumentoEntrada, cuenta TO NULL
|
|
|
|
SELECT a.nom_sp, a.documentoEntrada, a.cuenta_no
|
|
INTO nom_sup, pdocumentoEntrada, cuenta
|
|
FROM cotb00001 a
|
|
WHERE a.cod_sp = factura.cod_sp
|
|
AND a.cod_sp_sec = factura.cod_sp_sec
|
|
|
|
IF debe_ir = "N" THEN
|
|
CALL entradas_atadas.clear()
|
|
DECLARE cur_ata CURSOR FOR
|
|
SELECT a.tipo, a.reporteEntrada, a.num_oc, a.valor, b.descripcion
|
|
FROM cptb00010 a
|
|
LEFT OUTER JOIN cotb00010 b ON b.tipo = a.tipo
|
|
WHERE a.num_doc = factura.num_doc
|
|
AND a.cod_sp = factura.cod_sp
|
|
AND a.cod_sp_sec = factura.cod_sp_sec
|
|
LET idx = 1
|
|
FOREACH cur_ata INTO entradas_atadas[idx].tipo,
|
|
entradas_atadas[idx].entrada,
|
|
entradas_atadas[idx].orden,
|
|
entradas_atadas[idx].valor,
|
|
entradas_atadas[idx].descrip
|
|
IF entradas_atadas[idx].tipo = "10" THEN
|
|
LET entradas_atadas[idx].descrip = "ACTIVO"
|
|
END IF
|
|
IF entradas_atadas[idx].tipo = "11" THEN
|
|
LET entradas_atadas[idx].descrip = "SERVICIO"
|
|
END IF
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
IF pdocumentoEntrada = "SI" THEN
|
|
CALL ataduras_entradas(
|
|
factura.cod_sp, factura.cod_sp_sec, nom_sup)
|
|
LET factura.tipo = entradas_atadas[1].tipo
|
|
LET factura.reporteEntrada = entradas_atadas[1].entrada
|
|
LET factura.orden_no = entradas_atadas[1].orden
|
|
END IF
|
|
|
|
LET v_term_sp = NULL
|
|
IF factura.orden_no IS NOT NULL THEN
|
|
SELECT term_sp
|
|
INTO v_term_sp
|
|
FROM cotb00014
|
|
WHERE num_oc = factura.orden_no
|
|
AND tipo = factura.tipo
|
|
AND cod_sp = factura.cod_sp
|
|
AND cod_sp_sec = factura.cod_sp_sec
|
|
ELSE
|
|
SELECT term_sp
|
|
INTO v_term_sp
|
|
FROM cptb00001
|
|
WHERE num_doc = factura.num_doc
|
|
AND cod_sp = factura.cod_sp
|
|
AND cod_sp_sec = factura.cod_sp_sec
|
|
AND tipo_doc = "FT"
|
|
END IF
|
|
|
|
INPUT BY NAME factura.fecha_orig,
|
|
v_term_sp,
|
|
factura.valor_fac,
|
|
factura.tipo,
|
|
factura.orden_no,
|
|
factura.detalle
|
|
WITHOUT DEFAULTS
|
|
|
|
BEFORE INPUT
|
|
CALL condiciones_pago()
|
|
IF factura.orden_no IS NOT NULL THEN
|
|
SELECT term_sp
|
|
INTO v_term_sp
|
|
FROM cotb00014
|
|
WHERE num_oc = factura.orden_no
|
|
AND tipo = factura.tipo
|
|
AND cod_sp = factura.cod_sp
|
|
AND cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME v_term_sp
|
|
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
|
|
}
|
|
|
|
AFTER FIELD v_term_sp
|
|
IF factura.orden_no IS NOT NULL THEN
|
|
SELECT term_sp
|
|
INTO v_term_sp
|
|
FROM cotb00014
|
|
WHERE num_oc = factura.orden_no
|
|
AND tipo = factura.tipo
|
|
AND cod_sp = factura.cod_sp
|
|
AND cod_sp_sec = factura.cod_sp_sec
|
|
DISPLAY BY NAME v_term_sp
|
|
END IF
|
|
CALL calcular_vencimiento()
|
|
|
|
IF pdocumentoEntrada = "SI" THEN
|
|
CALL entradas_atadas.clear()
|
|
CALL ataduras_entradas(factura.cod_sp, factura.cod_sp_sec, nom_sup)
|
|
|
|
IF entradas_atadas.getLength() = 0 THEN
|
|
CALL fgl_winmessage("Aviso",
|
|
"Debe atar al menos un reporte de entrada, activo o servicio para este proveedor.",
|
|
"stop")
|
|
NEXT FIELD v_term_sp
|
|
END IF
|
|
|
|
LET factura.tipo = entradas_atadas[1].tipo
|
|
LET factura.reporteEntrada = entradas_atadas[1].entrada
|
|
LET factura.orden_no = entradas_atadas[1].orden
|
|
DISPLAY BY NAME factura.valor_fac
|
|
END IF
|
|
NEXT FIELD valor_fac
|
|
|
|
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
|
|
|
|
CALL calcular_vencimiento()
|
|
|
|
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
|
|
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].tipo1 = "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,
|
|
term_sp)
|
|
= (factura.fecha_orig,
|
|
factura.fecha_proc,
|
|
factura.orden_no,
|
|
factura.tipo,
|
|
factura.valor_fac,
|
|
factura.detalle,
|
|
SUSER_SNAME(),
|
|
GETDATE(),
|
|
v_term_sp)
|
|
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(),
|
|
entrada_no)
|
|
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 entradas_atadas[0].entrada IS NOT NULL THEN
|
|
DELETE FROM cptb00010
|
|
WHERE num_doc = factura.num_doc
|
|
AND cod_sp = factura.cod_sp
|
|
AND cod_sp_sec = factura.cod_sp_sec
|
|
|
|
FOR idx = 1 TO entradas_atadas.getLength()
|
|
IF entradas_atadas[idx].entrada IS NOT NULL THEN
|
|
INSERT INTO cptb00010(
|
|
num_doc, cod_sp, cod_sp_sec, reporteEntrada, tipo, num_oc, valor)
|
|
VALUES(factura.num_doc,
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
entradas_atadas[idx].entrada,
|
|
entradas_atadas[idx].tipo,
|
|
entradas_atadas[idx].orden,
|
|
entradas_atadas[idx].valor)
|
|
END IF
|
|
END FOR
|
|
END IF
|
|
|
|
|
|
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"
|
|
|
|
DELETE FROM cgtb00004
|
|
WHERE @cod_sp = factura.cod_sp
|
|
AND @cod_sp_sec = factura.cod_sp_sec
|
|
AND @factura_proveedor = factura.num_doc
|
|
|
|
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
|
|
|
|
LET credito = factura.valor_fac
|
|
|
|
FOR idx = 1 TO ctrl_reg
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
IF idx = 1 THEN
|
|
INSERT INTO cptb00003(
|
|
fecha,
|
|
cod_sp,
|
|
cod_sp_sec,
|
|
factura,
|
|
cuenta_no,
|
|
departamento,
|
|
num_doc,
|
|
cod_aux,
|
|
cod_sec,
|
|
detalles,
|
|
debito,
|
|
credito,
|
|
status_t,
|
|
us_crea,
|
|
fech_crea,
|
|
us_mod,
|
|
fech_mod)
|
|
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)
|
|
|
|
--- GENERA LA SECUENCIA PARA LA ENTRADA AL DIARIO EN LA TABLA DEL MAYOR
|
|
SELECT a.ref
|
|
INTO entrada_no
|
|
FROM cotb00047 a
|
|
WHERE a.cod_sp = factura.cod_sp
|
|
|
|
LET numero_ent = entrada_no[4, 5]
|
|
|
|
LET pano = YEAR(factura.fecha_orig)
|
|
|
|
LET tiempo =
|
|
MONTH(factura.fecha_orig) USING "&&", pano[3, 4]
|
|
|
|
SELECT MAX(a.ref[7, 9])
|
|
INTO ultimo
|
|
FROM cgtb00004 a
|
|
WHERE a.ref[4, 5] = numero_ent
|
|
AND a.ref[11, 14] = tiempo
|
|
|
|
IF ultimo IS NULL THEN
|
|
LET ultimo = 0
|
|
END IF
|
|
LET ultimo = ultimo + 1
|
|
|
|
LET entrada_no =
|
|
entrada_no CLIPPED,
|
|
"-",
|
|
ultimo USING "&&&",
|
|
"/",
|
|
tiempo CLIPPED
|
|
|
|
----------------------------------------------------------------------------------------------
|
|
|
|
INITIALIZE detalle1, detalle2 TO NULL
|
|
|
|
LET detalle1 =
|
|
"REGISTRO FACTURA ",
|
|
factura.num_doc,
|
|
" ",
|
|
factura.cod_sp,
|
|
"-",
|
|
factura.cod_sp_sec,
|
|
" ",
|
|
nom_sup[1, 50]
|
|
|
|
INSERT INTO cgtb00004(
|
|
fecha,
|
|
tipo,
|
|
ref,
|
|
cuenta_no,
|
|
debito,
|
|
credito,
|
|
us_crea,
|
|
fech_crea,
|
|
cod_sp,
|
|
cod_sp_sec,
|
|
nombre_proveedor,
|
|
factura_proveedor,
|
|
valor_original,
|
|
departamento,
|
|
detalle_1,
|
|
detalle_2,
|
|
ordenCompras)
|
|
VALUES(factura.fecha_orig,
|
|
1,
|
|
entrada_no,
|
|
cuenta,
|
|
0,
|
|
credito,
|
|
suser_sname(),
|
|
getdate(),
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
nom_sup,
|
|
factura.num_doc,
|
|
factura.valor_fac,
|
|
cuentas[idx].departamento,
|
|
detalle1,
|
|
detalle2,
|
|
factura.orden_no)
|
|
|
|
END IF
|
|
|
|
{ INSERT INTO cgtb00004
|
|
(fecha, tipo, ref, cuenta_no,credito, us_crea, fech_crea,
|
|
cod_sp, cod_sp_sec, nombre_proveedor, factura_proveedor )
|
|
VALUES(factura.fecha_orig,1,entrada_no,cuenta,factura.valor_fac,suser_sname(),getdate(),
|
|
factura.cod_sp,factura.cod_sp_sec,nom_sup,factura.num_doc) }
|
|
|
|
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,
|
|
entrada_no)
|
|
|
|
INSERT INTO cgtb00004(
|
|
fecha,
|
|
tipo,
|
|
ref,
|
|
cuenta_no,
|
|
departamento,
|
|
detalles,
|
|
debito,
|
|
credito,
|
|
us_crea,
|
|
fech_crea,
|
|
cod_sp,
|
|
cod_sp_sec,
|
|
nombre_proveedor,
|
|
factura_proveedor,
|
|
detalle_1,
|
|
detalle_2,
|
|
ordenCompras)
|
|
VALUES(factura.fecha_orig,
|
|
1,
|
|
entrada_no,
|
|
cuentas[idx].cuenta_no,
|
|
cuentas[idx].departamento,
|
|
factura.detalle,
|
|
cuentas[idx].debito,
|
|
cuentas[idx].credito,
|
|
suser_sname(),
|
|
getdate(),
|
|
factura.cod_sp,
|
|
factura.cod_sp_sec,
|
|
nom_sup,
|
|
factura.num_doc,
|
|
detalle1,
|
|
detalle2,
|
|
factura.orden_no) --,entrada_no)
|
|
# 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, usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
LET numero_msg = 57
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
LET opc =
|
|
fgl_winquestion(
|
|
"PREGUNTA",
|
|
"ESTA SEGURO DE ELIMINAR ESTE REGISTRO?",
|
|
"YES",
|
|
"YES|NO",
|
|
"QUESTION",
|
|
0)
|
|
LET opc = upshift(opc)
|
|
|
|
DISPLAY opc
|
|
|
|
IF opc = "YES" THEN
|
|
|
|
# Inserta en la tabla Historica Registros Eliminados
|
|
BEGIN WORK
|
|
INSERT INTO cptb00006(
|
|
tipo_doc,
|
|
num_doc,
|
|
cod_sp,
|
|
cod_sp_sec,
|
|
fecha_orig,
|
|
fecha_proc,
|
|
orden_no,
|
|
tipo,
|
|
aplica_a,
|
|
cta_ctble,
|
|
valor,
|
|
detalle,
|
|
status_t,
|
|
us_crea,
|
|
fech_crea,
|
|
us_mod,
|
|
fech_mod,
|
|
ref,
|
|
reporteEntrada,
|
|
bodega,
|
|
term_sp)
|
|
SELECT a.tipo_doc,
|
|
a.num_doc,
|
|
a.cod_sp,
|
|
a.cod_sp_sec,
|
|
a.fecha_orig,
|
|
a.fecha_proc,
|
|
a.orden_no,
|
|
a.tipo,
|
|
a.aplica_a,
|
|
a.cta_ctble,
|
|
a.valor,
|
|
a.detalle,
|
|
a.status_t,
|
|
a.us_crea,
|
|
a.fech_crea,
|
|
a.us_mod,
|
|
a.fech_mod,
|
|
a.ref,
|
|
a.reporteEntrada,
|
|
a.bodega,
|
|
a.term_sp
|
|
FROM cptb00001 a
|
|
WHERE a.tipo_doc = "FT"
|
|
AND a.cod_sp = factura.cod_sp
|
|
AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.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
|
|
#--------------------------------------------------------------------------
|
|
SELECT UNIQUE a.ref
|
|
INTO ent_num
|
|
FROM cgtb00004 a
|
|
WHERE a.cod_sp = factura.cod_sp
|
|
AND a.cod_sp_sec = factura.cod_sp_sec
|
|
AND a.factura_proveedor = factura.num_doc
|
|
|
|
UPDATE cgtb00004
|
|
SET status_t = 'E', us_mod = usuarios, fech_mod = getdate()
|
|
WHERE @cod_sp = factura.cod_sp
|
|
AND @cod_sp_sec = factura.cod_sp_sec
|
|
AND @factura_proveedor = factura.num_doc
|
|
|
|
{DELETE FROM cgtb00004 WHERE @cod_sp = factura.cod_sp AND
|
|
@cod_sp_sec = factura.cod_sp_sec AND
|
|
@factura_proveedor = 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)
|
|
|
|
END IF
|
|
|
|
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
|
|
|
|
FUNCTION proveedores()
|
|
|
|
DEFINE
|
|
cod_sp SMALLINT,
|
|
descrip VARCHAR(200),
|
|
cproveedores ui.ComboBox,
|
|
query STRING
|
|
|
|
LET cproveedores = ui.combobox.forname("formonly.cod_sp")
|
|
|
|
LET query =
|
|
"SELECT a.cod_sp, CONCAT('(' ,a.cod_sp, ')',' ',a.titulo) FROM cotb00047 a "
|
|
DECLARE bproveedores CURSOR FROM query
|
|
CALL cproveedores.clear()
|
|
|
|
FOREACH bproveedores INTO cod_sp, descrip
|
|
CALL cproveedores.additem(cod_sp, descrip)
|
|
END FOREACH
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION condiciones_pago()
|
|
DEFINE
|
|
v_term SMALLINT,
|
|
v_desc CHAR(30),
|
|
ccond ui.ComboBox
|
|
|
|
LET ccond = ui.ComboBox.forName("v_term_sp")
|
|
CALL ccond.clear()
|
|
|
|
DECLARE bcond CURSOR FOR
|
|
SELECT term_sp, descrip_term
|
|
FROM cotb00024
|
|
WHERE status_t IS NULL
|
|
ORDER BY term_sp
|
|
|
|
FOREACH bcond INTO v_term, v_desc
|
|
CALL ccond.addItem(v_term, v_desc CLIPPED)
|
|
END FOREACH
|
|
END FUNCTION
|
|
|
|
FUNCTION dias_condicion(p_term)
|
|
DEFINE
|
|
p_term SMALLINT,
|
|
p_dias INTEGER
|
|
|
|
SELECT dias
|
|
INTO p_dias
|
|
FROM cotb00024
|
|
WHERE term_sp = p_term AND status_t IS NULL
|
|
|
|
IF p_dias IS NULL THEN
|
|
LET p_dias = 0
|
|
END IF
|
|
|
|
RETURN p_dias
|
|
END FUNCTION
|
|
|
|
FUNCTION calcular_vencimiento()
|
|
|
|
IF v_term_sp IS NULL OR factura.fecha_orig IS NULL THEN
|
|
DISPLAY "se salio"
|
|
RETURN
|
|
END IF
|
|
|
|
DISPLAY "term sp: ", v_term_sp
|
|
|
|
LET factura.fecha_proc = factura.fecha_orig + dias_condicion(v_term_sp)
|
|
DISPLAY "fecha vencimiento nueva: ", factura.fecha_proc
|
|
DISPLAY BY NAME factura.fecha_proc
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION ataduras_entradas(pcodsp, pcodspsec, pnom_sup)
|
|
DEFINE pcodsp, pcodspsec INTEGER
|
|
DEFINE pnom_sup STRING
|
|
DEFINE tipo STRING
|
|
DEFINE
|
|
ktipo CHAR(2),
|
|
kdesc CHAR(30)
|
|
DEFINE strq, tabla STRING
|
|
DEFINE i, j, dup SMALLINT
|
|
DEFINE desc_inv CHAR(30)
|
|
DEFINE disp DYNAMIC ARRAY OF RECORD
|
|
sel CHAR(1),
|
|
entrada INTEGER,
|
|
orden INTEGER,
|
|
cod_mon SMALLINT,
|
|
moneda CHAR(30),
|
|
valor DECIMAL(12, 2)
|
|
END RECORD
|
|
DEFINE total DECIMAL(12, 2)
|
|
DEFINE query STRING
|
|
|
|
OPEN WINDOW w10 WITH FORM "cpfmwd010"
|
|
DISPLAY pnom_sup TO nom_sup
|
|
|
|
CALL tipoOrden()
|
|
LET total = 0;
|
|
|
|
DIALOG ATTRIBUTES(UNBUFFERED)
|
|
|
|
INPUT BY NAME tipo ATTRIBUTES(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
LET tipo = '01'
|
|
END INPUT
|
|
|
|
INPUT ARRAY disp FROM tdisp.* ATTRIBUTES(APPEND ROW = FALSE,
|
|
INSERT ROW = FALSE,
|
|
DELETE ROW = FALSE,
|
|
AUTO APPEND = FALSE)
|
|
END INPUT
|
|
|
|
DISPLAY ARRAY entradas_atadas TO tata.*
|
|
END DISPLAY
|
|
|
|
ON ACTION buscar
|
|
LET ktipo = ui.Dialog.getCurrent().getFieldValue("tipo")
|
|
CALL disp.clear()
|
|
|
|
IF ktipo = "10" THEN
|
|
LET dup = FALSE
|
|
FOR j = 1 TO entradas_atadas.getLength()
|
|
IF entradas_atadas[j].tipo = "10" THEN
|
|
LET dup = TRUE
|
|
EXIT FOR
|
|
END IF
|
|
END FOR
|
|
IF dup THEN
|
|
CALL fgl_winmessage(
|
|
"Aviso", "ACTIVO ya esta agregado.", "info")
|
|
ELSE
|
|
LET j = entradas_atadas.getLength() + 1
|
|
LET entradas_atadas[j].tipo = "10"
|
|
LET entradas_atadas[j].descrip = "ACTIVO"
|
|
LET entradas_atadas[j].entrada = 0
|
|
LET entradas_atadas[j].orden = 0
|
|
LET entradas_atadas[j].valor = 0
|
|
END IF
|
|
CONTINUE DIALOG
|
|
END IF
|
|
|
|
IF ktipo = "11" THEN
|
|
LET dup = FALSE
|
|
FOR j = 1 TO entradas_atadas.getLength()
|
|
IF entradas_atadas[j].tipo = "11" THEN
|
|
LET dup = TRUE
|
|
EXIT FOR
|
|
END IF
|
|
END FOR
|
|
IF dup THEN
|
|
CALL fgl_winmessage(
|
|
"Aviso", "Servicio ya esta agregado.", "info")
|
|
ELSE
|
|
LET j = entradas_atadas.getLength() + 1
|
|
LET entradas_atadas[j].tipo = "11"
|
|
LET entradas_atadas[j].descrip = "SERVICIO"
|
|
LET entradas_atadas[j].entrada = 0
|
|
LET entradas_atadas[j].orden = 0
|
|
LET entradas_atadas[j].valor = 0
|
|
END IF
|
|
CONTINUE DIALOG
|
|
END IF
|
|
|
|
CASE ktipo
|
|
WHEN "01"
|
|
LET tabla = "marmotech.dbo.intb00006"
|
|
WHEN "02"
|
|
LET tabla = "marmotech.dbo.iptb00006"
|
|
WHEN "03"
|
|
LET tabla = "marmotech.dbo.irtb00006"
|
|
END CASE
|
|
|
|
LET strq =
|
|
"SELECT a.num_doc, a.orden_compra, c.cod_mon, c.descrip_mon, ",
|
|
"SUM(a.cantidad_2*d.precio) - SUM(a.cantidad_2*d.precio*(ISNULL(d.porc_Desc,0)/100)) ",
|
|
"FROM ", tabla CLIPPED, " a ",
|
|
"INNER JOIN marmotech.dbo.cotb00014 b ON b.cod_sp=a.cod_sp AND b.cod_sp_sec=a.cod_sp_sec ",
|
|
"INNER JOIN marmotech.dbo.cotb00015 d ON d.num_oc=b.num_oc AND d.cod_n=a.cod_n AND d.cod_grupo=a.cod_grupo ",
|
|
"AND d.cod_tipo=a.cod_tipo AND d.cod_sec=a.cod_Sec AND d.num_oc=a.orden_compra ",
|
|
"INNER JOIN marmotech.dbo.cotb00031 c ON c.cod_mon=d.cod_mon ",
|
|
"WHERE a.cod_sp=", pcodsp, " AND a.cod_sp_sec=", pcodspsec,
|
|
" AND a.status_t is null ",
|
|
" AND a.fecha >= DATEADD(YEAR, -1, GETDATE()) ",
|
|
"GROUP BY a.num_doc, a.orden_compra, c.descrip_mon, c.cod_mon ",
|
|
"ORDER BY a.num_doc, a.orden_compra"
|
|
|
|
PREPARE cmd10 FROM strq
|
|
DECLARE cur10 CURSOR FOR cmd10
|
|
LET i = 1
|
|
FOREACH cur10
|
|
INTO disp[i].entrada,
|
|
disp[i].orden,
|
|
disp[i].cod_mon,
|
|
disp[i].moneda,
|
|
disp[i].valor
|
|
LET disp[i].sel = " "
|
|
LET i = i + 1
|
|
END FOREACH
|
|
IF disp.getLength() > 0
|
|
AND disp[disp.getLength()].entrada IS NULL THEN
|
|
CALL disp.deleteElement(disp.getLength())
|
|
END IF
|
|
CONTINUE DIALOG
|
|
|
|
ON ACTION agregar
|
|
LET query =
|
|
"SELECT descripcion FROM cotb00010
|
|
WHERE tipo = ?"
|
|
|
|
PREPARE buscar_descrip FROM query
|
|
EXECUTE buscar_descrip INTO desc_inv USING tipo
|
|
|
|
FOR i = 1 TO disp.getLength()
|
|
IF disp[i].sel = "X" OR disp[i].sel = "x" THEN
|
|
LET dup = FALSE
|
|
FOR j = 1 TO entradas_atadas.getLength()
|
|
IF entradas_atadas[j].tipo = ktipo
|
|
AND entradas_atadas[j].entrada = disp[i].entrada
|
|
AND entradas_atadas[j].orden = disp[i].orden THEN
|
|
LET dup = TRUE
|
|
EXIT FOR
|
|
END IF
|
|
END FOR
|
|
IF NOT dup THEN
|
|
LET j = entradas_atadas.getLength() + 1
|
|
LET entradas_atadas[j].tipo = ktipo
|
|
LET entradas_atadas[j].descrip = desc_inv
|
|
LET entradas_atadas[j].entrada = disp[i].entrada
|
|
LET entradas_atadas[j].orden = disp[i].orden
|
|
LET entradas_atadas[j].valor = disp[i].valor
|
|
|
|
END IF
|
|
LET disp[i].sel = " "
|
|
END IF
|
|
END FOR
|
|
|
|
CONTINUE DIALOG
|
|
|
|
ON ACTION quitar
|
|
IF entradas_atadas.getLength() > 0 THEN
|
|
CALL entradas_atadas.deleteElement(arr_curr())
|
|
END IF
|
|
CONTINUE DIALOG
|
|
|
|
ON ACTION aceptar
|
|
IF entradas_atadas.getLength() = 0 THEN
|
|
CALL fgl_winmessage(
|
|
"Aviso",
|
|
"Debe atar al menos un reporte de entrada, ACTIVO o SERVICIO.",
|
|
"stop")
|
|
CONTINUE DIALOG
|
|
ELSE
|
|
FOR i = 1 TO entradas_atadas.getLength()
|
|
LET total = total + entradas_atadas[i].valor
|
|
END FOR
|
|
LET factura.valor_fac = total
|
|
END IF
|
|
EXIT DIALOG
|
|
|
|
ON ACTION cancelar
|
|
CALL entradas_atadas.clear()
|
|
EXIT DIALOG
|
|
|
|
END DIALOG
|
|
|
|
CLOSE WINDOW w10
|
|
END FUNCTION
|
|
|
|
FUNCTION tipoorden()
|
|
DEFINE
|
|
ptipo ui.combobox,
|
|
ktipo CHAR(2),
|
|
kdescripcion CHAR(30)
|
|
LET ptipo = ui.combobox.forname("formonly.tipo")
|
|
CALL ptipo.clear()
|
|
DECLARE buscaTipo CURSOR FOR
|
|
SELECT a.tipo, a.descripcion
|
|
INTO ktipo, kdescripcion
|
|
FROM cotb00010 a
|
|
ORDER BY a.descripcion
|
|
|
|
FOREACH buscatipo
|
|
CALL ptipo.additem(ktipo, kdescripcion)
|
|
END FOREACH
|
|
CALL ptipo.additem(10, 'ACTIVO')
|
|
CALL ptipo.additem(11, 'SERVICIO')
|
|
END FUNCTION
|