📄 print.cpp
字号:
Button1->Enabled=false;
Button2->Enabled=false;
Button3->Enabled=false;
Repaint();
print_bb(1);
Button1->Enabled=true;
Button2->Enabled=true;
Button3->Enabled=true;
}
void __fastcall Tform_print::print_bb(int howto) // 打印报表
{
char str[300];
int i,j,k,m;
int selected_sen_cnt=0,selected_rec_cnt=0;
FILE *fd,*fdlw;
int now_fileno=0;
char lwfilename[70],bbfilename[70];
char fjm[5]; // 分局吗
char qdbsh[20]; //清单标识号
AnsiString sb,bh; // 设备,编号
try{
if(bd.yh_mode==YH_HD) {sb="单台面电子轨道衡"; bh="LD102";}
else if(bd.yh_mode==YH_BT){sb="单台面电子轨道衡"; bh="LD104";}
else if(bd.yh_mode==YH_LX){sb="单台面电子轨道衡"; bh="LD105";}
else if(bd.yh_mode==YH_TJX){sb="双台面电子轨道衡"; bh="LD104";}
LPSYSTEMTIME lpst=new SYSTEMTIME;
GetLocalTime(lpst);
if((fd=fopen(FILENO,"rb"))!=NULL){
char tmp[10];
sprintf(tmp,"%04d%02d%02d",lpst->wYear,lpst->wMonth,lpst->wDay);
fread(&fno,sizeof(fno),1,fd);
if(strcmp(tmp,fno.dt)==0) now_fileno=fno.no;
else now_fileno=0;
fclose(fd);
}
if(howto==1){ // 选择打印
for(i=0;i<sen_cnt;i++){
if(xz_sen[i]==true) selected_sen_cnt++;
}
for(i=0;i<rec_cnt;i++){
if(xz_rec[i]==true) selected_rec_cnt++;
}
if(selected_sen_cnt==0 && selected_rec_cnt==0) return;
}
Pt->BeginDoc();
for(m=0,y=0;m<2;m++){ //m==0 发货 m==1 收货 y只初始化一次
if(howto==1){ // 选择打印
if(m==0 && selected_sen_cnt==0) continue;
if(m==1 && selected_rec_cnt==0) break;
}
int start,end;
if(bd.yh_mode==YH_HD) {start=0;end=2; }
else if(bd.yh_mode==YH_BT) {start=0;end=4; }
else if(bd.yh_mode==YH_LX) {start=0;end=2; }
else if(bd.yh_mode==YH_TJX){start=1;end=2; }
for(k=start;k<end;k++){ //k==0 原始记录 k==1,2 检测报告
for(i=0;i<(m==0?sen_cnt:rec_cnt)&&i<MAX_CE;i++){
if(howto==1){ // 选择打印
if(m==0 && xz_sen[i]==false) continue;
if(m==1 && xz_rec[i]==false) continue;
}
if(k==0){
now_fileno++;
get_bbfilename(bbfilename,lpst->wMonth,lpst->wDay,now_fileno);
get_lwfilename(lwfilename,lpst->wMonth,lpst->wDay,now_fileno);
}
// print
if(k==0) sprintf(title,"%s公正计量站原始记录",bd.name);
else sprintf(title,"%s公正计量站检测报告",bd.name);
x=(wide-w1-maicon->Width-w2)/2;
Pt->Canvas->Font->Size=12;
Pt->Canvas->TextOut(x,y,title); x+=w1; //print title
Pt->Canvas->Draw(x,y,maicon); x+=maicon->Width; // bmp 打印出错 改为icon
Pt->Canvas->Font->Size=10;
Pt->Canvas->TextOut(x,y,add);
x=10; y+=h1+20; if(y+dy>high){y=0;Pt->NewPage();}
Pt->Canvas->Font->Size=11;
sprintf(str," %10s%-20s 检测日期:%s年%s月%s日 时间:%s:%s:%s 编号:%s",
m==0 ? "发货单位:" : "收货单位:",
m==0 ? sen[i].dw : rec[i].dw,
form_main->data->TableName.SubString(1,4).c_str(),
form_main->data->TableName.SubString(5,2).c_str(),
form_main->data->TableName.SubString(7,2).c_str(),
form_main->data->TableName.SubString(10,2).c_str(),
form_main->data->TableName.SubString(12,2).c_str(),
form_main->data->TableName.SubString(14,2).c_str(),
m==0 ? sen[i].bh : rec[i].bh );
Pt->Canvas->TextOut(x,y,str); y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
Pt->Canvas->TextOut( x,y,"┌───┬───┬────┬──────────┬────┬──┬───┬───┬───┬───┬───┐");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
if(m==0){
Pt->Canvas->TextOut(x,y,"│ 序号 │ 车种 │ 车 号 │ 收 货 单 位 │ 货 名 │速度│ 毛重 │ 皮重 │ 净重 │ 标重 │ 超欠 │");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
Pt->Canvas->TextOut(x,y,"│ │ 车型 │ │ │ │km/h│ t │ t │ t │ t │ t │");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
}else{
Pt->Canvas->TextOut(x,y,"│ 序号 │ 车种 │ 车 号 │ 发 货 单 位 │ 货 名 │速度│ 毛重 │ 皮重 │ 净重 │ 标重 │ 超欠 │");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
Pt->Canvas->TextOut(x,y,"│ │ 车型 │ │ │ │km/h│ t │ t │ t │ t │ t │");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
}
Pt->Canvas->TextOut( x,y,"├───┼───┼────┼──────────┼────┼──┼───┼───┼───┼───┼───┤");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
float tmao=0.0,tpi=0.0,tpiao=0.0;
for(j=0;j<(m==0?sen[i].cnt:rec[i].cnt)&&j<MAX_CE;j++){
form_main->data->MoveBy((m==0?sen[i].no[j]:rec[i].no[j]) - form_main->data->RecNo);
sprintf(str,"%2s%02d(%02d)%2s%6s%2s%8s%2s%20s%2s%8s%2s%4d%2s%6.02f%2s%6.02f%2s%6.02f%2s%6.02f%2s%6.02f%2s",
"│",j+1,m==0 ? sen[i].no[j] : rec[i].no[j],
"│",form_main->data->FindField("Bak3")->AsString.c_str(),
"│",form_main->data->FindField("Cehao")->AsString.c_str(),
"│",m==0 ? form_main->data->FindField("Rec")->AsString.c_str() : form_main->data->FindField("Send")->AsString.c_str(),
"│",form_main->data->FindField("Name")->AsString.c_str(),
"│",form_main->data->FindField("Spd")->AsInteger ,
"│",form_main->data->FindField("Mao")->AsFloat,
"│",form_main->data->FindField("Pi")->AsFloat,
"│",form_main->data->FindField("Jin")->AsFloat,
"│",form_main->data->FindField("Piao")->AsFloat,
"│",form_main->data->FindField("Yq")->AsFloat,
"│" );
Pt->Canvas->TextOut(x,y,str);y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
if(j+1<(m==0?sen[i].cnt:rec[i].cnt)){
Pt->Canvas->TextOut(x,y,"├───┼───┼────┼──────────┼────┼──┼───┼───┼───┼───┼───┤");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
}else{
Pt->Canvas->TextOut(x,y,"├───┴───┴────┴──────────┴────┴──┴───┴───┴───┴───┴───┤");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
}
tmao +=form_main->data->FindField("Mao") ->AsFloat;
tpi +=form_main->data->FindField("Pi") ->AsFloat;
tpiao+=form_main->data->FindField("Piao")->AsFloat;
}
sprintf(str,"%2s%9s%8s%-9.02f%8s%-9.02f%8s%-9.02f%8s%-9.02f%8s%-9.02f%10s",
"│"," 合计 ",
"毛重:",tmao,
"皮重:",tpi,
"净重:",tmao-tpi,
"标重:",tpiao,
"超欠:",tmao-tpi-tpiao,
"│" );
Pt->Canvas->TextOut(x,y,str);y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
Pt->Canvas->TextOut(x,y, "└───────────────────────────────────────────────────┘");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
Pt->Canvas->TextOut(x,y," 检测设备:" + sb + " " +
"设备编号:" + bh + " " +
"天气:" + form_main->dirTrain_no->Value + " " +
"温度:" + form_main->dirBak2->Value + "℃" + " " +
"相对湿度:" + form_main->dirBak1->Value + "%"); y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
char tmp[100];
sprintf(tmp," 检测员: 校核员: 签发人: %s",
k==0?"领取检测报告人:":"检测单位(盖章)");
Pt->Canvas->TextOut(x,y,tmp); y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
y+=10*dy; if(y+dy>high){y=5*dy;Pt->NewPage();}
Pt->Canvas->TextOut(x,y," ");y+=dy; if(y+dy>high){y=0;Pt->NewPage();}
// write bbfile and lw
if(k==0){ // only write once
if( (fd =fopen(bbfilename,"wb"))!=NULL &&
(fdlw=fopen(lwfilename,"wb"))!=NULL ){
// 分局吗,清单标识号
if(bd.yh_mode==YH_HD){
strcpy(fjm,"sjp");
sprintf(qdbsh,"%3s%3s%4s%03d",fjm,"020",
form_main->data->TableName.SubString(5,4).c_str(),
now_fileno);
}else if(bd.yh_mode==YH_BT){
strcpy(fjm,"sjp");
sprintf(qdbsh,"%3s%3s%4s%03d",fjm,"041",
form_main->data->TableName.SubString(5,4).c_str(),
now_fileno);
}else if(bd.yh_mode==YH_LX){
strcpy(fjm,"sjp");
sprintf(qdbsh,"%3s%3s%4s%03d",fjm,"131",
form_main->data->TableName.SubString(5,4).c_str(),
now_fileno);
}
// 标记行
sprintf( str,"%c,%s,%s,%c,%s,%s%c%c",
'f',
qdbsh, //清单标识号
fjm, // 分局吗
m==0 ? 'f' : 'd' ,
form_main->data->TableName.SubString(1,8).c_str(),
form_main->data->TableName.SubString(10,4).c_str(),
'\r','\n');
fwrite(str,strlen(str),1,fd);
fwrite(str,strlen(str),1,fdlw);
// 详细行
for(j=0;j<(m==0?sen[i].cnt:rec[i].cnt);j++){
form_main->data->MoveBy((m==0?sen[i].no[j]:rec[i].no[j]) - form_main->data->RecNo);
sprintf(str,
"%c,%02d(%02d),%s,%s,%s,%s,%s,%s,%s,%6.02f,%6.02f,%6.02f,%6.02f,%6.02f,%6.02f%c%c",
'd',
j+1,
m==0 ? sen[i].no[j] : rec[i].no[j],
form_main->data->FindField("Bak3")->AsString.c_str(), //车型
form_main->data->FindField("Cehao")->AsString.c_str(),
form_main->data->FindField("Bak2")->AsString.Pos(",")!=0 ?
form_main->data->FindField("Bak2")->AsString.c_str() : "," , //发站略吗,发站名
form_main->data->FindField("Bak1")->AsString.Pos(",")!=0 ?
form_main->data->FindField("Bak1")->AsString.c_str() : "," , //到站略吗,到站名
form_main->data->FindField("Send")->AsString.c_str(),
form_main->data->FindField("Rec")->AsString.c_str(),
form_main->data->FindField("Name")->AsString.c_str(),
form_main->data->FindField("Spd")->AsFloat ,
form_main->data->FindField("Mao")->AsFloat,
form_main->data->FindField("Pi")->AsFloat,
form_main->data->FindField("Jin")->AsFloat,
form_main->data->FindField("Piao")->AsFloat,
form_main->data->FindField("Yq")->AsFloat,
'\r','\n');
fwrite(str,strlen(str),1,fd);
fwrite(str,strlen(str),1,fdlw);
}
// 合计行
sprintf(str,"%c,%9.02f,%9.02f,%9.02f,%9.02f,%9.02f%c%c",
's',tmao,tpi,tmao-tpi,tpiao,tmao-tpi-tpiao,'\r','\n');
fwrite(str,strlen(str),1,fd);
fwrite(str,strlen(str),1,fdlw);
// 结束行
sprintf(str,"%c,%s,%s,%s,%s%c%c",
'e',"检测单位","检测员","校核员","签发人",'\r','\n');
fwrite(str,strlen(str),1,fd);
fwrite(str,strlen(str),1,fdlw);
fclose(fd);
fclose(fdlw);
} // if fopen
}//if m==0
}//for(i)
}//for(k)
}//for(m)
Pt->EndDoc();
// write FILENO
if((fd=fopen(FILENO,"wb"))!=NULL){
sprintf(fno.dt,"%04d%02d%02d",lpst->wYear,lpst->wMonth,lpst->wDay);
fno.no=now_fileno;
fwrite(&fno,sizeof(fno),1,fd);
fclose(fd);
}
//del oldfile
del_oldfile(lpst->wMonth);
delete lpst;
// start lwthread
if(bd.yh_mode==YH_HD||bd.yh_mode==YH_BT||bd.yh_mode==YH_LX){
if(lwThread!=NULL){
if(lwThread->Suspended==true) lwThread->Resume();
}
}
}catch(...){
Application->MessageBox(" 打 印 出 错 ", NULL, MB_OK);
}
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::get_bbfilename(char* fnm,int mon,int day,int fno)
{
if(bd.yh_mode==YH_HD){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",BB_PATH,'F',mon,day,'S',"020",fno);
}else if(bd.yh_mode==YH_BT){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",BB_PATH,'F',mon,day,'S',"041",fno);
}else if(bd.yh_mode==YH_LX){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",BB_PATH,'F',mon,day,'S',"131",fno);
}else if(bd.yh_mode==YH_TJX){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",BB_PATH,'F',mon,day,'S',"TJX",fno);
}
}
void __fastcall Tform_print::get_lwfilename(char* fnm,int mon,int day,int fno)
{
if(bd.yh_mode==YH_HD){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",LW_PATH,'F',mon,day,'S',"020",fno);
}else if(bd.yh_mode==YH_BT){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",LW_PATH,'F',mon,day,'S',"041",fno);
}else if(bd.yh_mode==YH_LX){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",LW_PATH,'F',mon,day,'S',"131",fno);
}else if(bd.yh_mode==YH_TJX){
sprintf(fnm,"%s%c%1x%02d%c%s.%03d",LW_PATH,'F',mon,day,'S',"TJX",fno);
}
}
void __fastcall Tform_print::del_oldfile(int mon)
{
char del_filename[70];
struct ffblk ffblk;
int done;
if( mon > 2 ) sprintf(del_filename,"%s%c%1x%s",BB_PATH,'F',mon-2,"*.*");
else sprintf(del_filename,"%s%c%1x%s",BB_PATH,'F',mon+12-2,"*.*");
done = findfirst(del_filename,&ffblk,0);
//DeleteFile(del_filename);
while (!done){
strcpy(del_filename,BB_PATH);
strcat(del_filename,ffblk.ff_name);
DeleteFile(del_filename);
done = findnext(&ffblk);
}
}
void __fastcall Tform_print::FormClose(TObject *Sender,
TCloseAction &Action)
{
delete maicon;
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==F8_KEY) { if( Button1->Enabled==true) Button1Click(NULL);}
else if(Key==F3_KEY) { if( Button2->Enabled==true) Button2Click(NULL);}
else if(Key==Esc_KEY){ if( Button3->Enabled==true) Button3Click(NULL);}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -