Files

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[1].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