📄 report1.c
字号:
}
if(xzReport == 'Z')
{
for(i=0;i<4;i++)
ClearZero[i]=0;
i = bh[0];
Businessdemand(i,ClearZero,xzReport);//将营业员销售金额清零
}
}
/*-------------------------------------------------------------------------
机器出厂数据显示与打印函数
flag = 1: 显示
flag = 2: 打印
-------------------------------------------------------------------------*/
void MachineData_LP(uchar flag,uchar *str)
{
uchar i=0,InitVal[4],PrintBuf[50];
WindowsSet(7);
strcpy(&WinHint[0][1],"机器编号:");
for(i=0;i<16;i++)
WinHint[1][i+1]=str[i];
WinHint[1][i+1]=0;//机器出厂数据
strcpy(&WinHint[2][1],"生产日期:");
for(i=0;i<8;i++)
WinHint[2][10+i]=str[i+16];//机器生产日期
strcpy(&WinHint[3][1],"硬件版本号:");
for(i=0;i<18;i++)
WinHint[4][1+i]=str[24+i];
strcpy(&WinHint[5][1],"软件版本号:");
for(i=0;i<18;i++)
WinHint[6][1+i]=str[42+i];
if(flag == 1) //显示
{
while(1)
{
InitVal[0]=K_TC;
InitVal[1]=0;
Windows(1,0,InitVal);
if(*InitVal==K_TC)return;//退出
}
}
else if(flag == 2)//打印
{
PrintLine("机器出厂数据");
strcpy(PrintBuf,&WinHint[0][1]);
strcpy(&PrintBuf[9],&WinHint[1][1]);
PrintStr(PrintBuf);
PrintTime("开票日期:",&str[16],PrintBuf);
PrintStr(PrintBuf);
strcpy(PrintBuf,&WinHint[3][1]);
strcpy(&PrintBuf[11],&WinHint[4][1]);
PrintStr(PrintBuf);
strcpy(PrintBuf,&WinHint[5][1]);
strcpy(&PrintBuf[11],&WinHint[6][1]);
PrintStr(PrintBuf);
PrintLine("");
PrintStr("电子存根");
}
else;
}
/*-----------------------------------------------------------------
税种税目信息的显示与打印
flag = 1:显示
flag = 2:打印
-----------------------------------------------------------------*/
void TaxTax(uchar flag,uchar *str)
{
uchar i=0,InitVal[4],PrintBuf[50];
gyt2 *xp;
WindowsSet(7);
strcpy(&WinHint[0][1],"税种税目索引号:");
NumToStr(str[0],&WinHint[0][16],0);
strcpy(&WinHint[1][1],"税种税目代码:");
BcdToStr(4,&str[1],&WinHint[1][14],0);
strcpy(&WinHint[2][1],"税率:");
xp=&str[5];
NumToStr(xp->dat,&WinHint[2][6],0);
strcpy(&WinHint[3][1],"经营项目中文名称:");
for(i=0;i<20;i++)
WinHint[4][1+i]=str[7+i];
strcpy(&WinHint[5][1],"经营项目英文名称:");
for(i=0;i<20;i++)
WinHint[6][1+i]=str[27+i];
if(flag == 1)//显示
{
InitVal[0]=K_TC;//只有退出键才有效
InitVal[1]=0;
Windows(1,0,InitVal);
if(*InitVal==K_TC)return;//返回
}
else if(flag == 2)//打印
{
PrintLine("税种税目信息");
for(i=0;i<3;i++)
PrintStr(&WinHint[i][1]);
strcpy(PrintBuf,&WinHint[3][1]);
strcpy(&PrintBuf[17],&WinHint[4][1]);
PrintStr(PrintBuf);
strcpy(PrintBuf,&WinHint[5][1]);
strcpy(&PrintBuf[17],&WinHint[6][1]);
PrintStr(PrintBuf);
PrintLine("");
PrintStr("电子存根");
}
}
/*-------------------------------------------------------------------------
已分发的显示与打印
flag = 1:显示
flag = 0:打印
-------------------------------------------------------------------------*/
void FenFademand(uchar flag)
{
uchar i=0,InitVal[4],str[30],Len=0,Nm=0;
uint addr=0;
gyt4 *xp;
addr=InvoiceNum;//已分发的发票卷数
I2cRead(addr,1,InitVal);//存放已分发的发票卷数
addr=InvoCode;//发票地址
#if !Invofenfa
Len=InitVal[0];
#endif
#if Invofenfa
Len=10;//测试时使用
#endif
if(Len==0)
{
LcdDisplay(16,0,"没有分发发票,请返回!",3);
LcdDisplay(32,0,"按任意键继续!",0);
KeyScan();
return;
}
while(Len--)
{
for(i=0;i<12;i++)
WinHint[i][0]=1;
Nm++;
I2cRead(addr,22,str);
strcpy(&WinHint[0][1],"第00卷发票");
// NumToStr(Nm,&WinHint[0][10],0);//在第一行上显示已分发的第几卷
if(Nm<10)WinHint[0][4]=Nm+'0';
else
{
WinHint[0][3]='1';
WinHint[0][4]=Nm-10+'0';
}
strcpy(&WinHint[1][1],"发票代码:");
BcdToStr(10,str,&WinHint[2][1],0);
strcpy(&WinHint[3][1],"发票起始号:");
xp=&str[10];
NumToStr(xp->dat,&WinHint[4][1],0);
strcpy(&WinHint[5][1],"发票终止号:");
xp=&str[14];
NumToStr(xp->dat,&WinHint[6][1],0);
strcpy(&WinHint[7][1],"MAC:");
xp=&str[18];
NumToStr(xp->dat,&WinHint[7][5],0);
for(i=0;i<3;i++)
WinHint[8+i][0]=0;
if(flag == 1)// 在LCD上显示
{
InitVal[0]=K_TC;
InitVal[1]=K_HJ;
InitVal[2]=0;
Windows(1,0,InitVal);
if(*InitVal==K_TC)return;// 返回
}
else if(flag == 0)//在打印机上打印
{
PrintLine("已分发发票");
for(i=0;i<8;i++)
PrintStr(WinHint[i]);
PrintLine("");
PrintStr("电子存根");
}
addr+=22;
}
}
void Itarr(uchar *str)
{
*str++ = K_TC;
*str++ = K_HJ;
*str = 0;
}
/*-------------------------------------------------------------------------
显示与打印选择
-------------------------------------------------------------------------*/
uchar ReSelectMode(void)
{
uchar Ln=0,Initval[5];
// Itarr(Initval);
while(1)
{
Initval[0]=K_TC;
Initval[1]=K_HJ;
Initval[2]=K_JZ;
Initval[3]=K_TZ;
Initval[4]=0;
ReMenu2();
Ln=Windows(1,0,Initval);
switch(*Initval)
{
case K_TC: return 0;
case K_HJ: return Ln;
case K_JZ: PaperControl(1,16);
continue;
case K_TZ: PaperControl(0,16);
continue;
default:break;
}
if(Ln == 1 || Ln == 2 ) return Ln;
// if(*Initval == K_TC)//为退出键时退出,返回0
// return 0;
// else
// return Ln;//否则返回行号
}
}
/*-------------------------------------------------------------------------
打印提示
-------------------------------------------------------------------------*/
uchar PrintHint(void)
{
uchar key=0;
LcdDisplay(0,Col,"提 示",3);
LcdDisplay(16,0,"请换同规格普通打印纸!",0);
LcdDisplay(32,0,"否则,后果自负!",0);
LcdDisplay(48,0,"[退出] [确认]",0);
// DisplayFullRec(0,0,63,191,1);
DisplayFullRec(0,Co,16,120,1);
while(1)
{
key = KeyScan();
if(key == K_TC)//按的是退出键
return 0;
else if(key == K_HJ)//按的确认键
return 1;
else;
}
}
/*--------------------------------------------------------------------------
营业员销售额查询
--------------------------------------------------------------------------*/
uchar Businessdemand(uchar BianHao,uchar *ReadJE,uchar xzReport)
{
uint address=0;
address=SalerStat+(BianHao-1)*4;//获得营业员销售金额的存放地址 为什么要减1是因为营业员编号是从1开始的.而存放是从0开始的
if(xzReport == 'Z')//Z报表标志
I2cWrite(address,4,ReadJE);
else
I2cRead(address,4,ReadJE);
return 1;
}
///time 输入的BCD码 格式:年月日
///InputStr :输入的字符串 OutPut 组合输出的数据
void PrintTime(uchar *InputStr,uchar *time,uchar *OutPut)
{
uchar len,i,n=0;
uchar Tim[]="年月日";
len=strlen(InputStr);
for(i=0;i<len;i++) OutPut[i]=InputStr[i];
n=len;
for(i=0;i<4;i++) OutPut[len+i]=time[i];
n+=i;
for(i=0;i<2;i++) OutPut[n+i]=Tim[i]; //copy 年 字
n+=i;
for(i=0;i<2;i++) OutPut[n+i]=time[i+4];
n+=i;
for(i=0;i<2;i++) OutPut[n+i]=Tim[i+2]; //copy 月 字
n+=i;
for(i=0;i<2;i++) OutPut[n+i]=time[i+6];
n+=i;
for(i=0;i<2;i++) OutPut[n+i]=Tim[i+4]; //copy 日 字
n+=i;
OutPut[n]=0;
}
/*---------------------------------------------------------------------------
单卷发票使用使用汇总数据报表
---------------------------------------------------------------------------*/
uchar InvoiceGather(uchar *time,uchar DP)
{
uchar i,UnitName[45],Use[10],PrintBuf1[50],PrintBuf2[50],timer[10];
uchar Karat,Quit,Depos,len,InvoDat[40];
uint n;
ulong address,KaratMoney,QuitMoney,srs,sre;
gyt4 *Ips,*Ipe,*Rps,*Rpe,*MoneyKarat,*MoneyQuit;
gyt2 Len;
Karat=0;
Quit=0;
Depos=0;
KaratMoney = 0;
QuitMoney =0;
I2cRead(InvoStatNum,2,Len.str); //读出长度
if(Len.dat==0)
{
ReHint("没有相关数据!","请返回!");
return 0;
}
address=InvoStatBegin;
Ips=&time[0]; //输入的开始时间
Ipe=&time[4]; //输入的结束时间
i = 1;
n=0;
while(n<=Len.dat)
{
SerialFlashRead(FlashDat,address,37,InvoDat);
Rps=&InvoDat[29];//读出的开始时间
Rpe=&InvoDat[33];//读出的结束时间
// UartTxd(4,Rps->str);
// UartTxd(4,Rpe->str);
// UartRxd(1,&len);
if((Rps->dat >= Ips->dat) && (Rpe->dat <= Ipe->dat))
{
if(i)
{
srs = Rps->dat; //保存第一笔数据的开始时间
i=0;
}
sre = Rpe->dat; //保存上一笔数据结束时间
Karat += InvoDat[18];//正常发票份数
Quit += InvoDat[19];//退票份数
Depos += InvoDat[20];//废票份数
MoneyKarat = &InvoDat[21];//正常开具金额
MoneyQuit = &InvoDat[25];//退票金额
KaratMoney += MoneyKarat->dat;
QuitMoney += MoneyQuit->dat;
}
address+=37;
n++;
}
if(i)
{
ReHint("输入时间不存在!","请重试!");
return 0; //如果 i 值一直为真,则说明根本没有找到数据
}
I2cRead(TaxpayerName,40,UnitName); //读取单位名称
WindowsSet(12);
strcpy(&WinHint[0][1],"单位名称:");
for(i=0;i<22;i++) WinHint[1][1+i]=UnitName[i];
for(i=0;i<18;i++) WinHint[2][1+i]=UnitName[22+i];
strcpy(&WinHint[3][1],"税号:");
I2cRead(TaxNumber,20,UnitName); //读取税号 == 纳税人编码
for(i=0;i<20;i++) WinHint[3][5+i]=UnitName[i];
strcpy(&WinHint[4][1],"机器号:");
I2cRead(MachineNo,8,Use);
BcdToStr(8,Use,UnitName,0x81);
strcpy(&WinHint[4][8],UnitName);
strcpy(&WinHint[5][1],"开票日期:");
BcdToStr(4,&srs,UnitName,0x81);
strcpy(&WinHint[6][1],UnitName);
strcpy(&WinHint[6][9]," 至 ");
BcdToStr(4,&sre,UnitName,0x81);
strcpy(&WinHint[6][13],UnitName);
strcpy(&WinHint[7][1],"正常发票份数:");
NumToStr(Karat,&WinHint[7][14],2);
strcpy(&WinHint[8][1],"正常开具金额:");
NumToStr(KaratMoney,&WinHint[8][14],7);
strcpy(&WinHint[9][1],"废票份数:");
NumToStr(Depos,&WinHint[9][10],2);
strcpy(&WinHint[10][1],"退票份数:");
NumToStr(Quit,&WinHint[10][10],2);
strcpy(&WinHint[11][1],"退票金额:");
NumToStr(QuitMoney,&WinHint[11][10],7);
if(DP==1)
{
Use[0]=K_TC;
Use[1]=0;
Windows(1,0,Use);
if(*Use==K_TC) return 0;
}
else
{
PrintLine("发票使用汇总数据报表");
I2cRead(TaxpayerName,40,UnitName); //读取单位名称
strcpy(&PrintBuf1[0],"单位名称:");
for(i=0;i<40;i++) PrintBuf1[9+i]=UnitName[i];
PrintBuf1[i]=0;
PrintStr(&PrintBuf1[0]);
for(i=3;i<5;i++)
PrintStr(&WinHint[i][1]);
BcdToStr(4,&srs,&timer[0],0x81);
PrintTime("开票日期:",&timer[0],&PrintBuf1[0]);
len=strlen(PrintBuf1);
strcpy(&PrintBuf1[len]," 至 ");
len=strlen(PrintBuf1);
BcdToStr(4,&sre,&timer[0],0x81);
PrintTime(&PrintBuf1[0],&timer[0],&PrintBuf2[0]);
PrintStr(&PrintBuf2[0]);
for(i=7;i<12;i++)
PrintStr(&WinHint[i][1]);
PrintLine("");
PrintStr("电子存根");
return 1;
}
}
void PrintLine(uchar *Instr)
{
uchar i,n,len,OutPut[50];
len=strlen(Instr);
for(i=0;i<(40-len)/2;i++)
OutPut[i]='-';
n=i;
for(i=0;i<len;i++)
OutPut[n+i]=Instr[i];
n+=i;
for(i=0;i<(40-len)/2;i++)
OutPut[n+i]='-';
n+=i;
OutPut[n]=0;
PrintStr(OutPut);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -