{ ----------------------------------------------------------------------------- PROGRAMA : CCPRMT003 OBJETIVO : Generacion de Notas de Credito Por Avance a Orden. REALIZADO POR : Tadeo A. Ferreras FECHA : Enero 26, 1993 ----------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE decenas DYNAMIC ARRAY OF CHAR(20) DEFINE centenas DYNAMIC ARRAY OF CHAR(20) DEFINE unidades1 DYNAMIC ARRAY OF CHAR(20) DEFINE valor_cheque1,p_num_doc,aplicar,otro_num INT, xdireccion,xnombre_proyecto,xnombre_provincia CHAR(60), psimbolo CHAR(10), pmoneda CHAR(20), xestado CHAR(20), verdad BOOLEAN, ch_itbis char(2) DEFINE valor_orig,valor_nc,nc_pend,valor_ctrl,p_total,val_pen, valor2,monto1 DECIMAL(12,2), valor_letras CHAR(240) DEFINE fecha1 DATE DEFINE nombre1,nombre2,apell CHAR(15) DEFINE nombre_ven,nombre_cli CHAR(30) DEFINE tipo_p CHAR(1) DEFINE recibo_nc RECORD num_doc INTEGER, num_orden INTEGER, tipo_cliente INTEGER, sec_cliente INTEGER, cod_emp_sec INTEGER, fecha DATE, avance DECIMAL(12,2) END RECORD, pcondpago SMALLINT, psecvend INT ####### Funcion para agregar un recibo de pago Por Avance MAIN DEFER INTERRUPT CALL STARTLOG("ccprmt03.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "exterior" AS "IFMX" CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a SELECT unique a.sucid,a.sucnombre INTO codigo_sucursal,nombre_sucursal FROM sucursales a,seg0001 b WHERE b.usuario = usuarios AND b.sucid = a.sucid IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS","STOP") EXIT PROGRAM END IF CALL ccprmt003() END MAIN FUNCTION ccprmt003() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 #CALL pantalla() OPEN FORM ccfmmt003 FROM "ccfmmt003" DISPLAY FORM ccfmmt003 DISPLAY "ccprmt003" AT 4,3 DISPLAY "Generacion Nota de Credito Por Avance Orden" AT 6,18 DISPLAY nombre_sucursal TO localidad MENU ON ACTION nuevo LET tipo_p = "A" INITIALIZE recibo_nc.* TO NULL LET recibo_nc.fecha = today CALL ccpcad003() ON ACTION buscar LET tipo_p = "C" INITIALIZE recibo_nc.* TO NULL SET CONNECTION "IFMX" CALL ccpcmf003() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION ccpcad003() DEFINE porc_p DECIMAL(10,2) DEFINE emp SMALLINT DEFINE hoy DATE LET hoy = null LABEL volver: INPUT BY NAME recibo_nc.*,recibo.comentario,ch_itbis WITHOUT DEFAULTS ## AQUI SE PREPARA PARA LA CAPTURA DE INFORMACION BEFORE INPUT LET ch_itbis = 'SI' DISPLAY BY NAME ch_itbis NEXT FIELD Num_orden AFTER FIELD num_orden IF recibo_nc.num_orden IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_orden END IF LET nombre_cli = NULL {SELECT UNIQUE a.tipo_cliente,a.sec_cliente,b.nombre,CONVERT(char(10),a.fecha_oc,103) INTO recibo_nc.tipo_cliente,recibo_nc.sec_cliente,nombre_cli, recibo_nc.fecha FROM prtb00012 a, b WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.num_oc = recibo_nc.num_orden } IF tipo_p = 'A' THEN LET xnombre_proyecto = NULL LET xnombre_provincia = NULL LET xdireccion = NULL LET nombre_cli = NULL LET recibo_nc.avance = 0 SELECT UNIQUE a.tipo_cliente,a.sec_cliente,b.nombre, a.nombre_proyecto,c.nombre_provincia, a.direccion_cliente,a.cond_pago,a.sec_vend INTO recibo_nc.tipo_cliente,recibo_nc.sec_cliente,nombre_cli, xnombre_proyecto,xnombre_provincia,xdireccion,pcondpago,psecvend FROM vetb00050 a, vetb00004 b,vetb00020 c WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.cotizacion_no = recibo_nc.num_orden AND a.cod_provincia = c.cod_provincia IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_orden END IF CALL procesaCliente(recibo_nc.tipo_cliente) RETURNING verdad END IF IF tipo_p = 'C' THEN SELECT UNIQUE a.tipo_cliente,a.sec_cliente,b.nombre INTO recibo_nc.tipo_cliente,recibo_nc.sec_cliente,nombre_cli FROM vetb00050 a, vetb00004 b,vetb00020 c WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.cotizacion_no = recibo_nc.num_orden IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_orden END IF CALL procesaCliente(recibo_nc.tipo_cliente) RETURNING verdad END IF SELECT UNIQUE a.sec_vend INTO recibo_nc.cod_emp_sec FROM vetb00028 a WHERE a.tipo_cliente = recibo_nc.tipo_cliente AND a.sec_cliente = recibo_nc.sec_cliente LET nombre_ven = NULL LET nombre1 = NULL LET nombre2 = NULL LET apell = NULL SELECT UNIQUE a.nom1_emp,a.nom2_emp,a.apell1_emp INTO nombre1,nombre2,apell FROM adtb00003 a WHERE a.num_emp = recibo_nc.cod_emp_sec LET nombre_ven = nombre1 CLIPPED," ",nombre2 CLIPPED," ",apell CLIPPED DISPLAY BY NAME recibo_nc.tipo_cliente,recibo_nc.sec_cliente,nombre_cli, recibo_nc.cod_emp_sec,nombre_ven ATTRIBUTE (REVERSE) DISPLAY BY NAME recibo_nc.fecha ATTRIBUTE(blue) AFTER FIELD fecha IF recibo_nc.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = recibo_nc.fecha CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF AFTER FIELD avance IF recibo_nc.avance IS NULL OR recibo_nc.avance < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD avance END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF recibo_nc.num_orden IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_doc END IF IF recibo_nc.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF IF recibo_nc.avance IS NULL OR recibo_nc.avance < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD avance END IF IF recibo_nc.avance = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD avance END IF END INPUT INITIALIZE p_companias.* TO NULL IF tipo_p = "A" THEN CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad IF verdad=TRUE THEN SET CONNECTION "IFMX" SELECT a.* INTO p_companias.* FROM companias a SELECT a.ult_recibo INTO recibo_nc.num_doc FROM cctb00003 a WHERE a.tipo_doc = "AV" IF recibo_nc.num_doc IS NULL THEN LET recibo_nc.num_doc = 0 END IF LET recibo_nc.num_doc = recibo_nc.num_doc + 1 LET otro_num = recibo_nc.num_doc IF otro_num = 0 or otro_num IS NULL THEN CALL fgl_winmessage("ERROR","PROBLEMAS EN EL CONTROL NUMERO","STOP") RETURN END IF UPDATE cctb00003 set ult_recibo = recibo_nc.num_doc where tipo_doc = 'AV' DISPLAY BY NAME recibo_nc.num_doc ATTRIBUTE (REVERSE) INSERT INTO cctb00001 (cod_cia,num_doc,tipo_doc,tipo_cliente,sec_cliente, cod_emp,cod_emp_sec,fecha_orig,aplica_a,num_cheque,valor, monto_desc,us_crea,fech_crea,costo) VALUES (p_companias.cod_comp,recibo_nc.num_doc,"AV",recibo_nc.tipo_cliente, recibo_nc.sec_cliente,codigo_sucursal, recibo_nc.cod_emp_sec,recibo_nc.fecha, recibo_nc.num_doc,recibo_nc.num_orden,recibo_nc.avance,0, usuarios,current,1) INSERT INTO cctb00011 (cod_cia,tipo_cliente,sec_cliente, num_doc,tipo_doc,comentario,us_crea,fech_crea) VALUES (p_companias.cod_comp,recibo_nc.tipo_cliente,recibo_nc.sec_cliente, recibo_nc.num_doc,'AV',recibo.comentario,usuarios,current) END IF SET CONNECTION "MSSQL" SELECT a.ult_recibo INTO recibo_nc.num_doc FROM cctb00003 a WHERE a.tipo_doc = "AV" IF recibo_nc.num_doc IS NULL THEN LET recibo_nc.num_doc = 0 END IF LET recibo_nc.num_doc = recibo_nc.num_doc + 1 UPDATE cctb00003 set ult_recibo = recibo_nc.num_doc where tipo_doc = 'AV' INSERT INTO cctb00001 (cod_cia,num_doc,tipo_doc,tipo_cliente,sec_cliente, cod_emp,cod_emp_sec,fecha_orig,aplica_a,num_cheque,valor, monto_desc,us_crea,fech_crea,costo) VALUES (p_companias.cod_comp,recibo_nc.num_doc,"AV",recibo_nc.tipo_cliente, recibo_nc.sec_cliente,codigo_sucursal, recibo_nc.cod_emp_sec,recibo_nc.fecha, recibo_nc.num_doc,recibo_nc.num_orden,recibo_nc.avance,0, SUSER_SNAME(),GETDATE(),1) INSERT INTO cctb00011 (cod_cia,tipo_cliente,sec_cliente, num_doc,tipo_doc,comentario,us_crea,fech_crea,chitbis) VALUES (p_companias.cod_comp,recibo_nc.tipo_cliente,recibo_nc.sec_cliente, recibo_nc.num_doc,'AV',recibo.comentario,usuarios,getdate(),ch_itbis) # AQUI VIENE LA FUNCION PARA EVALUAR EL CLIENTE CALL evaluaclientes (recibo_nc.tipo_cliente,recibo_nc.sec_cliente, pcondpago,recibo_nc.num_orden,psecvend,'AV') RETURNING xestado IF xestado ='AUTORIZADA' THEN UPDATE cctb00025 SET estado = 'AUROTIZADA' WHERE num_req IN (SELECT a.num_req FROM cctb00026 a WHERE a.cotizacion_no =recibo_nc.num_orden) END IF #################### IF verdad THEN INSERT INTO cctb00020 (cod_cia,tipo_doc,num_oc,fecha,tipo_cliente,sec_cliente, factura,valor_efectivo,num_trans,us_crea,fech_crea) VALUES (p_companias.cod_comp,'AV',recibo_nc.num_doc,recibo_nc.fecha, recibo_nc.tipo_cliente, recibo_nc.sec_cliente,recibo_nc.num_orden, recibo_nc.avance,otro_num,usuarios,getdate()) END IF END IF IF tipo_p = "C" THEN CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad IF verdad=TRUE THEN SET CONNECTION "IFMX" SELECT a.* INTO p_companias.* FROM companias a UPDATE cctb00001 SET (num_cheque,tipo_cliente,sec_cliente,cod_emp_sec, fecha_orig,valor,monto_desc,us_mod,fech_mod) = (recibo_nc.num_orden,recibo_nc.tipo_cliente, recibo_nc.sec_cliente,recibo_nc.cod_emp_sec, recibo_nc.fecha,recibo_nc.avance,0,usuarios,current) WHERE tipo_doc = "AV" AND num_doc = recibo_nc.num_doc AND aplica_a = recibo_nc.num_doc UPDATE cctb00011 SET comentario = recibo.comentario, us_mod = usuarios, fech_mod= current WHERE cod_cia = p_companias.cod_comp AND num_doc = recibo_nc.num_doc AND tipo_doc = 'AV' END IF SET CONNECTION "MSSQL" SELECT unique a.num_trans INTO otro_num FROM cctb00020 a WHERE a.num_trans = recibo_nc.num_doc UPDATE cctb00001 SET (num_cheque,tipo_cliente,sec_cliente,cod_emp_sec, fecha_orig,valor,monto_desc,us_mod,fech_mod) = (recibo_nc.num_orden,recibo_nc.tipo_cliente, recibo_nc.sec_cliente,recibo_nc.cod_emp_sec, recibo_nc.fecha,recibo_nc.avance,0,SUSER_SNAME(),GETDATE()) WHERE tipo_doc = "AV" AND num_doc = otro_num AND aplica_a = recibo_nc.num_doc UPDATE cctb00011 SET comentario = recibo.comentario, us_mod = usuarios, fech_mod= getdate() WHERE cod_cia = p_companias.cod_comp AND num_doc = recibo_nc.num_doc AND tipo_doc = 'AV' END IF CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT volante TO archivo IF verdad THEN LET recibo_nc.num_doc = otro_num END IF DISPLAY BY NAME recibo_nc.num_doc ATTRIBUTE (REVERSE) OUTPUT TO REPORT volante(recibo_nc.*) FINISH REPORT volante RUN imprime LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION FUNCTION ccpcmf003() DEFINE recibo_orig INT INPUT BY NAME recibo_nc.num_doc AFTER FIELD num_doc SET CONNECTION "IFMX" SELECT a.num_cheque,a.tipo_cliente,a.sec_cliente,a.cod_emp_sec, a.fecha_orig,a.valor,a.cod_emp INTO recibo_nc.num_orden,recibo_nc.tipo_cliente,recibo_nc.sec_cliente, recibo_nc.cod_emp_sec,recibo_nc.fecha,recibo_nc.avance,codigo_sucursal FROM cctb00001 a WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND a.tipo_doc = 'AV' AND a.num_Doc = recibo_nc.num_doc IF STATUS = NOTFOUND THEN SET CONNECTION "MSSQL" SELECT a.num_cheque,a.tipo_cliente,a.sec_cliente,a.cod_emp_sec, a.fecha_orig,a.valor,a.cod_emp INTO recibo_nc.num_orden,recibo_nc.tipo_cliente,recibo_nc.sec_cliente, recibo_nc.cod_emp_sec,recibo_nc.fecha,recibo_nc.avance,codigo_sucursal FROM cctb00001 a WHERE a.status_t IS NULL AND a.num_doc = a.aplica_a AND a.tipo_doc = 'AV' AND a.num_Doc = recibo_nc.num_doc IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD Num_Doc END IF END IF SELECT a.nombre INTO nombre_cli FROM vetb00004 a WHERE a.tipo_cliente = recibo_nc.tipo_cliente AND a.sec_cliente = recibo_nc.sec_cliente SELECT UNIQUE a.nom1_emp,a.nom2_emp,a.apell1_emp INTO nombre1,nombre2,apell FROM adtb00003 a WHERE a.num_emp = recibo_nc.cod_emp_sec CALL busca_info() LET nombre_ven = nombre1 CLIPPED," ",nombre2 CLIPPED," ",apell CLIPPED DISPLAY BY NAME recibo_nc.*,nombre_cli,nombre_ven ATTRIBUTE (REVERSE) DISPLAY codigo_sucursal TO localidad AFTER INPUT IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF EXIT INPUT END INPUT MENU { ESTA FUNCIONABILIDAD SE QUITO TEMPORALMENTE, YA QUE EL PROGRAMA TIENE QUE ACTUALIZAR DOS BASE DE DATOS DIFERENTES, PERO NO TENGO LA IDENTIFICACION DE CUAL SERIA LA PRIMERA ON ACTION anular LET p_fechas = recibo_nc.fecha SET CONNECTION "MSSQL" CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF LET otro_num = recibo_nc.num_doc LET recibo_orig = recibo_nc.num_doc CALL procesacliente(recibo_nc.tipo_cliente) RETURNING verdad IF verdad THEN SET CONNECTION "IFMX" SELECT SUM(a.valor+a.monto_desc) INTO monto1 FROM cctb00001 a WHERE a.status_t IS NULL AND a.num_doc = recibo_nc.num_doc AND a.num_doc != a.aplica_a AND a.tipo_doc = "AV" IF monto1 IS NULL THEN LET monto1 = 0 END IF IF monto1 <> 0 THEN ERROR "Documento Tiene Aplicaciones... No Puede Ser Eliminado" CONTINUE MENU END IF END IF SET CONNECTION "MSSQL" IF verdad THEN SELECT a.num_oc INTO recibo_nc.num_doc FROM cctb00020 a WHERE a.num_trans = otro_num and tipo_Doc = 'AV' END IF SELECT SUM(a.valor+a.monto_desc) INTO monto1 FROM cctb00001 a WHERE a.status_t IS NULL AND a.num_doc = recibo_nc.num_doc AND a.num_doc != a.aplica_a AND a.tipo_doc = "AV" IF monto1 IS NULL THEN LET monto1 = 0 END IF IF monto1 <> 0 THEN ERROR "Documento Tiene Aplicaciones... No Puede Ser Eliminado" CONTINUE MENU END IF LET respuesta = fgl_winquestion("INFO","ESTA SEGURO DE QUERER ANULAR ESTE DOCUMENTO?","NO","NO|YES","question",0) IF UPSHIFT(respuesta) = "YES" THEN IF verdad THEN SET CONNECTION "IFMX" LET recibo_nc.num_doc= recibo_orig UPDATE cctb00001 SET (status_t,us_mod,fech_mod) = ( "E",usuarios,current) WHERE tipo_doc = "AV" AND num_doc = recibo_nc.num_doc AND aplica_a = recibo_nc.num_doc and fecha_orig > '03/01/2011' END IF SET CONNECTION "MSSQL" SELECT a.num_oc INTO recibo_nc.num_doc FROM cctb00020 a WHERE a.num_trans = otro_num UPDATE cctb00001 SET (status_t,us_mod,fech_mod) = ( "E",SUSER_SNAME(),GETDATE()) WHERE tipo_doc = "AV" AND num_doc = recibo_nc.num_doc AND aplica_a = recibo_nc.num_doc and fecha_orig > '03/01/2011' LET numero_msg = 82 CALL msg(numero_msg) END IF } ON ACTION rImprimir SET CONNECTION "MSSQL" SELECT a.cod_perfil INTO pperfil FROM seg0001 a WHERE a.usuario = usuarios CALL seg000(usuarios,pperfil,'otroimp') RETURNING acceso IF acceso = "SI" THEN CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT volante TO archivo OUTPUT TO REPORT volante(recibo_nc.*) FINISH REPORT volante RUN imprime CALL fgl_winmessage("IMPRESION","ENVIO INFORMACION A LA IMPRESORA","STOP") END IF ON ACTION otroimp CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT volante1 TO archivo OUTPUT TO REPORT volante1(recibo_nc.*) FINISH REPORT volante1 RUN imprime CALL fgl_winmessage("IMPRESION","ENVIO INFORMACION A LA IMPRESORA","STOP") ON ACTION salir EXIT MENU END MENU END FUNCTION REPORT volante (x) DEFINE x RECORD num_doc INTEGER, num_orden INTEGER, tipo_cliente INTEGER, sec_cliente INTEGER, cod_emp_sec INTEGER, fecha DATE, avance DECIMAL(12,2) END RECORD DEFINE doble CHAR(1) DEFINE comp_off,negras,negras_of,italic,italic_of CHAR(2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 PAGE LENGTH 33 FORMAT PAGE HEADER LET negras = ASCII 27, ASCII 69 LET negras_of = ASCII 27, ASCII 70 LET doble = ASCII 14 LET italic = ASCII 27, ASCII 52 LET italic_of = ASCII 27, ASCII 53 LET comp_off = ASCII 18 PRINT COLUMN 70,comp_off, ASCII 27, ASCII 80 PRINT COLUMN 68,doble, x.num_doc using "&&&&&&" IF NOT verdad THEN PRINT " " PRINT " " ELSE PRINT COLUMN 5, negras,p_companias.nombre CLIPPED,negras_of, COLUMN 74, today using "dd/mm/yyyy" PRINT COLUMN 5, p_companias.direccion CLIPPED," TEL.",p_companias.telefono CLIPPED END IF PRINT COLUMN 15, italic,"RECIBO DE INGRESO" PRINT COLUMN 15, italic,"AVANCE A COTIZACION" SKIP 1 LINE LET valor_orig = x.avance LET valor_letras = NULL SELECT a.simbolo,a.descripcion_moneda INTO psimbolo,pmoneda FROM vetb00061 a,vetb00060 b WHERE a.ventas = b.ventas AND b.tipo_cliente = x.tipo_cliente CALL convierte() # BUSCA TIPO DE VENTAS PRINT COLUMN 5, "LOCALIDAD: ",nombre_sucursal PRINT COLUMN 5, "RECIBIMOS DE :",negras,nombre_cli clipped,"(",x.tipo_cliente USING "&&","-",x.sec_cliente USING "&&&&&&",")",negras_of PRINT COLUMN 5, "DIRECCION :",negras,xdireccion,negras_of PRINT COLUMN 5, "PROVINCIA :",negras,xnombre_provincia CLIPPED,negras_of PRINT COLUMN 5, "VENDEDOR :",recibo_nc.cod_emp_sec USING "<<<<"," ",nombre_ven PRINT COLUMN 5, "PROYECTO :",negras,xnombre_proyecto CLIPPED,negras_of PRINT COLUMN 5, "LA SUMA DE :", negras,valor_letras clipped,negras_of PRINT COLUMN 5, "VALOR RECIBIDO:", negras,psimbolo CLIPPED,x.avance using "<<<,<<<,<<<.##",negras_of SKIP 1 LINE PRINT COLUMN 1, "------------------------------------------------------------------------------" PRINT COLUMN 5, "FECHA", COLUMN 40, "COTIZACION NO.", COLUMN 60, "NETO COBRADO" PRINT COLUMN 1, "------------------------------------------------------------------------------" SKIP 1 LINE PRINT COLUMN 5, x.fecha using "dd/mm/yyyy", COLUMN 40, x.num_orden using "&&&&&&" , COLUMN 58,psimbolo CLIPPED, x.avance using "<<<,<<<,<##.##" PAGE TRAILER SKIP 1 LINE PRINT COLUMN 5, "OBSERVACION: ",recibo.comentario PRINT COLUMN 5, "_______________________________", COLUMN 45,"_______________________________" PRINT COLUMN 10, " Preparado Por ", COLUMN 45, " Autorizado Por" PRINT italic_of END REPORT REPORT volante1(x) DEFINE x RECORD num_doc INTEGER, num_orden INTEGER, tipo_cliente INTEGER, sec_cliente INTEGER, cod_emp_sec INTEGER, fecha DATE, avance DECIMAL(12,2) END RECORD DEFINE doble CHAR(1) DEFINE comp_off,negras,negras_of,italic,italic_of CHAR(2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 PAGE LENGTH 33 FORMAT PAGE HEADER LET negras = ASCII 27, ASCII 69 LET negras_of = ASCII 27, ASCII 70 LET doble = ASCII 14 LET italic = ASCII 27, ASCII 52 LET italic_of = ASCII 27, ASCII 53 LET comp_off = ASCII 18 PRINT COLUMN 70,comp_off, ASCII 27, ASCII 80 PRINT COLUMN 68,doble, x.num_doc using "&&&&&&" IF NOT verdad THEN PRINT " " PRINT " " ELSE PRINT COLUMN 5, negras,p_companias.nombre CLIPPED,negras_of, COLUMN 74, today using "dd/mm/yyyy" PRINT COLUMN 5, p_companias.direccion CLIPPED," TEL.",p_companias.telefono CLIPPED END IF PRINT COLUMN 15, italic,"RECIBO DE INGRESO" PRINT COLUMN 15, italic,"AVANCE A COTIZACION" SKIP 1 LINE LET valor_orig = x.avance LET valor_letras = NULL CALL convierte() SET CONNECTION "MSSQL" # BUSCA TIPO DE VENTAS SELECT a.simbolo INTO psimbolo FROM vetb00061 a,vetb00060 b WHERE a.ventas = b.ventas AND b.tipo_cliente = x.tipo_cliente PRINT COLUMN 60, "LOCALIDAD: ",nombre_sucursal PRINT COLUMN 5, "RECIBIMOS DE :",negras,nombre_cli clipped,"(",x.tipo_cliente USING "&&","-",x.sec_cliente USING "&&&&&&",")",negras_of PRINT COLUMN 5, "DIRECCION :",negras,xdireccion,negras_of PRINT COLUMN 5, "PROVINCIA :",negras,xnombre_provincia CLIPPED,negras_of PRINT COLUMN 5, "VENDEDOR :",recibo_nc.cod_emp_sec USING "<<<<"," ",nombre_ven PRINT COLUMN 5, "PROYECTO :",negras,xnombre_proyecto CLIPPED,negras_of PRINT COLUMN 5, "LA SUMA DE :", negras,valor_letras clipped,negras_of PRINT COLUMN 5, "VALOR RECIBIDO:", negras,psimbolo CLIPPED,x.avance using "<<<,<<<,<<<.##",negras_of PRINT COLUMN 5, "REFERENCIA : ",otro_num USING "&&&&&&" SKIP 1 LINE PRINT COLUMN 1, "------------------------------------------------------------------------------" PRINT COLUMN 5, "FECHA", COLUMN 40, "COTIZACION NO.", COLUMN 60, "NETO COBRADO" PRINT COLUMN 1, "------------------------------------------------------------------------------" SKIP 1 LINE PRINT COLUMN 5, x.fecha using "dd/mm/yyyy", COLUMN 40, x.num_orden using "&&&&&&" , COLUMN 58,psimbolo CLIPPED, x.avance using "<<<,<<<,<##.##" PAGE TRAILER SKIP 1 LINE PRINT COLUMN 5, "OBSERVACION: ",recibo.comentario PRINT COLUMN 5, "_______________________________", COLUMN 45,"_______________________________" PRINT COLUMN 10, " Preparado Por ", COLUMN 45, " Autorizado Por" PRINT italic_of END REPORT FUNCTION convierte() DEFINE consegui CHAR(1) DEFINE p,miles,m,k,a,b,d,c,entero,unidades_mi,unidades_m,unidad,mil,millon, unid_c,u INTEGER DEFINE cheles DECIMAL (7,2) CALL letras() LET consegui = "N" LET entero = valor_orig LET cheles = (valor_orig - entero) * 100 LET unidad = entero / 100 LET unidad = entero - (unidad * 100) LET a = entero / 1000 LET a = entero - (a * 1000) LET d = entero - 19 IF d >= 82 THEN LET c = entero / 100 # Para Controlar los miles y los cientos IF c <= 9 THEN LET valor_letras = valor_letras clipped," ",centenas[c] clipped ELSE LET c = entero / 1000 LET b = entero / 1000000 END IF IF d > 19 THEN LET d = unidad - 19 END IF IF unidad > 0 and unidad < 20 THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped LET consegui = "S" END IF ELSE IF d > 0 AND d <= 81 THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped LET consegui = "S" END IF END IF # Para controlar los miles IF entero > 999 THEN LET unidades_m = a / 100 LET unidades_m = a - (unidades_m * 100) LET valor_letras = null IF c = 1 THEN LET valor_letras = "MIL" END IF IF c > 1 and c <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[c] clipped," ","MIL" END IF IF c >= 20 and c <= 999 THEN IF c < 82 THEN LET c = c - 19 LET valor_letras = valor_letras clipped," ",decenas[c] clipped ELSE LET k = c / 100 IF k > 0 THEN LET valor_letras = valor_letras clipped," ",centenas[k] clipped END IF LET unid_c = c - (k * 100) IF unid_c >= 20 THEN LET unid_c = unid_c - 19 LET valor_letras = valor_letras clipped," ",decenas[unid_c] clipped END IF END IF LET valor_letras = valor_letras clipped," ","MIL" END IF LET c = a IF c > 100 THEN LET c = c / 100 LET valor_letras = valor_letras clipped," ",centenas[c] clipped END IF IF unidades_m > 0 and unidades_m < 19 THEN LET a = unidades_m LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped END IF END IF # Para Controlar cantidades en millones IF entero > 999999 THEN LET c = 0 LET miles = entero - 1000000 LET m = miles / 1000 LET p = miles - (m * 1000) LET u = m / 100 LET u = m - (u * 100) LET unidades_mi = p LET unidades_mi = unidades_mi / 100 LET unidades_mi = p - (unidades_mi * 100) LET valor_letras = null IF b = 1 THEN LET valor_letras = "UN MILLON" END IF IF b > 1 and b <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[b] clipped," ", "MILLONES" END IF IF b >= 20 and b <= 999999 THEN IF b < 82 THEN LET b = b - 19 LET valor_letras = valor_letras clipped," ",decenas[b] clipped," ", "MILLONES" ELSE LET k = b / 100 LET valor_letras = valor_letras clipped," ",centenas[k] clipped," ", "MILLONES" END IF END IF LET b = m IF b > 100 THEN LET b = b / 100 LET valor_letras = valor_letras clipped," ",centenas[b] clipped IF u > 0 and u <= 19 THEN IF u = 1 THEN LET unidades1[1] = "UN" END IF LET valor_letras = valor_letras clipped," ",unidades1[u] clipped END IF LET valor_letras = valor_letras clipped," ","MIL" END IF IF p > 100 THEN LET p = p / 100 LET valor_letras = valor_letras clipped," ",centenas[p] clipped END IF IF unidades_mi > 0 and unidades_mi < 19 THEN LET m = unidades_mi LET valor_letras = valor_letras clipped, " ",unidades1[m] clipped END IF END IF IF unidad > 0 and unidad < 20 AND consegui = "N" THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped END IF IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped END IF LET valor_letras = valor_letras clipped," ",pmoneda # este era la instruccion original fecha 29/04/2014 LET valor_letras = valor_letras clipped," ","PESOS" LET valor_letras = valor_letras clipped," ","CON"," ",cheles using "&&", "/100" END FUNCTION FUNCTION letras() LET unidades1[1] = "UNO" LET unidades1[2] = "DOS" LET unidades1[3] = "TRES" LET unidades1[4] = "CUATRO" LET unidades1[5] = "CINCO" LET unidades1[6] = "SEIS" LET unidades1[7] = "SIETE" LET unidades1[8] = "OCHO" LET unidades1[9] = "NUEVE" LET unidades1[10] = "DIEZ" LET unidades1[11] = "ONCE" LET unidades1[12] = "DOCE" LET unidades1[13] = "TRECE" LET unidades1[14] = "CATORCE" LET unidades1[15] = "QUINCE" LET unidades1[16] = "DIESISEIS" LET unidades1[17] = "DIESISIETE" LET unidades1[18] = "DIESIOCHO" LET unidades1[19] = "DIESINUEVE" LET decenas[1] = "VEINTE" LET decenas[2] = "VEINTE Y UNO" LET decenas[3] = "VEINTE Y DOS" LET decenas[4] = "VEINTE Y TRES" LET decenas[5] = "VEINTE Y CUATRO" LET decenas[6] = "VEINTE Y CINCO" LET decenas[7] = "VEINTE Y SEIS" LET decenas[8] = "VEINTE Y SIETE" LET decenas[9] = "VEINTE Y OCHO" LET decenas[10] = "VEINTE Y NUEVE" LET decenas[11] = "TREINTA" LET decenas[12] = "TREINTA Y UNO" LET decenas[13] = "TREINTA Y DOS" LET decenas[14] = "TREINTA Y TRES" LET decenas[15] = "TREINTA Y CUATRO" LET decenas[16] = "TREINTA Y CINCO" LET decenas[17] = "TREINTA Y SEIS" LET decenas[18] = "TREINTA Y SIETE" LET decenas[19] = "TREINTA Y OCHO" LET decenas[20] = "TREINTA Y NUEVE" LET decenas[21] = "CUARENTA" LET decenas[22] = "CUARENTA Y UNO" LET decenas[23] = "CUARENTA Y DOS" LET decenas[24] = "CUARENTA Y TRES" LET decenas[25] = "CUARENTA Y CUATRO" LET decenas[26] = "CUARENTA Y CINCO" LET decenas[27] = "CUARENTA Y SEIS" LET decenas[28] = "CUARENTA Y SIETE" LET decenas[29] = "CUARENTA Y OCHO" LET decenas[30] = "CUARENTA Y NUEVE" LET decenas[31] = "CINCUENTA" LET decenas[32] = "CINCUENTA Y UNO" LET decenas[33] = "CINCUENTA Y DOS" LET decenas[34] = "CINCUENTA Y TRES" LET decenas[35] = "CINCUENTA Y CUATRO" LET decenas[36] = "CINCUENTA Y CINCO" LET decenas[37] = "CINCUENTA Y SEIS" LET decenas[38] = "CINCUENTA Y SIETE" LET decenas[39] = "CINCUENTA Y OCHO" LET decenas[40] = "CINCUENTA Y NUEVE" LET decenas[41] = "SESENTA" LET decenas[42] = "SESENTA Y UNO" LET decenas[43] = "SESENTA Y DOS" LET decenas[44] = "SESENTA Y TRES" LET decenas[45] = "SESENTA Y CUATRO" LET decenas[46] = "SESENTA Y CINCO" LET decenas[47] = "SESENTA Y SEIS" LET decenas[48] = "SESENTA Y SIETE" LET decenas[49] = "SESENTA Y OCHO" LET decenas[50] = "SESENTA Y NUEVE" LET decenas[51] = "SETENTA" LET decenas[52] = "SETENTA Y UNO" LET decenas[53] = "SETENTA Y DOS" LET decenas[54] = "SETENTA Y TRES" LET decenas[55] = "SETENTA Y CUATRO" LET decenas[56] = "SETENTA Y CINCO" LET decenas[57] = "SETENTA Y SEIS" LET decenas[58] = "SETENTA Y SIETE" LET decenas[59] = "SETENTA Y OCHO" LET decenas[60] = "SETENTA Y NUEVE" LET decenas[61] = "OCHENTA" LET decenas[62] = "OCHENTA Y UNO" LET decenas[63] = "OCHENTA Y DOS" LET decenas[64] = "OCHENTA Y TRES" LET decenas[65] = "OCHENTA Y CUATRO" LET decenas[66] = "OCHENTA Y CINCO" LET decenas[67] = "OCHENTA Y SEIS" LET decenas[68] = "OCHENTA Y SIETE" LET decenas[69] = "OCHENTA Y OCHO" LET decenas[70] = "OCHENTA Y NUEVE" LET decenas[71] = "NOVENTA" LET decenas[72] = "NOVENTA Y UNO" LET decenas[73] = "NOVENTA Y DOS" LET decenas[74] = "NOVENTA Y TRES" LET decenas[75] = "NOVENTA Y CUATRO" LET decenas[76] = "NOVENTA Y CINCO" LET decenas[77] = "NOVENTA Y SEIS" LET decenas[78] = "NOVENTA Y SIETE" LET decenas[79] = "NOVENTA Y OCHO" LET decenas[80] = "NOVENTA Y NUEVE" LET decenas[81] = "CIEN" LET centenas[1] = "CIENTO" LET centenas[2] = "DOCIENTOS" LET centenas[3] = "TRESCIENTOS" LET centenas[4] = "CUATROCIENTOS" LET centenas[5] = "QUINIENTOS" LET centenas[6] = "SEISCIENTOS" LET centenas[7] = "SETECIENTOS" LET centenas[8] = "OCHOCIENTOS" LET centenas[9] = "NOVECIENTOS" END FUNCTION FUNCTION busca_info() SELECT a.nombre INTO nombre_cli FROM vetb00004 a WHERE a.tipo_cliente = recibo_nc.tipo_cliente AND a.sec_cliente = recibo_nc.sec_cliente SELECT UNIQUE a.nom1_emp,a.nom2_emp,a.apell1_emp INTO nombre1,nombre2,apell FROM adtb00003 a WHERE a.num_emp = recibo_nc.cod_emp_sec LET nombre_ven = nombre1 CLIPPED," ",nombre2 CLIPPED," ",apell CLIPPED SELECT a.sucnombre INTO nombre_sucursal FROM sucursales a WHERE a.sucid = codigo_sucursal SET CONNECTION "MSSQL" LET otro_num = NULL SELECT a.num_trans INTO otro_num FROM cctb00020 a WHERE a.num_oc = recibo_nc.num_doc SELECT a.chitbis INTO ch_itbis FROM cctb00011 a WHERE a.tipo_Doc = 'AV' AND a.num_doc = recibo_nc.num_doc SET CONNECTION "IFMX" DISPLAY BY NAME recibo_nc.*,nombre_cli,nombre_ven,ch_itbis DISPLAY codigo_sucursal TO Localidad END FUNCTION FUNCTION procesacliente(xtipo_cliente) DEFINE xtipo_cliente SMALLINT, verdad1 BOOLEAN, xitbis CHAR(1) LET verdad1 = TRUE SELECT a.paga_itbis INTO xitbis FROM vetb00060 a WHERE a.tipo_cliente = xtipo_cliente IF xitbis = "N" THEN LET verdad1 = FALSE END IF RETURN verdad1 END FUNCTION