BOOST_FIXTURE_TEST_CASE(test7, base_fixture_t) { TStringList Lines; Lines.SetSorted(true); if (1) { Lines.SetDuplicates(dupAccept); Lines.Add(L"aaa"); Lines.Add(L"aaa"); Lines.Add(L"bbb"); BOOST_CHECK(3 == Lines.GetCount()); BOOST_CHECK(0 == Lines.IndexOf(L"aaa")); BOOST_CHECK(2 == Lines.IndexOf(L"bbb")); } Lines.Clear(); if (1) { Lines.SetDuplicates(dupIgnore); Lines.Add(L"aaa"); Lines.Add(L"aaa"); Lines.Add(L"bbb"); BOOST_CHECK(2 == Lines.GetCount()); BOOST_CHECK(1 == Lines.IndexOf(L"bbb")); } Lines.Clear(); if (1) { Lines.SetDuplicates(dupError); Lines.Add(L"aaa"); Lines.Add(L"bbb"); BOOST_CHECK_THROW(Lines.Add(L"aaa"), std::exception); } }
void __fastcall TfMain::FormClose(TObject *Sender, TCloseAction &Action) { TFile f; TStringList* sl = new(TStringList); for(int i = 0; i < lvLib->Items->Count; i++) sl->Add(lvLib->Items->Item[i]->SubItems->Strings[0] + '=' + lvLib->Items->Item[i]->SubItems->Strings[1] + '/' + lvLib->Items->Item[i]->SubItems->Strings[2]); sl->SaveToFile(ExtractFileDir(Application->ExeName) + "\\Library.lb"); sl->Clear(); sl->Add("Login="******"Pass="******"Pass="******"RememberPass=1"); else sl->Add("RememberPass=0"); sl->Add("Server=" + leServer->Text); sl->SaveToFile(ExtractFileDir(Application->ExeName) + "\\Settings.ini"); sl->~TStringList(); }
//--------------------------------------------------------------------------- void __fastcall TChatRoomForm::UpdateUserList() { TStringList *UserNames; String UserName; UserNames = NULL; if (ChatRoomUsersDestroyed || !this || !UserListBox) return; UserListBox->Items->BeginUpdate(); try { UserListBox->Clear(); UserNames = TChatRoomUsers::Instance()->GetUserNames(); for (int i = 0; i < UserNames->Count; i++) UserListBox->Items->Add(UserNames->Strings[i]); } __finally { UserListBox->Items->EndUpdate(); UserNames->Clear(); delete UserNames; } };
void TIniFile::ReadSectionNames(const wxString &Section, TStringList &Strings) { wxString N; wxString V; int I; // Assert( !! Strings , SStringsUnassignedError ); Strings.BeginUpdate(); try { Strings.Clear(); if (FFileBuffer->Count() > 0) { I = GetSectionIndex(Section); if (I != -1) { ++I; while ((I < FFileBuffer->Count()) && !IsSection (FFileBuffer->Item(I))) { N = GetName(FFileBuffer->Item(I)); if (N != EmptyStr) { Strings.Add(N); } ++I; } } } } /* ? *//* FINALLY */ catch (...) { Strings.EndUpdate(); } }
void TIniFile::ReadSections(TStringList &Strings) { long I; wxString Section; // Assert( !! Strings , SStringsUnassignedError ); Strings.BeginUpdate(); try { Strings.Clear(); if (FFileBuffer->Count() > 0) { I = 0; while ((I < FFileBuffer->Count())) { if (IsSection(FFileBuffer->Item(I))) { Section = Trim(FFileBuffer->Item(I)); Delete(Section, 0, 1); Delete(Section, Length(Section) - 1, 1); Strings.Add(Trim(Section)); } ++I; } } } /* ? *//* FINALLY */ catch (...) { Strings.EndUpdate(); } }
// --------------------------------------------------------------------------- void TClientGood::DataIn(int col, TObject *Sender) { UnicodeString s; TStringList *sld = fFindOrders->slspsk; sld->Clear(); s = DataOut(col); if (s != "") { sld->DelimitedText = s; // получаем старые данные } // вот теперь можно пробовать добавить новые данне if (fUserList->Visible) { // надо выбрать только чекнутые for (int i = 0; i < fUserList->clUsers->Count; i++) { if (fUserList->clUsers->Checked[i]) { TryAdd(sld, fUserList->clUsers->Items->Strings[i], Sender); } } } else TryAdd(sld, fConnect->curUser->login, Sender); s = sld->DelimitedText; // здесь получившиеся данные надо писать прямо в объект DataIn(col, s); }
TStringList* TCommThread::GetAvailableDevicesNames(bool IncludeSerial, bool IncludeParallel, TStringList * AvaiableDevicesNames) { TRegistry *Registro = new TRegistry(); TStringList *StringsTemp = new TStringList(); int Indice; if (AvaiableDevicesNames!=NULL) AvaiableDevicesNames->Clear(); else AvaiableDevicesNames = new TStringList(); Registro->RootKey=HKEY_LOCAL_MACHINE; if(IncludeSerial==true) { StringsTemp->Clear(); Registro->OpenKey("hardware\\devicemap\\serialcomm",false); Registro->GetValueNames(StringsTemp); for (Indice=0;Indice<StringsTemp->Count;Indice++) AvaiableDevicesNames->Add(Registro->ReadString(StringsTemp->Strings[Indice])); Registro->CloseKey(); } if(IncludeParallel==true) { StringsTemp->Clear(); Registro->OpenKey("hardware\\devicemap\\parallel ports",false); Registro->GetValueNames(StringsTemp); for (Indice=0;Indice<StringsTemp->Count;Indice++) AvaiableDevicesNames->Add(ExtractFileName(Registro->ReadString(StringsTemp->Strings[Indice]))); Registro->CloseKey(); } AvaiableDevicesNames->Sort(); delete Registro; delete StringsTemp; return AvaiableDevicesNames; }
void __fastcall TfMain::FormShow(TObject *Sender) { TStringList* sl = new(TStringList); sl->NameValueSeparator = '='; TFile f; if(f.Exists(ExtractFileDir(Application->ExeName) + "\\Library.lb")){ sl->LoadFromFile(GetCurrentDir() + "\\Library.lb"); for(int i = 0; i < sl->Count; i++){ TListItem* Item = lvLib->Items->Add(); Item->Caption = ExtractFileName(sl->Names[i]); Item->GroupID = 0; Item->SubItems->Add(sl->Names[i]); //path [0] TStringList* ss = new(TStringList); ss->NameValueSeparator = '/'; ss->Add(sl->ValueFromIndex[i]); Item->SubItems->Add(ss->Names[0]); //bookmark [1] Item->SubItems->Add(ss->ValueFromIndex[0]); //size [2] ss->~TStringList(); } } sl->Clear(); if(f.Exists(ExtractFileDir(Application->ExeName) + "\\Settings.ini")){ sl->LoadFromFile(GetCurrentDir() + "\\Settings.ini"); leLogin->Text = sl->ValueFromIndex[0]; lePass->Text = sl->ValueFromIndex[1]; if(sl->ValueFromIndex[2] == "1") cbRememberPass->Checked = true; else cbRememberPass->Checked = false; leServer->Text = sl->ValueFromIndex[3]; } sl->~TStringList(); }
/*============================================================================= *NAME :TYSIniFile::ReadStringList : *MODULE :YSIniFiles.cpp : *FUNCTION :文字列リスト読み込み処理関数です : *PROCESS :・文字列リスト読み込み処理です。 : *INPUT :const CString section :セクション名 *INPUT :const CString iname :Ident名 *INPUT :TStringList& slist :設定クラス : *RETURN :読み込み行数 : *PROGRAMMED :Y.Sasai *HISTORY : *ID -- DATE ------- NOTE ------------------------------------------------------ *00 03.02.13 Y.Sasai Ver.0.90 初期作成 */ int TYSIniFile::ReadStringList( const CString section, const CString iname, TStringList& slist ) { int result = 0; // 2003.02.13 Y.Sasai Ver.0.90 初期化だ CString ident; CString txt; slist.Clear(); // 2003.02.13 Y.Sasai Ver.0.90 全消去だ while ( true ) { ident = iname + Number[result]; // 2003.02.13 Y.Sasai Ver.0.90 Ident名作成 if ( ValueExists( section, ident ) == false ) { // 2003.02.13 Y.Sasai Ver.0.90 Ident名がなかったら… break; // 2003.02.13 Y.Sasai Ver.0.90 ぬけるぞ } txt = ReadString( section, ident, "" ); // 2003.02.13 Y.Sasai Ver.0.90 文字列読み込み slist.Add( txt ); // 2003.02.13 Y.Sasai Ver.0.90 追加だ result++; // 2003.02.13 Y.Sasai Ver.0.00 加算だ } return ( result ); // 2003.02.13 Y.Sasai Ver.0.90 おわりだ }
/* Read all Names of one Section */ void TIniFile::ReadSection(const wxString &Section, TStringList &Strings) { int I; wxString N; Strings.BeginUpdate(); Strings.Clear(); if (FFileBuffer->Count() > 0) { I = GetSectionIndex(Section); if (I != -1) { ++I; while ((I < FFileBuffer->Count()) && !IsSection (FFileBuffer->Item(I))) { N = GetName(FFileBuffer->Item(I)); if (N != EmptyStr) Strings.Add(N); ++I; } } } }
void __fastcall TFrListMail::RzToolButton1Click(TObject *Sender) { TMemoryStream *pms= new TMemoryStream(); TStringList *LS =new TStringList(); struct rMail rMail; AnsiString NewFileName; int i,viTmpMINfTurn; AnsiString vsQRaspRaspNameRTF; //Если распоряжение уже рассылалось, то не рассылать, если не имеешь на то дополнительных прав. /* vsSQLQw="SELECT Id24NameStatus FROM bm_Rasp " " WHERE Idn=:D0 ; "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value= IdRasp; Qw->Open(); if((Qw->Fields->Fields[0]->AsInteger==5448350)&&(!MainForm->flEditAllRasp)) // Id24NameStatus=5448350//На утверждении {ShowMessage(AnsiString("Это распоряжени уже разосланно на утверждение")); return; } */ //Просто не Enable кнопку рассылки /// if (pcSoglasovanieRassilka->ActivePage==tsSoglasovanie) { ///проверка на отсутствие "_Копия" и "Новый подписной индекс" StartProcedure: vsSQLQw = " SELECT TOP 1 Idn FROM bm_RaspDetail " " WHERE idRasp=:D0 AND DateDel is NULL " " AND LTRIM(RTRIM(NameRaspDetail)) LIKE '%_Копия%'; "; //? Копия_ Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); if(Qw->RecordCount>0)// { ShowMessage("Рассылка невозможна. \n В названиях подписных индексов присутствует слово '_Копия'"); return;} { if (MessageDlg("Рассылка невозможна. \n В названиях присутствует слово '_Копия'. Редактировать?",mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0)!=mrYes) {return;}else { {try{Opts.Clear();locvalues[0]=Variant(Qw->Fields->Fields[0]->AsInteger);FrBisniessMenedger->QRaspDetail->Locate("Idn",locvalues,Opts);}catch(...){};}; FrBisniessMenedger->btUpdRaspDetailClick(Sender); goto StartProcedure; } } vsSQLQw = " SELECT TOP 1 Idn, isnull(PIdn,0) FROM bm_RaspDetail " " WHERE idRasp=:D0 AND DateDel is NULL " " AND LTRIM(RTRIM(NameRaspDetail))='Новый подписной индекс' ; "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); if(Qw->RecordCount>0) { if (MessageDlg("Рассылка невозможна. \n В названиях подписных индексов присутствует 'Новый подписной индекс'. Удалить?",mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0)!=mrYes) { if (MessageDlg(" Редактировать 'Новый подписной индекс'?",mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0)!=mrYes) {return;}else { {try{Opts.Clear();locvalues[0]=Variant(Qw->Fields->Fields[0]->AsInteger);FrBisniessMenedger->QRaspDetail->Locate("Idn",locvalues,Opts);}catch(...){};}; FrBisniessMenedger->btUpdRaspDetailClick(Sender); goto StartProcedure; } }//Сделать переход к редактированию. else { int TmpIdnPIForDel,TmpIdnComplForDel; TmpIdnComplForDel=0; TmpIdnPIForDel=Qw->Fields->Fields[0]->AsInteger; TmpIdnComplForDel=Qw->Fields->Fields[1]->AsInteger; vsSQLQw = " DECLARE @Idn int; SET @Idn=:D0; " " DELETE FROM bm_RaspDetail " " WHERE Idn=@Idn OR PIdn=@Idn; "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=TmpIdnPIForDel; Qw->ExecSQL(); if(TmpIdnComplForDel>0) { vsSQLQw= " DECLARE @IdInsMod int, @Idn int, @CostWithNDS money, @CostWithoutNDS money, @CostMINWithNDS money, @CostMINWithoutNDS money" " SET @Idn=:D0" " SET @IdInsMod=:D1" " SELECT @CostWithoutNDS=SUM(CostWithoutNDS),@CostWithNDS=SUM(CostWithNDS),@CostMINWithoutNDS=SUM(CostMINWithoutNDS),@CostMINWithNDS=SUM(CostMINWithNDS)" " FROM bm_RaspDetail" " WHERE fType=2 AND PIdn =@Idn and DateDel is null;" " UPDATE bm_RaspDetail SET" " CostWithNDS =@CostWithNDS " " ,CostWithoutNDS =@CostWithoutNDS " " ,CostMINWithNDS =@CostMINWithNDS " " ,CostMINWithoutNDS =@CostMINWithoutNDS " " ,DateMod = GetDate() " " ,IdMod =@IdInsMod " " WHERE Idn= @Idn ;" ; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=TmpIdnComplForDel; Qw->Parameters->Items[1]->Value=PermisHdr.KeyUserStartProgramm;; Qw->ExecSQL(); } ShowMessage("Подписной индекс с наименованием 'Новый подписной индекс' удален.\n Рассылка запустится повторно. "); goto StartProcedure; // return; } } //Проверка что поле Состав ПИ заполненно у всех. vsSQLQw = " SELECT top 1 Idn FROM bm_RaspDetail WHERE IdRasp=:D0 AND DateDel IS NULL and fType=2 and CompositionOfPI=0 "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); if((Qw->RecordCount>0)&&((QListRaspVidRasp->AsInteger==4742151)||(QListRaspVidRasp->AsInteger==4742153))) {ShowMessage(AnsiString("В распоряжении не у всех подписных индексов указан \"Cостав ПИ\".\n Вам необходимо заполнить это поле.")); return; } ///Проверка наличия кодов Axapta vsSQLQw = " SELECT Idn FROM bm_RaspDetail WHERE IdRasp=:D0 AND DateDel IS NULL AND fType=3 AND (ItemIdAxapta ='' OR ItemIdAxapta is NULL OR IdnAxapta is NULL)"; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); if(Qw->RecordCount>0){ShowMessage(AnsiString("Не у всех номенклатур проставлены коды Axapta. Рассылка распоряжения на утверждение невозможна.")); return;} /// //Проверка заполненности всех полей комментариев и распоряжени QListRasp->Close(); QListRasp->Parameters->Items[0]->Value=IdRasp; QListRasp->Open(); //Проверка наличия ценового комитета. vsSQLQw = " SELECT Idn FROM bm_RaspDetail WHERE IdRasp=:D0 AND DateDel IS NULL "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); //if(QListRasp->Active==false){QListRasp->Open(); } //int ttt= QListRaspVidRasp->AsInteger; // int yyy=Qw->RecordCount; if((Qw->RecordCount>0)&&((QListRaspVidRasp->AsInteger==4742151)||(QListRaspVidRasp->AsInteger==4742153))) { vsSQLQw = " SELECT Idn FROM bm_ListMail WHERE IdRasp=:D0 AND DateDel IS NULL AND fType=3/*Ценовой комитет*/ "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); if(Qw->RecordCount==0){ShowMessage(AnsiString("Не заполнен список ценового комитета. Рассылка распоряжения на утверждение невозможна.")); return;} } // /* //Проверка заполненности всех полей комментариев и распоряжени QListRasp->Close(); QListRasp->Parameters->Items[0]->Value=IdRasp; QListRasp->Open(); */ QListComments->Close(); QListComments->Parameters->Items[0]->Value=IdRasp; QListComments->Open(); fAllEntering=true;//Флаг проверки заполненности всех полей //Проверка распоряжения if((QListRaspId256TypeRasp->AsInteger)==0) fAllEntering=false; //Тип распоряжения // Есть всегда if(Trim(QListRaspId24City->AsInteger)==0) fAllEntering=false; //Город if(Trim(QListRaspRaspNameRTF->AsString)=="") fAllEntering=false; //Наименование распоряжения if(Trim(QListRaspContentTargetRTF->AsString)=="") fAllEntering=false; // Цели распоряжения if(Trim(QListRaspId24NameStatuser->AsString)=="") fAllEntering=false; // (Предлагаю:, Приказываю: и прочее) if(Trim(QListRaspContentRTF->AsString)=="") fAllEntering=false; // Содержание распоряжения if((QListRaspEmplDol->AsInteger)==0) fAllEntering=false; //Должность утверждающего if((QListRaspIdEmplUsers->AsInteger)==0) fAllEntering=false; // ФИО утверждающего /* ///проверка на отсутствие "_Копия" и "Новый подписной индекс" vsSQLQw = " SELECT Idn FROM bm_RaspDetail " " WHERE idRasp=:D0 AND DateDel is NULL " " AND ((LTRIM(RTRIM(NameRaspDetail))='Новый подписной индекс') OR (LTRIM(RTRIM(NameRaspDetail)) LIKE '%_Копия%')); "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); if(Qw->RecordCount>0) { ShowMessage("Рассылка невозможна. \n В названиях подписных индексов присутствуют 'Новый подписной индекс' или '_Копия'"); return;} */ /// QAddFilesEXEL->Close(); QAddFilesEXEL->Parameters->Items[0]->Value=IdRasp; QAddFilesEXEL->Open(); if ((QListRaspVidRasp->AsInteger==4742152/*"Распоряжение о выпуске нового продукта" После набора статистики переделать под таблицу прав*/)&&(QAddFilesEXEL->RecordCount<1))//Продукт { ShowMessage("Рассылка невозможна. \n Необходимо указать прикрепленный файл EXEL"); return;//Наличие прикрепленного файла } /// /// QAddFilesDOC->Close(); QAddFilesDOC->Parameters->Items[0]->Value=IdRasp; QAddFilesDOC->Open(); if ((QListRaspVidRasp->AsInteger==4742440/*"Техническое задание на разработу в Отдел разработки и сопровождения программных продуктов" После набора статистики переделать под таблицу прав*/)&&(QAddFilesDOC->RecordCount<1))//Продукт { ShowMessage("Рассылка невозможна. \n Необходимо указать прикрепленный файл DOC"); return;//Наличие прикрепленного файла } /// //Проверка распоряжения if ((QListRaspVidRasp->AsInteger==4742151)||((QListRaspVidRasp->AsInteger==4742153)))//Цена { //Проверка по комментариям Тип цены. 1-Базовая;2-Бюджетная;3-Со скидкой. Стандартная;4-Со скидкой. Расчётная if ((QListCommentsTypeCost->AsInteger==3)||((QListCommentsTypeCost->AsInteger==4))) { if(((QListCommentsId256NameDiscount->AsInteger)==0)&&(QListCommentsTypeCost->AsInteger==3)) fAllEntering=false; //Код из Lib256 с Видом скидки if(((QListCommentsId256NameAction ->AsInteger)==0)&&(QListCommentsTypeCost->AsInteger==4)) fAllEntering=false; //Код из Lib256 с Видом скидки if((QListCommentsId256CostDiscount->AsInteger)==0) fAllEntering=false; //Код из Lib256 с описанием размера скидки if((QListCommentsDateRealization->AsDateTime)==TDateTime(1900, 01, 01)) fAllEntering=false; //Срок реализации if(Trim(QListCommentsPrognozEffects->AsString)=="") fAllEntering=false; //Прогноз эффективности if(Trim(QListCommentsGrantingConditions->AsString)=="") fAllEntering=false; // Условия скидки //Пооверяем CheckBox'ы // vsSQLQw = " SELECT (isnull(A.id256TextActionPurpose,0)+isnull(A.id256TextGroupClients,0)+isnull(A.id256TextAdvancementChannel,0))id256Text,A.TypeFiеld " vsSQLQw = " SELECT DISTINCT A.TypeFiеld " " FROM bm_CheckLists A " " LEFT JOIN bm_CommentsCheckLists B ON B.IdCheckLists=A.Idn " " LEFT JOIN bm_Comments C ON C.Idn= B.IdComments " " WHERE C.idRasp=:D0 AND B.DateDel is NULL "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); if (Qw->RecordCount<3) fAllEntering=false; //Если заполнено меньше 3 CheckBox'ов Qw->Close(); /// if (QListCommentsTypeCost->AsInteger==4) //Проверяем соответствуют ли продукты в таблицы прогнозируемых затрат и у подписных индексов { // при типе распоряжения 4-Со скидкой. расчетное- bool fProduce=true;//Флаг соответствия продуктов. true-соответствуют vsSQLQw = " SELECT DISTINCT IdProduce " " FROM bm_PredictedDebit " " WHERE idRasp=:D0 AND DateDel is NULL "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value=IdRasp; Qw->Open(); vsSQLQw = " SELECT DISTINCT idAdvProduceClass " " FROM bm_RaspDetail " " WHERE idRasp=:D0 AND DateDel is NULL "; Qw2->Close();Qw2->SQL->Clear();Qw2->SQL->Add(vsSQLQw); Qw2->Parameters->Items[0]->Value=IdRasp; Qw2->Open(); if(Qw->RecordCount!=Qw2->RecordCount) fProduce=false; while(Qw->Eof==false) { vsSQLQw = " SELECT TOP 1 idAdvProduceClass " " FROM bm_RaspDetail " " WHERE idRasp=:D0 AND idAdvProduceClass=:D1 AND DateDel is NULL "; Qw2->Close();Qw2->SQL->Clear();Qw2->SQL->Add(vsSQLQw); Qw2->Parameters->Items[0]->Value=IdRasp; Qw2->Parameters->Items[1]->Value=Qw->Fields->Fields[0]->AsInteger; Qw2->Open(); if(Qw2->RecordCount>0) fProduce=false; Qw->Next();} Qw->Close(); Qw2->Close(); if (!fProduce) { if(MessageDlg("Продукты в подписных индексах и в прогнозируемых затратах не соответствуют. Продолжить рассылку?",mtInformation,TMsgDlgButtons()<<mbYes<<mbNo,0)!=mrYes) {Abort();return;}} }//if (QListCommentsTypeCost->AsInteger==4) }//if ((QListCommentsTypeCost->AsInteger==3)||((QListCommentsTypeCost->AsInteger==4))) /// }//if (QListRaspVidRasp->AsInteger==0)//Цена /// /// if (!fAllEntering) { ShowMessage(AnsiString("Не все поля заполнены. Рассылка распоряжения на утверждение невозможна.")); //--- первая часть марлезонского балета if ((QListRaspId256TypeRasp->AsInteger)==0) {ShowMessage("Не выбран тип распоряжения...");} if (Trim(QListRaspRaspNameRTF->AsString)=="") {ShowMessage("Не указано наименование распоряжения...");} if (Trim(QListRaspContentTargetRTF->AsString)=="") {ShowMessage("Не указана цель распоряжения...");} if (Trim(QListRaspId24NameStatuser->AsString)=="") {ShowMessage("Не указано ''Предлагаю:'', ''Приказываю:'' и прочее...");} if (Trim(QListRaspContentRTF->AsString)=="") {ShowMessage("Не указано ''Содержание распоряжения''...");} if ((QListRaspEmplDol->AsInteger)==0) {ShowMessage("Не указана ''Должность утверждающего''...");} if ((QListRaspIdEmplUsers->AsInteger)==0) {ShowMessage("Не указаны ''ФИО утверждающего''...");} //--- вторая часть марлезонского балета if (((QListCommentsId256NameDiscount->AsInteger)==0)&&(QListCommentsTypeCost->AsInteger==3)) {ShowMessage("Не указан ''Код из Lib256 с Видом скидки''...");} if (((QListCommentsId256NameAction ->AsInteger)==0)&&(QListCommentsTypeCost->AsInteger==4)) {ShowMessage("Не указан ''Код из Lib256 с Видом скидки''...");} if ((QListCommentsId256CostDiscount->AsInteger)==0) {ShowMessage("Не указан ''Код из Lib256 с описанием размера скидки''...");} if ((QListCommentsDateRealization->AsDateTime)==TDateTime(1900, 01, 01)) {ShowMessage("Не указан ''Срок реализации''...");} if (Trim(QListCommentsPrognozEffects->AsString)=="") {ShowMessage("Не указан ''Прогноз эффективности''...");} if (Trim(QListCommentsGrantingConditions->AsString)=="") {ShowMessage("Не указаны ''Условия скидки''...");} //конец балета - занавес return; } ///Проверка дробности цены QNE->Close(); QNE->Parameters->Items[0]->Value=IdRasp; QNE->Open(); QNE->First(); while(QNE->Eof==false) {if((((QNECostWithNDS->AsCurrency*100)%1)>0)||(((QNECostWithoutNDS->AsCurrency*100)%1)>0)) {ShowMessage("Сохранение невозможно. \n Сперва приведите значения цен с НДС и без НДС для номенклатурных единиц к целым копейкам."); return; } QNE->Next();} /////////////////////////// /////Запись текста письма в БД vsSQLQw = "DECLARE @IdRasp int, @PermisHdr int;"//, @MailPathAddFiles text, @MailText text ; " //Нельзя создавать переменную типа text " SET @IdRasp =:D0; SET @PermisHdr =:D1;"// SET @MailPathAddFiles =:D2; SET @MailText =:D3; " " UPDATE bm_ListMail SET MailPathAddFiles=:D2, MailText=:D3, DateMod=GetDate(), IdMod= @PermisHdr WHERE IdRasp=@IdRasp "; Qw->Close(); Qw->SQL->Clear(); Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value = IdRasp; Qw->Parameters->Items[1]->Value = PermisHdr.KeyUserStartProgramm; LS->Clear(); pms->Position=0; LS->SaveToStream(pms); pms->Position=0; Qw->Parameters->Items[2]->LoadFromStream(pms,ftMemo); pms->Clear(); pms->Position=0; reContentRTF->Lines->SaveToStream(pms); pms->Position=0; Qw->Parameters->Items[3]->LoadFromStream(pms,ftMemo); pms->Clear(); Qw->ExecSQL(); Qw->Close(); LS->Clear(); RzPanel300->Visible=true; rMail=MainForm->CreateMail(IdRasp,1); ///// рассылаем распоряжение лицам с минимальным порядком очереди fTyrn, но не 0 vsSQLQw=" SELECT MIN(fTurn) FROM bm_ListMail" " WHERE DateDel is null" " AND IdRasp=:D0" " AND ( fType=0 OR fType=2) " " AND fTurn>0" " AND (fResault=0 OR fResault is NULL )"; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value= IdRasp; Qw->Open(); viTmpMINfTurn=Qw->Fields->Fields[0]->AsInteger; QEmplUserDol2->First(); while((QEmplUserDol2->Eof==false)) { if ((Trim(QEmplUserDol2Mail->AsString) != "") && (QEmplUserDol2fTurn->AsInteger == viTmpMINfTurn)) { rMail.ResiveName = QEmplUserDol2FamIO->AsString; rMail.ResiveMailAddress = QEmplUserDol2Mail->AsString; vsSQLQw = "UPDATE bm_ListMail SET DateSheet = GetDate() " "WHERE Idn = :D0;"; Qw->Close(); Qw->SQL->Clear(); Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value = QEmplUserDol2Idn->AsString; Qw->ExecSQL(); MainForm->SendEmail(&rMail); } QEmplUserDol2->Next(); } //Рассылаем замещающим утверждающих QEmplUserDol3->First(); while((QEmplUserDol3->Eof==false)) {if ((Trim(QEmplUserDol3Mail->AsString)!="")&&(QEmplUserDol3fTurn->AsInteger==viTmpMINfTurn)) { rMail.ResiveName=QEmplUserDol3FamIO->AsString; rMail.ResiveMailAddress=QEmplUserDol3Mail->AsString; MainForm->SendEmail(&rMail); } QEmplUserDol3->Next(); } //// ///Выставляем распоряжению состояние-в рассылке- vsSQLQw="UPDATE bm_Rasp SET " " Id24NameStatus=5448350"//На утверждении " ,DateSheet= GetDate() " " ,IdSheet=:D0 " " WHERE Idn=:D1 ; "; Qw->Close();Qw->SQL->Clear();Qw->SQL->Add(vsSQLQw); Qw->Parameters->Items[0]->Value= PermisHdr.KeyUserStartProgramm; Qw->Parameters->Items[1]->Value= IdRasp; Qw->ExecSQL(); /// RzPanel300->Visible=false; ShowMessage("Рассылка писем по листу согласования начата."); }// if (pcSoglasovanieRassilka->ActivePage=tsSoglasovanie) if (pcSoglasovanieRassilka->ActivePage==tsRassilka) { MainForm->Sheet(IdRasp); } }
//--------------------------------------------------------------------------- void __fastcall TFormOptsOplata::UpdateTable(TStringGrid* pTab) { ClearTable(pTab); int i,j; TStringList* listIDStud = new TStringList; TStringList* listIDOpts = new TStringList; listIDOpts->Clear(); listIDStud->Clear(); ZMySqlQuery->SQL->Clear(); ZMySqlQuery->SQL->Add("SELECT id FROM "+opts.DBStudTable+" WHERE deleted=0 AND grpid="+ToStr(AnsiString(IDGroup))); ZMySqlQuery->Active=true; for (i=1;i<=ZMySqlQuery->RecordCount;i++) { ZMySqlQuery->RecNo=i; listIDStud->Add(AnsiString(ZMySqlQuery->Fields->FieldByNumber(1)->AsString.ToInt())); } AnsiString IDOptsStr; for (i=0; i<listIDStud->Count; i++) { ZMySqlQuery->SQL->Clear(); ZMySqlQuery->SQL->Add("SELECT idopts FROM "+opts.DBPayFacts+" WHERE deleted=0 AND idstud="+ToStr(listIDStud->Strings[i])); ZMySqlQuery->Active=true; for (j=1; j<=ZMySqlQuery->RecordCount;j++) { ZMySqlQuery->RecNo=j; IDOptsStr = ZMySqlQuery->Fields->FieldByNumber(1)->AsString; if (listIDOpts->IndexOf(IDOptsStr)==-1) listIDOpts->Add(IDOptsStr); } } int numCurRow=0; listIDs->Clear(); listIDs->Add("NULL"); listRealIDs->Clear(); listRealIDs->Add("NULL"); for (j=0; j<listIDOpts->Count; j++) { ZMySqlQuery->SQL->Clear(); ZMySqlQuery->SQL->Add("SELECT id,idgroup,datestart,dateend,commoncountmoney FROM "+opts.DBPayOpts+" WHERE deleted=0 AND id="+ToStr(listIDOpts->Strings[j])+" ORDER BY datestart"); ZMySqlQuery->Active=true; for (i=1;i<=ZMySqlQuery->RecordCount;i++) { ZMySqlQuery->RecNo=i; numCurRow++; pTab->RowCount=numCurRow+1; listIDs->Add(AnsiString(ZMySqlQuery->Fields->FieldByNumber(1)->AsString.ToInt())); pTab->Cells[0][numCurRow]=numCurRow; pTab->Cells[1][numCurRow]=WCGetTitleForKeyNum(GROUPS,ZMySqlQuery->Fields->FieldByNumber(2)->AsString.ToInt()); pTab->Cells[2][numCurRow]=GetPeriodStr(ZMySqlQuery->Fields->FieldByNumber(3)->AsString,ZMySqlQuery->Fields->FieldByNumber(4)->AsString); pTab->Cells[3][numCurRow]=ZMySqlQuery->Fields->FieldByNumber(5)->AsString; pTab->Refresh(); } } delete listIDOpts; delete listIDStud; StrGridOptsClick(StrGridOpts); }
//执行任务 bool __fastcall BeginJob( int JobMode, //工作模式.1:本地文件模式;2:FTP文件模式 AnsiString ListFileName, //列表文件名 AnsiString BillName, //话单类型名称 AnsiString DBName, //数据库连接名 AnsiString TableName, //表名 AnsiString LogFileName, //日志文件名 AnsiString TempPath, //临时目录 bool TransFieldValue, //是否对字段值进行翻译 int MaxError, //导入时允许的最大错误数 bool VerifyFile, //是否对文件进行格式检查 AnsiString FTPServer, //已配置好的FTP服务器名称,FTP文件模式 AnsiString DirList, //取文件的目录列表 int FTPRetryCount //列FTP文件时允许的最大重试次数 ) { SaveLog(("开始运行任务."\ "\n话单类型:" + BillName + "\n数据库连接:" + DBName + "\n导入到表:" + TableName + "\n日志文件:" + LogFileName + "\n导入数据库允许的最大错误数:" + IntToStr(MaxError) + "\n" "\n临时文件放置在:" + TempPath + "驱动器\n" ).c_str()); if(JobMode == 1) { SaveLog(("话单文件列表是" + ListFileName + ".\n").c_str()); } else if(JobMode == 2) { SaveLog(("搜索目录列表是" + DirList + "\n" + "FTP服务器:" + FTPServer).c_str()); } bool Result = false; frmMain = NULL; TStringList * FileList = NULL; TIdFTP * IdFTP = NULL; try { frmMain = new TfrmMain(Application); if(TempPath != "") { if(!DirectoryExists(TempPath) && !CreateDir(TempPath)) SaveLog(("指定的临时文件夹无效,已改为使用默认的临时文件夹:" + frmMain->TempDirectory + "\n").c_str()); else { if(TempPath.SubString(TempPath.Length(),1) != "\\") TempPath = TempPath + "\\"; frmMain->TempDirectory = TempPath; } } if(!frmMain->DBConfig->IsDBNameExists(DBName)) throw new Exception("在配置文件中找不到" + DBName + "的配置信息"); frmExportToDB = new TfrmExportToDB(NULL); frmExportToDB->txtDBServer->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Server"); if(frmExportToDB->txtDBServer->Text == "") throw new Exception("没有为" + DBName + "配置服务器地址"); frmExportToDB->cbxDBType->ItemIndex = frmExportToDB->cbxDBType->Items->IndexOf( frmMain->DBConfig->GetDBAttributeValue(DBName,"DBType")); if(frmExportToDB->cbxDBType->ItemIndex < 0) { throw new Exception("为" + DBName + "配置的数据库类型不正确"); } FileList = new TStringList; if(JobMode == 1) { FileList->LoadFromFile(ListFileName); for(int n = FileList->Count - 1;n > -1;n--) { if(FileList->Strings[n] == "") FileList->Delete(n); } } else //FTP模式 { if(!frmMain->FTPConfig->IsFTPNameExists(FTPServer)) { throw new Exception("在FTP配置文件中找不到指定的FTP服务器"); } IdFTP = new TIdFTP(NULL); IdFTP->Host = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Server"); try { IdFTP->Port = StrToInt(frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Port")); } catch(...) { IdFTP->Port = 21; } IdFTP->Username = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"UserName"); IdFTP->Password = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Password",true); IdFTP->Passive = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Mode").UpperCase() == "PASV"; AnsiString FTPString = "ftp://" + frmMain->FTPConfig->EncryFTPString(IdFTP->Username) + ":" + frmMain->FTPConfig->EncryFTPString(IdFTP->Password) + "@" + IdFTP->Host + ":" + IntToStr(IdFTP->Port); AnsiString PasvString; if(IdFTP->Passive) PasvString = "|PASV|"; else PasvString = "||"; int ErrCount = 0; while(true) { AnsiString Status; TStringList * FTPDirList = new TStringList; AnsiString CurFTPPath = ""; AnsiString SearchFileName = ""; try { if(IdFTP->Connected()) IdFTP->Disconnect(); Status = "连接FTP服务器" + IdFTP->Host; SaveLog((Status + "\n").c_str()); IdFTP->Connect(true,FTPTimeout); Status = "获取FTP文件列表"; SaveLog((Status + "\n").c_str()); FTPDirList->Clear(); FTPDirList->LoadFromFile(DirList); AnsiString FileName; for(int n = FTPDirList->Count - 1;n > -1;n--) { if(FTPDirList->Strings[n] == "") FTPDirList->Delete(n); } FileList->Clear(); if(FTPDirList->Count == 0) FTPDirList->Add(""); for(int n = 0;n < FTPDirList->Count;n++) { CurFTPPath = FTPDirList->Strings[n]; if(CurFTPPath == "") { CurFTPPath = "/"; SearchFileName = ""; } else { int pos = StrRScan(CurFTPPath.c_str(),"/",-1); if(pos > -1) { SearchFileName = CurFTPPath.SubString(pos + 2,CurFTPPath.Length() - pos - 1); CurFTPPath = CurFTPPath.SubString(1,pos + 1); } else { SaveLog(("搜索路径[" + CurFTPPath + "]不正确,已跳过该行\n").c_str()); continue; } } Status = "获取文件列表" + CurFTPPath + SearchFileName; try { IdFTP->ChangeDir(CurFTPPath); } catch(Exception * E) { if(E->Message.Pos("No such file or directory.") > 0) { SaveLog(("搜索路径[" + CurFTPPath + "]不正确,服务器上没有找到该目录,已放弃对该目录的搜索\n").c_str()); continue; } else { throw new Exception(E->Message); } } if(SearchFileName != "" && SearchFileName.Pos("*") < 1 && SearchFileName.Pos("?") < 1) { //检查SearchFileName在FTP上是否是目录 IdFTP->List(NULL,"",true); for(int k = 0;k < IdFTP->DirectoryListing->Count;k++) { FileName = IdFTP->DirectoryListing->Items[k]->FileName; if(FileName == "." || FileName == "..") continue; if(FileName.LowerCase() == SearchFileName.LowerCase() && IdFTP->DirectoryListing->Items[k]->ItemType == ditDirectory) //SearchFileName是一个目录 { CurFTPPath = CurFTPPath + FileName + "/"; SearchFileName = ""; IdFTP->ChangeDir(CurFTPPath); break; } } } IdFTP->List(NULL,SearchFileName,true); int FileCount = 0; for(int k = 0;k < IdFTP->DirectoryListing->Count;k++) { FileName = IdFTP->DirectoryListing->Items[k]->FileName; if(FileName == "." || FileName == ".." || IdFTP->DirectoryListing->Items[k]->ItemType == ditDirectory) //目录 continue; FileList->Add(FTPString + CurFTPPath + PasvString + FileName); ++FileCount; } SaveLog((CurFTPPath + SearchFileName + " 找到" + IntToStr(FileCount) + "个文件").c_str()); } delete IdFTP; IdFTP = NULL; delete FTPDirList; FTPDirList = NULL; SaveLog(("共搜索到" + IntToStr(FileList->Count) + "个文件.\n").c_str()); for(int n = 0;n < FileList->Count;n++) { SaveLog(("找到文件:" + GetFullFTPFileName(FileList->Strings[n])).c_str()); } break; } catch(Exception * E) { ++ErrCount; if((FTPRetryCount > 0 && ErrCount > FTPRetryCount) || (FTPRetryCount == 0 && ErrCount > 1000)) { if(FTPDirList != NULL) { delete FTPDirList; FTPDirList = NULL; } ProcessExitCode = 5; throw new Exception(Status + "发生错误:" + E->Message); } else { SaveLog((Status + "发生错误:" + E->Message + " 重试" + IntToStr(ErrCount) + "\n").c_str()); } } } } frmExportToDB->txtDBUserName->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"UserName"); frmExportToDB->txtDBPassword->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Password",true); frmExportToDB->cbxDataBases->Items->Add(frmMain->DBConfig->GetDBAttributeValue(DBName,"DataBase")); frmExportToDB->cbxDataBases->ItemIndex = 0; frmExportToDB->txtDBPort->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Port"); frmExportToDB->txtTableName->Text = TableName; frmExportToDB->txtMaxError->Text = IntToStr(MaxError); frmExportToDB->cbxTransFieldValue->Checked = TransFieldValue; if(frmExportToDB->LoadFileList(FileList,BillName)) { if(SlentMode) { if(!frmExportToDB->ManualStartJob()) { if(frmExportToDB->TermByUser) { ProcessExitCode = 98; throw new Exception("任务被用户中止"); } else { throw new Exception("发生错误"); } } } else { frmExportToDB->btnStartClick(NULL); frmExportToDB->ShowModal(); } Result = true; } else { ProcessExitCode = 5; throw new Exception("加载文件列表失败"); } } catch(Exception * E) { ShowErrorMessage(Application->Handle,(E->Message).c_str(),false,99); if(ProcessExitCode == 0) ProcessExitCode = 99; Result = false; } SaveLog("*****************任务结束.*******************"); if(IdFTP != NULL) { delete IdFTP; IdFTP = NULL; } if(FileList != NULL) { delete FileList; FileList = NULL; } if(frmExportToDB != NULL) { delete frmExportToDB; frmExportToDB = NULL; } if(frmMain != NULL) { delete frmMain; frmMain = NULL; } return Result; }
// --------------------------------------------------------------------------- TClientOrder::TClientOrder() { listOfGoods = new TList(); sgZak = fFindOrders->sgo; sgGoo = fFindOrders->sgg; changed = fFindOrders->cbZakazChanged; clmanagers = fFindOrders->frSpisokManagers->CheckListBox1; clnotes = fFindOrders->frSpisokNotes->CheckListBox1; int row = sgZak->Row; UnicodeString beginDate, endDate, orderdata; beginDate = FormatDateTime("yyyymmdd000000", fFindOrders->DateTimePicker1->DateTime); endDate = FormatDateTime("yyyymmdd235959", fFindOrders->DateTimePicker2->DateTime); // здесь надо вызвать функцию сервера "Найти заказ по точному номеру" number = sgZak->Cells[0][row]; // номер то нужен!!! из строки orderdata = ClientModule1->ServerMethods1Client->FindOrders(beginDate, endDate, number); slo = new TStringList(); slo->StrictDelimiter = true; slo->Delimiter = '|'; slo->DelimitedText = orderdata; date = slo->Strings[1]; vntr = slo->Strings[2]; agent = slo->Strings[3]; otvets = slo->Strings[4]; managers = slo->Strings[5]; sms = slo->Strings[6]; mobile = slo->Strings[7]; notes = slo->Strings[8]; typePriceKod = slo->Strings[9]; slo->Clear(); String s = "Номер заказа=" + number; s += "|Дата=" + date; s += "|Внутренний заказ=" + vntr; s += "|Контрагент=" + agent; s += "|Ответственный=" + otvets; s += "|Менеджеры=" + managers; s += "|КолвоSMS=" + sms; s += "|Мобтел=" + mobile; s += "|Записки=" + notes; s += "|КодТипаЦен=" + typePriceKod; slo->DelimitedText = s; // Получаем строку с информацией о товарных строках goodsarray = ClientModule1->ServerMethods1Client->FindGoods(number, beginDate, endDate); TStringList *sl = fFindOrders->sl; sl->Clear(); sl->DelimitedText = goodsarray; sgGoo->ColCount = slg->Count; int Ccount = slg->Count; beginCountOfGoods = (sl->Count / Ccount); // заполняем поля товарных строк for (int i = 0, j = 0; i < beginCountOfGoods; i++) { TClientGood *g = new TClientGood(); // создаем товарную строку TStringList *s = new TStringList(); // создаем список строк // формируем список строк товарной строки из большого стринглиста for (int k = 0; k < Ccount; k++) s->Add(sl->Strings[j++]); g->DataIn(s); // вносим данные в объект товарной строки listOfGoods->Add(g); // добавляем товарную строку в список заказа g->index = i; } // сохраняем позицию последней товарной строки fFindOrders->StartRemakeRow = listOfGoods->Count + 1; };