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

📄 report2.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 C
📖 第 1 页 / 共 4 页
字号:
	uchar i=0,Number[5],HomeFlag=0,ReadCode[30];
	ulong ReVal=0;
	while(1)
	{
		//按HEX格式输入
		Number[0]=10;
		ReVal=HexlongDialog("    按发票号查询","请输入打印的发票号","[退出]  [确认]",Number,0);
		if(Number[0] == K_TC) return;//退出
		if(Number[0] == K_HJ)
		{
			HomeFlag=OpenInvDatdemand(0,&ReVal,ReadCode);//日期存放在ary的低四位即ary[6]ayr[7]ary[8]ary[9]
			if(HomeFlag==1)
			{
				HomeFlag=0;
//				InvDisAndPrint(2,ReadCode,0,Number);
					InvDisAndPrint(2,ReadCode,2," ");
			}
			else
				ReHint("发票不存在!","请重新输入...");
		}
	}

}


/*--------------------------------------------------------------------------
							发票打印数据查询
--------------------------------------------------------------------------*/
void InvoPrintDatdemand()
{
	uchar Hov=1,LnNo=0,InitVal[4];
	gyt2 *cp;
	I2cRead(InvoPrintNum,2,InitVal);//判断有没有销售数据
	cp = InitVal;
	if(cp->dat == 0)
	{
		ReHint("数据不存在!","请重试!");
		return;
	}
	while(1)
	{
		ReMenu8();

		Itarr(InitVal);//初始化退出键值

		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal == K_TC)return;
		switch(LnNo)
		{
			case 1://按开票日期查询
				InvoDatdemand();
				break;
			case 2://按发票号查询
				PrintInvoNo();
				break;
			case 3://按时间段查询
				InputTimeSegment(2);
//				InvPrintSelect(19," ",0,0);
				break;
			case 4:
				InputTimeSegment(5);
				break;
			default:break;
		}
		Hov=LnNo;
	}
}

/*---------------------------------------------------------------------------
											已销售发票信息查询
----------------------------------------------------------------------------*/
void OldInfodemand()
{
	uchar Hov=1,LnNo=0,InitVal[4];
	while(1)
	{
		ReMenu6();

		Itarr(InitVal);

		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal == K_TC)return;
		switch(LnNo)
		{
			case 1://单卷发票使用汇总查询
				Dandemand();
				break;
			case 2://发票打印数据查询
				InvoPrintDatdemand();
				break;
			case 3://日交易数据查询
				DayBuydata();
				break;
			default:break;
		}
		Hov=LnNo;
	}
}

/*---------------------------------------------------------------------------
												已录入发票查询
flag = 1:显示
flag = 0:打印
---------------------------------------------------------------------------*/
void FenInvoInput2(uchar flag)
{
	uchar i=0,InitVal[4];
	uint addr=0;
	gyt4 *xp;
	addr=InvoiceCode;
	I2cRead(addr,18,TxdBuf);
	InitVal[0]=K_TC;
	InitVal[1]=0;

	WindowsSet(6);

	strcpy(&WinHint[0][1],"发票代码:");
	BcdToStr(10,TxdBuf,&WinHint[1][1],0);

	strcpy(&WinHint[2][1],"当前发票号:");

//	if(yongjibing==0)
//	{
//		for(i=0;i<8;i++)
//		{
//			RxdBuf[i+10]=0;
//			//RxdBuf[i+14]=0;//用此是为了当在没有录入发票时而查询时显示为0
//		}
//	}
	xp = &TxdBuf[10];
	NumToStr(xp->dat,&WinHint[3][1],2);

	strcpy(&WinHint[4][1],"发票终止号:");
	xp = &TxdBuf[14];
	NumToStr(xp->dat,&WinHint[5][1],2);
	if(flag == 1)
	{
		Windows(1,0,InitVal);
		if(*InitVal == K_TC)return;// 返回
	}
	else if(flag == 0)//打印
	{
		PrintLine("已录入发票查询");
		for(i=0;i<6;i++)
			PrintStr(WinHint[i]);
			PrintLine("");
		PrintStr("电子存根");
	}
}
/*---------------------------------------------------------------------------
											已分发发票与已录入发票查询
---------------------------------------------------------------------------*/
void FenInvoInputInvo()
{
	uchar Hov=1,LnNo=0,InitVal[4];
	while(1)
	{
		ReMenu11();

		Itarr(InitVal);

		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal==K_TC)return;// 返回
		switch(LnNo)
		{
			case 1:
				InvDisAndPrint(7," ",0," ");
				break;
			case 2:
				InvDisAndPrint(8," ",0," ");
				break;
			default:break;
		}
		Hov=LnNo;
	}
}

/*----------------------------------------------------------------------------
												监控数据查询
flag = 0:打印
flag = 1:显示
----------------------------------------------------------------------------*/
void WatchManageData(uchar flag)
{
	uchar i=0,InitVal[4],PrintBuf[50],time[10];
	uint address=0;
	gyt4 *Ips;
	address=InvoiceEndData;
	I2cRead(address,23,TxdBuf);//读取监控数据
	InitVal[0]=K_TC;
	InitVal[1]=K_HJ;
	InitVal[2]=0;

	WindowsSet(10);

	strcpy(&WinHint[0][1],"开票截止日期:");
	BcdToStr(4,TxdBuf,&WinHint[0][14],0);

	strcpy(&WinHint[1][1],"单张发票开票金额限额:");
	Ips = &TxdBuf[4];
	NumToStr(Ips->dat,&WinHint[2][1],5);

	strcpy(&WinHint[3][1],"发票累计金额限额:");
	Ips = &TxdBuf[8];
	NumToStr(Ips->dat,&WinHint[4][1],5);

	strcpy(&WinHint[5][1],"退票累计金额限额:");
	Ips = &TxdBuf[12];
	NumToStr(Ips->dat,&WinHint[6][1],5);

	strcpy(&WinHint[7][1],"税种税目索引号:");//将税目税种索引号显示在一行上
	for(i=0;i<6;i++)
	{
		NumToStr(TxdBuf[16+i],&WinHint[8][1+2*i],0);
		if(i<5)
			if(WinHint[8][2+2*i]==0)WinHint[8][2+2*i]=' ';//如果税种种目的第二位为0则将其补上空格,保证以后的税种税目信息能够显示出来
			//if(WinHint[9][3+2*i]==0)WinHint[9][3+2*i]=' ';
	}
	strcpy(&WinHint[9][1],"明细申报标志:");
	NumToStr(TxdBuf[22],&WinHint[10][14],2);

	if(flag == 1)
	{
		Windows(1,0,InitVal);
		if(*InitVal == K_TC || *InitVal==K_HJ)return;//返回
	}
	else if(flag == 0)//	打印
	{
		PrintLine("监控管理查询");

		BcdToStr(4,&TxdBuf[0],&time[0],0);
		PrintTime("开票截止日期:",&time[0],&PrintBuf[0]);
		PrintStr(&PrintBuf[0]);

		strcpy(&PrintBuf[0],&WinHint[1][1]);
		strcpy(&PrintBuf[21],&WinHint[2][1]);
		PrintStr(PrintBuf);
		strcpy(&PrintBuf[0],&WinHint[3][1]);
		strcpy(&PrintBuf[17],&WinHint[4][1]);
		PrintStr(PrintBuf);
		strcpy(&PrintBuf[0],&WinHint[5][1]);
		strcpy(&PrintBuf[17],&WinHint[6][1]);
		PrintStr(PrintBuf);
		strcpy(&PrintBuf[0],&WinHint[7][1]);
		strcpy(&PrintBuf[15],&WinHint[8][1]);
		PrintStr(PrintBuf);
		PrintStr(&WinHint[9][1]);

		PrintLine("");
		PrintStr("电子存根");
	}
}

/*---------------------------------------------------------------------------
												申报数据查询菜单
---------------------------------------------------------------------------*/
void Report1(uchar *str)
{
	uchar i=0;
	gyt4 *dip;
	gyt2 *Npm;

	WindowsSet(12);
	strcpy(&WinHint[0][1],"申报起始日期:");
	BcdToStr(4,str,&WinHint[0][14],0);

	strcpy(&WinHint[1][1],"申报截止日期:");
	BcdToStr(4,&str[4],&WinHint[1][14],0);

	strcpy(&WinHint[2][1],"正常发票份数:");
	dip = &str[8];
	if(dip->dat == 0)
		strcpy(&WinHint[2][14],"0");
	else
		NumToStr(dip->dat,&WinHint[2][14],0);

	strcpy(&WinHint[3][1],"退票份数:");
	Npm = &str[12];
	if(Npm->dat == 0)
		strcpy(&WinHint[3][10],"0");
	else
		NumToStr(Npm->dat,&WinHint[3][10],0);

	strcpy(&WinHint[4][1],"废票份数:");
	Npm = &str[14];
	if(Npm->dat == 0)
		strcpy(&WinHint[4][10],"0");
	else
		NumToStr(Npm->dat,&WinHint[4][10],0);

	strcpy(&WinHint[5][1],"正常发票总金额:");
	dip = &str[70];
	if(dip->dat == 0)
		strcpy(&WinHint[6][11],"0.00");
	else
		NumToStr(dip->dat,&WinHint[6][1],5);

	strcpy(&WinHint[7][1],"退票总金额:");
	dip = &str[74];
	if(dip ->dat == 0)
		strcpy(&WinHint[8][1],"0.00");
	else
		NumToStr(dip->dat,&WinHint[8][1],5);

	strcpy(&WinHint[9][1],"状态字:");
	if(str[78] == 0)
		strcpy(&WinHint[9][8],"0");
	else
		NumToStr(str[78],&WinHint[9][8],0);

	strcpy(&WinHint[10][1],"MAC1:");
	dip = &str[79];
	if(dip->dat == 0)
		strcpy(&WinHint[10][6],"0");
	else
		NumToStr(dip->dat,&WinHint[10][6],0);

	strcpy(&WinHint[11][1],"[小计]续显[确认]续查");
}

void Report2(uchar *str)
{
	uchar i=0,j=0,psd[30];
	gyt4 *dip;

	WindowsSet(7);
	strcpy(&WinHint[0][1],"税号 正常金额 退票金额");
	for(j=0;j<6;j++)
	{
		for(i=0;i<30;i++)psd[i]=0;
		NumToStr(str[16+j],psd,0);			//税率

		dip = &str[22+j*4];
		if(dip->dat == 0)								//正常金额
			strcpy(&psd[4],"0.00");
		else
			NumToStr(dip->dat,&psd[4],5);

		dip = &str[46+j*4];
		if(dip->dat == 0)							//退票金额
			strcpy(&psd[15],"0.00");
		else
			NumToStr(dip->dat,&psd[15],5);
		for(i=0;i<23;i++)
			if(psd[i]==0)psd[i]=' ';
		psd[23]=0;
		strcpy(&WinHint[j+1][1],psd);
	}
}



/*---------------------------------------------------------------------------
												根据起始日期查询(申报数据)
v = 1:按起始日期查询
v = 2:按终止日期查询
---------------------------------------------------------------------------*/
uchar BeginDay(uchar v,uchar *str)
{
	uchar i=0,flag=0,fg=0,time[5];
	ulong n=0;

	while(1)
	{
		for(i=0;i<5;i++)
			time[i] = 0;

		if(v == 1)
			flag=Dialog("     根据起始时间查询","请输入起始时间","[退出][确认],",8,time);
		if(v == 2)
			flag=Dialog("     根据终止时间查询","请输入终止时间","[退出][确认],",8,time);
		if(flag==K_HJ)//是确认键则进行
		{
				fg=Verdict(time);//查询时间的合法性
				while(fg)
				{
					fg = 0;
					if(v == 1)//开始时间查询
						flag = TimeSectData(5,time,&n,str);

					if(v == 2)//结束时间查询
						flag = TimeSectData(6,time,&n,str);

					if(flag)
						return 1;//找到
					else
						return 0;//不存在
				}
				if(!fg)//输入时间不合法
				{
					ReHint("时间格式错误!","请重新输入...");
//					break;
				}
		}
		else
			return flag;//返回按键值
	}
}
/*----------------------------------------------------------------------------
												申报数据查询
----------------------------------------------------------------------------*/
void ReportDataSB()
{
	uchar InitVal[4],Ln=0,fg=0,i=1,BCDkey[83],flag=0;
	uchar *inp;

	for(i=0,inp=BCDkey;i<83;i++)
		*inp++ = 0;

	I2cRead(DeclareNum,1,&i);

	#if useinfo
	if(i == 0)
	{
		ReHint("数据不存在!","请重试!");
		return;
	}
	#endif
	while(1)
	{
		ReMenu12();

		Itarr(InitVal);

		Ln=Windows(i,0,InitVal);
		if(*InitVal==K_TC)
			return;//是退出键则返回上一层菜单

		if((Ln == 1 || Ln==2) && *InitVal==K_HJ)
		{

			flag=BeginDay(Ln,BCDkey);//按起始日期查询

//			if(flag == K_TC)//是退出键.直接返回
//				break;

			if(flag == 0)//没有找到
				ReHint("日期不存在!","请重新输入...");
			if(flag == 1)//存在
				InvDisAndPrint(5,BCDkey,0," ");
		}
		else if(Ln == 3)
			InputTimeSegment(4);			//按时间段查询申报数据内容
		else ;
		i = Ln;
	}
}

/*----------------------------------------------------------------------------
												申报数据查询
flag = 0 : 不显示提示语
flag = 1 : 显示提示语
flag = 2 : 不打印报表头
flag = 3 : 打印报表头
----------------------------------------------------------------------------*/
uchar ReportData(uchar flag,uchar *str)
{
	uchar InitVal[4],fg=0,i=0,time[10],PrintBuf[50];
	ulong delay = 0xffff;

	Report1(str);
	if(flag == 1 || flag == 0)
	{
		if(flag == 1)
		{
			flag = 0;
			DisHint("指定时间段内","<<申报备份数据>>查询.","按[确认]开始查找...");
		}
		while(1)
		{
			InitVal[0] = K_TC;//退出则直接退出
			InitVal[1] = K_HJ;//确认键继续查找
			InitVal[2] = K_XJ;//小计则为继续显示
			InitVal[3] = 0;
			Windows(1,0,InitVal);
			if(*InitVal == K_HJ || *InitVal == K_TC)
				return *InitVal;//退出
			else		//如果是确认键则继续显示
			{
				fg = ~fg;
				if(fg)
					Report2(str);//显示第二屏
				else
					Report1(str);//显示第一屏
			}
		}
	}
	else if(flag == 2 || flag == 3)//flag == 3 要打印报表头  flag == 2不打印报表头
	{
		if(flag == 3)
			PrintLine("指定时间段内的申报数据查询");
			PrintLine("申报数据查询");
		Report1(str);

		BcdToStr(4,str,time,0);
		PrintTime("申报起始日期:",time,PrintBuf);
		PrintStr(PrintBuf);

		BcdToStr(4,&str[4],time,0);
		PrintTime("申报截止日期:",time,PrintBuf);

		for(i=2;i<11;i++)
			PrintStr(&WinHint[i][1]);
		Report2(str);
		for(i=0;i<7;i++)
			PrintStr(&WinHint[i][1]);

		PrintLine("");
		PrintStr("电子存根");

		while(--delay);

		return 1;
	}
}

/*----------------------------------------------------------------------------
												营业员销售查询
----------------------------------------------------------------------------*/
void SaleRes()
{
	uchar Number=0,xzReport=0,Hov=1,LnNo=0,InitVal[3];

	I2cRead(SalerNum,1,&Number);
	if(Number == 0)
	{
		ReHint("没有设置营业员!","请重试!");
		return;
	}

	while(1)
	{
		ReMenu13();
		InitVal[0]=K_HJ;
		InitVal[1]=K_TC;
		InitVal[2]=0;
		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal == K_TC) return;
		if(LnNo == 1)	// X报表(查之后不清空)
			xzReport = 'X';
		else if(LnNo == 2)//Z报表(查之后清空)
			xzReport = 'Z';
		else if(LnNo == 3)//全部营业员的X报表
			xzReport = 'Y';//'Y' = 'X' + 1 表明是全部营业员的 X 报表
		else if(LnNo == 4)//全部营业员的Z报表
			xzReport = '[';//'[' = 'Z' + 1 表明是全部营业员的 Z 报表
		else ;
		ManageSlaedemand(xzReport);
		Hov = LnNo;//返回后默认选择进入行
	}
}
/*----------------------------------------------------------------------------
											 报表打印选择
----------------------------------------------------------------------------*/
void Report()
{
	uchar Hov=1,LnNo=0,InitVal[4];//[退出]键与[合计]键退出
	LcdClear(192);
	while(1)
	{
		ReMenu1();

		Itarr(InitVal);

		LnNo=Windows(Hov,0,InitVal);//默认行为第一行,菜单模式
		if(*InitVal==K_TC)return;
		switch(LnNo)
		{
			case 1:
				UseInfodemand();//查询用户信息
				break;
			case 2:
				OldInfodemand();//已销售发票信息查询
				break;
			case 3:
				FenInvoInputInvo();//已分发与已录入数据查询
				break;
			case 4:
				InvDisAndPrint(4," ",0," ");//监控管理数据
				break;
			case 5:
				ReportDataSB();//申报备份数据查询
				break;
			case 6:
				SaleRes();//营业员销售查询
				break;
			case 7:
//				ExportDat();//安全信息
				break;
			default:break;
		}
		Hov=LnNo;
	}
}

⌨️ 快捷键说明

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