{ ------------------------------------------------------------------------------- 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 " Consulta Registro" AT 2,1 ATTRIBUTE (BOLD) DISPLAY " 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