std::string WriteCodeFile::GetChild(NodeInfo* parent, NodeInfo* node) { auto parent_name = parent->cd.className+std::to_string(parent->uuid); auto class_name = node->cd.className; auto child_name = class_name+std::to_string(node->uuid); auto e_type = node->cd.type; auto type = Tools::GetEnumToString(e_type); m_FileBuff += FileCreateNode(e_type, child_name, class_name); switch (e_type) { case NodeType::Action: case NodeType::Condition: case NodeType::Decorate: m_FileBuff += FileSetAttr(node->cd, child_name); break; default: m_FileBuff += FileSetAbort(node->abort_type, child_name); break; } m_FileBuff += FileAddChild(child_name, parent_name); std::string ret = "successs!!!"; for (int i = 0; i<node->child_list.size(); i++) { ret = GetChild(node, node->child_list[i]); if (ret != "successs!!!") break; } return ret; }
//--------------------------------------------------------------------------- void TFormPici::GenOriginalRecordFile(void) { extern char *xlsHead; extern String g_curPiciFile,g_piciProductDesc,g_piciNumber,g_piciOperator,g_piciProductLine,g_piciProductCode,g_piciCheckweigher,g_piciProductName; extern TDateTime piciStartTime,piciOverTime; if(FileExists(g_curPiciFile)) { int fileAttr= FileGetAttr(g_curPiciFile); if((fileAttr & faReadOnly)!=0)FileSetAttr(g_curPiciFile,fileAttr&~faReadOnly); } FILE *f=fopen(g_curPiciFile.c_str(),"wb"); if(!f)return; fprintf(f,"%s\r\n",xlsHead); fprintf(f,"<center><strong><font size=4>%03d原始记录</font></strong></center>",g_CurPiciProductID); fprintf(f,"<table width=640 border=1>\r\n"); fprintf(f,"<tr align=left><td>产品编号:</td><td colspan=2>%s</td></tr>",g_piciProductCode.c_str()); fprintf(f,"<tr align=left><td>产品名称:</td><td colspan=2>%s</td></tr>",g_piciProductName.c_str()); fprintf(f,"<tr align=left><td>产品描述:</td><td colspan=2>%s</td></tr>",g_piciProductDesc.c_str()); fprintf(f,"<tr align=left><td>生产线号:</td><td colspan=2>%s</td></tr>",g_piciProductLine.c_str()); fprintf(f,"<tr align=left><td>检重秤号:</td><td colspan=2>%s</td></tr>",g_piciCheckweigher.c_str()); fprintf(f,"<tr align=left><td>批次号:</td><td colspan=2>%s</td></tr>",g_piciNumber.c_str()); fprintf(f,"<tr align=left><td>操作员:</td><td colspan=2>%s</td></tr>",g_piciOperator.c_str()); #if 0 fprintf(f,"<tr align=left><td>件数:</td><td colspan=2>%d</td></tr>",g_PiciCounter); #else if(g_PiciCapacity==DefaultPiciCapacity) { fprintf(f,"<tr align=left><td>件数:</td><td colspan=2></td></tr>"); } else { fprintf(f,"<tr align=left><td>件数:</td><td colspan=2>%d</td></tr>",g_PiciCapacity); } #endif fprintf(f,"<tr align=left><td>批次开始时间:</td><td colspan=2>%s</td></tr>",DateTimeToStr(piciStartTime).c_str()); fprintf(f,"<tr align=left><td>批次结束时间:</td><td colspan=2>%s</td></tr>",DateTimeToStr(piciOverTime).c_str()); if(g_PiciCounter>0) { fprintf(f,"<tr><td colspan=3></td></tr>"); fprintf(f,"<tr bgcolor=#DFDFDF align=center><td>序号</td><td>称重值</td><td>时间</td></tr>\r\n"); for(int i=0;i<g_PiciCounter;i++) { fprintf(f,"<tr align=center><td>%03d</td><td>%3.03f%s</td><td>%s</td></tr>\r\n",i+1,weight_values[i],strDefaultUnit.c_str(),DateTimeToStr(weight_times[i]).c_str()); } } fprintf(f,"</table></body></html>"); fclose(f); FileSetAttr(g_curPiciFile, faReadOnly); }
void TFormPici::GenStatFile(void) { extern char *xlsHead; char pbuf[128]; extern String g_curStatFile,g_piciNumber,g_piciOperator,g_piciProductLine,g_piciProductCode,g_piciCheckweigher,g_piciProductName; extern TDateTime piciStartTime,piciOverTime; if(FileExists(g_curStatFile)) { int fileAttr= FileGetAttr(g_curStatFile); if((fileAttr & faReadOnly)!=0)FileSetAttr(g_curStatFile,fileAttr&~faReadOnly); } FILE *f=fopen(g_curStatFile.c_str(),"wb"); if(!f)return; fprintf(f,"%s\r\n",xlsHead); fprintf(f,"<center><strong><font size=4>%03d统计报表</font></strong></center>",g_CurPiciProductID); fprintf(f,"<table width=640 border=1>\r\n"); fprintf(f,"<tr align=center><td align=right bgcolor=#DFDFDF>生产线号:</td><td>%s</td><td align=right bgcolor=#DFDFDF>产品编号:</td><td>%s</td><td bgcolor=#DFDFDF align=right>批次号:</td><td>%s</td></tr>\r\n",g_piciProductLine.c_str(),g_piciProductCode.c_str(),g_piciNumber.c_str()); fprintf(f,"<tr align=center><td align=right bgcolor=#DFDFDF>检重秤号:</td><td>%s</td><td align=right bgcolor=#DFDFDF>产品名称:</td><td>%s</td><td bgcolor=#DFDFDF align=right>操作员:</td><td>%s</td></tr>\r\n",g_piciCheckweigher.c_str() ,g_piciProductName.c_str() ,g_piciOperator.c_str()); fprintf(f,"<tr><td colspan=6></td></tr>"); fprintf(f,"<tr bgcolor=#DFDFDF align=center><td colspan=2>全部产品</td><td colspan=2>合格产品</td><td colspan=2>不合格产品</td></tr>\r\n"); fprintf(f,"<tr align=center><td align=right>数量合计:</td><td>%dpcs</td><td align=right>数量合计:</td><td>%dpcs</td><td align=right>数量合计:</td><td>%dpcs</td></tr>\r\n",g_PiciCounter,qualified_counter,g_PiciCounter-qualified_counter); fprintf(f,"<tr align=center><td align=right>重量总计:</td><td>%s%s</td><td align=right>重量总计:</td><td>%s%s</td><td align=right>重量总计:</td><td>%s%s</td></tr>\r\n",Edit_totalWeight->Text.c_str(),strDefaultUnit.c_str(),Edit_totalWeight1->Text.c_str(),strDefaultUnit.c_str(),WeightToStr(totalweight-totalweight1).c_str(),strDefaultUnit.c_str()); int ll_count=0; for(int i=0;i<g_PiciCounter;i++){if(weight_values[i]<weight_ll)ll_count++;} fprintf(f,"<tr align=center><td align=right>标准偏差:</td><td>%s%s</td><td align=right>标准偏差:</td><td>%s%s</td><td align=right>超下限数量合计:</td><td>%dpcs</td></tr>\r\n",Edit_StandardDeviation->Text.c_str(),strDefaultUnit.c_str(),Edit_StandardDeviation1->Text.c_str(),strDefaultUnit.c_str(),ll_count); fprintf(f,"<tr align=center><td align=right>平均值:</td><td>%s%s</td><td align=right>平均值:</td><td>%s%s</td><td align=right>超上限数量合计:</td><td>%dpcs</td></tr>\r\n",Edit_Average->Text.c_str(),strDefaultUnit.c_str(),Edit_Average1->Text.c_str(),strDefaultUnit.c_str(),g_PiciCounter-qualified_counter-ll_count); fprintf(f,"<tr align=center><td align=right>最小值:</td><td>%s%s</td><td align=right>最小值:</td><td>%s%s</td><td colspan=2></td></tr>\r\n",Edit_MinWeight->Text.c_str(),strDefaultUnit.c_str(),Edit_MinWeight1->Text.c_str(),strDefaultUnit.c_str()); fprintf(f,"<tr align=center><td align=right>最大值:</td><td>%s%s</td><td align=right>最大值:</td><td>%s%s</td><td colspan=2></td></tr>\r\n",Edit_MaxWeight->Text.c_str(),strDefaultUnit.c_str(),Edit_MaxWeight1->Text.c_str(),strDefaultUnit.c_str()); fprintf(f,"<tr align=center><td align=right>合格率:</td><td>%s%%</td><td colspan=4></td></tr>\r\n",Edit_QualifiedRate->Text.c_str()); fprintf(f,"<tr><td colspan=6></td></tr>"); fprintf(f,"<tr align=center><td align=right>批次开始时间:</td><td>%s</td><td colspan=4></td></tr>\r\n",DateTimeToStr(piciStartTime).c_str()); fprintf(f,"<tr align=center><td align=right>批次结束时间:</td><td>%s</td><td colspan=4></td></tr>\r\n",DateTimeToStr(piciOverTime).c_str()); fprintf(f,"</table></body></html>"); fclose(f); FileSetAttr(g_curStatFile, faReadOnly); }
//=========================================================================== // バッファの出力 //=========================================================================== int __fastcall TAttacheCaseFileDecrypt1::OutputBuffer (char *output_buffer, int buff_size, TFileStream *&fsOut, bool &fOpen, TStringList *FileList, int &FileIndex, __int64 *FileSizeList, int *FileAttrList, int *FileAgeList) { //返値 0=<:成功, -1:エラー, -2:ユーザーキャンセル int res; int rest; String FileName, FilePath, DirPath; char read_buffer[LARGE_BUF_SIZE]; //コンペア用 char temp_buffer[LARGE_BUF_SIZE]; //データ詰める用 //---------------------------------------------------------------------- // 解凍されたバッファがすべて書き込まれるまでループ //---------------------------------------------------------------------- // ※0バイトファイルなどの場合もあるので // 一度はループに入れるようにした。 //while (buff_size > 0 && !Terminated) { do{ // ファイルが開かれていないならオープンする if ( fOpen == false ) { for (FileIndex; FileIndex < FileList->Count; FileIndex++) { FileName = FileList->Strings[FileIndex]; FilePath = OutDirPath + FileName; //---------------------------------------------------------------------- // ディレクトリ //---------------------------------------------------------------------- if (FileName.IsPathDelimiter(FileList->Strings[FileIndex].Length()) == true) { if ( fConfirmOverwirte == true && fOverwirteYesToAll == false ) { if (DirectoryExists(FilePath) == true) { //同名フォルダーの上書き確認メッセージダイアログ MsgText = LoadResourceString(&Msgdecrypt::_MSG_CONFIRM_OVER_WRITE_SAME_DIR)+"\n"+FilePath; Synchronize(&PostConfirmOverwriteMessageForm); if ( MsgReturnVal == mrYes ) { //上書きOKなのでFilePathはそのまま } else if ( MsgReturnVal == mrNo ) { //別名保存でFilePath文字列が書き換えられてきている FilePath = MsgReturnPath; } else if ( MsgReturnVal == mrYesToAll ) { //すべて上書き(YesToAll) fOverwirteYesToAll = true; } else if ( MsgReturnVal == mrCancel ) { //キャンセル goto LabelStop; } } } //----------------------------------- //暗号化ファイル自身への復号はNG //(ex: ..\hoge -> ..\hoge) //----------------------------------- if ( FilePath.CompareIC(AtcFilePath) == 0 ) { //'暗号化ファイル自身にファイルまたはフォルダーを復号することはできません。'+#13+ //'復号処理を中止します。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_NOT_OVERWRITE_MYSELF)+"\n"+FilePath; MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); //エラー goto LabelError; } //フォルダの生成 ForceDirectories(FilePath); //タイムスタンプのセット //FileSetDate(FilePath, FileAge[i]); //フォルダはタイムスタンプをセットしない //属性のセット FileSetAttr(FilePath, FileAttrList[FileIndex]); if ( fOpenFolder == true && fOpenFolderOnce == false ) { ShellExecuteW(NULL, L"open", L"EXPLORER.EXE", FilePath.c_str(), FilePath.c_str(), SW_NORMAL); //脆弱性対策(ver.2.70) //ShellExecuteW(NULL, L"explore", FilePath.c_str(), NULL, NULL, SW_NORMAL); //こちらでも正常動作したようだ fOpenFolderOnce = true; } continue; } //---------------------------------------------------------------------- // ファイル //---------------------------------------------------------------------- else { if (fConfirmOverwirte == true && fOverwirteYesToAll == false ) { DirPath = ExtractFileDir(FilePath); if (DirectoryExists(DirPath) == false) { ForceDirectories(DirPath); } if (FileExists(FilePath) == true) { //同名ファイルの上書き確認メッセージダイアログ MsgText = LoadResourceString(&Msgdecrypt::_MSG_CONFIRM_OVER_WRITE_SAME_FILE)+"\n"+FilePath; Synchronize(&PostConfirmOverwriteMessageForm); if ( MsgReturnVal == mrYes ) { //上書きOKなのでFilePathはそのまま } else if ( MsgReturnVal == mrNo ) { //別名保存でFilePath文字列が書き換えられてきている FilePath = MsgReturnPath; } else if ( MsgReturnVal == mrYesToAll ) { //すべて上書き(YesToAll) fOverwirteYesToAll = true; } else if ( MsgReturnVal == mrCancel ) { //キャンセル goto LabelStop; } } } //----------------------------------- //暗号化ファイル自身への復号はNG //(ex: ..\hoge -> ..\hoge) //----------------------------------- if ( FilePath.CompareIC(AtcFilePath) == 0) { //'暗号化ファイル自身にファイルまたはフォルダーを復号することはできません。'+#13+ //'復号処理を中止します。'; MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_NOT_OVERWRITE_MYSELF)+"\n"+FilePath; MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); //エラー goto LabelError; } try { // TODO: ver.2.75以前で「複数ファイルは一つの暗号化ファイルにまとめる」に // チェックして暗号化されていた場合の対処 DirPath = ExtractFileDir(FilePath); if (DirectoryExists(DirPath) == false) { ForceDirectories(DirPath); //親フォルダーがなければ強制的に生成する } //出力するファイルを開く fsOut = new TFileStream(FilePath, fmCreate); } catch(...) { //保存する先のファイルが開けません。他のアプリケーションが使用中の可能性があります。 MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_OUT_FILE_OPEN)+"\n"+FilePath; MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); goto LabelError; } fOpen = true; if (FileSizeList[FileIndex] == 0) { // 0バイトファイル? delete fsOut; fOpen = false; FileSetAttr(FilePath, (int)FileAttrList[FileIndex]); //属性のセット FileSetDate(FilePath, (int)FileAgeList[FileIndex]); //タイムスタンプのセット //関連付けられたアプリケーションでファイルを開く if ( fTempOpenFile == true ) { ShellExecuteW(NULL, L"open", FilePath.c_str(), NULL, NULL, SW_NORMAL); } } else{ break; } } }//end for; }//end if (fOpen == false); //----------------------------------- // 開いたファイルに書き込む //----------------------------------- if ( fOpen == true ) { //----------------------------------- // 通常書き込み //----------------------------------- if (fsOut->Size + buff_size < FileSizeList[FileIndex]) { if (fsOut->Write(output_buffer, buff_size) != buff_size) { goto LabelReadWriteError; } else { buff_size = 0; } } else { //クローズするファイルパス(書き込んでいたファイルパス) FileName = FileList->Strings[FileIndex]; FilePath = OutDirPath + FileName; rest = FileSizeList[FileIndex] - fsOut->Size; if (fsOut->Write(output_buffer, rest) != rest) { goto LabelReadWriteError; } else { buff_size -= rest; //残ったバッファを前に詰める for (int i = 0; i < LARGE_BUF_SIZE; i++) { if (i < buff_size) { temp_buffer[i] = output_buffer[rest+i]; } else{ temp_buffer[i] = 0; } } memcpy(output_buffer, temp_buffer, LARGE_BUF_SIZE); delete fsOut; fOpen = false; FileSetAttr(FilePath, (int)FileAttrList[FileIndex]); //属性のセット FileSetDate(FilePath, (int)FileAgeList[FileIndex]); //タイムスタンプのセット //関連付けられたアプリケーションでファイルを開く if ( fTempOpenFile == true ) { ShellExecuteW(NULL, L"open", FilePath.c_str(), NULL, NULL, SW_NORMAL); } FileIndex++; } } } else { //もう開くファイルがない break; //----------------------------------- }//end if ( fOpen == true ); //----------------------------------- }while (buff_size > 0 && !Terminated);//end while ( buf_size > 0 ); //---------------------------------------------------------------------- //出力バッファはきれいにしておく for (int i = 0; i < LARGE_BUF_SIZE; i++) { output_buffer[i] = 0; } if ( Terminated == true ) { goto LabelStop; } //成功 return(0); //----------------------------------- //読み書きエラー LabelReadWriteError: //'保存する先のファイルに書き込めません。復号できません。' MsgText = LoadResourceString(&Msgdecrypt::_MSG_ERROR_OUT_FILE_WRITE)+"\n"+fsOut->FileName; MsgType = mtError; MsgButtons = TMsgDlgButtons() << mbOK; MsgDefaultButton = mbOK; Synchronize(&PostConfirmMessageForm); if ( fOpen == true ) { delete fsOut; fOpen = false; } return(-1); //----------------------------------- //エラー LabelError: //ここのエラーは直前でメッセージを提示してから来ている if ( fOpen == true ) { delete fsOut; fOpen = false; } return(-1); //----------------------------------- //ユーザーキャンセル LabelStop: if ( fOpen == true ) { delete fsOut; fOpen = false; } return(-2); }
//--------------------------------------------------------------------------- void TFormPici::GenFinalReportFile(void) { extern char *xlsHead; extern String g_curFinalReport,g_piciProductDesc,g_piciNumber,g_piciOperator,g_piciProductLine,g_piciProductCode,g_piciCheckweigher,g_piciProductName; extern TDateTime piciStartTime,piciOverTime; if(FileExists(g_curFinalReport)) { int fileAttr= FileGetAttr(g_curFinalReport); if((fileAttr & faReadOnly)!=0)FileSetAttr(g_curFinalReport,fileAttr&~faReadOnly); } FILE *f=fopen(g_curFinalReport.c_str(),"wb"); if(!f)return; fprintf(f,"%s\r\n",xlsHead); fprintf(f,"<center><strong><font size=4>%03d最终报表</font></strong></center>\r\n",g_CurPiciProductID); fprintf(f,"<table width=640 border=1>\r\n"); fprintf(f,"<tr align=left><td colspan=2>产品编号:</td><td colspan=4>%s</td></tr>\r\n",g_piciProductCode.c_str()); fprintf(f,"<tr align=left><td colspan=2>产品名称:</td><td colspan=4>%s</td></tr>\r\n",g_piciProductCode.c_str()); fprintf(f,"<tr align=left><td colspan=2>产品描述:</td><td colspan=4>%s</td></tr>\r\n",g_piciProductDesc.c_str()); fprintf(f,"<tr align=left><td colspan=2>生产线号:</td><td colspan=4>%s</td></tr>\r\n",g_piciProductLine.c_str()); fprintf(f,"<tr align=left><td colspan=2>检重秤号:</td><td colspan=4>%s</td></tr>\r\n",g_piciCheckweigher.c_str()); fprintf(f,"<tr align=left><td colspan=2>批次号:</td><td colspan=4>%s</td></tr>\r\n",g_piciNumber.c_str()); fprintf(f,"<tr align=left><td colspan=2>操作员:</td><td colspan=4>%s</td></tr>\r\n",g_piciOperator.c_str()); #if 0 fprintf(f,"<tr align=left><td colspan=2>件数:</td><td colspan=4>%d</td></tr>",g_PiciCounter); #else if(g_PiciCapacity==DefaultPiciCapacity) { fprintf(f,"<tr align=left><td colspan=2>件数:</td><td colspan=4></td></tr>"); } else { fprintf(f,"<tr align=left><td colspan=2>件数:</td><td colspan=4>%d</td></tr>",g_PiciCapacity); } #endif fprintf(f,"<tr align=left><td colspan=2>批次开始时间:</td><td colspan=4>%s</td></tr>",DateTimeToStr(piciStartTime).c_str()); fprintf(f,"<tr align=left><td colspan=2>批次结束时间:</td><td colspan=4>%s</td></tr>",DateTimeToStr(piciOverTime).c_str()); fprintf(f,"<tr><td colspan=6></td></tr>"); MyQuery->SQL->Text="select `configs`.*,`catalog`.* from `configs`,`catalog` where `catalog`.id="+IntToStr(g_CurPiciProductID); MyQuery->Active=true; float f_pdsd_1=CALC_PDSU(MyQuery->FieldByName("dev_ctcd")->AsFloat,MyQuery->FieldByName("dev_passrate")->AsFloat); float f_pdsd_2=CALC_PDSU(MyQuery->FieldByName("dev_ctcd")->AsFloat,MyQuery->FieldByName("pass_rate")->AsFloat); fprintf(f,"<tr align=center><td width=100 align=right>秤台长度:</td><td colspan=2>%0.03fmm</td><td width=100 align=right>通过率:</td><td colspan=2>%0.03fpcs/min</td></tr>",MyQuery->FieldByName("dev_ctcd")->AsFloat,MyQuery->FieldByName("dev_passrate")->AsFloat); fprintf(f,"<tr align=center><td width=100 align=right>轴间距离:</td><td colspan=2>%0.03fmm</td><td width=100 align=right>皮带速度:</td><td colspan=2>%0.3fm/min</td></tr>",MyQuery->FieldByName("dev_zjjl")->AsFloat,f_pdsd_1); fprintf(f,"<tr align=center><td width=100 align=right>轴直径:</td><td colspan=2>%0.03fmm</td><td width=100 align=right>实际频率:</td><td colspan=2>%0.03fHz</td></tr>",MyQuery->FieldByName("dev_zzj")->AsFloat,50.0*f_pdsd_1/MyQuery->FieldByName("dev_zdpdsd")->AsFloat); fprintf(f,"<tr><td colspan=6></td></tr>"); fprintf(f,"<tr align=center><td width=100 align=right>最大皮带速度:</td><td colspan=2>%0.03fm/min</td><td width=100 align=right>最大称重:</td><td colspan=2>%0.03f%s</td></tr>",MyQuery->FieldByName("dev_zdpdsd")->AsFloat,weight_kg2default(MyQuery->FieldByName("dev_zdcz")->AsFloat),strDefaultUnit.c_str()); fprintf(f,"<tr align=center><td width=100 align=right>最小皮带速度:</td><td colspan=2>%0.03fm/min</td><td width=100 align=right>最小称重:</td><td colspan=2>%0.03f%s</td></tr>",MyQuery->FieldByName("dev_zxpdsd")->AsFloat,weight_kg2default(MyQuery->FieldByName("dev_zxcz")->AsFloat),strDefaultUnit.c_str()); fprintf(f,"<tr align=center><td width=100 align=right>最大频率:</td><td colspan=2>%0.03fHz</td><td width=100 align=right>显示分度:</td><td colspan=2>%0.03f%s</td></tr>",MyQuery->FieldByName("dev_zdpl")->AsFloat,weight_kg2default(MyQuery->FieldByName("dev_xsfd")->AsFloat),strDefaultUnit.c_str()); fprintf(f,"<tr align=center><td width=100 align=right>最小频率:</td><td colspan=2>%0.03fHz</td><td width=100 align=right>显示单位:</td><td colspan=2>%s</td></tr>",MyQuery->FieldByName("dev_zxpl")->AsFloat,(MyQuery->FieldByName("dev_autozero")->AsInteger)?"g":"kg"); fprintf(f,"<tr><td colspan=6></td></tr>"); fprintf(f,"<tr align=center><td align=right>目标值:</td><td colspan=2>%0.03f%s</td><td align=right>通过率:</td><td colspan=2>%0.03fpcs/min</td></tr>\r\n",weight_tp,strDefaultUnit.c_str(),MyQuery->FieldByName("pass_rate")->AsFloat); fprintf(f,"<tr align=center><td align=right>下限值:</td><td colspan=2>%0.03f%s</td><td align=right>皮带速度:</td><td colspan=2>%0.03fm/min</td></tr>\r\n",weight_ll,strDefaultUnit.c_str(),f_pdsd_2); fprintf(f,"<tr align=center><td align=right>上限值:</td><td colspan=2>%0.03f%s</td><td align=right>修正系数:</td><td colspan=2>%0.03fm/min</td></tr>\r\n",weight_ul,strDefaultUnit.c_str(),MyQuery->FieldByName("correction_factor")->AsFloat); fprintf(f,"<tr><td colspan=6></td></tr>"); fprintf(f,"<tr align=center><td align=right>剔除等待时间:</td><td colspan=2>%ds</td><td align=right>统计范围:</td><td colspan=2>%0.03f%%</td></tr>\r\n",MyQuery->FieldByName("tc_waittime")->AsInteger,MyQuery->FieldByName("stat_range")->AsFloat*100); fprintf(f,"<tr align=center><td align=right>剔除动作时间:</td><td colspan=2>%ds<td align=right>包装长度:</td><td colspan=2>%0.03fmm</td></tr>\r\n",MyQuery->FieldByName("tc_actiontime")->AsInteger,MyQuery->FieldByName("pack_length")->AsFloat); fprintf(f,"<tr align=center><td align=right>称重显示模式:</td><td colspan=2>%s<td align=right>预置皮重:</td><td colspan=2>%0.03f%s</td></tr>\r\n",(MyQuery->FieldByName("gross_or_net")->AsInteger==0)?"Gross":"Net",weight_kg2default(MyQuery->FieldByName("preset_tare")->AsFloat),strDefaultUnit.c_str()); fprintf(f,"<tr><td colspan=6></td></tr>"); fprintf(f,"<tr bgcolor=#DFDFDF align=center><td colspan=2>全部产品</td><td colspan=2>合格产品</td><td colspan=2>不合格产品</td></tr>\r\n"); fprintf(f,"<tr align=center><td align=right>数量合计:</td><td>%dpcs</td><td align=right>数量合计:</td><td>%dpcs</td><td align=right>数量合计:</td><td>%dpcs</td></tr>\r\n",g_PiciCounter,qualified_counter,g_PiciCounter-qualified_counter); fprintf(f,"<tr align=center><td align=right>重量总计:</td><td>%s%s</td><td align=right>重量总计:</td><td>%s%s</td><td align=right>重量总计:</td><td>%s%s</td></tr>\r\n",Edit_totalWeight->Text.c_str(),strDefaultUnit.c_str(),Edit_totalWeight1->Text.c_str(),strDefaultUnit.c_str(),WeightToStr(totalweight-totalweight1).c_str(),strDefaultUnit.c_str()); int ll_count=0; for(int i=0;i<g_PiciCounter;i++){if(weight_values[i]<weight_ll)ll_count++;} fprintf(f,"<tr align=center><td align=right>标准偏差:</td><td>%s%s</td><td align=right>标准偏差:</td><td>%s%s</td><td align=right>超下限数量合计:</td><td>%dpcs</td></tr>\r\n",Edit_StandardDeviation->Text.c_str(),strDefaultUnit.c_str(),Edit_StandardDeviation1->Text.c_str(),strDefaultUnit.c_str(),ll_count); fprintf(f,"<tr align=center><td align=right>平均值:</td><td>%s%s</td><td align=right>平均值:</td><td>%s%s</td><td align=right>超上限数量合计:</td><td>%dpcs</td></tr>\r\n",Edit_Average->Text.c_str(),strDefaultUnit.c_str(),Edit_Average1->Text.c_str(),strDefaultUnit.c_str(),g_PiciCounter-qualified_counter-ll_count); fprintf(f,"<tr align=center><td align=right>最小值:</td><td>%s%s</td><td align=right>最小值:</td><td>%s%s</td><td colspan=2></td></tr>\r\n",Edit_MinWeight->Text.c_str(),strDefaultUnit.c_str(),Edit_MinWeight1->Text.c_str(),strDefaultUnit.c_str()); fprintf(f,"<tr align=center><td align=right>最大值:</td><td>%s%s</td><td align=right>最大值:</td><td>%s%s</td><td colspan=2></td></tr>\r\n",Edit_MaxWeight->Text.c_str(),strDefaultUnit.c_str(),Edit_MaxWeight1->Text.c_str(),strDefaultUnit.c_str()); fprintf(f,"<tr align=center><td align=right>合格率:</td><td>%s%%</td><td colspan=4></td></tr>\r\n",Edit_QualifiedRate->Text.c_str()); fprintf(f,"<tr><td colspan=6></td></tr>"); MyQuery->Active=false; fprintf(f,"</table></body></html>"); fclose(f); FileSetAttr(g_curFinalReport, faReadOnly); }