📄 declare.c
字号:
//if((memcmp(&invoice_roll.issue_start_date[1],date,3)>=0)&&(memcmp(&invoice_roll.issue_end_date[1],&date[3],3)<=0))
//2005.12.5
if(memcmp(&date[0],&invoice_roll.issue_end_date[1],3)>0)continue;
if(
//(memcmp(&invoice_roll.issue_start_date[1],date,3)>=0)&&
(memcmp(&invoice_roll.issue_end_date[1],&date[0],3)>=0)&&
(memcmp(&date[3],&invoice_roll.issue_start_date[1],3)>=0))
//if((memcmp(date,&invoice_roll.issue_start_date[1],3)>=0)&&(memcmp(&invoice_roll.issue_end_date[1],&date[0],3)>=0)
//&&(memcmp(&date[3],&invoice_roll.issue_start_date[1],3)>=0))
{
if(!find_head)
{
//send_str(4,"9999");
no=i;
//no++;
find_head=1;
}
vol_num++;
}
else if(memcmp(&invoice_roll.issue_start_date[1],&date[3],3)>0)
{
break;
}
}
invc_vol[3]=no>>8;
invc_vol[4]=no;
invc_vol[5]=vol_num;
return 0;
}
/*==================================================================
函数功能:向MODEM发送数据并监视是否成功
Ins_Data 存放数据的内存指针
出口参数:无
返回值: 0 成功 !0 设置失败
编制人:
日 期:2003-12-31 11:33
==================================================================*/
/*uchar send_data(uchar *Ins_Data)
{
uchar i,len,error;
uchar xdata buf[100];
clear_lcd(0,4);
memset(buf,0,30);
error=1;
strcpy(buf,Ins_Data);
len=strlen(buf);
buf[len]=0x0d;
clear_rece_buffer(); //新加入
len = strlen(buf);
send_str(len,buf);
memset(buf,0,25);
for(i=0;i<20;i++)
if (!rece(1,buf)) break;
len=1;
while(1)
{
if(rece(1,buf+len)) break;
len++;
}
if((buf[len-4]==0x4f)||(buf[len-3]==0x4b)) return 0; //如果返回OK则设置成功
else return 1;
}
*/
/*==================================================================
函数功能:MODEM设置 打开端口,设置波特率,初始化MODEM
入口参数:无
出口参数:无
返回值: 0 成功 !0 设置失败
编制人:
日 期:2003-12-31 11:33
==================================================================*/
/*uchar modem_setup()
{
uchar ret,buf[20],dbuf[50];
clear_lcd(0,4);
Load_Dis(0,0,"设置MODEM中,请稍侯...\0");
//#ifdef C8_VER
//open_moden(1); //上电
//#endif
//enable_dtr();
select_com(0);
modify_rate(3);
delayms(250);
strcpy(buf,"ATF");
ret=send_data(buf);
if(!ret) return 0;
else return 1;
}
*/
/*==================================================================
函数功能:通过MODEM发送汇总数据
入口参数:
出口参数:
返回值: 0 成功 !0 设置失败
编制人:
日 期:2003-12-31 11:33
==================================================================*/
/*uchar send__duty_report(uchar *start_date,uchar *end_date)
{
uchar error;
ulong 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;
uchar xdata buf[100];
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];
}
memset(buf,0,100);
len=(PRINTAL_NUM-20)/2;
add_blank(len,buf);
strcat(buf,"发票汇总数据报表");
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
memset(buf,0x20,MODEM_DISP_LEN);
send_str(MODEM_DISP_LEN,buf);
//-----打印单位名称-------//
memset(buf,0,100);
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);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
//-----打印税号-------//
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));
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
//-----打印机器号-------//
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]);
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
sprintf(buf,"开票时间:%04x/%02bx/%02bx至%04x/%02bx/%02bx",start_date[0],//0x2000+start_date[0],
start_date[1],start_date[2],0x2000+end_date[0],end_date[1],end_date[2]);
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
sprintf(buf,"正常发票份数:%lu",normal_num);
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
strcpy(buf,"正常发票开具金额:");
pri_format(total_normal_money,7,&buf[18]);
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
sprintf(buf,"废票份数:%u",resc_num);
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
sprintf(buf,"退票份数:%u",red_num);
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
strcpy(buf,"退票金额:");
pri_format(total_red_money,7,&buf[10]);
len=strlen(buf);
memset(buf+len,0x20,MODEM_DISP_LEN-len);
send_str(MODEM_DISP_LEN,buf);
memset(buf,0x20,MODEM_DISP_LEN);
send_str(MODEM_DISP_LEN,buf);
return 0;
}
*/
/*==================================================================
函数功能:计算出卡申报的起始时间,用户输入截止时间
入口参数:存放时间的内存指针
出口参数:
返回值: ==POWER_OFF,则表示断电,返回
全局变量:
编制人: 日期:2003-07-03
==================================================================*/
uchar get_declare_date(uchar *start_date,uchar *end_date)
{
uchar i,temp_buf[50],temp_date[20],temp_sta[3],temp_key,temp_len;
clear_lcd(1,2);
//------申报汇总的起始日期是上一次申报(已做完税处理)的结束日期加1-----//
if(read_eeprom(END_DATE_ADDR,3,temp_sta))
return(READ_EEPROM_FAIL);
calc_date(temp_sta,1,start_date);
/*start_date[0]=5;
start_date[1]=0x11;
start_date[2]=0x15;
*/
sprintf(temp_buf,"起始日期:20%02bx年%02bx月%02bx日----\0",start_date[0],start_date[1],start_date[2]);
lcd_disp(1,0,temp_buf);
strcpy(temp_buf,"请输入截止日期\0");
lcd_disp(3,0,temp_buf);
memset(temp_buf,0,50);
memset(temp_date,0,20);
strcpy(temp_buf,"截止日期:");
lcd_disp(2,0,temp_buf);
temp_key=0;
temp_len=0;
while(1)
{
openbacklight();
if(low_pwr) return POWER_OFF;//监测到断电了,则exit
temp_key=get_key();
if (!temp_key) continue; //如果无键按下则重新扫描
//beep(50);
if(temp_key==ENTER) break; //如果按下确认键就退出
if(temp_key==VOID) return CANCEL;
if (temp_key==CLEAR)
{
memset(temp_date,0,20);
temp_len=0;
clear_lcd(2,1);
}
if((temp_key>='0')&&(temp_key<='9'))
{
temp_date[temp_len]=temp_key;
temp_len++;
}
temp_buf[9]=0;
strcat(temp_buf,temp_date);
lcd_disp(2,0,temp_buf);
}
for(i=0;i<3;i++) //将年月日的数据转换成为BCD
end_date[i]=(temp_date[2+2*i]-0x30)*16+(temp_date[2+2*i+1]-0x30);
return OK;
}
/*==================================================================
函数功能:税控数据的卡申报、打印、核查
入口参数:mach_initialed--机器是否已初始化
出口参数:
返回值: ==POWER_OFF,则表示断电,返回
全局变量:
编制人: 日期:2003-07-03
==================================================================*/
uchar declare(void)//uchar declare(uchar mach_initialed)
{
////////////////////////1、变量说明区///////////////////////////////
//======================1.1 菜单级变量==============================//
uchar switch_mode,layer;//方式锁位置,菜单级别
uchar last_line,cur_line;//上一级菜单项所在行,当前菜单项所在行(都从1开始)
uchar menu_num;//某一级中一个子菜单项数
uchar xdata key,temp_buf[50];//键值temp_key,
uint i;//temp_len
// uint start_no;
//uchar invc_vol_num,j;
//struct invoice_roll_struct *invoice_roll;
uchar over_mode;//某项菜单选择操作结束方式
#define NO_CHOOSED 0x0 //未选定任何菜单
#define IS_CHOOSED 0x1 //选定某项菜单
#define EXIT_CHOOSE 0xfe //返回上一级菜单
uchar menu_L1_DR[]={DECLARE,0};
uchar menu_L2_DR[5]={CPU_DECLARE, RPT_DECARE, AUDIT, OTHER_MODE_DECLARE, 0};
#define ITEM_NUM_L2 sizeof(menu_L2_DR)//第2级菜单项数
//2005.7.22
uchar menu_Lmax_DR[ITEM_NUM_L2-1][7]=
{
//用户卡申报
//#ifdef DECLARE_INVOICE //用户卡报明细
//{DECLARE_DUTY_CARD, DECLARE_LIST_CARD,DECLARE_INVOICE_ROLL_CARD,FLASH_CARD_DECLARE_LIST, 0},
//else
{DECLARE_DUTY_CARD,DECLARE_DUTY_BYMONTH,DECLARE_DUTY_AGAIN,DECLARE_INVOICE_ROLL_CARD,FLASH_CARD_DECLARE_LIST, 0},//DECLARE_DAY_RECORD,
//#endif
//报表
{ PRINT_DUTY_RPT, PRINT_DECLARE_RPT, PRINT_LIST_RPT, 0},
//稽查
{RECORD_AUDIT, DUTY_DATA_AUDIT_BYQI, SET_TIME0, 0},// {LIST_RECORD_AUDIT, DAY_RECORD_AUDIT, DUTY_DATA_AUDIT_BYQI,DUTY_DATA_AUDIT_BYDATE, SET_TIME0, 0},
//其他方式申报
{DECLARE_DUTY_USB, DECLARE_DUTY_MODEM,0}
};
//===================1.2 功能级变量==================================//
uchar function_no;//功能号
uchar result;
uchar xdata buf[250];
uchar start_date[3],end_date[3];
uchar xdata chk_type;//税控管理卡类别
//2005.8.5
uint start_period,end_period;
struct delare_addr_struct declare_addr;
uchar is_first_enter;//是否第一次进入当前功能菜单
#define FILE_NAME_LEN 12
uchar duty_file[FILE_NAME_LEN+1]="duty.dat";
//////////////2、代码执行区///////////////////////////////
//============2.1 操作菜单,选择某个设置功能=================//
//------------2.1.1 初始化----------//
switch_mode=DECLARE;//查询档
layer=SND_LAYER_MENU;//初始为第一级菜单
cur_line=1;//初始为第一行
last_line=1;
// display_menu_page(switch_mode,layer,menu_L1_DR,cur_line);
menu_num=strlen(menu_L1_DR);
is_first_enter=1;
result=0;
//------------2.1.2 等待按键,选择菜单功能----------//
while(1)
{
openbacklight();
if(low_pwr) return POWER_OFF;//如果断电了,则exit
key = get_key();
if(!key) //未按下任何键
{
if(layer==FST_LAYER_MENU) return 0;//此时若在第1级菜单,则返回主程序,可切换方式锁位置
if(!is_first_enter) continue;//等待按键
else is_first_enter=0;
}
//else beep(50);
//HYS620
if(key==PAPER1) //若按下[走纸]键,则走纸1行
{
#ifdef C6_VER
result=Fast_feed_paper_hang(120);//fpaper(8);
if(result) return LINE_FEED_FAIL;
#else
feed_on_line(1);
#endif
continue;
}
#ifdef HYS620
else if(key==BACK_PAPER) //响应C8上的退纸键
{
back_on_dot(120);
continue;
}
#endif
//END HYS620
else
over_mode=choose_menu_line(key,menu_num,&cur_line);//否则选择菜单项,当前行将移到新位置
switch(over_mode)
{
case IS_CHOOSED://若选定某项菜单,
if(layer<MAX_LAYER_MENU)//在最后菜单级之前,则到其对应下一级的首行开始反显页面
{
last_line=cur_line;//保存此级当前项所在行位置
cur_line=1;//下一级的首行
}
else//若此时为最后菜单级时,则取得相应功能号
function_no=menu_Lmax_DR[last_line-1][cur_line-1];
layer++;//指到其对应下一级
break;
case EXIT_CHOOSE://若选择返回
if(layer>FST_LAYER_MENU)//在第1级菜单之前,则回到其对应的上一级菜单项反显
{
layer--;
cur_line=last_line;
if(layer==SND_LAYER_MENU) last_line=1;
}
break;
default://未选定,则继续等待按键
break;
}
//-------------2.1.3 显示当前菜单级页面-----------------------//
switch(layer)
{
case FST_LAYER_MENU:
//clear_lcd(0,4);
//2005.11.2
//display_menu_page(switch_mode,layer,menu_L1_DR,cur_line);
menu_num=strlen(menu_L1_DR);
break;
case SND_LAYER_MENU:
display_menu_page(switch_mode,layer,menu_L2_DR,cur_line);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -