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

📄 report2.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 C
📖 第 1 页 / 共 4 页
字号:
					case 5:
						k = 0;
						break;
					case 4:
					case 6:
					case 7:
					case 8:
					case 9:
						k = 1;
						break;
					default:break;
				}
				break;
			case 2:
				if(PrintHint())
				{
					switch(flag)
					{
						case 1:
						case 2:
						case 3:
						case 5:
							k = 2;
							break;
						case 4:
						case 6:
						case 7:
						case 8:
						case 9:
							k = 0;
							break;
						default:break;
					}
				}
//				else return;//在进入打印选项时没有按确认键而按退出键则直接退出不进行打印操作
				else k = 0xff;
				break;
			default: return;
		}

		switch(flag)
		{
			case 1:
				AppointInvdis(k,dat);//发票便用汇总显示
				break;
			case 2:
				InvPrintData(k,xz,dat);//发票打印数据显示
//				UartTxd(27,dat);
				break;
			case 3:
				DayCollDataDisplay(k,dat);//日交易数据在LCD上显示
				break;
			case 4:
				WatchManageData(k);//监控数据显示
				break;
			case 5:
				ReportData(k,dat);//申报备份数据显示
				break;
			case 6:
				OnLcdYingYiYuangJie(k,dat,xz,Number);//营业员金额
				break;
			case 7:
				FenFademand(k);		//已分发发票查询
				break;
			case 8:
				FenInvoInput2(k);//与已录入的发票查询
				break;
			case 9:
				AllManageSale(k);//全部营业员xz报表显示
				break;
			default:return;
		}
	}
}

/*-------------------------------------------------------------------------
											根据发票代码查询
-------------------------------------------------------------------------*/
void Invcodedemand()
{
	uchar i=0,HomeFlag=0,ReVal=0,ary[10],ReadCode[40];
	while(1)
	{
			for(i=0;i<10;i++)ary[i]=0;
			ReVal=Dialog("    发票代码查询","请输入20位发票代码:","[退出]  [确认]",20,ary);
			if(ReVal == K_TC)
				return;//退出
			if(ReVal == K_HJ)
			{
//					LcdDisplay(16,0,"正在查询.请稍候...",3);
					HomeFlag=Res_InvCode(ary,ReadCode);
					if(HomeFlag==1)//存在//调发票代码打印与显示函数
					{
						HomeFlag=0;

						InvDisAndPrint(1,ReadCode,0," ");
//						InvPrintSelect(1,ReadCode,0,1);//发票代码查看与打印选择
					}
					else//不存在
						ReHint("发票代码不存在!","请重新输入...");
					for(i=0;i<10;i++)ary[i]=0;//将数据清0
			}
	}
}
/*--------------------------------------------------------------------------
+											根据发票起始号查询
--------------------------------------------------------------------------*/
void InvoBegindemand()
{
	uchar HomeFlag=0,ReturnKeyval[1],ReadCode[40];
	ulong InvDat=0;
	while(1)
	{
		*ReturnKeyval=10;
		InvDat=HexlongDialog("   发票起始号查询","请输入10位发票起始号:","[退出]  [确认]",ReturnKeyval,InvDat);
		if(*ReturnKeyval == K_TC)return;//退出
		if(*ReturnKeyval == K_HJ)
		{
//				LcdDisplay(16,0,"正在查询.请稍候...",3);//正在查询发票起始号
				HomeFlag=InvNumberdemand(1,InvDat,ReadCode);//homeflag=1则有查询数据
				if(HomeFlag==1)
				{
					HomeFlag=0;

//						AppointInvdis(1,ReadCode);//2005-7-25 9:25
					InvDisAndPrint(1,ReadCode,0," ");
//					InvPrintSelect(1,ReadCode,0,1);//发票代码查看与打印选择
				}
				else//不存在
				{
					ReHint("发票号不存在!","请重新输入...");
					InvDat=0;
					*ReturnKeyval=10;
				}
		}
	}
}
/*-------------------------------------------------------------------------
											按开票截止日期查询
-------------------------------------------------------------------------*/

void InvoEnddemand()
{
	uchar ReturnKeyval[1],HomeFlag=0,ReadCode[40];
	ulong InvDat=0;
	while(1)
	{
		*ReturnKeyval=10;
		InvDat=HexlongDialog("   发票终止号查询","请输入10位发票终止号:","[退出]  [确认]",ReturnKeyval,InvDat);
		if(*ReturnKeyval == K_TC)return;//退出
		if(*ReturnKeyval == K_HJ)
		{
//			LcdDisplay(16,0,"正在查询.请稍候...",3);//正在查询发票终止号
			HomeFlag=InvNumberdemand(0,InvDat,ReadCode);//homeflag=1则有查询数据
			if(HomeFlag==1)
			{
				HomeFlag=0;

				InvDisAndPrint(1,ReadCode,0," ");//发票代码查看与打印选择

//				InvPrintSelect(1,ReadCode,0,1);
			}
			else//不存在
			{
				ReHint("发票号不存在!","请重新输入...");
				*ReturnKeyval=10;
				InvDat=0;
			}
		}
	}
}

/*-------------------------------------------------------------------------
											开票日期查询
-------------------------------------------------------------------------*/
void InvoDatdemand()
{
	uchar i=0,HomeFlag=0,ary[10],ReadCode[30];
	ulong ReVal=0;
	while(1)
	{
		for(i=0;i<10;i++)ary[i]=0;
		ReVal=Dialog("    按开票日期查询","请输入:(年/月/日)","[退出]  [确认]",8,ary);
		if(ReVal == K_TC)
			return;//退出
		if(ReVal == K_HJ)
		{
				HomeFlag=Verdict(ary);//进行时间的合法性检查如输入合法则返回1否则返回0
				if(HomeFlag == 1)
				{
					HomeFlag=0;
					HomeFlag = OpenInvDatdemand(1,ary,ReadCode);
					if(HomeFlag == 1)
					{
						HomeFlag=0;
						InvDisAndPrint(2,ReadCode,0," ");
					}
					else
					ReHint("开票日期不存在!","请重新输入...");
				}
				else
					ReHint("时间格式错误!!!","请重新输入...");
		}
	}
}

///////////////////////////////////////////////////////////////////////
//								日交易数据查询的选择功能选择界面             //
///////////////////////////////////////////////////////////////////////
void DayBuydata()
{
	uchar Hov=0,LnNo=0,InitVal[3];
	while(1)
	{
		InitVal[0]=K_HJ;
		InitVal[1]=K_TC;
		InitVal[2]=0;
		ReMenu14();
		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal == K_TC)return;
		switch(LnNo)
		{
			case 1:
				OpenDaydemand();
				break;
			case 2:
				InputTimeSegment(3);//按时间段查询
//				InvPrintSelect(20," ",0,0);
				break;
			default:break;
		}
		Hov=LnNo;
	}
}
/*-------------------------------------------------------------------------
											当前日期查询
-------------------------------------------------------------------------*/
void OpenDaydemand()
{
	uchar i=0,HomeFlag=0,ary[10],ReadCode[64];
	ulong ReVal=0;
	gyt2 *cp;
	I2cRead(DailyDatNum,2,ary);
	cp = ary;
	if(cp->dat == 0)
	{
		ReHint("没有相关数据!","请重试!");
		return;
	}
	while(1)
	{
		for(i=0;i<10;i++)ary[i]=0;
		ReVal=Dialog("    按当前日期查询","请输入:(年/月/日)","[退出]  [确认]",8,ary);
		if(ReVal == K_TC) return;//退出
		if(ReVal == K_HJ)
		{
				HomeFlag=Verdict(ary);//进行时间的合法性检查如输入合法则返回1否则返回0
				if(HomeFlag==1)
				{
					HomeFlag=0;
//					LcdDisplay(16,0,"正在查询.请稍候...",2);//正在查询开票日期
					HomeFlag=DayCollData(ary,ReadCode);//日期存放在ary的低四位即ary[6]ayr[7]ary[8]ary[9]
					if(HomeFlag==1)
					{
						HomeFlag=0;
						InvDisAndPrint(3,ReadCode,0," ");
//						InvPrintSelect(3,ReadCode,0,1);//读出的发票打印数据放在ReadCode[0]--ReadCode[26]中
					}
					else
						{
							ReHint("日期不存在!","请重新输入...");
						}
					}
				else
				{
					ReHint("时间格式错误!","请重新输入...");
				}
		}
	}
}
//////////////////////////////////////////////////////////////////////////
//										所有营业员销售金额查询														//
//xz = 'Y' : 所有营业员的 X 报表																				//
//xz = '[' : 所有营业员的 Y 报表																				//
//dis = 0  : 打印																												//
//dis = 1  : 显示																												//
//////////////////////////////////////////////////////////////////////////
//void AllManageSale(uchar xz,uchar dis)
void AllManageSale(uchar dis)
{
	gyt4 *MoneySum;

	uchar i=0,j=0,k=0,pg=1,n=0,m=0,Number=0,Initval[3];//定义一个营业员的销售数据绶冲区.它随营业员的个数而变化
	uchar Busidat[24];

	uchar BusinessLen = 12;
	uint Busiadr = SalerStat;//营业员存数据存放的开始地址

//	I2cRead(SalerNum,1,&BusinessLen);//读营业员数据


	I2cRead(Busiadr,24,Busidat);//读到 6 个营业员的销售金额数据

	if(BusinessLen < 6)
		WindowsSet(BusinessLen*2);
	else
		WindowsSet(12);
//	if(BusinessLen <= 6)//在12个营业员时可以用一个窗体显示完,大于 12 则至少要用二个窗体显示
//	j = 1;

	for(i=0,j=0,m=0;i<BusinessLen;i++)//i<BusinessLen多执行一次才能显示其下一屏内容
	{
//		I2cRead(SalerStat+i,24,Busidat);


		strcpy(&WinHint[j][1],"营业员编号:");
		NumToStr(i+1,&WinHint[j][12],0);//将营业员编号显示在其中

		j++;
		strcpy(&WinHint[j][1],"销售总金额:");
		MoneySum = &Busidat[m*4];		//显示营业员销售金额
		if(MoneySum->dat == 0)
			strcpy(&WinHint[j][12],"0.00");
		else
			NumToStr(MoneySum->dat,&WinHint[j][12],5);

		j++;
		m++;
		if(((i%(Number * 6 + 5) == 0) && (i != 0)) || i == (BusinessLen-1))
						//指定的营业员已处理完毕 当在第一次时不窗体函数显示
						//由于营业员数据不一定都是6的整数则特设定 i == BusinessLen-1语句,即当
						//最后一个营业员时不能被6整除也可以显示 因for循环一次i值才加一.所以
						//在WinHint缓冲溢现象,+5即可解决此问题.
		{
			if((i == (BusinessLen-1)) && ((BusinessLen%6) != 0))//不是6的倍数
			{
				for(n=0;n<(12-(BusinessLen%6)*2);n++)//设置不成倍数的显示/打印缓冲
					WinHint[11-n][0]=0;
			}
			else ;

			Number++;	// Number 自加1则指向下6个营业员的数据
			if(dis == 1)//显示报表
			{
				Itarr(Initval);

				Windows(1,0,Initval);
				if(*Initval == K_TC)
					break;
				else ;//如果不是退出键则是按的确认键.则继续显示
			}
			else if(dis == 0)//打印报表
			{
				if(pg == 1)
				{
					pg = 0;
						PrintLine("所有营业员销售额统计");
						PrintLine("");
				}	else ;
				if((i == (BusinessLen-1)) && ((BusinessLen%6) != 0))
					n = (BusinessLen%6)*2;
				else
					n = 12;
				for(k=0;k<n;k++)
					PrintStr(&WinHint[k][1]);
			}
			else ;
			j = 0;
			if((i+1)%6 == 0)//读取一下6个营业员数据
			{
				m = 0;
				Busiadr += (i*4+4);
				I2cRead(Busiadr,24,Busidat);//再读取下一营业员数据
			}
		}
		else ;
	}
	if(dis == 0)
	{
		PrintLine("");
		PrintStr("电子存根");
	}
	else ;

	////
//	if(xz == '[') //全部营业员的 Z 报表查询 则要清除数据
//	{
//		for(i=0;i<24;i++)
//			Busidat[i] = 0;
//		I2cWrite(SalerStat,24,Busidat);//清除营业员的销售额
//	}
//	else;
	////
}

/*------------------------------------------------------------------------
											营业员销售额查询
xz = 'X'  :  X 报表
xz = 'Z'	:  Z 报表
xz = 'Y'	:  全部营业员的 X 报表
xz = '['  :  全部营业员的 Z 报表
------------------------------------------------------------------------*/
void ManageSlaedemand(uchar xz)
{
	uchar ReturnFlag=0,HomeFlag=0,InitVal[2],ReadCode[40];
	uchar i=0,ClearMoney[4];//定义一清除营业员金额的指针
	uchar Num=0,SaleN=12;
	uint  n=0,Saleradr=SalerStat;//营业员销售数据开始地址
	ulong xp1=0;
	ReturnFlag=0;
	if(xz == 'X' || xz == 'Z')
	{
		while(1)
		{
			InitVal[0]=2;//输入编号的长度
			InitVal[1]=0;
			xp1 = ReturnFlag;
			ReturnFlag=HexlongDialog("  营业员销售额查询","请输入营业员编号:","[退出] [确认]",InitVal,xp1);//输入营业员编号
			if(*InitVal==K_TC)
				return;//退出

//			I2cRead(SalerNum,1,&SaleN);//读营业员数量
//
			if(ReturnFlag == 0 || ReturnFlag > SaleN)
				ReHint("输入错误!","请重试!");
			if(*InitVal==K_HJ && (ReturnFlag !=0) && (ReturnFlag <= SaleN))//是确认键输入有效
			{
//				RePlan(1);
//				RePlan(0);
				HomeFlag=Businessdemand(ReturnFlag,ReadCode,0);//ReturnFlag=营业员编号,ReadCode返回的值
				if(HomeFlag==1)
				{
					HomeFlag=0;
//					RePlan(2);
					InvDisAndPrint(6,ReadCode,xz,&ReturnFlag);

				}
			}
		}
	}
	else if(xz == 'Y' || xz == '[')
	{
//		InvPrintSelect(22," ",xz,1);
//		InvDisAndPrint(6,ReadCode,xz,&ReturnFlag);
		InvDisAndPrint(9," ",xz," ");
//		I2cRead(SalerNum,1,&Num);//读营业员数量
		if(xz == '[')
		{
			for(i=0;i<4;i++)
				ClearMoney[i]=0;

			for(i = 0;i<12;i++)
				I2cWrite(Saleradr+(i*4),4,ClearMoney);//清除所有营业员的销售额
		}
		else ;
	}
	else ;
}



/*----------------------------------------------------------------------
									查询等待对话
flag = 0:显示进度
flag = 1:显示提示字样
flag = 2:清进度条变量

----------------------------------------------------------------------*/
/*
void RePlan(uchar flag)
{
	uchar code pic2[]={
	//--  宽度x高度=24x24
	0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xF0,0xFC,0xFC,0xFC,0xFC,0xF8,0xC0,0xC0,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,
	0x0F,0x7F,0x7F,0x7F,0x7F,0x73,0xF3,0xF3,0xF0,0xF0,0xE0,0xE0,0xE0,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0F,0x0E,0x0C,0x08,0x0C,0x0C,0x0E,0x0F,0x0F,
	0x0F,0x07,0x07,0x07,0x07,0x00,0x00,0x00
	};
	static uchar n=0,i=0;
	uchar k=0;

	if(flag == 1)
	{
		LcdDisplay(8,64,"请 稍 候",3);
//		ShowPicture(15,30,39,54,pic2);//显示图标
		ShowPicture(0,30,24,54,pic2);//显示图标
		DisplayFullRec(32,21,48,171,1);
		for(k=0;k<4;k+=3)
			DisplayFullRec(k,k,63-k,191-k,1);
	}
	else if(flag ==0 && n%64 == 0)
	{
		if(i >= 30)
		{
//			LcdDisplay(32,0," ",4);//清行
//			LcdDisplay(48,0," ",4);
//			DisplayFullRec(32,21,48,171,1);//画内框
//
//			for(k=0;k<4;k+=3)
//				DisplayFullRec(k,k,63-k,191-k,1);//画外框
			for(i=0;i<30;i+=2)
			{
				DisplayRectangle(34,21+i*5,46,26+i*5,0);//清进度
				DisplayFullRec(32,21,48,171,1);//画内框
			}
			i = 0;
		}
		else
		{
			DisplayRectangle(34,21+i*5,46,26+i*5,1);//画进度
			i += 2;
		}
	}
	if(flag == 2)
	{
		i = 0;
		n = 0;
	}
	else;
		n++;
}
*/
////////////////////////////////////////////////////////////////////////
//								指定时间段/指定时间 的数据汇总查询									//
//type = 1:指定时间段内的<<单卷发票使用汇总>>数据报表									//
//--------------------------------------------------------------------//
//type = 2:指定时间段内的<<发票打印>>数据报表													//
//--------------------------------------------------------------------//
//type = 3:指定时间段内的<<日交易>>数据报表														//
//--------------------------------------------------------------------//
//type = 4:指定时间段内的<<申报备份数据>>数据报表											//
//--------------------------------------------------------------------//
//type = 5:按开始时间查询<<申报备份数据>>															//
//--------------------------------------------------------------------//
//type = 6:按截止时间查询<<申报备份数据>>															//
////////////////////////////////////////////////////////////////////////
uchar TimeSectData(uchar type,uchar *Itime,ulong *adn,uchar *Redat)
{
	uchar j=0,n=0,CS=0,Colo=0,num=0;
	uint Sumadr=0,sBadr=0;
	ulong Invaddress=0;
	gyt2 Len;
	gyt4 *Rts,*Rte,*Its,*Ite;//定义数据指针,读取开票日期的首地址指针
	//输入开始时间的指针,输入结束时间指针.
	switch(type)
	{
		case 1:
			Invaddress = InvoStatBegin;//单卷发票存放的开始地址
			Sumadr = InvoStatNum;			//已使用发票总数地址
			n = 37;
			num = 2;
			CS = FlashDat;
			break;
		case 2:
			Invaddress = InvoListLimit1;//发票打印数据开始地址
			Sumadr = InvoPrintNum;			//已打印发票总数地址
			n = 27;
			num = 2;
			CS = FlashInvo;
			break;
		case 3:
			Invaddress = DailyTradeBegin;//日交易数据开始地址
			Sumadr = DailyDatNum;				//已签名的日交易数量地址
			n = 192;
			num = 2;
			CS = FlashDat;
			break;
		case 4:
		case 5:
		case 6:
			Sumadr = DeclareNum;				//申报备份数据数量地址E2PROM中
			sBadr = DeclareBak;					//申报备份数据存放的开始地址E2PROM中
			n = 83;
			num = 1;									//一个申报备份数据的长度
			break;
//		case 7:												//税控收款机安全信息
//			Sumadr = InfoNum;
//			n = 64;
//			break;
		default:
			return 0;
	}

	Invaddress += *adn * n;			//地址偏移量
	sBadr += *adn * n;					//申报数据地址偏移量
	I2cRead(Sumadr,num,Len.str); //读取已使用发票的数量

	if((Len.dat == 0) || (*adn >= Len.dat))			//如果数量为 0 则直接返回 说明数据不存在
		return 0;

	Its = Itime;		//输入开始日期的首地址
	Ite = &Itime[4];//输入结束日期的首地址

//	RePlan(1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -