Files

348 lines
11 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CCPRCS001
OBJETIVO : Estado De Cuentas
PROGRAMADOR : JUAN SOTO
FECHA REALIZACION : Junio 8, 1997
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO
-------------------------------------------------------------------------------
}
GLOBALS "ccprgb000.4gl"
DEFINE fecha DATE
DEFINE balance2 DECIMAL(12,2)
DEFINE pcasa,pcalle,pbarrio CHAR(20)
DEFINE provincia CHAR(3)
DEFINE tipo CHAR(1)
DEFINE p_res,idx_1 SMALLINT
DEFINE cuenta1 RECORD
fecha_inicial DATE,
fecha_final DATE,
tipo_cliente LIKE cctb00001.tipo_cliente,
sec_cliente LIKE cctb00001.sec_cliente,
nombre LIKE vetb00004.nombre,
direccion CHAR(60),
ciudad CHAR(60),
limite DECIMAL(12,2),
prima DECIMAL(5,2),
balance DECIMAL(12,2)
END RECORD
DEFINE cuenta3 RECORD
fecha_inicial DATE,
fecha_final DATE,
tipo_cliente LIKE cctb00001.tipo_cliente,
sec_cliente LIKE cctb00001.sec_cliente,
nombre LIKE vetb00004.nombre,
direccion CHAR(60),
ciudad CHAR(60),
limite DECIMAL(12,2),
prima DECIMAL(5,2),
balance DECIMAL(12,2)
END RECORD
DEFINE cuenta2 DYNAMIC ARRAY OF RECORD
num_doc LIKE cctb00001.num_doc,
tipo_doc LIKE cctb00001.tipo_doc,
fecha_orig LIKE cctb00001.fecha_orig,
aplica_a LIKE cctb00001.aplica_a,
cotizacion_no INT,
num_oc INT,
conduce_no INT,
debito DECIMAL(12,2),
credito DECIMAL(12,2),
balance1 DECIMAL(12,2)
END RECORD
DEFINE apartado CHAR(30)
DEFINE busca_d RECORD
num_doc LIKE cctb00001.num_doc,
tipo_doc LIKE cctb00001.tipo_doc,
fecha_orig DATE,
aplica_a LIKE cctb00001.aplica_a,
cotizacion_no INT,
num_oc INT,
conduce_no INT,
valor DECIMAL(12,2),
valor1 DECIMAL(12,2)
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CALL ARG_VAL(7) RETURNING strconect
IF strconect = 'marmotech' THEN
CONNECT to strconect AS "IFMX" USER 'conecta' USING 'conecta'
ELSE
CONNECT to strconect AS "MSSQL_C" USER usuarios USING clave
END IF
SELECT a.* INTO p_companias.* FROM companias a
CALL ccprcs001()
END MAIN
FUNCTION ccprcs001()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ccfmcs001 FROM "ccfmcs001"
DISPLAY FORM ccfmcs001
#CALL pantalla()
DISPLAY "ccprcs001" AT 4,3
DISPLAY "Estado de Cuentas del Cliente " AT 6,25
DISPLAY "<Esc> Consulta Registro" AT 2,1 ATTRIBUTE (BOLD)
DISPLAY "<Delete> Cancela Operacion" AT 2,54 ATTRIBUTE (BOLD)
LABEL volvera:
LET cuenta3.* = cuenta1.*
DISPLAY BY NAME cuenta3.*
INPUT BY NAME cuenta1.* WITHOUT DEFAULTS
AFTER FIELD fecha_inicial
IF cuenta1.fecha_inicial is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_inicial
END IF
BEFORE FIELD fecha_final
LET cuenta1.fecha_final = today
AFTER FIELD fecha_final
IF cuenta1.fecha_final is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
IF cuenta1.fecha_final < cuenta1.fecha_inicial THEN
LET numero_msg = 86
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
AFTER FIELD sec_cliente
IF cuenta1.sec_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_cliente
END IF
SELECT UNIQUE ventas INTO tipo FROM vetb00002
WHERE tipo_cliente = cuenta1.tipo_cliente AND
sec_cliente = cuenta1.sec_cliente
SELECT nombre,cod_provincia,zona_postal,limite_credito
INTO cuenta1.nombre,provincia,apartado,cuenta1.limite
FROM vetb00004
WHERE tipo_cliente = cuenta1.tipo_cliente AND
sec_cliente = cuenta1.sec_cliente {status_t IS NULL}
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
DISPLAY BY NAME cuenta1.nombre,cuenta1.limite
SELECT calle,casa_num,barrio INTO pcalle,pcasa,pbarrio
FROM vetb00005
WHERE tipo_cliente=cuenta1.tipo_cliente AND sec_cliente=cuenta1.sec_cliente
LET cuenta1.direccion=pcalle clipped," ",pcasa clipped,", ",pbarrio clipped
DISPLAY BY NAME cuenta1.direccion
IF tipo = 1 THEN
SELECT nombre_provincia INTO cuenta1.ciudad FROM vetb00020
WHERE cod_provincia = provincia
ELSE
SELECT nom_pais INTO cuenta1.ciudad FROM cotb00018
WHERE cod_pais = provincia
END IF
LET cuenta1.ciudad = cuenta1.ciudad clipped," ",apartado clipped
DISPLAY BY NAME cuenta1.ciudad
DISPLAY BY NAME cuenta1.limite
AFTER FIELD prima
DISPLAY "Buscando Balance Inicial... Espere" AT 23,1 ATTRIBUTE (BOLD)
SELECT sum(a.valor+a.monto_desc) INTO cuenta1.balance
FROM cctb00001 a
WHERE a.status_t is null AND a.fecha_orig < cuenta1.fecha_inicial
AND a.tipo_cliente = cuenta1.tipo_cliente
AND a.sec_cliente = cuenta1.sec_cliente
AND a.tipo_doc NOT IN ("PC","AV")
IF cuenta1.balance IS NULL THEN
LET cuenta1.balance = 0
END IF
SELECT sum(a.valor+a.monto_desc) INTO balance2
FROM cctb00001 a
WHERE a.status_t is null AND a.fecha_orig < cuenta1.fecha_inicial
AND a.tipo_cliente = cuenta1.tipo_cliente
AND a.sec_cliente = cuenta1.sec_cliente
AND a.tipo_doc = "AV" AND a.num_doc = a.aplica_a
IF balance2 IS NULL THEN
LET balance2 = 0
END IF
LET cuenta1.balance = cuenta1.balance - balance2
IF cuenta1.prima is not null THEN
LET cuenta1.balance = cuenta1.balance * cuenta1.prima
END IF
DISPLAY " " AT 23,1 ATTRIBUTE (BOLD)
LET fecha = cuenta1.fecha_inicial
DISPLAY BY NAME cuenta1.balance
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec ="SELECT a.num_doc,a.tipo_doc,CONVERT(char(10),a.fecha_orig,103),a.aplica_a,a.num_cheque,",
" '0','0',a.valor,a.monto_desc ",
" FROM cctb00001 a ",
" WHERE a.fecha_orig BETWEEN '", cuenta1.fecha_inicial USING "mm/dd/yyyy","' AND '",cuenta1.fecha_final USING "mm/dd/yyyy","' AND ",
" a.tipo_cliente =", cuenta1.tipo_cliente," AND ",
" a.sec_cliente =", cuenta1.sec_cliente," AND a.status_t is null AND ",
" (a.tipo_doc in ('PG','FT','FE','NC','ND','OC','DV','OD') OR ",
" (a.tipo_doc = 'AV' AND a.num_doc = aplica_a))
ORDER BY a.fecha_orig"
PREPARE comando FROM selec
DECLARE buscar CURSOR FOR comando
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 24,14
ATTRIBUTE (REVERSE,BOLD)
LET idx_1 = 1
FOREACH buscar INTO busca_d.*
IF busca_d.valor1 IS NULL THEN
LET busca_d.valor1 = 0
END IF
LET busca_d.valor = busca_d.valor + busca_d.valor1
IF busca_d.tipo_doc = "AV" AND busca_d.num_doc = busca_d.aplica_a THEN
LET busca_d.valor = busca_d.valor * -1
END IF
IF busca_d.valor <> 0 THEN
LET cuenta2[idx_1].num_doc = busca_d.num_doc
LET cuenta2[idx_1].tipo_doc = busca_d.tipo_doc
LET cuenta2[idx_1].aplica_a = busca_d.aplica_a
LET cuenta2[idx_1].fecha_orig = busca_d.fecha_orig using "dd/mm/yyyy"
IF cuenta1.prima is not null THEN
LET busca_d.valor = busca_d.valor * cuenta1.prima
END IF
IF cuenta1.balance IS NULL THEN
LET cuenta1.balance = 0
END IF
LET cuenta2[idx_1].conduce_no=NULL
LET cuenta2[idx_1].cotizacion_no=NULL
LET cuenta2[idx_1].num_oc=NULL
IF busca_d.tipo_doc='FT' OR busca_d.tipo_doc='FE' OR busca_d.tipo_doc ='PG' OR busca_d.tipo_doc="AV" THEN
IF busca_d.tipo_doc='FT' OR busca_d.tipo_doc = 'FT' THEN
IF strconect <> 'marmotech' THEN
SELECT DISTINCT a.conduce,a.orden,a.cotizacion_no
INTO busca_d.conduce_no,busca_d.num_oc,
busca_d.cotizacion_no
FROM vetb00002 a
WHERE a.factura = busca_d.aplica_a
ELSE
SELECT DISTINCT a.factura_c,a.orden,a.conduce
INTO busca_d.conduce_no,busca_d.num_oc,
busca_d.cotizacion_no
FROM vetb00002 a
WHERE a.factura = busca_d.aplica_a
END IF
END IF
IF busca_d.tipo_doc <> 'AV' THEN
SELECT DISTINCT a.conduce,a.orden
INTO busca_d.cotizacion_no,busca_d.num_oc
FROM vetb00002 a
WHERE a.factura = busca_d.aplica_a
END IF
IF busca_d.tipo_doc = 'AV' THEN
SELECT MAX(a.banco) INTO busca_d.cotizacion_no FROM cctb00001 a
WHERE a.num_doc = a.aplica_a AND a.num_doc = busca_d.num_doc AND a.status_t IS NULL
SELECT a.num_oc INTO busca_d.num_oc FROM prtb00012 a WHERE a.cotizacion_no = busca_d.cotizacion_no
AND a.status_t IS NULL
END IF
END IF
LET cuenta2[idx_1].conduce_no=busca_d.conduce_no
LET cuenta2[idx_1].cotizacion_no=busca_d.cotizacion_no
LET cuenta2[idx_1].num_oc=busca_d.num_oc
END IF
IF busca_d.valor < 0 THEN
LET cuenta1.balance = cuenta1.balance + busca_d.valor
LET cuenta2[idx_1].balance1 = cuenta1.balance
LET cuenta2[idx_1].credito = busca_d.valor
LET cuenta2[idx_1].debito = 0
ELSE
LET cuenta2[idx_1].debito = busca_d.valor
LET cuenta1.balance = cuenta1.balance + busca_d.valor
LET cuenta2[idx_1].balance1 = cuenta1.balance
LET cuenta2[idx_1].credito = 0
END IF
LET idx_1 = idx_1 + 1
END FOREACH
IF idx_1 = 1 THEN
CALL fgl_winmessage("INFO","ESTE CLIENTE NO TIENE TRANSACCIONES EN EL RANGO DE FECHA SELECCIONADO","INFO")
ELSE
DISPLAY ARRAY cuenta2 TO cuenta.*
ON ACTION documento
LET curr = arr_curr()
LET busca_d.num_oc = cuenta2[curr].num_oc
CALL files_ordenes(busca_d.num_oc,usuarios,clave)
DISCONNECT "smarmotech"
IF strconect = 'marmotech' THEN
SET CONNECTION "IFMX"
ELSE
SET CONNECTION "MSSQL_C"
END IF
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
END IF
IF INT_FLAG THEN
LET int_flag = FALSE
RETURN
ELSE
CLEAR FORM
GOTO volvera
END IF
END FUNCTION