📄 query.c
字号:
/*-------------------------------------------------------------
功能:查询--商业报表的打印查询和打印清机
说明:符合国家标准GB18240.1-2003和GB18240.2-2003的税控机软件
日期:2003年6月12日
---------------------------------------------------------------*/
#include "include.h"
#define yisectorqu 7282 //一扇区能写审计记录的条数
uchar fau_Affairs ;
#ifdef C8_VER
uchar print_trade_rpt( uchar function);
#endif
/*==================================================================
函数功能:商业报表的打印查询和打印清机
入口参数:mach_initialed--机器是否已初始化
出口参数:
返回值: ==POWER_OFF,则表示断电,返回
==0,ok
==其他,错误
全局变量:
编制人: 日期:2003-06-18
==================================================================*/
uchar query(uchar mach_initialed)
{
////////////////////////1、变量说明区///////////////////////////////
//======================1.1 菜单级变量==============================//
uchar switch_mode,layer;//方式锁位置,菜单级别
uchar last_line,cur_line;//上一级菜单项所在行,当前菜单项所在行(都从1开始)
uchar menu_num;//某一级中一个子菜单项数
uchar key;//键值
uchar over_mode;//某项菜单选择操作结束方式
#define NO_CHOOSED 0x0 //未选定任何菜单
#define IS_CHOOSED 0x1 //选定某项菜单
#define EXIT_CHOOSE 0xfe //返回上一级菜单
uchar menu_L1_QY[]={QUERY,0};
uchar menu_L2_QY[3]={BUSINESS_RPT, BUSINESS_RPT_DEL, 0};//1商业报表(打印)2商业报表(打印并清除)
#define ITEM_NUM_L2 sizeof(menu_L2_QY)//第2级菜单项数
//uchar menu_Lmax_QY[ITEM_NUM_L2-1][8]=
#ifdef C6_VER
uchar menu_Lmax_QY[ITEM_NUM_L2-1][7]=
{
//商业报表(打印)
{BRANCH_REPORT, PLU_REPORT, PLU_SELL_REPORT,
DAY_REPORT, MONTH_REPORT, RECEIVER_REPORT, 0},
//商业报表(打印并清除)
{BRANCH_REPORT_DEL, PLU_SELL_REPORT_DEL, DAY_REPORT_DEL,
MONTH_REPORT_DEL, RECEIVER_REPORT_DEL, 0}
};
#else
uchar menu_Lmax_QY[ITEM_NUM_L2-1][8]=
{
//商业报表(打印)
{BRANCH_REPORT, PLU_REPORT, PLU_SELL_REPORT,
DAY_REPORT, MONTH_REPORT, RECEIVER_REPORT, TRADE_REPORT, 0},
//商业报表(打印并清除)
{BRANCH_REPORT_DEL, PLU_SELL_REPORT_DEL, DAY_REPORT_DEL,
MONTH_REPORT_DEL, RECEIVER_REPORT_DEL, TRADE_REPORT_DEL, 0}
};
#endif
//===================1.2 功能级变量==================================//
uchar function_no;//功能号
uchar result;
uchar buf[50];
uint plu_start,plu_end;
uchar is_first_enter;//是否第一次进入当前功能菜单
//////////////2、代码执行区///////////////////////////////
if(!mach_initialed) return 0;
//============2.1 操作菜单,选择某个设置功能=================//
//------------2.1.1 初始化----------//
switch_mode=QUERY;//查询档
layer=SND_LAYER_MENU;//初始为第一级菜单
cur_line=1;//初始为第一行
last_line=1;
//display_menu_page(switch_mode,layer,menu_L1_QY,cur_line);
menu_num=strlen(menu_L1_QY);
is_first_enter=1;
//------------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);
if(key==PAPER1) //若按下[走纸]键,则走纸1行
{
#ifdef C6_VER
Fast_feed_paper_hang(120);// feed_on_line(1);
#endif
continue;
}
#ifdef HYS620
else if(key==BACK_PAPER) //响应C8上的退纸键
{
back_on_dot(120);
continue;
}
#endif
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_QY[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 SND_LAYER_MENU:
display_menu_page(switch_mode,layer,menu_L2_QY,cur_line);
menu_num=strlen(menu_L2_QY);
break;
case MAX_LAYER_MENU:
display_menu_page(switch_mode,layer,menu_Lmax_QY[last_line-1],cur_line);
menu_num=strlen(menu_Lmax_QY[last_line-1]);
break;
default://若到达功能级,则转到功能设置
break;
}
//===============2.2 功能设置=========================//
if(layer==FUNCTION_LAYER)//若到达功能级
{
//-----------2.2.1 执行相应功能------------//
//----------提示当前功能--------------//
clear_lcd(0,4);
get_menu_name_qy(MAX_LAYER_MENU,function_no,buf);
lcd_disp(0,0,buf);
switch(function_no)
{
#ifdef QY_BRANCH_RPT
//-------------部门报表-----------//
case BRANCH_REPORT:
case BRANCH_REPORT_DEL:
lcd_disp(0,0,buf);
//----------提示下一步操作---------------//
strcpy(buf,"请先换上普通打印纸!!!\r");
lcd_disp(1,0,buf);
con_disp(1,0,strlen(buf),buf);
//----------等待按键,确认则打印---------------//
result=wait_usal_key(0);
clear_lcd(1,1);
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
strcpy(buf,"打印中,请等候...");
lcd_disp(1,0,buf);
result=print_branch_rpt(function_no);
clear_lcd(1,1);
break;
#endif
#ifdef QY_PLU_RPT
//-------------plu查询报表-----------//
case PLU_REPORT:
lcd_disp(0,0,buf);
//----------提示下一步操作---------------//
strcpy(buf,"请先换上普通打印纸!!!\r");
lcd_disp(1,0,buf);
con_disp(1,0,strlen(buf),buf);
//----------等待按键,确认则打印---------------//
result=wait_usal_key(0);
clear_lcd(1,1);
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
//--------取得起止plu号--------------------//
result=get_plu_no_range(&plu_start,&plu_end);
if(result==POWER_OFF) return result;//断电,返回
if(result==CANCEL) break;
//----------打印报表-------------//
strcpy(buf,"打印中,请等候...");
lcd_disp(2,0,buf);
result=print_plu_rpt(plu_start,plu_end);
clear_lcd(2,1);
break;
//-------------plu销售查询报表-----------//
case PLU_SELL_REPORT:
case PLU_SELL_REPORT_DEL:
lcd_disp(0,0,buf);
//----------提示下一步操作---------------//
strcpy(buf,"请先换上普通打印纸!!!\r");
lcd_disp(1,0,buf);
con_disp(1,0,strlen(buf),buf);
//----------等待按键,确认则打印---------------//
result=wait_usal_key(0);
clear_lcd(1,1);
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
//--------取得起止plu号--------------------//
result=get_plu_no_range(&plu_start,&plu_end);
if(result==POWER_OFF) return result;//断电,返回
if(result==CANCEL) break;
//----------打印报表-------------//
strcpy(buf,"打印中,请等候...");
lcd_disp(2,0,buf);
result=print_plu_trade_rpt(function_no,plu_start,plu_end);
clear_lcd(2,1);
break;
#endif
#ifdef QY_DAY_RPT
//-------------日报表-----------//
case DAY_REPORT:
case DAY_REPORT_DEL:
lcd_disp(0,0,buf);
//----------提示下一步操作---------------//
strcpy(buf,"请先换上普通打印纸!!!\r");
lcd_disp(1,0,buf);
con_disp(1,0,strlen(buf),buf);
//----------等待按键,确认则打印---------------//
result=wait_usal_key(0);
clear_lcd(1,1);
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
strcpy(buf,"打印中,请等候...");
lcd_disp(1,0,buf);
result=print_day_rpt(function_no);
clear_lcd(1,1);
break;
#endif
#ifdef QY_MONTH_RPT
//-------------月报表-----------//
case MONTH_REPORT:
case MONTH_REPORT_DEL:
lcd_disp(0,0,buf);
//----------提示下一步操作---------------//
strcpy(buf,"请先换上普通打印纸!!!\r");
lcd_disp(1,0,buf);
con_disp(1,0,strlen(buf),buf);
//----------等待按键,确认则打印---------------//
result=wait_usal_key(0);
clear_lcd(1,1);
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
strcpy(buf,"打印中,请等候...");
lcd_disp(1,0,buf);
result=print_month_rpt(function_no);
clear_lcd(1,1);
break;
#endif
#ifdef QY_RECEIVER_RPT
//-----------收款员报表-----------//
case RECEIVER_REPORT:
case RECEIVER_REPORT_DEL:
lcd_disp(0,0,buf);
//----------提示下一步操作---------------//
strcpy(buf,"请先换上普通打印纸!!!\r");
lcd_disp(1,0,buf);
con_disp(1,0,strlen(buf),buf);
//----------等待按键,确认则打印---------------//
result=wait_usal_key(0);
clear_lcd(1,1);
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
strcpy(buf,"打印中,请等候...");
lcd_disp(1,0,buf);
result=print_receiver_rpt(function_no);
clear_lcd(1,1);
break;
#endif
#ifdef C8_VER//若是c8机器
#ifdef QY_TRADE_RPT
//-----------营业员报表-----------//
case TRADE_REPORT:
case TRADE_REPORT_DEL:
lcd_disp(0,0,buf);
//----------提示下一步操作---------------//
strcpy(buf,"请先换上普通打印纸!!!\r");
lcd_disp(1,0,buf);
con_disp(1,0,strlen(buf),buf);
//----------等待按键,确认则打印---------------//
result=wait_usal_key(0);
clear_lcd(1,1);
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
strcpy(buf,"打印中,请等候...");
lcd_disp(1,0,buf);
result=print_trade_rpt(function_no);
clear_lcd(1,1);
break;
#endif
#endif
default:
break;
}//end of "switch(function_no)"
//--------2.2.2 提示操作结果----------//
catch_error_display(result,0);
//--------2.2.3 回到上一级菜单----------//
/*while(1)
{//等待按键,直到按下"取消"键
if(low_pwr) return POWER_OFF;//如果断电了,则exit
key = get_key();
if(key) beep(100);
if(key==VOID) break;
}
//按下"取消"键,回到上一级菜单*/
//操作结果完毕后直接退回上一级菜单
delayms(3000);
Last_line=0xff;
dismode=0;
layer=MAX_LAYER_MENU;
display_menu_page(switch_mode,layer,menu_Lmax_QY[last_line-1],cur_line);
}//end of "FUNCTION_LAYER"
}//end of "while(1)"
}//end of "query"
#ifdef QY_PLU_RPT
/*==================================================================
函数功能:取得PLU号范围(模式:输入数+确认+输入数+确认)
入口参数:
出口参数:
返回值: ==POWER_OFF,则表示断电,返回
==OK,成功
==CANCEL,取消操作
全局变量:g_max_plu_no
编制人: 日期:2003-06-30
==================================================================*/
uchar get_plu_no_range(uint *plu_start,uint *plu_end)
{
uchar disp_buf[MAX_LCD_COL*MAX_LCD_NUM+1];//显示缓冲,长度为lcd一页
uchar key;//键值
#define MAX_KEY_LEN 10 //数字键字符串最大长度
uchar numkey_buf[MAX_KEY_LEN];//输入的数字键字符串缓冲区
uchar point,max_key_num;//是否允许输入小数,最大允许输入键数
uchar error;//错误类别
ulong num;//输入数
uchar step;
uchar i;
//----------初始化----------------//
*plu_start=0;
error=0;
for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
point=0;
max_key_num=4;
//----------提示下一步操作---------------//
sprintf(disp_buf,"请输入PLU的起始号\r");
lcd_disp(1,0,disp_buf);
step=0;
//----------等待按键---------------//
while(1)
{
if(error) catch_error_display(error,0);//捕获错误
openbacklight();
if(low_pwr) return POWER_OFF;//监测到断电了,则exit
key = get_key();
if(!key) continue;
//beep(50);
if(error&&key!=CLEAR&&key!=VOID) continue;//出错后,须即时更正或取消操作
switch(key)
{
case VOID://取消操作
clear_lcd(1,2);
return CANCEL;
break;
case CLEAR://即时更正
if(error)//报错时
{
clear_lcd(3,1);//清除错误显示
error=0;//清除错误标志
}
if(numkey_buf[0]!=0)//若有数输入
{
numkey_buf[0]=0;//清除数字输入缓冲区
clear_lcd(2,1);//清除数字显示
}
break;
//-------取得输入数字键-------//
case '0' :
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
case KEY00://双0
case POINT://小数点
//-------取得输入数字键-------//
error=get_valid_digit(key,point,max_key_num,numkey_buf);
if(error)//输入非法
{
error=KEY_ERROR;
break;
}
//------显示输入数-------//
clear_lcd(2,1);
lcd_disp(2,0,numkey_buf);
break;
case ENTER://最后确定
if(numkey_buf[0]==0)//未输入任何数字
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -