📄 tax_report.c
字号:
/*-------------------------------------------------------------
功能:税控数据报表(区间统计、明细报表等)的打印
说明:符合国家标准GB18240.1-2003和GB18240.2-2003的税控机软件
日期:2003年6月12日
---------------------------------------------------------------*/
#include "include.h"
/*==================================================================
函数功能:打印发票打印数据部分内容(发票明细)报表
入口参数:
出口参数:
返回值: ==0,成功
!=0,失败
全局变量:g_user_info
编制人: 日期:2003-07-08
==================================================================*/
uchar find_blank(uchar datalong ,uchar *buf)
{
uchar i;
for(i=0;i<datalong;i++)
{
if(buf[i]!=' ')
break;
}
if(i==datalong)return 0;
else return 1;
}
//===========================================================
uchar print_list_report(uchar *start_date,uchar *end_date)
{
uchar error,j,k,x;
uchar buf[60];
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(3);
if(error) return LINE_FEED_FAIL;
#else
feed_on_line(3);
#endif
}
add_blank((PRINTAL_NUM-16)/2,buf);
strcat(buf,"发票明细数据报表");
error=print_str(buf);
if(error) return(error);
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(1);
if(error) return LINE_FEED_FAIL;
#else
feed_on_line(1);
#endif
}
//-----打印单位名称-------//
set_value0(buf,(uint)sizeof(buf));
sprintf(buf,"单位名称:");
memcpy(&buf[9],g_user_info.tax_payer_name,
(uint)sizeof(g_user_info.tax_payer_name));
error=strlen(buf);
if(prt_mode!=0x16)
j=35;
else
j=26;
if((error>j)&&(find_blank(error-j,&buf[j]))) //可折行打印
{
for(k=9,x=0; k<j;)
{
if(is_chinese(&buf[k])) /*判断是否是ASCII码*/
k+=2;
else
{
k++;
x++;
}
}
error=print_str(buf);
if(error) return(error);
memset(buf,0,60);
strcpy(buf," ");
//判断打印字体
if(prt_mode!=0x16)
{
if(x%2) //有奇数个ASCII
{
j=35-9;
//空一个ASCII码没打印
j--;
}
else
j=35-9;
}
else
{
if(x%2) //有奇数个ASCII
{
j=26-9;
}
else
{
j=26-9; //空一个ASCII码没打印
j--;
}
}
memcpy(&buf[0],g_user_info.tax_payer_name+j,
(uint)(sizeof(g_user_info.tax_payer_name)-j));
}
error=print_str(buf);
if(error) return(error);
//-----打印税号-------//
set_value0(buf,(uint)sizeof(buf));
strcpy(buf,"税号:");
memcpy(&buf[5],g_user_info.tax_payer_id,(uint)sizeof(g_user_info.tax_payer_id));
error=print_str(buf);
if(error) return(error);
//-----打印机器号-------//
sprintf(buf,"机器号:%02bx%02bx%02bx%02bx%02bx%02bx%02bx%02bx",
g_manufacturer_info.machinery_no[0],g_manufacturer_info.machinery_no[1],
g_manufacturer_info.machinery_no[2],g_manufacturer_info.machinery_no[3],
g_manufacturer_info.machinery_no[4],g_manufacturer_info.machinery_no[5],
g_manufacturer_info.machinery_no[6],g_manufacturer_info.machinery_no[7]);
error=print_str(buf);
if(error) return(error);
sprintf(buf,"开票时间:%02bx/%02bx/%02bx至%02bx/%02bx/%02bx",start_date[0],
start_date[1],start_date[2],end_date[0],end_date[1],end_date[2]);
//sprintf(buf,"开票时间:%04x/%02bx/%02bx至%04x/%02bx/%02bx",start_date[0],
//start_date[1],start_date[2],0x2000+end_date[0],end_date[1],end_date[2]);
error=print_str(buf);
if(error) return(error);
strcpy(buf,"类 日期");
print_format(PRINTAL_NUM-15,&buf[7],"发票号码");
print_format(8,&buf[PRINTAL_NUM-8],"金额");
error=print_str(buf);
if(error) return(error);
error=locate_invoice_by_date(1,start_date,end_date);
if(error)
return(error);
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(6);
if(error) return LINE_FEED_FAIL;
Fast_feed_paper_hang(250);
#else
feed_on_line(6);
#endif
}
else Wei_printer_feed_paper(8);
return 0;
}
//#endif
/*==================================================================
函数功能:打印发票使用汇总数据报表
入口参数:
出口参数:
返回值: ==0,成功
!=0,失败
全局变量:g_user_info
编制人: 日期:2003-07-08
==================================================================*/
uchar print_duty_report(uchar *start_date,uchar *end_date)
{
uchar error;
ulong xdata normal_money[CATALOG_NUM+1],red_money[CATALOG_NUM+1];
ulong total_normal_money,total_red_money,normal_num;
uint red_num,resc_num;
uchar i,len,x,k,j;
uchar buf[80];
total_normal_money=0;
total_red_money=0;
//-----统计汇总数据-----------//
error=calc_stat(start_date,end_date,&normal_num,&red_num,&resc_num,normal_money,red_money);
if(error) return error;
for(i=0;i<CATALOG_NUM;i++)
{
total_normal_money+=normal_money[i];
total_red_money+=red_money[i];
}
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(3);
if(error) return LINE_FEED_FAIL;
#else
feed_on_line(3);
#endif
}
len=(PRINTAL_NUM-20)/2;
add_blank(len,buf);
strcat(buf,"发票汇总数据报表");
error=print_str(buf);
if(error) return(error);
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(1);
if(error) return LINE_FEED_FAIL;
#else
feed_on_line(1);
#endif
}
//-----打印单位名称-------//
sprintf(buf,"单位名称:");
memcpy(&buf[9],g_user_info.tax_payer_name,
(uint)sizeof(g_user_info.tax_payer_name));
buf[10+(uint)sizeof(g_user_info.tax_payer_name)]=0;
len=strlen(buf);
if(prt_mode!=0x16)
j=35;
else
j=26;
if((len>j)&&(find_blank(len-j,&buf[j]))) //可折行打印
{
for(k=9,x=0; k<j;)
{
if(is_chinese(&buf[k])) /*判断是否是ASCII码*/
k+=2;
else
{
k++;
x++;
}
}
error=print_str(buf);
if(error) return(error);
memset(buf,0,80);
strcpy(buf," ");
//判断打印字体
if(prt_mode!=0x16)
{
if(x%2) //有奇数个ASCII
{
j=35-9;
//空一个ASCII码没打印
j--;
}
else
j=35-9;
}
else
{
if(x%2) //有奇数个ASCII
{
j=26-9;
}
else
{
j=26-9; //空一个ASCII码没打印
j--;
}
}
memcpy(&buf[0],g_user_info.tax_payer_name+j,
(uint)(sizeof(g_user_info.tax_payer_name)-j));
}
error=print_str(buf);
if(error) return(error);
//-----打印税号-------//
set_value0(buf,(uint)sizeof(buf));
strcpy(buf,"税号:");
memcpy(&buf[5],g_user_info.tax_payer_id,(uint)sizeof(g_user_info.tax_payer_id));
error=print_str(buf);
if(error) return(error);
//-----打印机器号-------//
sprintf(buf,"机器号:%02bx%02bx%02bx%02bx%02bx%02bx%02bx%02bx",
g_manufacturer_info.machinery_no[0],g_manufacturer_info.machinery_no[1],
g_manufacturer_info.machinery_no[2],g_manufacturer_info.machinery_no[3],
g_manufacturer_info.machinery_no[4],g_manufacturer_info.machinery_no[5],
g_manufacturer_info.machinery_no[6],g_manufacturer_info.machinery_no[7]);
error=print_str(buf);
if(error) return(error);
//sprintf(buf,"开票时间:%04x/%02bx/%02bx至%04x/%02bx/%02bx",start_date[0],
// start_date[1],start_date[2],0x2000+end_date[0],end_date[1],end_date[2]);
sprintf(buf,"开票时间:%02bx/%02bx/%02bx至%02bx/%02bx/%02bx",start_date[0],
start_date[1],start_date[2],end_date[0],end_date[1],end_date[2]);
error=print_str(buf);
if(error) return(error);
sprintf(buf,"正常发票份数: %lu",normal_num);
error=print_str(buf);
if(error) return(error);
strcpy(buf,"正常发票开具金额: ");
pri_format(total_normal_money,7,&buf[18]);
error=print_str(buf);
if(error) return(error);;
sprintf(buf,"废票份数: %u",resc_num);
error=print_str(buf);
if(error) return(error);
sprintf(buf,"退票份数: %u",red_num);
error=print_str(buf);
if(error) return(error);
strcpy(buf,"退票金额: ");
pri_format(total_red_money,7,&buf[10]);
error=print_str(buf);
if(error) return(error);
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(6);
if(error) return LINE_FEED_FAIL;
Fast_feed_paper_hang(250);
#else
feed_on_line(6);
#endif
}
else
{
Wei_printer_feed_paper(8);
}
return 0;
}
/*==================================================================
函数功能:打印最近申报期申报数据报表
入口参数:
出口参数:
返回值: ==0,成功
!=0,失败
全局变量:g_user_info
编制人: 日期:2003-07-08
mode 0,打印 1:发给串口
==================================================================*/
uchar print_declare_report(uchar start_period,uchar end_period,uchar mode)
{
uchar xdata buf[255], error, p_buf[80];
ulong yuan[6], addr;
uchar fen[6];
uint num;
uint period;
uchar len;
uchar i;
//-----读取申报数据-----------//
addr=DECLARE_START_ADDR;
for(period=start_period;period<(end_period+1);period++)
{
error = read_flash(addr+(period-1)*DECLARE_LEN,DECLARE_LEN,buf);
if(error) return READ_FLASH_FAIL;
//send_str(DECLARE_LEN,buf);
if(mode)
{
i=period-start_period+1;
if(period==end_period)i=0;
Back_Outorder(1,i,DECLARE_LEN,buf);
if(i==0)break;
}
else
{
//-----打印-----------//
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(3);
if(error) return LINE_FEED_FAIL;
#else
feed_on_line(3);
#endif
}
len=(PRINTAL_NUM-20)/2;
add_blank(len,p_buf);
sprintf(&p_buf[len], "第%u申报期申报数据报表",period);
error=print_str(p_buf);
if(error) return(error);
if(g_printer_sel!=1)
{
#ifdef C6_VER
error=fpaper(1);
if(error) return LINE_FEED_FAIL;
#else
feed_on_line(1);
#endif
}
sprintf(p_buf, "起始日期:%02bx%02bx年%02bx月%02bx日", buf[0], buf[1], buf[2], buf[3]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "截止日期:%02bx%02bx年%02bx月%02bx日", buf[4], buf[5], buf[6], buf[7]);
error=print_str(p_buf);
if(error) return(error);
memcpy((uchar *)&yuan[0], &buf[8], 4);
sprintf(p_buf, "正常发票份数:%10lu", yuan[0]);
error=print_str(p_buf);
if(error) return(error);
memcpy((uchar *)&num, &buf[12], 2);
sprintf(p_buf, "退票份数:%10u", num);
error=print_str(p_buf);
if(error) return(error);
memcpy((uchar *)&num, &buf[14], 2);
sprintf(p_buf, "废票份数:%10u", num);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "税种税目索引号分别为:");
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "%02bx %02bx %02bx %02bx %02bx %02bx", buf[16], buf[17], buf[18], buf[19], buf[20], buf[21]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "对应的正常票金额分别为:");
error=print_str(p_buf);
if(error) return(error);
memcpy(&yuan[0], &buf[22], 4);
memcpy(&yuan[1], &buf[26], 4);
memcpy(&yuan[2], &buf[30], 4);
memcpy(&yuan[3], &buf[34], 4);
memcpy(&yuan[4], &buf[38], 4);
memcpy(&yuan[5], &buf[42], 4);
fen[0]=yuan[0]%100;
yuan[0]=yuan[0]/100;
fen[1]=yuan[1]%100;
yuan[1]=yuan[1]/100;
fen[2]=yuan[2]%100;
yuan[2]=yuan[2]/100;
fen[3]=yuan[3]%100;
yuan[3]=yuan[3]/100;
fen[4]=yuan[4]%100;
yuan[4]=yuan[4]/100;
fen[5]=yuan[5]%100;
yuan[5]=yuan[5]/100;
sprintf(p_buf, "%10lu.%02bu %12lu.%02bu", yuan[0], fen[0], yuan[1], fen[1]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "%10lu.%02bu %12lu.%02bu", yuan[2], fen[2], yuan[3], fen[3]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "%10lu.%02bu %12lu.%02bu", yuan[4], fen[4], yuan[5], fen[5]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf,"对应的退票金额分别为:");
error=print_str(p_buf);
if(error) return(error);
memcpy(&yuan[0], &buf[46], 4);
memcpy(&yuan[1], &buf[50], 4);
memcpy(&yuan[2], &buf[54], 4);
memcpy(&yuan[3], &buf[58], 4);
memcpy(&yuan[4], &buf[62], 4);
memcpy(&yuan[5], &buf[66], 4);
fen[0]=yuan[0]%100;
yuan[0]=yuan[0]/100;
fen[1]=yuan[1]%100;
yuan[1]=yuan[1]/100;
fen[2]=yuan[2]%100;
yuan[2]=yuan[2]/100;
fen[3]=yuan[3]%100;
yuan[3]=yuan[3]/100;
fen[4]=yuan[4]%100;
yuan[4]=yuan[4]/100;
fen[5]=yuan[5]%100;
yuan[5]=yuan[5]/100;
sprintf(p_buf, "%10lu.%02bu %12lu.%02bu", yuan[0], fen[0], yuan[1], fen[1]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "%10lu.%02bu %12lu.%02bu", yuan[2], fen[2], yuan[3], fen[3]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "%10lu.%02bu %12lu.%02bu", yuan[4], fen[4], yuan[5], fen[5]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "税控卡内正常累计金额为:");
error=print_str(p_buf);
if(error) return(error);
memcpy(&yuan[0], &buf[70], 4);
fen[0]=yuan[0]%100;
yuan[0]=yuan[0]/100;
sprintf(p_buf, "%10lu.%02bu", yuan[0], fen[0]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf,"税控卡内退票累计金额为:");
error=print_str(p_buf);
if(error) return(error);
memcpy(&yuan[0], &buf[74], 4);
fen[0]=yuan[0]%100;
yuan[0]=yuan[0]/100;
sprintf(p_buf, "%10lu.%02bu", yuan[0], fen[0]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "状态字为:%02bx", buf[78]);
error=print_str(p_buf);
if(error) return(error);
sprintf(p_buf, "申报数据MAC为:%02bx%02bx%02bx%02bx", buf[79], buf[80], buf[81], buf[82]);
error=print_str(p_buf);
if(error) return(error);
if(g_printer_sel!=1)
{
Fast_feed_paper_hang(250);
#ifdef C6_VER
fpaper(6);
#endif
}
else
{
Wei_printer_feed_paper(8);
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -