//--------------------------------------------------------------------------- AnsiString __fastcall TFormReportBUCityMounth::GetPeriodStr(TDateTime dt) { AnsiString Str=""; unsigned short year,mounth,day; dt.DecodeDate(&year,&mounth,&day); switch (mounth) { case 1: Str+="¤нварь ";break; case 2: Str+="ферваль ";break; case 3: Str+="март ";break; case 4: Str+="апрель ";break; case 5: Str+="май ";break; case 6: Str+="июнь ";break; case 7: Str+="июль ";break; case 8: Str+="август ";break; case 9: Str+="сент¤брь ";break; case 10: Str+="окт¤брь ";break; case 11: Str+="но¤брь ";break; case 12: Str+="декабрь ";break; default: Str+="??? ";break; } Str+=AnsiString(year); Str+="г."; return Str; }
void __fastcall TfrmRaporMenu::SpeedButton6Click(TObject *Sender) { TDateTime Tarih; unsigned short nGun, nAy, nYil; SpeedButton3->Flat = false; SpeedButton4->Flat = false; SpeedButton5->Flat = false; SpeedButton6->Flat = true; Kilit(); Edit_Tarih1->Enabled = true; Edit_Tarih2->Enabled = true; SpeedButton1->Enabled = true; SpeedButton2->Enabled = true; Edit_Tarih1->Color = clWhite; Edit_Tarih2->Color = clWhite; Edit_MusteriNo1->Color = clWhite; Edit_MusteriNo2->Color = clWhite; Edit1->Color = clWhite; Edit3->Color = clWhite; Edit2->Color = clWhite; Edit4->Color = clWhite; Tarih = Tarih.CurrentDate(); Tarih.DecodeDate(&nYil, &nAy, &nGun); Edit_Tarih1->Text = "01.01."+IntToStr(nYil); Edit_Tarih2->Text = "31.12."+IntToStr(nYil); RaporBayragi = 3; }
String DateToLongString(TDateTime DT){ char *months[]={ " января ", " февраля ", " марта ", " апреля ", " мая ", " июня ", " июля ", " августа ", " сентября ", " октября ", " ноября ", " декабря " }; unsigned short year, month, day; DT.DecodeDate(&year, &month, &day); String Res = IntToStr(day) + months[month-1] + IntToStr(year) + " года"; return Res; }
TDateTime localToUTC( TDateTime t ) { /* void __fastcall DecodeDate(unsigned short* year, unsigned short* month, unsigned short* day) const; void __fastcall DecodeTime(unsigned short* hour, unsigned short* min, unsigned short* sec, unsigned short* msec) const; */ unsigned short year; unsigned short month; unsigned short day; unsigned short hour; unsigned short min; unsigned short sec; unsigned short msec; t.DecodeDate( &year, &month, &day ); t.DecodeTime( &hour, &min, &sec, &msec ); bool isDst = false; unsigned int yoffset = year - 2006; // base year for DST figures if ( year < 2006 || yoffset >= sizeof( DSTStart ) / sizeof( int ) ) { static dstShown = 0; if (dstShown != calendarYear) ShowMessage( "DST conversions only defined from 2006 until 2011!" ); dstShown = calendarYear; return t; } if ( month > 3 && month < 10 ) { isDst = true; } else if ( month == 3 && day >= DSTStart[ yoffset ] ) { isDst = true; } else if ( month == 10 && day < DSTEnd[ yoffset ] ) { isDst = true; } if ( isDst ) { t -= TDateTime( 1, 0, 0, 0 ); } return t; }
bool TDateTime::SetCurrentDateTime(TDateTime &rhs) { #ifndef WIN32 unsigned int year=0, month=0, day=0, hour=0, min=0, sec=0; rhs.DecodeDate( year, month, day ); rhs.DecodeTime( hour, min, sec ); //更新操作系统时间 struct tm tmSys; time_t tSys; tmSys.tm_year = year - 1900; tmSys.tm_mon = month - 1; tmSys.tm_mday = day; tmSys.tm_sec = sec; tmSys.tm_min = min; tmSys.tm_hour = hour; tmSys.tm_isdst = -1; if ( ( tSys = mktime( &tmSys ) ) == -1 ) { DBG_PRN("info", ("mktime error!!")); return false; } if ( stime( &tSys ) == -1) { DBG_PRN("info", ("stime error!!")); return false; } //更RTC时间 // unsigned char tmp[3]; // int datetime; // datetime = rhs.FormatInt(YYYYMMDD); // int2bin(&tmp[0], (datetime / 10000) % 100, 1); // int2bin(&tmp[1], (datetime / 100) % 100, 1); // int2bin(&tmp[2], datetime % 100, 1); // SetRTCData(tmp); // // datetime = rhs.FormatInt(HHMMSS); // int2bin(&tmp[0], (datetime / 10000) % 100, 1); // int2bin(&tmp[1], (datetime / 100) % 100, 1); // int2bin(&tmp[2], datetime % 100, 1); // SetRTCTime(tmp); #endif return true; }
bool TDateTime::SetCurrentDate(TDateTime &rhs) { #ifndef WIN32 unsigned int year=0, month=0, day=0, hour=0, min=0, sec=0; rhs.DecodeDate(year, month, day); TDateTime curDateTime = CurrentDateTime(); curDateTime.DecodeTime( hour, min, sec ); TDateTime tmpDateTime(year, month, day, hour, min, sec); return SetCurrentDateTime(tmpDateTime); #endif return true; }
//--------------------------------------------------------------------------- void TSessionLog::DoAddToSelf(TLogLineType AType, const UnicodeString & ALine) { if (FTopIndex < 0) { FTopIndex = 0; } TStringList::AddObject(ALine, static_cast<TObject *>(reinterpret_cast<void *>(static_cast<size_t>(AType)))); FLoggedLines++; if (LogToFile()) { if (FFile == nullptr) { OpenLogFile(); } if (FFile != nullptr) { #if defined(__BORLANDC__) UnicodeString Timestamp = FormatDateTime(L" yyyy-mm-dd hh:nn:ss.zzz ", Now()); UTF8String UtfLine = UTF8String(UnicodeString(LogLineMarks[Type]) + Timestamp + Line + "\n"); fwrite(UtfLine.c_str(), UtfLine.Length(), 1, (FILE *)FFile); #else unsigned short Y, M, D, H, N, S, MS; TDateTime DateTime = Now(); DateTime.DecodeDate(Y, M, D); DateTime.DecodeTime(H, N, S, MS); UnicodeString dt = FORMAT(L" %04d-%02d-%02d %02d:%02d:%02d.%03d ", Y, M, D, H, N, S, MS); UnicodeString Timestamp = dt; UTF8String UtfLine = UTF8String(UnicodeString(LogLineMarks[AType]) + Timestamp + ALine + "\n"); fprintf_s(static_cast<FILE *>(FFile), "%s", const_cast<char *>(AnsiString(UtfLine).c_str())); #endif } } }
//--------------------------------------------------------------------------- void TSessionLog::DoAddStartupInfo(TSessionData * Data) { TGuard Guard(FCriticalSection); BeginUpdate(); auto cleanup = finally([&]() { DeleteUnnecessary(); EndUpdate(); }); { #define ADF(S, ...) DoAdd(llMessage, FORMAT(S, ##__VA_ARGS__), MAKE_CALLBACK(TSessionLog::DoAddToSelf, this)); if (Data == nullptr) { AddSeparator(); ADF(L"NetBox %s (OS %s)", FConfiguration->GetVersionStr().c_str(), FConfiguration->GetOSVersionStr().c_str()); std::auto_ptr<THierarchicalStorage> Storage(FConfiguration->CreateStorage(false)); assert(Storage.get()); ADF(L"Configuration: %s", Storage->GetSource().c_str()); if (0) { typedef BOOL (WINAPI * TGetUserNameEx)(EXTENDED_NAME_FORMAT NameFormat, LPWSTR lpNameBuffer, PULONG nSize); HINSTANCE Secur32 = LoadLibrary(L"secur32.dll"); TGetUserNameEx GetUserNameEx = (Secur32 != nullptr) ? reinterpret_cast<TGetUserNameEx>(GetProcAddress(Secur32, "GetUserNameExW")) : nullptr; wchar_t UserName[UNLEN + 1]; unsigned long UserNameSize = LENOF(UserName); if ((GetUserNameEx == nullptr) || !GetUserNameEx(NameSamCompatible, (LPWSTR)UserName, &UserNameSize)) { wcscpy(UserName, L"<Failed to retrieve username>"); } ADF(L"Local account: %s", UserName); } unsigned short Y, M, D, H, N, S, MS; TDateTime DateTime = Now(); DateTime.DecodeDate(Y, M, D); DateTime.DecodeTime(H, N, S, MS); UnicodeString dt = FORMAT(L"%02d.%02d.%04d %02d:%02d:%02d", D, M, Y, H, N, S); // ADF(L"Login time: %s", FormatDateTime(L"dddddd tt", Now()).c_str()); ADF(L"Working directory: %s", GetCurrentDir().c_str()); // ADF(L"Command-line: %s", CmdLine.c_str()); // ADF(L"Time zone: %s", GetTimeZoneLogString().c_str()); ADF(L"Login time: %s", dt.c_str()); AddSeparator(); } else { if (0) { ADF(L"Session name: %s (%s)", Data->GetSessionName().c_str(), Data->GetSource().c_str()); } ADF(L"Host name: %s (Port: %d)", Data->GetHostNameExpanded().c_str(), Data->GetPortNumber()); if (0) { ADF(L"User name: %s (Password: %s, Key file: %s)", Data->GetUserNameExpanded().c_str(), BooleanToEngStr(!Data->GetPassword().IsEmpty()).c_str(), BooleanToEngStr(!Data->GetPublicKeyFile().IsEmpty()).c_str()) } ADF(L"Tunnel: %s", BooleanToEngStr(Data->GetTunnel()).c_str()); if (Data->GetTunnel()) { ADF(L"Tunnel: Host name: %s (Port: %d)", Data->GetTunnelHostName().c_str(), Data->GetTunnelPortNumber()); if (0) { ADF(L"Tunnel: User name: %s (Password: %s, Key file: %s)", Data->GetTunnelUserName().c_str(), BooleanToEngStr(!Data->GetTunnelPassword().IsEmpty()).c_str(), BooleanToEngStr(!Data->GetTunnelPublicKeyFile().IsEmpty()).c_str()); ADF(L"Tunnel: Local port number: %d", Data->GetTunnelLocalPortNumber()); } } ADF(L"Transfer Protocol: %s", Data->GetFSProtocolStr().c_str()); ADF(L"Code Page: %d", Data->GetCodePageAsNumber()); wchar_t * PingTypes = L"-NC"; TPingType PingType; intptr_t PingInterval; if (Data->GetFSProtocol() == fsFTP) { PingType = Data->GetFtpPingType(); PingInterval = Data->GetFtpPingInterval(); } else { PingType = Data->GetPingType(); PingInterval = Data->GetPingInterval(); } ADF(L"Ping type: %s, Ping interval: %d sec; Timeout: %d sec", UnicodeString(PingTypes[PingType]).c_str(), PingInterval, Data->GetTimeout()); ADF(L"Proxy: %s%s", ProxyMethodList[Data->GetProxyMethod()], Data->GetProxyMethod() == pmSystem ? ::Format(L" (%s)", ProxyMethodList[Data->GetActualProxyMethod()]).c_str() : L"") if (Data->GetProxyMethod() != ::pmNone) { ADF(L"HostName: %s (Port: %d); Username: %s; Passwd: %s", Data->GetProxyHost().c_str(), Data->GetProxyPort(), Data->GetProxyUsername().c_str(), BooleanToEngStr(!Data->GetProxyPassword().IsEmpty()).c_str()); if (Data->GetProxyMethod() == pmTelnet) { ADF(L"Telnet command: %s", Data->GetProxyTelnetCommand().c_str()); } if (Data->GetProxyMethod() == pmCmd) { ADF(L"Local command: %s", Data->GetProxyLocalCommand().c_str()); } } wchar_t const * BugFlags = L"+-A"; if (Data->GetUsesSsh()) { ADF(L"SSH protocol version: %s; Compression: %s", Data->GetSshProtStr().c_str(), BooleanToEngStr(Data->GetCompression()).c_str()); ADF(L"Bypass authentication: %s", BooleanToEngStr(Data->GetSshNoUserAuth()).c_str()); ADF(L"Try agent: %s; Agent forwarding: %s; TIS/CryptoCard: %s; KI: %s; GSSAPI: %s", BooleanToEngStr(Data->GetTryAgent()).c_str(), BooleanToEngStr(Data->GetAgentFwd()).c_str(), BooleanToEngStr(Data->GetAuthTIS()).c_str(), BooleanToEngStr(Data->GetAuthKI()).c_str(), BooleanToEngStr(Data->GetAuthGSSAPI()).c_str()); if (Data->GetAuthGSSAPI()) { ADF(L"GSSAPI: Forwarding: %s; Server realm: %s", BooleanToEngStr(Data->GetGSSAPIFwdTGT()).c_str(), Data->GetGSSAPIServerRealm().c_str()); } ADF(L"Ciphers: %s; Ssh2DES: %s", Data->GetCipherList().c_str(), BooleanToEngStr(Data->GetSsh2DES()).c_str()); UnicodeString Bugs; for (intptr_t Index = 0; Index < BUG_COUNT; ++Index) { Bugs += UnicodeString(BugFlags[Data->GetBug(static_cast<TSshBug>(Index))])+(Index<BUG_COUNT-1?L",":L""); } ADF(L"SSH Bugs: %s", Bugs.c_str()); ADF(L"Return code variable: %s; Lookup user groups: %c", Data->GetDetectReturnVar() ? UnicodeString(L"Autodetect").c_str() : Data->GetReturnVar().c_str(), BugFlags[Data->GetLookupUserGroups()]); ADF(L"Shell: %s", Data->GetShell().IsEmpty() ? UnicodeString(L"default").c_str() : Data->GetShell().c_str()); ADF(L"EOL: %d, UTF: %d", Data->GetEOLType(), Data->GetNotUtf()); ADF(L"Clear aliases: %s, Unset nat.vars: %s, Resolve symlinks: %s", BooleanToEngStr(Data->GetClearAliases()).c_str(), BooleanToEngStr(Data->GetUnsetNationalVars()).c_str(), BooleanToEngStr(Data->GetResolveSymlinks()).c_str()); ADF(L"LS: %s, Ign LS warn: %s, Scp1 Comp: %s", Data->GetListingCommand().c_str(), BooleanToEngStr(Data->GetIgnoreLsWarnings()).c_str(), BooleanToEngStr(Data->GetScp1Compatibility()).c_str()); } if (Data->GetFSProtocol() == fsSFTP) { UnicodeString Bugs; for (int Index = 0; Index < SFTP_BUG_COUNT; Index++) { Bugs += UnicodeString(BugFlags[Data->GetSFTPBug(static_cast<TSftpBug>(Index))])+(Index<SFTP_BUG_COUNT-1 ? L"," : L""); } ADF(L"SFTP Bugs: %s", Bugs.c_str()); ADF(L"SFTP Server: %s", Data->GetSftpServer().IsEmpty()? UnicodeString(L"default").c_str() : Data->GetSftpServer().c_str()); } if (Data->GetFSProtocol() == fsFTP) { UnicodeString Ftps; switch (Data->GetFtps()) { case ftpsImplicit: Ftps = L"Implicit TLS/SSL"; break; case ftpsExplicitSsl: Ftps = L"Explicit SSL"; break; case ftpsExplicitTls: Ftps = L"Explicit TLS"; break; default: assert(Data->GetFtps() == ftpsNone); Ftps = L"None"; break; } ADF(L"FTP: FTPS: %s; Passive: %s [Force IP: %c]; MLSD: %c [List all: %c]", Ftps.c_str(), BooleanToEngStr(Data->GetFtpPasvMode()).c_str(), BugFlags[Data->GetFtpForcePasvIp()], BugFlags[Data->GetFtpUseMlsd()], BugFlags[Data->GetFtpListAll()]); if (Data->GetFtps() != ftpsNone) { ADF(L"Session reuse: %s", BooleanToEngStr(Data->GetSslSessionReuse()).c_str()); ADF(L"TLS/SSL versions: %s-%s", GetTlsVersionName(Data->GetMinTlsVersion()).c_str(), GetTlsVersionName(Data->GetMaxTlsVersion()).c_str()); } } ADF(L"Local directory: %s, Remote directory: %s, Update: %s, Cache: %s", (Data->GetLocalDirectory().IsEmpty() ? UnicodeString(L"default").c_str() : Data->GetLocalDirectory().c_str()), (Data->GetRemoteDirectory().IsEmpty() ? UnicodeString(L"home").c_str() : Data->GetRemoteDirectory().c_str()), BooleanToEngStr(Data->GetUpdateDirectories()).c_str(), BooleanToEngStr(Data->GetCacheDirectories()).c_str()); ADF(L"Cache directory changes: %s, Permanent: %s", BooleanToEngStr(Data->GetCacheDirectoryChanges()).c_str(), BooleanToEngStr(Data->GetPreserveDirectoryChanges()).c_str()); intptr_t TimeDifferenceMin = TimeToMinutes(Data->GetTimeDifference()); ADF(L"DST mode: %d; Timezone offset: %dh %dm", static_cast<int>(Data->GetDSTMode()), (TimeDifferenceMin / MinsPerHour), (TimeDifferenceMin % MinsPerHour)); if (Data->GetFSProtocol() == fsWebDAV) { ADF(L"Compression: %s", BooleanToEngStr(Data->GetCompression()).c_str()); } AddSeparator(); } #undef ADF } }
// Заполнение информации по трудоёмкости по исполнителям void TController::fillVolume(int num) { if(vKHRList[num]->Works.size() != 0) { int allVolumes = 0; // число кварталов, которые идёт КХР // последняя дата работы - последний срок TDateTime end = Model->getLastDate(vKHRList[num]); // необходимо определить начало работы: квартал и год TDateTime begin = vKHRList[num]->dtStartDate; Word dyear, dmonth, dday; // данные для начала работы Word eyear, emonth, eday; // данные по окончанию КХР begin.DecodeDate(&dyear, &dmonth, &dday); end.DecodeDate(&eyear, &emonth, &eday); int begQ = Model->getQuart(StrToInt(dmonth)); // квартал начала работ int endQ = Model->getQuart(StrToInt(emonth)); // квартал окончания работ int kbeg = StrToInt(dyear); // год начала работ int kend = StrToInt(eyear); // год окончания работ if(kbeg==kend) allVolumes = endQ - begQ + 1; // если год совпадает else allVolumes = (4-begQ+1)/*год начала*/ + 4*(kend-kbeg-1) /*промежуточные года*/ + endQ /*последний год*/ ; DisplayManager->showVolumeRow(vKHRList[num]->Executors.size()+1, allVolumes+2); int currVol = begQ; int currYear = kbeg; // заполнение названий столбцов for (int i=0; i < allVolumes; i++) { AnsiString data = IntToStr(currVol); switch(currVol) { case 1: data = "I кв. "; break; case 2: data = "II кв. ";break; case 3: data = "III кв. ";break; case 4: data = "IV кв. ";break; default: break; } // data+="."; data+=IntToStr(currYear); currVol++; if(currVol>4) { currVol=1; currYear++; } DisplayManager->showVolume(i+1, 0, data.c_str()); } // для всех исполнителей for(int i=0; i<vKHRList[num]->Executors.size(); i++) { int sumVolume=0; // суммарная трудоёмкость для исполнителя currVol = begQ; currYear = kbeg; int id = vKHRList[num]->Executors[i]->id; string name = Model->execByID(vKHRList[num], id); DisplayManager->showVolume(0, i+1, name.c_str()); for (int j=0; j < allVolumes; j++) { float vol = Model->getExecVolume(vKHRList[num], id, currYear, currVol); sumVolume+=vol; currVol++; if(currVol>4) { currVol=1; currYear++; } DisplayManager->showVolume(j+1, i+1, FloatToStr(vol)); } DisplayManager->showVolume(allVolumes+1, i+1, FloatToStr(sumVolume)); } } }
//--------------------------------------------------------------------------- void __fastcall TBookNotAcceptListForm::FormShow(TObject *Sender) { CString szSQL; unsigned short year,month,day; edtDays->Text="2"; m_lstCorpID.Add(""); lstCorp->Items->Add("全部"); szSQL="select * from DepartCorp order by dc_code"; RunSQL(dm1->Query1,szSQL,true); while(!dm1->Query1->Eof) { m_lstCorpID.Add(dm1->Query1->FieldByName("dc_code")->AsString.c_str()); lstCorp->Items->Add(dm1->Query1->FieldByName("dc_name")->AsString); dm1->Query1->Next(); } lstCorp->ItemIndex=0; m_lstDepartID.Add(""); lstDepart->Items->Add("全部"); szSQL="select * from StockDepart order by sd_code"; RunSQL(dm1->Query1,szSQL,true); while(!dm1->Query1->Eof) { m_lstDepartID.Add(dm1->Query1->FieldByName("sd_code")->AsString.c_str()); lstDepart->Items->Add(dm1->Query1->FieldByName("sd_name")->AsString); dm1->Query1->Next(); } lstDepart->ItemIndex=0; m_lstAskDepID.Add(""); lstAskDep->Items->Add("全部"); szSQL="select * from DicDepart,DepartCorp where dc_code=substring(dd_code,1,2) order by dd_code"; RunSQL(dm1->Query1,szSQL,true); while(!dm1->Query1->Eof) { m_lstAskDepID.Add(dm1->Query1->FieldByName("dd_code")->AsString.c_str()); lstAskDep->Items->Add(dm1->Query1->FieldByName("dc_name")->AsString +dm1->Query1->FieldByName("dd_name")->AsString); dm1->Query1->Next(); } lstAskDep->ItemIndex=0; m_lstFactID.Add(""); lstFact->Items->Add("全部"); szSQL="select * from Manufactur order by mf_code"; RunSQL(dm1->Query1,szSQL,true); while(!dm1->Query1->Eof) { m_lstFactID.Add(dm1->Query1->FieldByName("mf_code")->AsString.c_str()); lstFact->Items->Add(dm1->Query1->FieldByName("mf_shortname")->AsString); dm1->Query1->Next(); } lstFact->ItemIndex=0; TDateTime tNow; tNow=GetSysTime(false); tNow.DecodeDate(&year,&month,&day); DateTimePicker1->Date=tNow; DateTimePicker2->Date=tNow; }