增值税发票清单数据导出

使用场景

增值税一般纳税人,购进和销售时,货物名称要统一,于是需要按照货物名称及型号列出库存表。但是如果购进的发票有很长的清单,数据录入就会异常繁琐。

由于所有的合法的发票,都可以在增值税发票查验平台查询的到,包括所有的清单数据,于是前端使用油猴写几行脚本代码,将页面中的数据发送到后台,后台简单的接收并生成Excel数据。

前端数据读取

前端很好理解,无非就是找到对应的DOM元素,然后得到其值。

里面有一些折磨了好久的地方,比如说,显示发票的弹出框,是一个框架,于是要先找到框架的DOM,然后再在框架里面寻找每个字段对应的DOM。

当然,有的发票有清单(8条以上商品或服务),有的没有,所以也需要判断一下。

于是就这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
...
frame = $("#dialog-body").contents();
frame.find("#printfp").before(init_html);
frame.find("#initfpmx").click(function(){
var results = {};
var table, trs;
results.invoice_code = frame.find("#fpdm_zp").text().trim();
results.invoice_number = frame.find("#fphm_zp").text().trim();
results.invoice_date = frame.find("#kprq_zp").text().trim();
results.invoice_to = frame.find("#gfmc_zp").text().trim();
results.invoice_from = frame.find("#xfmc_zp").text().trim();
results.invoice_jine = frame.find("#je_zp").text().trim();
results.invoice_shuie = frame.find("#se_zp").text().trim();
results.invoice_heji = frame.find("#jshjxx_zp").text().trim();
$(this).remove();
var has_mx_btn = frame.find("#showmx");
if(has_mx_btn.text() != ""){
btn_html = '<button id="exportpmx" class="blue_button" style="position:relative!important;z-index:100" onmousemove="this.className=\'green_button\';" onmouseout="this.className=\'blue_button\';">导出</button>';
frame.find("#printfpmx").before(btn_html);
frame.find("#exportpmx").click(function(){
table = frame.find("#print_areamx>.fppy_table");
results.data = getProductList(table, 3, 1);
$(this).remove();
requestServer(JSON.stringify(results));
});
}else{
btn_html = '<button id="exportpmx" class="white_button" style="position:relative!important;z-index:100" onmousemove="this.className=\'green_button\';" onmouseout="this.className=\'white_button\';">导出</button>';
frame.find("#printfp").before(btn_html);
frame.find("#exportpmx").click(function(){
$(this).remove();
table = frame.find("#print_area").find(".fppy_table_box");
results.data = getProductList(table, 2);
requestServer(JSON.stringify(results));
});
}
});
...

因为按钮会导致打印的时候显示按钮,所以按钮一点击,就要把按钮删除。

后台数据处理

后台还是熟悉的php+mysql。

只要油猴把数据发送到了后台,要怎么处理那就是很简单的事儿了。

生成表格

利用layui做出个前端显示页面,然后就可以导出Excel数据了。

要说起来,layui还是挺通用的,很多网站都或多或少的用到了,所以很多网站都可以写一些方便的小脚本了。

下一次准备更新一个网页密码登陆助手。