⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tax_report.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 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 + -