您当前的位置:首页 > 养生 > 内容

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结<精准详细>)

关于【谈谈对审计工作的理解】,谈谈对审计重要性的理解,今天犇犇小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

内容导航:1、Java IO 基础知识总结(精准详细)2、谈谈对审计工作的理解

1、Java IO 基础知识总结(精准详细)

IO 流简介

IO 即 Input/Output ,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在 Java 中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。

Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。

InputStream/Reader : 所有的输入流的基类,前者是字节输入流,后者是字符输入流。OutputStream/Writer : 所有输出流的基类,前者是字节输出流,后者是字符输出流。

字节流

InputStream(字节输入流)

InputStream用于从源头(通常是文件)读取数据(字节信息)到内存中,java.io.InputStream抽象类是所有字节输入流的父类。

InputStream 常用方法 :

read() :返回输入流中下一个字节的数据。返回的值介于 0 到 255 之间。如果未读取任何字节,则代码返回 -1,表示文件结束。read(byteb[ ])bb-1b.lengthread(b, 0, b.length)read(byteb[],intoff,intlen) read(byte b[ ]) off lenskip(long n) :忽略输入流中的 n 个字节 ,返回实际忽略的字节数。available():返回输入流中可以读取的字节数。close():关闭输入流释放相关的系统资源。

从 Java 9 开始, InputStream新增加了多个实用的方法:

readAllBytes():读取输入流中的所有字节,返回字节数组。readNBytes(byte[] b, int off, int len):阻塞直到读取len个字节。transferTo(OutputStream out):将所有字节从一个输入流传递到一个输出流。

FileInputStream是一个比较常用的字节输入流对象,可直接指定文件路径,可以直接读取单字节数据,也可以读取至字节数组中。

FileInputStream代码示例:

try (InputStream fis = new FileInputStream("input.txt")) { System.out.println("Number of remaining bytes:" + fis.available()); int content; long skip = fis.skip(2); System.out.println("The actual number of bytes skipped:" + skip); System.out.print("The content read from file:"); while ((content = fis.read()) != -1) { System.out.print((char) content); }} catch (IOException e) { e.printStackTrace();}

input.txt文件内容:

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

输出:

Number of remaining bytes:11The actual number of bytes skipped:2The content read from file:JavaGuide

不过,一般我们是不会直接单独使用FileInputStream,通常会配合BufferedInputStream(字节缓冲输入流,后文会讲到)来使用。

像下面这段代码在我们的项目中就比较常见,我们通过readAllBytes()读取输入流所有字节并将其直接赋值给一个String对象。

// 新建一个 BufferedInputStream 对象BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("input.txt"));// 读取文件的内容并复制到 String 对象中String result = new String(bufferedInputStream.readAllBytes());System.out.println(result);

DataInputStream用于读取指定类型数据,不能单独使用,必须结合FileInputStream

FileInputStream fileInputStream = new FileInputStream("input.txt");//必须将fileInputStream作为构造参数才能使用DataInputStream dataInputStream = new DataInputStream(fileInputStream);//可以读取任意具体的类型数据dataInputStream.readBoolean();dataInputStream.readInt();dataInputStream.readUTF();

ObjectInputStream 用于从输入流中读取 Java 对象(反序列化), ObjectOutputStream用于将对象写入到输出流(序列化)。

ObjectInputStream input = new ObjectInputStream(new FileInputStream("object.data"));MyClass object = (MyClass) input.readObject();input.close();

另外,用于序列化和反序列化的类必须实现Serializable接口,对象中如果有属性不想被序列化,使用transient修饰。

OutputStream(字节输出流)

OutputStream用于将数据(字节信息)写入到目的地(通常是文件),java.io.OutputStream抽象类是所有字节输出流的父类。

OutputStream 常用方法 :

write(int b):将特定字节写入输出流。write(byte b[ ]) b write(b,0, b.length)write(byte[] b, intoff,intlen) write(byte b[ ]) off lenflush():刷新此输出流并强制写出所有缓冲的输出字节。close():关闭输出流释放相关的系统资源。

FileOutputStream是最常用的字节输出流对象,可直接指定文件路径,可以直接输出单字节数据,也可以输出指定的字节数组。

FileOutputStream代码示例:

try (FileOutputStream output = new FileOutputStream("output.txt")) { byte[] array = "JavaGuide".getBytes(); output.write(array);} catch (IOException e) { e.printStackTrace();}

运行结果:

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

类似于FileInputStreamFileOutputStream通常也会配合BufferedOutputStream(字节缓冲输出流,后文会讲到)来使用。

FileOutputStream fileOutputStream = new FileOutputStream("output.txt");BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream)

DataOutputStream用于写入指定类型数据,不能单独使用,必须结合FileOutputStream

// 输出流FileOutputStream fileOutputStream = new FileOutputStream("out.txt");DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);// 输出任意数据类型dataOutputStream.writeBoolean(true);dataOutputStream.writeByte(1);

ObjectOutputStream 用于从输入流中读取 Java 对象( ObjectInputStream,反序列化)或者将对象写入到输出流(ObjectOutputStream,序列化)。

ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("file.txt")Person person = new Person("Guide哥", "JavaGuide作者");output.writeObject(person);

字符流

不管是文件读写还是网络发送接收,信息的最小存储单元都是字节。 那为什么 I/O 流操作要分为字节流操作和字符流操作呢?

个人认为主要有两点原因:

字符流是由 Java 虚拟机将字节转换得到的,这个过程还算是比较耗时。如果我们不知道编码类型就很容易出现乱码问题。

乱码问题这个很容易就可以复现,我们只需要将上面提到的FileInputStream代码示例中的input.txt文件内容改为中文即可,原代码不需要改动。

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

输出:

Number of remaining bytes:9The actual number of bytes skipped:2The content read from file:§å®¶å¥½

可以很明显地看到读取出来的内容已经变成了乱码。

因此,I/O 流就干脆提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。

字符流默认采用的是Unicode编码,我们可以通过构造方法自定义编码。顺便分享一下之前遇到的笔试题:常用字符编码所占字节数?utf8 :英文占 1 字节,中文占 3 字节, unicode :任何字符都占 2 个字节, gbk :英文占 1 字节,中文占 2 字节。

Reader(字符输入流)

Reader用于从源头(通常是文件)读取数据(字符信息)到内存中,java.io.Reader抽象类是所有字符输入流的父类。

Reader用于读取文本,InputStream用于读取原始字节。

Reader 常用方法 :

read() : 从输入流读取一个字符。read(char[] cbuf) cbuf read(cbuf,0, cbuf.length)read(char[] cbuf, intoff,intlen)read(char[] cbuf) off lenskip(long n) :忽略输入流中的 n 个字符 ,返回实际忽略的字符数。close() : 关闭输入流并释放相关的系统资源。

InputStreamReader是字节流转换为字符流的桥梁,其子类FileReader是基于该基础上的封装,可以直接操作字符文件。

// 字节流转换为字符流的桥梁public class InputStreamReader extends Reader {}// 用于读取字符文件public class FileReader extends InputStreamReader {}

FileReader代码示例:

try (FileReader fileReader = new FileReader("input.txt");) { int content; long skip = fileReader.skip(3); System.out.println("The actual number of bytes skipped:" + skip); System.out.print("The content read from file:"); while ((content = fileReader.read()) != -1) { System.out.print((char) content); }} catch (IOException e) { e.printStackTrace();}

input.txt文件内容:

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

输出:

The actual number of bytes skipped:3The content read from file:我是Guide。

Writer(字符输出流)

Writer用于将数据(字符信息)写入到目的地(通常是文件),java.io.Writer抽象类是所有字节输出流的父类。

Writer 常用方法 :

write(int c) : 写入单个字符。write(char[] cbuf) cbuf write(cbuf,0, cbuf.length)write(char[] cbuf, intoff,intlen)write(char[] cbuf) off lenwrite(String str):写入字符串,等价于write(str, 0, str.length())write(Stringstr,intoff,intlen) write(String str) off lenappend(CharSequence csq) Writer Writerappend(char c) Writer Writerflush():刷新此输出流并强制写出所有缓冲的输出字符。close():关闭输出流释放相关的系统资源。

OutputStreamWriter是字符流转换为字节流的桥梁,其子类FileWriter是基于该基础上的封装,可以直接将字符写入到文件。

// 字符流转换为字节流的桥梁public class InputStreamReader extends Reader {}// 用于写入字符到文件public class FileWriter extends OutputStreamWriter {}

FileWriter代码示例:

try (Writer output = new FileWriter("output.txt")) { output.write("你好,我是Guide。");} catch (IOException e) { e.printStackTrace();}

输出结果:

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

字节缓冲流

IO 操作是很消耗性能的,缓冲流将数据加载至缓冲区,一次性读取/写入多个字节,从而避免频繁的 IO 操作,提高流的传输效率。

字节缓冲流这里采用了装饰器模式来增强InputStreamOutputStream子类对象的功能。

举个例子,我们可以通过BufferedInputStream(字节缓冲输入流)来增强FileInputStream的功能。

// 新建一个 BufferedInputStream 对象BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("input.txt"));

字节流和字节缓冲流的性能差别主要体现在我们使用两者的时候都是调用write(int b)read() 这两个一次只读取一个字节的方法的时候。由于字节缓冲流内部有缓冲区(字节数组),因此,字节缓冲流会先将读取到的字节存放在缓存区,大幅减少 IO 次数,提高读取效率。

我使用write(int b)read()方法,分别通过字节流和字节缓冲流复制一个524.9 mb 的 PDF 文件耗时对比如下:

使用缓冲流复制PDF文件总耗时:15428 毫秒使用普通字节流复制PDF文件总耗时:2555062 毫秒

两者耗时差别非常大,缓冲流耗费的时间是字节流的 1/165。

测试代码如下:

@Testvoid copy_pdf_to_another_pdf_buffer_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("深入理解计算机操作系统.pdf")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("深入理解计算机操作系统-副本.pdf"))) { int content; while ((content = bis.read()) != -1) { bos.write(content); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用缓冲流复制PDF文件总耗时:" + (end - start) + " 毫秒");}@Testvoid copy_pdf_to_another_pdf_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (FileInputStream fis = new FileInputStream("深入理解计算机操作系统.pdf"); FileOutputStream fos = new FileOutputStream("深入理解计算机操作系统-副本.pdf")) { int content; while ((content = fis.read()) != -1) { fos.write(content); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用普通流复制PDF文件总耗时:" + (end - start) + " 毫秒");}

如果是调用read(byte b[])write(byte b[], int off, int len)这两个写入一个字节数组的方法的话,只要字节数组的大小合适,两者的性能差距其实不大,基本可以忽略。

这次我们使用read(byte b[])write(byte b[], int off, int len) 方法,分别通过字节流和字节缓冲流复制一个 524.9 mb 的 PDF 文件耗时对比如下:

使用缓冲流复制PDF文件总耗时:695 毫秒使用普通字节流复制PDF文件总耗时:989 毫秒

两者耗时差别不是很大,缓冲流的性能要略微好一点点。

测试代码如下:

@Testvoid copy_pdf_to_another_pdf_with_byte_array_buffer_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("深入理解计算机操作系统.pdf")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("深入理解计算机操作系统-副本.pdf"))) { int len; byte[] bytes = new byte[4 * 1024]; while ((len = bis.read(bytes)) != -1) { bos.write(bytes, 0, len); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用缓冲流复制PDF文件总耗时:" + (end - start) + " 毫秒");}@Testvoid copy_pdf_to_another_pdf_with_byte_array_stream() { // 记录开始时间 long start = System.currentTimeMillis(); try (FileInputStream fis = new FileInputStream("深入理解计算机操作系统.pdf"); FileOutputStream fos = new FileOutputStream("深入理解计算机操作系统-副本.pdf")) { int len; byte[] bytes = new byte[4 * 1024]; while ((len = fis.read(bytes)) != -1) { fos.write(bytes, 0, len); } } catch (IOException e) { e.printStackTrace(); } // 记录结束时间 long end = System.currentTimeMillis(); System.out.println("使用普通流复制PDF文件总耗时:" + (end - start) + " 毫秒");}

BufferedInputStream(字节缓冲输入流)

BufferedInputStream 从源头(通常是文件)读取数据(字节信息)到内存的过程中不会一个字节一个字节的读取,而是会先将读取到的字节存放在缓存区,并从内部缓冲区中单独读取字节。这样大幅减少了 IO 次数,提高了读取效率。

BufferedInputStream内部维护了一个缓冲区,这个缓冲区实际就是一个字节数组,通过阅读BufferedInputStream源码即可得到这个结论。

publicclass BufferedInputStream extends FilterInputStream { // 内部缓冲区数组 protected volatile byte buf[]; // 缓冲区的默认大小 private static int DEFAULT_BUFFER_SIZE = 8192; // 使用默认的缓冲区大小 public BufferedInputStream(InputStream in) { this(in, DEFAULT_BUFFER_SIZE); } // 自定义缓冲区大小 public BufferedInputStream(InputStream in, int size) { super(in); if (size <= 0) { throw new IllegalArgumentException("Buffer size <= 0"); } buf = new byte[size]; }}

缓冲区的大小默认为8192字节,当然了,你也可以通过BufferedInputStream(InputStream in, int size)这个构造方法来指定缓冲区的大小。

BufferedOutputStream(字节缓冲输出流)

BufferedOutputStream 将数据(字节信息)写入到目的地(通常是文件)的过程中不会一个字节一个字节的写入,而是会先将要写入的字节存放在缓存区,并从内部缓冲区中单独写入字节。这样大幅减少了 IO 次数,提高了读取效率

try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) { byte[] array = "JavaGuide".getBytes(); bos.write(array);} catch (IOException e) { e.printStackTrace();}

类似于BufferedInputStreamBufferedOutputStream内部也维护了一个缓冲区,并且,这个缓存区的大小也是8192字节。

字符缓冲流

BufferedReader(字符缓冲输入流)和BufferedWriter(字符缓冲输出流)类似于BufferedInputStream(字节缓冲输入流)和BufferedOutputStream(字节缓冲输入流),内部都维护了一个字节数组作为缓冲区。不过,前者主要是用来操作字符信息。

打印流

下面这段代码大家经常使用吧?

System.out.print("Hello!");System.out.println("Hello!");

System.out实际是用于获取一个PrintStream对象,print方法实际调用的是PrintStream对象的write方法。

PrintStream属于字节打印流,与之对应的是PrintWriter(字符打印流)。PrintStreamOutputStream的子类,PrintWriterWriter的子类。

public class PrintStream extends FilterOutputStream implements Appendable, Closeable {}public class PrintWriter extends Writer {}

随机访问流

这里要介绍的随机访问流指的是支持随意跳转到文件的任意位置进行读写的RandomAccessFile

RandomAccessFile的构造方法如下,我们可以指定mode(读写模式)。

// openAndDelete 参数默认为 false 表示打开文件并且这个文件不会被删除public RandomAccessFile(File file, String mode) throws FileNotFoundException { this(file, mode, false);}// 私有方法private RandomAccessFile(File file, String mode, boolean openAndDelete) throws FileNotFoundException{ // 省略大部分代码}

读写模式主要有下面四种:

r : 只读模式。rw : 读写模式rws rw rwsrwd rw rwd

文件内容指的是文件中实际保存的数据,元数据则是用来描述文件属性比如文件的大小信息、创建和修改时间。

RandomAccessFile中有一个文件指针用来表示下一个将要被写入或者读取的字节所处的位置。我们可以通过RandomAccessFileseek(long pos)方法来设置文件指针的偏移量(距文件开头pos个字节处)。如果想要获取文件指针当前的位置的话,可以使用getFilePointer()方法。

RandomAccessFile代码示例:

RandomAccessFile randomAccessFile = new RandomAccessFile(new File("input.txt"), "rw");System.out.println("读取之前的偏移量:" + randomAccessFile.getFilePointer() + ",当前读取到的字符" + (char) randomAccessFile.read() + ",读取之后的偏移量:" + randomAccessFile.getFilePointer());// 指针当前偏移量为 6randomAccessFile.seek(6);System.out.println("读取之前的偏移量:" + randomAccessFile.getFilePointer() + ",当前读取到的字符" + (char) randomAccessFile.read() + ",读取之后的偏移量:" + randomAccessFile.getFilePointer());// 从偏移量 7 的位置开始往后写入字节数据randomAccessFile.write(new byte[]{'H', 'I', 'J', 'K'});// 指针当前偏移量为 0,回到起始位置randomAccessFile.seek(0);System.out.println("读取之前的偏移量:" + randomAccessFile.getFilePointer() + ",当前读取到的字符" + (char) randomAccessFile.read() + ",读取之后的偏移量:" + randomAccessFile.getFilePointer());

input.txt文件内容:

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

输出:

读取之前的偏移量:0,当前读取到的字符A,读取之后的偏移量:1读取之前的偏移量:6,当前读取到的字符G,读取之后的偏移量:7读取之前的偏移量:0,当前读取到的字符A,读取之后的偏移量:1

input.txt文件内容变为ABCDEFGHIJK

RandomAccessFilewrite方法在写入对象的时候如果对应的位置已经有数据的话,会将其覆盖掉。

RandomAccessFile randomAccessFile = new RandomAccessFile(new File("input.txt"), "rw");randomAccessFile.write(new byte[]{'H', 'I', 'J', 'K'});

假设运行上面这段程序之前input.txt文件内容变为ABCD,运行之后则变为HIJK

RandomAccessFile比较常见的一个应用就是实现大文件的断点续传。何谓断点续传?简单来说就是上传文件中途暂停或失败(比如遇到网络问题)之后,不需要重新上传,只需要上传那些未成功上传的文件分片即可。分片(先将文件切分成多个文件分片)上传是断点续传的基础。

RandomAccessFile可以帮助我们合并文件分片,示例代码如下:

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

我在《Java 面试指北》中详细介绍了大文件的上传问题。

谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)

RandomAccessFile的实现依赖于FileDescriptor (文件描述符) 和 FileChannel(内存映射文件)。

·········· END ··············

2、谈谈对审计工作的理解

谈谈对审计工作的理解

我是在20xx年的年初入审计这一行的。之前,一直在一个企业的三产上做出纳,没有做过审计,也基本上没有被审计过。对审计的最初概念,仅局限于注册会计师考试的审计教材。考试,是完全靠读书和做题通过的,对于审计的实务,在入行前无任何概念。

入行十二年,对于审计,我逐渐有了自己的理解与把握。我对审计的认知,可以归结为三个阶段:

1、审计就是一个数字核对与勾稽的过程

我审计的第一个科目是固定资产。

第一天审计时,不会填底稿,不知道审计的目的是什么。我甚至不知道审计的第一步应该做什么。对照被审计单位上年的底稿,对审计慢慢才有了一点概念。固定资产科目的审计,首先要保证报表的未审原值和累计折旧和账面数字相符,将未审数填列到审定表中的未审数一栏中。接下来要对计提的累计折旧进行测试,与未审数进行核对,确认折旧是否多提或少提,差异是否需要作审计调整。我们需要对固定资产的本期增加额进行凭证检查,确认固定资产的入账金额是否正确。我们还需要对固定资产进行实地盘点,对房屋车辆等资产检查原始权证等等,目的是为了确认固定资产实际存在。另外还有一个程序,就是要将计提折旧的金额与费用类科目进行勾稽核对一致。

审计不就是一个核对数字的过程么。初入审计这一行,我对审计就是这样的理解与认知。不仅是固定资产,其他科目也都是如此。应付职工薪酬科目的计提数应与成本费用类科目勾稽,存货类科目的余额及变动额应与主营业务成本倒轧表的相关数字勾稽,无形资产的摊销数应与费用类科目勾稽,等等。那时候,最希望每个科目都是勾稽的,因为数字不勾稽要查找半天。

2、审计是通过看数字发现问题的过程

20xx年,入行一年的我成了项目经理,带队出去审计。从最初的懵懂中走出,我逐渐懂得,审计是一个核对数字的过程,更是一个从数字中发现问题的过程。

在每个科目的审定表最下面,都要有审计结论这一栏。在这一栏里,我们可以写“经审计,余额可以认定”、或者“经审计,发生额可以认定”。也可以写:“经审计调整后余额可以认定”、或者“经审计调整后发生额可以认定”。甚至,也可以说,经审计后不能确认本科目的余额或者发生额。

不是所有的程序,得出的结论一定就是本科目未见异常。就拿勾稽来说,在数字勾稽出现差异时,需要分析出现差异的原因,并判断是否存在问题。审计的过程,是对账面的数字进行审计,也是需要运用运算、分析、推导的能力,确认数字是否正确公允。

我们的会计核算是采用复式记账法,每一个科目都能找到自己的另一半。这是我们可以对科目进行勾稽的一个重要的'依据。对每一个科目审计,也都可以通过另一个科目进行验证。如存货的采购测试,可以通过应付账款的函证来确认。对借款利息的测试,可以间接验证利息本金入账是否完整。存货的发生额是否正确,可以通过主营业务成本倒轧表来验证等等。

审计的过程,就是一个通过核对数字并发现问题的过程。核对过程中出现了不准确也不要紧,未必这个科目就一定有问题,我们需要通过账务的检查去发现是否一定存在需要做出审计调整的事项。如,原材料的发出额,与生产成本的直接材料的发生额不勾稽,最大的原因可能是有原材料直接出售,或者被研发上领用等事项。审计就是用排除的办法,排除不正常的因素,最终得出审计结论的一个过程。

3、审计是在风险导向理念中全面了解企业的过程

入行十几年,我经历了制度基础审计向风险导向审计转变的过程。

在制度基础审计下,对于与“常规交易”相联系的会计事项的审计,先评价和测试其内部控制制度,根据拟对企业内控制度的依赖程序,确定下一步的实质性测试程序。对于“非常规交易”相联系的事项,由于企业不一定有很好的内部控制,因此采用实质性测试。

在风险导向审计中,我们需要从企业的整体层面和业务流程层面对企业的内控制度进行了解,并根据了解的情况执行进一步审计程序,即选择重点领域的控制环节进行控制测试,对科目执行实质性程序等。在风险导向审计的理念中,要求企业的所有领域都应有自己的内部控制,我们在审计中首先要做的是了解评价及测试企业的内部控制制度。了解评价的结果决定了我们制定进一步审计程序的对于企业出具的会计报表,我们所做的工作,不是先核对数据对不对,而是要先测试企业出具报表的控制制度是否存在,是否有效运行。

“风险导向审计”,从概念中可以看出,我们的审计是以企业的风险为导向,这种风险,主要是我们最关注的“重大错报风险”。我想,推行“风险导向审计”的原因在于:

一、现代经济社会中,企业的舞弊手段越来越高明,制度基础审计已难以发现重大错报。

二、随着时代发展,业务量越来越大,并且,越来越多的企业采用一些如SAP的先进的管理软件,传统审计中的抽凭、复核等程序已不足以实现发现重大错报的目标。

风险导向审计刚刚推行时,不少会计师事务所的执业人员把风险导向当成一种形式,更当成是一种负担。不少风险导向审计底稿都是为了迎接检查而后补的,起不到风险导向的作用。有些执业人员套用模板编制底稿,描述的情形并不能客观反映被审计单位的真实情况。

实际上,就我自己的审计感受而言,风险导向审计,有其先进与合理的一面。一个企业是否存在重大经营风险,往往和传达室值班人员的一个聊天,就可以让执业人员初见端倪。我曾经见过这样一个例子,某单位对外担保出现重大的担保损失,导致春节年终奖都没有发放,单位里全员皆知,执业的项目组偏偏不知道,也没有关注到其他应收款中有一笔实际已发生损失的代偿款。

风险导向审计,是一个全面了解企业的过程。对企业的情况,比制度基础审计下了解更为全面。通过了解,可以关注到企业的两大风险:经营风险和重大错报风险。我们可以通过各种途径了解企业的风险点,如,通过对某行业的发展形势,关注被审计单位的经营是否存在风险,企业的会计估计和披露是否合理。

风险导向审计也对一个注册会计师的分析能力、判断能力提出了更高的要求。作为一个注册会计师,我们要做到的,就是与时俱进,不断提高自己的综合能力。

谈谈对审计工作的理解

最近有人提出会计、审计师只是简单信息处理工作,而且即将消失或贬值的言论。

我当然会表示反对,但如果加个前缀,“简单信息处理工作”会计师和审计师将要消失或贬值!我还是赞成的,最少这么说可以提醒审计从业人员注意!由于本人已经对会计行业的前景发表了很多言论,下面只对审计行业聊一点个人看法。

公司的经营情况谁最清楚?当然是老板!公司的财务情况谁最清楚?当是财务!那是审计师在里面的作用是什么?通常他们负责要资料和出报告!一家私营公司什么时候最需要审计人员?答案当然是需要出审计报告的时候。上面的言论代表了相当一部分管理人员。国际情况咱不了解,但国内企业对审计的最大需求真的是审计报告。客户是上帝,所以审计工作,尤其是年报审计工作永远是以审计报告为核心的,做程序是为了出报告,做分析也是为了出报告,而且是无保留意见的报告,至于企业的管理问题、管理需求都不是审计重点,甚至不是审计范围,出个管理建议书也是隔靴搔痒,讲不到重点。这样的审计工作也可以说是“简单信息处理工作”。

审计行业现在存在的问题肯定不少,做为财务工作者,我主要发现以下几个方面(肯定有疏漏或以偏盖全的地方,欢迎指正)。

1、审计工作流于表面,年报审计重程序,不重实质的现象非常普遍。

我知道一家公司,是经某国内大型所(排行前十几名吧)审计的,年年无保留,公司业绩也是年年增长。直到有一天,该公司财务主动承认存货做假,金额有个两千万左右吧(承认的主要原因是现金流不够了,实在做不下去了,业绩可以做假,现金没法做假呀!)后来细查,做假少说也有五六年了,公司实际亏损,但账面年年都盈利,手法也是简单粗暴,就是少转成本,多转利润。可就是这么简单,多名注册就是没有发现。是水平不够么?做假做个一两百万,一时查不出来有可能,一两千万,又不是什么大公司,账也很简单,长时间查不出来,几任注师都查不出来,只能说是态度问题了。年报审计时间短,任务重,所以风险测评流于形式,实质性程序也是流于形式,审计程序成填空题,填完了事。

2、人员变动过于频繁,审计人员过于年轻化,经验不足。

以前大所审计总监级别总要40岁左右的,现在不到30的审计总监也有了,不是因为人才难得,而是因为实在找不到人了,在事务所,尤其是大所工作几年就不想出差了,平时接触的都是大公司,转个行很容易,最后事务所人才两极分化严重,资深的业务水平的确了得,但都是高层,主要工作是拉业务谈判,与审计沾边的也是辅导、指导上市之类的工作,查错防弊高手们是不屑干的。还有就是一大群年轻人,学历、资格肯定没问题,但就是没经验,因为有经验的大部分都离职了。

3、管理经验,尤其是企业管理经验严重缺乏。

年轻人没经验可以慢慢积累,离职率高可以升职加薪提高福利把人留住,但光靠这些解决不了企业管理缺乏的问题。现在的审计人员有相当一部分工作经历是这样的:大学4年主要是学习考证,一出学校笔试、面试就进事务所了,经过简单培训(有的还没有经过培训,现在四大的入职培训好像也大不如以前了)就开始参加工作,工作的主要内容就是走程序,收材料,出报告,一家做完换一家,走马观花。由于事务所的内部管理是扁平化的,真正的企业管理经验很多人是不具备的。当然理论学习,企业观察可以弥补一些,但有些管理经验不经过实践是积累不出来的。所以管理建议书流于形式也就不奇怪了。

问题肯定存在,但所长们也有苦衷。收费提不上去,工作压力大,加班频繁,留不住人也不奇怪。上市公司治理层与管理层脱节现象一直存在,说是为股东负责,实际付审计费的还是管理层,拿人钱财,腰板硬不起来也可以理解。这些情况以前就有,但现在好像变严重了。

实际上大型集团的管理层还是很希望事务所多提管理意见的,年报审计也是公司治理的重要一环,调不调表另说,领导们还是希望了解下属公司的真实情况的,真出了事,谁都跑不掉!

本人曾经从事审计行业,对审计行业是有感情的,真心希望审计行业发展的越来越好。以前听到审计大伙都感觉是查问题的,我们要解释,我们工作是对审计报告负责,是对财务报告发表意见,这么说主要是为了保护自己,可以理解。可不能为了保护而保护呀!小企业要发展,管理上怎么加强?大企业要把控风险,内控的缺陷在那?这都是需求!不能一提到审计就想着出报告,一提到上市就想着包装。长此以往,企业需求得不到满足,审计人员得不到锻炼,行业怎么发展?

好消息是20xx年开始上市公司的审计报告终于要扩容了,将会增加关键审计事项部分,描述审计项目的个性信息,提醒投资者关注更多的风险,为投资者提供更有价值的信息。

表面上看这是要求审计人员提高审计质量,给审计加压。其实换个角度,提高审计质量,改变公众对审计行业的负面看法,才是审计行业长远发展的立身之本!

谈谈对审计工作的理解

我是在20xx年的年初入审计这一行的。之前,一直在一个企业的三产上做出纳,没有做过审计,也基本上没有被审计过。对审计的最初概念,仅局限于注册会计师考试的审计教材。考试,是完全靠读书和做题通过的,对于审计的实务,在入行前无任何概念。

入行十二年,对于审计,我逐渐有了自己的理解与把握。我对审计的认知,可以归结为三个阶段:

1、审计就是一个数字核对与勾稽的过程

我审计的第一个科目是固定资产。

第一天审计时,不会填底稿,不知道审计的目的是什么。我甚至不知道审计的第一步应该做什么。对照被审计单位上年的底稿,对审计慢慢才有了一点概念。固定资产科目的审计,首先要保证报表的未审原值和累计折旧和账面数字相符,将未审数填列到审定表中的未审数一栏中。接下来要对计提的累计折旧进行测试,与未审数进行核对,确认折旧是否多提或少提,差异是否需要作审计调整。我们需要对固定资产的本期增加额进行凭证检查,确认固定资产的入账金额是否正确。我们还需要对固定资产进行实地盘点,对房屋车辆等资产检查原始权证等等,目的是为了确认固定资产实际存在。另外还有一个程序,就是要将计提折旧的金额与费用类科目进行勾稽核对一致。

审计不就是一个核对数字的过程么。初入审计这一行,我对审计就是这样的理解与认知。不仅是固定资产,其他科目也都是如此。应付职工薪酬科目的计提数应与成本费用类科目勾稽,存货类科目的余额及变动额应与主营业务成本倒轧表的相关数字勾稽,无形资产的摊销数应与费用类科目勾稽,等等。那时候,最希望每个科目都是勾稽的,因为数字不勾稽要查找半天。

2、审计是通过看数字发现问题的过程

20xx年,入行一年的我成了项目经理,带队出去审计。从最初的懵懂中走出,我逐渐懂得,审计是一个核对数字的过程,更是一个从数字中发现问题的过程。

在每个科目的审定表最下面,都要有审计结论这一栏。在这一栏里,我们可以写“经审计,余额可以认定”、或者“经审计,发生额可以认定”。也可以写:“经审计调整后余额可以认定”、或者“经审计调整后发生额可以认定”。甚至,也可以说,经审计后不能确认本科目的余额或者发生额。

不是所有的程序,得出的结论一定就是本科目未见异常。就拿勾稽来说,在数字勾稽出现差异时,需要分析出现差异的原因,并判断是否存在问题。审计的过程,是对账面的数字进行审计,也是需要运用运算、分析、推导的能力,确认数字是否正确公允。

我们的会计核算是采用复式记账法,每一个科目都能找到自己的另一半。这是我们可以对科目进行勾稽的一个重要的'依据。对每一个科目审计,也都可以通过另一个科目进行验证。如存货的采购测试,可以通过应付账款的函证来确认。对借款利息的测试,可以间接验证利息本金入账是否完整。存货的发生额是否正确,可以通过主营业务成本倒轧表来验证等等。

审计的过程,就是一个通过核对数字并发现问题的过程。核对过程中出现了不准确也不要紧,未必这个科目就一定有问题,我们需要通过账务的检查去发现是否一定存在需要做出审计调整的事项。如,原材料的发出额,与生产成本的直接材料的发生额不勾稽,最大的原因可能是有原材料直接出售,或者被研发上领用等事项。审计就是用排除的办法,排除不正常的因素,最终得出审计结论的一个过程。

3、审计是在风险导向理念中全面了解企业的过程

入行十几年,我经历了制度基础审计向风险导向审计转变的过程。

在制度基础审计下,对于与“常规交易”相联系的会计事项的审计,先评价和测试其内部控制制度,根据拟对企业内控制度的依赖程序,确定下一步的实质性测试程序。对于“非常规交易”相联系的事项,由于企业不一定有很好的内部控制,因此采用实质性测试。

在风险导向审计中,我们需要从企业的整体层面和业务流程层面对企业的内控制度进行了解,并根据了解的情况执行进一步审计程序,即选择重点领域的控制环节进行控制测试,对科目执行实质性程序等。在风险导向审计的理念中,要求企业的所有领域都应有自己的内部控制,我们在审计中首先要做的是了解评价及测试企业的内部控制制度。了解评价的结果决定了我们制定进一步审计程序的对于企业出具的会计报表,我们所做的工作,不是先核对数据对不对,而是要先测试企业出具报表的控制制度是否存在,是否有效运行。

“风险导向审计”,从概念中可以看出,我们的审计是以企业的风险为导向,这种风险,主要是我们最关注的“重大错报风险”。我想,推行“风险导向审计”的原因在于:

一、现代经济社会中,企业的舞弊手段越来越高明,制度基础审计已难以发现重大错报。

二、随着时代发展,业务量越来越大,并且,越来越多的企业采用一些如SAP的先进的管理软件,传统审计中的抽凭、复核等程序已不足以实现发现重大错报的目标。

风险导向审计刚刚推行时,不少会计师事务所的执业人员把风险导向当成一种形式,更当成是一种负担。不少风险导向审计底稿都是为了迎接检查而后补的,起不到风险导向的作用。有些执业人员套用模板编制底稿,描述的情形并不能客观反映被审计单位的真实情况。

实际上,就我自己的审计感受而言,风险导向审计,有其先进与合理的一面。一个企业是否存在重大经营风险,往往和传达室值班人员的一个聊天,就可以让执业人员初见端倪。我曾经见过这样一个例子,某单位对外担保出现重大的担保损失,导致春节年终奖都没有发放,单位里全员皆知,执业的项目组偏偏不知道,也没有关注到其他应收款中有一笔实际已发生损失的代偿款。

风险导向审计,是一个全面了解企业的过程。对企业的情况,比制度基础审计下了解更为全面。通过了解,可以关注到企业的两大风险:经营风险和重大错报风险。我们可以通过各种途径了解企业的风险点,如,通过对某行业的发展形势,关注被审计单位的经营是否存在风险,企业的会计估计和披露是否合理。

风险导向审计也对一个注册会计师的分析能力、判断能力提出了更高的要求。作为一个注册会计师,我们要做到的,就是与时俱进,不断提高自己的综合能力。

本文关键词:谈谈对审计重要性的理解,谈谈对审计工作的理解与认识,谈谈对审计学的认识,浅谈对审计的认识,谈谈对审计的理解和看法。这就是关于《谈谈对审计工作的理解,谈谈对审计重要性的理解(基础知识总结)》的所有内容,希望对您能有所帮助!


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 谈恋爱要讲究方式方法和技巧,谈恋爱需要技巧吗(男生不得不知的3个恋爱技巧)

下一篇: 消防安全责任人和管理人的职责,消防安全管理人员职责(社会单位消防安全责任人、消防安全管理人、部门消防安全责任人、专兼职消防管理人员职责)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号