// - - - - - - - - - - - - - - - - - - - - - - - - - // Запуск команды на Sql-сервере static bool StartSqlCmd(string CmdText) { if (CmdText == null) { return(false); } if (CmdText.Trim() == "") { return(false); } CConsole.ShowBox("", "Выполнение команды на сервере", ""); Connection = new CConnection(ConnectionString); Command = new CCommand(Connection); Command.Timeout = 599; bool Result = Command.Execute(CmdText); Command.Close(); Connection.Close(); CConsole.Clear(); CCommon.Print(CAbc.EMPTY, "Для продолжения нажмите Enter."); CConsole.ClearKeyboard(); CConsole.Flash(); CConsole.ReadChar(); return(Result); }
}//FOLD01 // ----------------------------------- // Проверка всех строк входного файла static string CheckPfuFile( string FileName , int UniqNum ) {//fold01 if ( Command == null ) return "Ошибка подключения к серверу !"; if ( FileName == null ) return "Ошибка определения имени файла !"; string Result = CAbc.EMPTY , CmdText = CAbc.EMPTY , AboutError = CAbc.EMPTY ; bool HaveError = false ; string ShortFileName = __.GetFileName( FileName ).Trim() + "-" + UniqNum.ToString().Trim(); CPfuReader PfuReader = new CPfuReader(); int LineNum = 0; TotalCents = 0; if ( PfuReader.Open( FileName ) ) while ( PfuReader.Read() ) { LineNum ++ ; TotalCents += PfuReader.Cents() ; CConsole.ShowBox(CAbc.EMPTY," Проверяется строка" + __.StrI( LineNum , 5 ) + " " ,CAbc.EMPTY) ; CmdText = "exec dbo.pMega_OpenGate_CheckPalvis " + " @Code = '" + ( LineNum + UniqNum ).ToString().Trim() + "'" + " , @Ctrls = ''" + " , @SourceCode = '" + BankCode + "'" + " , @DebitMoniker = '" + DebitMoniker + "'" + " , @DebitState = '" + DebitState + "'" + " , @TargetCode = '" + BankCode + "'" + " , @CreditMoniker= '" + PfuReader.AccountNum() + "'" + " , @CreditState = '" + PfuReader.IdentCode() + "'" + " , @CrncyAmount = " + PfuReader.Cents().ToString() + " , @CurrencyId = 980 " + " , @UserName = '******'" ; AboutError = (string) __.IsNull( Command.GetScalar( CmdText ) , CAbc.EMPTY ) ; if ( __.IsEmpty( Purpose ) ) AboutError += " Не заполнено назначение платежа ;" ; if ( __.IsEmpty( DebitName ) ) AboutError += " Не заполнено название дб. счета ;" ; if ( __.IsEmpty( PfuReader.ClientName() ) ) AboutError += " Не заполнено название кт. счета ;" ; if ( AboutError != null ) if ( ( AboutError.Trim() != "" ) ) { HaveError = true; Result += " Ошибка в строке " + LineNum.ToString() +" : " + AboutError.Trim() + CAbc.CRLF ; } } else { PfuReader.Close(); return "ошибка открытия файла " + ShortFileName ; } TotalLines = LineNum; CConsole.Clear(); byte SavedColor = CConsole.BoxColor; if ( ( ( int ) CCommon.IsNull( Command.GetScalar( "exec dbo.pMega_OpenGate_CheckPalvis;2 @TaskCode='OpenGate',@FileName='" + ShortFileName + "'" ) , (int) 0 ) ) > 0 ) { CConsole.BoxColor = CConsole.RED*16 + CConsole.WHITE ; CConsole.GetBoxChoice( "Файл " + ShortFileName + " сегодня уже загружался !" , "" ,"Нажмите ESC для выхода.") ; CConsole.BoxColor = SavedColor ; CConsole.Clear(); return "Файл " + ShortFileName + " сегодня уже загружался !" ; } return Result; }//FOLD01
}//FOLD01 // ---------------------------------- // Загрузка всех строк входного файла static bool LoadPfuFile( string FileName , int UniqNum ) {//fold01 if ( Command == null ) return false; if ( FileName == null ) return false; bool Result = true; string CmdText = CAbc.EMPTY; string ShortFileName = __.GetFileName( FileName ).Trim() + "-" + UniqNum.ToString().Trim(); CPfuReader PfuReader = new CPfuReader(); int LineNum = 0 ; if ( PfuReader.Open( FileName ) ) while ( PfuReader.Read() ) { LineNum ++ ; CConsole.ShowBox(""," Загружается строка" + CCommon.StrI( LineNum , 5 ) + " " ,"") ; CmdText = "exec dbo.pMega_OpenGate_AddPalvis " + " @TaskCode = 'OpenGate'" + ",@BranchCode = ''" + ",@USerName = '******'" + ",@FileName = '" + ShortFileName + "'" + ",@LineNum = " + LineNum.ToString() + ",@Code = '" + ( LineNum + UniqNum ).ToString().Trim()+ "'" + ",@Ctrls = ''" + ",@SourceCode = '" + BankCode + "'" + ",@DebitMoniker = '" + DebitMoniker + "'" + ",@DebitName = '" + DebitName.Replace("'","`") + "'" + ",@DebitState = '" + DebitState + "'" + ",@TargetCode = '" + BankCode + "'" + ",@CreditMoniker= '" + PfuReader.AccountNum() + "'" + ",@CreditName = '" + PfuReader.ClientName().Replace("'","`") + "'" + ",@CreditState = '" + PfuReader.IdentCode() + "'" + ",@CrncyAmount = " + PfuReader.Cents().ToString() + ",@CurrencyId = 980 " + ",@DayDate = " + __.Today().ToString() + ",@OrgDate = " + __.Today().ToString() + ",@Purpose = '" + Purpose.Replace("'","`") + "'" ; if ( ! Command.Execute( CmdText ) ) Result = false; } else Result = false; CConsole.Clear(); PfuReader.Close(); return Result; }//FOLD01
} //FOLD00 // Спросить у пользователя, надо ли применять данный шаблон void ShowModel() //fold00 { if (!__.FileExists(FileName)) { return; } if (__.FileExists(ModelFileName)) { __.DeleteFile(ModelFileName); } ModelFile = new CCfgFile(FileName); string DebitMoniker = (string)ModelFile["AccountA_Text"]; if (DebitMoniker == null) { DebitMoniker = CAbc.EMPTY; } string DebitName = (string)ModelFile["AName_Text"]; if (DebitName == null) { DebitName = CAbc.EMPTY; } string Purpose = (string)ModelFile["Argument_Text"]; if (Purpose == null) { Purpose = CAbc.EMPTY; } CConsole.Clear(); __.Print(CAbc.EMPTY , " Информация из шаблона :" , " -----------------------" , " Дебет-счет : " + DebitMoniker , " Название дебет-счета : " + DebitName , " Назначение платежа : " + Purpose ); if (CConsole.GetBoxChoice("Использовать теперь этот шаблон ?" , " Да = Enter . Нет = Esc ." ) ) { __.CopyFile(FileName, ModelFileName); } } //FOLD00
// - - - - - - - - - - - - - - - - - - - - - - - - // Запуск выборки на Sql-сервере static bool StartSqlRS(string CmdText) { if (CmdText == null) { return(false); } if (CmdText.Trim() == "") { return(false); } CConsole.ShowBox("", "Выполнение команды на сервере", ""); Connection = new CConnection(ConnectionString); RecordSet = new CRecordSet(Connection); bool Result; RecordSet.Timeout = 599; if (RecordSet.Open(CmdText)) { CConsole.Clear(); int FieldCount = RecordSet.FieldCount(); while (RecordSet.Read()) { for (int Index = 0; Index < FieldCount; Index++) { CCommon.Print(RecordSet[Index]); } } } else { CConsole.Clear(); } RecordSet.Close(); Connection.Close(); CCommon.Print(CAbc.EMPTY, "Для продолжения нажмите Enter."); CConsole.ClearKeyboard(); CConsole.Flash(); CConsole.ReadChar(); return(true); }
void Print() { CConsole.Clear(); for (Current = 0; Current < TOTAL_GROUP; Current++) { if (Topics[Current] == "") { TopicMenus[Current] = " ( пусто ) "; } else { TopicMenus[Current] = " Для счетов " + Topics[Current].Trim(); } } for (Current = 0; Current < TOTAL_GROUP; Current++) { if (Topics[Current] != "") { CCommon.Print(TopicMenus[Current] + " : " + Purposes[Current] + CAbc.CRLF); } } }
public void PrintConstValues() { string Answer = ""; CConsole.Clear(); CCommon.Print("\tСодержимое шаблона : "); for (int CurrentField = 0; CurrentField < TotalFields; CurrentField++) { if ((Kinds[CurrentField] == -1) && /* -1 = постоянное+редактир. */ (Values[CurrentField] != null) && (Aliases[CurrentField] != null) ) { if ((Values[CurrentField].Trim() != "") && (Aliases[CurrentField].Trim() != "") ) { CCommon.Print(CCommon.Left(Infos[CurrentField], 20) + " = " + Values[CurrentField]); } } } }
//----------------------------------------------------------------------------------------- // основная программа public static void Main() { const bool DEBUG = false; const int MAX_COLUMNS = 299; // максимальное количество столбцов int[] ColWidth = new int[MAX_COLUMNS]; // ширины столбцов int ColNumber = 0; int ALineNumber = 0; int AFieldNumber = 0; string AFileName = ""; string ModelFileName = CCommon.GetTempDir() + "\\" + "AMaker.mod"; string Now_Date_Str = CCommon.DtoC(CCommon.Today()).Substring(2, 6); string Now_Time_Str = CCommon.Hour(CCommon.Now()).ToString("00") + CCommon.Minute(CCommon.Now()).ToString("00"); CTsvWriter TsvWriter = new CTsvWriter(); CTextReader TextReader = new CTextReader(); string TsvFileName = "$"; string InpFileName = ""; int InpColCount = 0; int I, SourceMode = -2; // откуда читать данные : 0=ClipBoard , 1=CSV , 2=DIF string Tmps = ""; string[] SubTmps; //---------------------------------------------------------- CCommon.Print(" Программа для cоздания А-файлов с платежами на основе форматных данных,"); CCommon.Print(" полученных из электронной таблицы (CVS/DIF). Версия 2.03 от 17.09.2019г."); if (DEBUG) { InpFileName = "F:\\Trash\\Kazna1.csv"; } else if (CCommon.ParamCount() < 2) { CCommon.Print(""); CCommon.Print(" Формат запуска : "); CCommon.Print(" AMaker3 Имя_файла "); CCommon.Print(" где : "); CCommon.Print(" Имя_файла - имя файла данных в формате CSV или DIF "); CCommon.Print(""); return; } else { InpFileName = CAbc.ParamStr[1].Trim(); } if (InpFileName == "*") { SourceMode = 0; } else { switch (CCommon.GetExtension(InpFileName).ToUpper()) { case ".CSV": { SourceMode = 1; break; } case ".DIF": { SourceMode = 2; break; } case ".MOD": { SourceMode = -1; break; } default: { CCommon.Print("Неправильный тип файла !"); SourceMode = -2; break; } } } //---------------------------------------------------------- // если выбран файл с шаблоном, то выводим его на экран if (SourceMode == -1) { if (AModel.LoadFromFile(InpFileName)) { AModel.PrintConstValues(); if (CConsole.GetBoxChoice("Использовать теперь этот шаблон ?", " Да = Enter . Нет = Esc .")) { if (CCommon.FileExists(ModelFileName)) { CCommon.DeleteFile(ModelFileName); } if (CCommon.FileExists(ModelFileName)) { CCommon.Print("Ошибка удаления файла " + ModelFileName); } else if (!CCommon.CopyFile(InpFileName, ModelFileName)) { CCommon.Print("Ошибка записи файла " + ModelFileName); } return; } } } else if (CCommon.FileExists(ModelFileName)) { AModel.LoadFromFile(ModelFileName); } if ((SourceMode < 0) || (SourceMode > 2)) { CCommon.Print("Неправильная строка параметров !"); return; } //---------------------------------------------------------- // скидываем информацию в промежуточный Tsv-файл TsvFileName = CCommon.GetTempName(); if (TsvFileName == null) { TsvFileName = InpFileName + ".$$$"; } else if (TsvFileName.Trim() == "") { TsvFileName = InpFileName + ".$$$"; } if (SourceMode == 0) { TsvWriter.LoadFromClipboard(); if (!TsvWriter.SaveToFile(TsvFileName)) { CCommon.Print("Ошибка записи в файл " + TsvFileName); return; } } if (SourceMode > 0) { if (!CCommon.FileExists(InpFileName)) { CCommon.Print("Не найден файл " + InpFileName); return; } } if (SourceMode == 1) { if (TsvWriter.LoadFromCsvFile(InpFileName)) { if (!TsvWriter.SaveToFile(TsvFileName)) { CCommon.Print("Ошибка записи в файл " + TsvFileName); return; } } else { CCommon.Print("Ошибка чтения файла " + InpFileName); return; } } if (SourceMode == 2) { if (TsvWriter.LoadFromDifFile(InpFileName)) { if (!TsvWriter.SaveToFile(TsvFileName)) { CCommon.Print("Ошибка записи в файл " + TsvFileName); return; } } else { CCommon.Print("Ошибка чтения файла " + InpFileName); return; } } //---------------------------------------------------------- // подсчитываем количество столбцов во входящем файле , а также ширину этих столбцов for (I = 0; I < MAX_COLUMNS; I++) { ColWidth[I] = 0; } for (I = 0; I < (MAX_LINES * MAX_FILES); I++) { Cents[I] = 0; } if (!TextReader.Open(TsvFileName, CAbc.CHARSET_WINDOWS)) { CCommon.Print("Ошибка чтения файла" + TsvFileName); TsvFile.Close(); CCommon.DeleteFile(TsvFileName); return; } if (!TextReader.Read()) { CCommon.Print("Ошибка чтения файла" + TsvFileName); TsvFile.Close(); CCommon.DeleteFile(TsvFileName); return; } for (I = 0; I < 20; I++) { Tmps = TextReader.Value; SubTmps = Tmps.Split(CCommon.Chr(9)); if (SubTmps != null) { if (SubTmps.Length > InpColCount) { InpColCount = SubTmps.Length; } for (ColNumber = 0; ColNumber < SubTmps.Length; ColNumber++) { if (SubTmps[ColNumber].Length > ColWidth[ColNumber]) { ColWidth[ColNumber] = SubTmps[ColNumber].Length; } } } else { InpColCount = 0; } if (!TextReader.Read()) { break; } } TextReader.Close(); if (InpColCount == 0) { CCommon.Print("Не получается распознать входные данные "); CCommon.DeleteFile(TsvFileName); return; } //---------------------------------------------------------- // выводим столбцы на экран и запрос пользователю ( помним , что в Csv - файле нумерация столбцов начинается с 1 ) CConsole.Clear(); if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS)) { CCommon.Print("Ошибка чтения файла " + TsvFileName); return; } for (I = 0; I < (System.Console.WindowHeight - 1); I++) { if (!TsvFile.Read()) { break; } Tmps = ""; for (ColNumber = 0; ColNumber < InpColCount; ColNumber++) { Tmps += CCommon.Left(TsvFile[ColNumber + 1], ColWidth[ColNumber]) + "¦"; } if (Tmps.Length > 0) { if (Tmps.Length < System.Console.WindowWidth - 1) { CCommon.Print(Tmps); } else { CCommon.Print(Tmps.Substring(0, System.Console.WindowWidth - 2)); } } } TsvFile.Close(); if (!CConsole.GetBoxChoice("Для продолжения обработки нажмите Enter.", "", "Для выхода нажмите Esc. ")) { CCommon.DeleteFile(TsvFileName); return; } CConsole.Clear(); //---------------------------------------------------------- // распознавание столбцов во входящем файле ( помним , что в Csv - файле нумерация столбцов начинается с 1 ) for (ColNumber = 0; ColNumber < InpColCount; ColNumber++) { CConsole.Clear(); CCommon.Print(""); if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS)) { CCommon.Print("Ошибка чтения файла " + TsvFileName); TsvFile.Close(); CCommon.DeleteFile(TsvFileName); return; } for (I = 0; I < (System.Console.WindowHeight - 1); I++) { if (!TsvFile.Read()) { break; } else { CCommon.Print(" " + TsvFile[ColNumber + 1]); } } TsvFile.Close(); if (!AModel.RecognizeColumn(ColNumber + 1)) { CCommon.DeleteFile(TsvFileName); return; } } CConsole.Clear(); //---------------------------------------------------------- // запрашиваем у пользователя значения постоянных полей AModel.AskFixedValues(); //---------------------------------------------------------- // подсчитываем количество строк и общую сумму по входному файлу TotalLines = 0; TotalCents = 0; if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS)) { CCommon.Print("Ошибка чтения файла " + TsvFileName); TsvFile.Close(); CCommon.DeleteFile(TsvFileName); return; } while (TsvFile.Read()) { if (IsLineEmpty()) { continue; } Cents[TotalLines] = CCommon.CLng(GetColValue(CSepAFileInfo.L_SUMA).Trim()); TotalCents += Cents[TotalLines]; TotalLines++; } TsvFile.Close(); //----------------------------------------------------------- // запрашиваем у пользователя имя файла , в который будет записан результат string ShortName = ConstPartOfName; CCommon.Write("Краткое имя результирующего файла ( " + ShortName + " ) : "); ShortName = CCommon.Input().Trim(); if (ShortName.Length > 0) { ConstPartOfName = CCommon.Left(ShortName, 8); } //----------------------------------------------------------- // сверяем с пользователем общее количество строк и общую сумму if (!CConsole.GetBoxChoice(" Всего строк : " + CCommon.Right(TotalLines.ToString(), 11) , " Общая сумма : " + CCommon.StrN(TotalBucks, 11).Replace(",", ".") , "_________________________________" , "Для продолжения нажмите Enter." , "Для выхода - Esc. " ) ) { CCommon.DeleteFile(TsvFileName); return; } CConsole.Clear(); //----------------------------------------------------------- // записываем результатов работы программы в файлы if (!TsvFile.Open(TsvFileName, CAbc.CHARSET_WINDOWS)) { CCommon.Print("Ошибка чтения файла " + TsvFileName); TsvFile.Close(); CCommon.DeleteFile(TsvFileName); return; } BatchNum = 0; // while (TotalLines > 0) { AFileName = GetAFileName(); if (!AFile.Create(AFileName, CAbc.CHARSET_DOS)) { CCommon.Print("Ошибка создания файла " + AFileName); break; } else { CCommon.Print(AFileName); } // AFile.Head[CSepAFileInfo.H_EMPTYSTR] = ""; AFile.Head[CSepAFileInfo.H_CRLF1] = CAbc.CRLF; AFile.Head[CSepAFileInfo.H_FILENAME] = CCommon.Left(AFileName, 12); AFile.Head[CSepAFileInfo.H_DATE] = Now_Date_Str; AFile.Head[CSepAFileInfo.H_TIME] = Now_Time_Str; AFile.Head[CSepAFileInfo.H_STRCOUNT] = TotalLinesInBatch().ToString(); AFile.Head[CSepAFileInfo.H_TOTALDEBET] = "0"; AFile.Head[CSepAFileInfo.H_TOTALCREDIT] = TotalCentsInBatch().ToString(); AFile.Head[CSepAFileInfo.H_DES] = "0"; AFile.Head[CSepAFileInfo.H_DES_ID] = "UIAB00"; AFile.Head[CSepAFileInfo.H_DES_OF_HEADER] = ""; AFile.Head[CSepAFileInfo.H_CRLF2] = CAbc.CRLF; // if (!AFile.WriteHeader()) { CCommon.Print("Ошибка записи файла " + AFileName); AFile.Close(); break; } // for (ALineNumber = 0; ALineNumber < TotalLinesInBatch(); ALineNumber++) { do { if (!TsvFile.Read()) { break; } }while (IsLineEmpty()); for (AFieldNumber = 0; AFieldNumber < AModel.TotalFields; AFieldNumber++) { AFile.Line[AFieldNumber] = GetColValue(AFieldNumber); } if (!AFile.WriteLine()) { CCommon.Print("Ошибка записи файла " + AFileName); break; } AModel.IncNumber(); } AFile.Close(); BatchNum++; TotalLines -= TotalLinesInBatch(); } TsvFile.Close(); CCommon.DeleteFile(TsvFileName); }
} //FOLD00 // Вставка строк входного файла в БД public bool InsertAll(CCommand Command, string BankCode) //fold00 { string CmdText = CAbc.EMPTY , DebitIBAN = CAbc.EMPTY , CreditIBAN = CAbc.EMPTY , DebitMoniker = CAbc.EMPTY , CreditMoniker = CAbc.EMPTY; int LineNum = 0; bool Result = true; FieldValues[FLD_DEBITMFO] = BankCode; FieldValues[FLD_CREDITMFO] = BankCode; if (!Reader.Open(FileName, CharSet)) { Reader.Close(); return(false); } while (Reader.Read()) { LineNum++; PrepareFields(); DebitMoniker = FieldValues[FLD_DEBITACC].Replace("'", "`").Trim(); CreditMoniker = FieldValues[FLD_CREDITACC].Replace("'", "`").Trim(); if (DebitMoniker[0] > '9') { DebitIBAN = DebitMoniker; DebitMoniker = CAbc.EMPTY; } if (CreditMoniker[0] > '9') { CreditIBAN = CreditMoniker; CreditMoniker = CAbc.EMPTY; } CConsole.ShowBox(CAbc.EMPTY, " Загружается строка" + __.StrI(LineNum, 5) + " ", CAbc.EMPTY); CmdText = "exec dbo.pMega_OpenGate_AddPalvis " + " @TaskCode = '" + TASK_CODE + "'" + ",@DayDate = "+ DayDate.ToString() + ",@BranchCode = ''" + ",@FileName = '" + CleanFileName + "'" + ",@LineNum = " + LineNum.ToString() + ",@SourceCode = '" + FieldValues[FLD_DEBITMFO].Replace("'", "`").Trim() + "'" + ",@DebitMoniker = '" + DebitMoniker + "'" + ",@DebitState = '" + FieldValues[FLD_DEBITSTATE].Replace("'", "`").Trim() + "'" + ",@DebitIBAN = '" + DebitIBAN + "'" + ",@DebitName = '" + FieldValues[FLD_DEBITNAME].Replace("'", "`").Trim() + "'" + ",@TargetCode = '" + FieldValues[FLD_CREDITMFO].Replace("'", "`").Trim() + "'" + ",@CreditMoniker= '" + CreditMoniker + "'" + ",@CreditState = '" + FieldValues[FLD_CREDITSTATE].Replace("'", "`").Trim() + "'" + ",@CreditIBAN = '" + CreditIBAN + "'" + ",@CreditName = '" + FieldValues[FLD_CREDITNAME].Replace("'", "`").Trim() + "'" + ",@CrncyAmount = " + FieldValues[FLD_SUMA].Replace(" ", CAbc.EMPTY).Trim() + ",@CurrencyId = " + FieldValues[FLD_CURRENCY].Replace("'", "`").Trim() + ",@Purpose = '" + FieldValues[FLD_PURPOSE].Replace("'", "`").Replace("?", "i").Trim() + "'" + ",@Code = '" + FieldValues[FLD_CODE].Replace("'", "`").Trim() + "'" + ",@Ctrls = ''" + ",@UserName = '******'" ; if (!Command.Execute(CmdText)) { Result = false; } } CConsole.Clear(); CConsole.ShowBox(CAbc.EMPTY, " Подождите...", CAbc.EMPTY); Command.Execute(" exec pMega_OpenGate_PayRoll;2 " + " @FileName='" + CleanFileName + "'" + ", @DayDate=" + DayDate.ToString() ); CConsole.Clear(); Reader.Close(); return(Result); } //FOLD00
public static void Main() {//FOLD01 const bool DEBUG = false ; bool UseErcRobot = false ; // подключаться ли к серверу под логином ErcRobot const string ROBOT_LOGIN= "******" ; const string ROBOT_PWD = "35162987" ; const string TASK_CODE = "OpenGate" ; byte SavedColor ; COpengateConfig OgConfig ; string ConnectionString= CAbc.EMPTY , CleanFileName = CAbc.EMPTY , TmpFileName = CAbc.EMPTY , LogFileName = CAbc.EMPTY , ScroogeDir = CAbc.EMPTY , SettingsDir = CAbc.EMPTY , ServerName = CAbc.EMPTY , DataBase = CAbc.EMPTY , FileName = CAbc.EMPTY , AboutError = CAbc.EMPTY , InputDir = CAbc.EMPTY , TodayDir = CAbc.EMPTY , StatDir = CAbc.EMPTY , TmpDir = CAbc.EMPTY ; int WorkDate = -1 , SeanceNum = -1 , UniqNum = 0 , i = 0 ; CConnection Connection = null ; System.Console.BackgroundColor = 0 ; System.Console.Clear() ; Err.LogToConsole() ; CCommon.Print( ""," Загрузка в `Скрудж` выплат от пенс.фонда. Версия 1.04 от 06.03.2018г." ); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // считываем конфигурацию Скрудж-2 CScrooge2Config Scrooge2Config = new CScrooge2Config(); if (!Scrooge2Config.IsValid) { CCommon.Print( Scrooge2Config.ErrInfo ) ; return ; } ScroogeDir = (string)Scrooge2Config["Root"] ; SettingsDir = (string)Scrooge2Config["Common"] ; ServerName = (string)Scrooge2Config["Server"] ; DataBase = (string)Scrooge2Config["DataBase"] ; if ( ServerName == null ) { CCommon.Print(" Не найдена переменная `Server` в настройках `Скрудж-2` "); return; } if ( DataBase == null ) { CCommon.Print(" Не найдена переменная `Database` в настройках `Скрудж-2` "); return; } System.Console.Title="Загрузка в `Скрудж` выплат от пенс.фонда"; __.DeleteOldTempDirs("??????" , __.Today() - 1 ); if ( DEBUG ) FileName ="D:\\WorkShop\\0000105.015"; else if ( __.ParamCount() > 1 ) for ( i= 1 ; i< __.ParamCount() ; i++ ) if ( CAbc.ParamStr[ i ].Trim().ToUpper() == "/R" ) { UseErcRobot = true; System.Console.Title = System.Console.Title + " * "; } else FileName = CAbc.ParamStr[ i ].Trim(); if ( __.IsEmpty( FileName ) ) { __.Print( " Формат запуска : PfuImporter.exe [/R] <FileName> " ); __.Print( " Пример : PfuImporter.exe * " ); return; } if ( ( ! __.IsEmpty( ScroogeDir ) ) && ( ! __.IsEmpty( SettingsDir ) ) ) SettingsDir = ScroogeDir.Trim() + CAbc.SLASH + SettingsDir.Trim(); else SettingsDir = CAbc.EMPTY; if ( FileName == "*" ) FileName = SelectFileNameGUI( SettingsDir ); if ( ! __.FileExists( FileName ) ) { __.Print( " Не найден указанный файл ! " ); return; } CleanFileName = __.GetFileName( FileName ); UniqNum = GetUniqNum( FileName ); if ( __.GetExtension( CleanFileName ).Trim().ToUpper() == ".MOD" ) { if ( __.FileExists( ModelFileName ) ) __.DeleteFile( ModelFileName ) ; __.CopyFile( FileName , ModelFileName ); return; } if ( ! __.IsDigit( CleanFileName.Replace(".","") ) ) { __.Print( " Указан неправильный файл ! " ); return; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // подключаемся к SQL-серверу ConnectionString = "Server=" + ServerName + ";Database=" + DataBase ; if ( UseErcRobot ) ConnectionString += ";UID=" + ROBOT_LOGIN + ";PWD=" + ROBOT_PWD + ";" ; else ConnectionString += ";Integrated Security=TRUE;" ; try { Connection = new CConnection( ConnectionString ); } catch ( System.Exception Excpt ) { CCommon.Print( Excpt.ToString() ); CCommon.Print( ""," Ошибка подключения к серверу !" ); } if ( ! Connection.IsOpen() ) { CCommon.Print( ""," Ошибка подключения к серверу !" ); return; } else if ( DEBUG ) CCommon.Print(" Сервер : " + ServerName ); Command = new CCommand(Connection) ; if ( ! Command.IsOpen() ) { CCommon.Print( " Ошибка подключения к базе данных !" ); return; } else if ( DEBUG ) CCommon.Print(" База данных : " + DataBase ); System.Console.Title=System.Console.Title+" | "+ServerName+"."+DataBase ; CConsole.Clear(); LoadModel( ModelFileName ) ; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // считываем настройки универсального шлюза WorkDate = ( int ) __.IsNull( Command.GetScalar( " exec dbo.pMega_OpenGate_Days;7 " ) , (int) 0 ); if ( WorkDate < 1 ) { __.Print( " Ошибка определения даты текущего рабочего дня. " ); Command.Close(); Connection.Close(); return ; } OgConfig = new COpengateConfig(); OgConfig.Open( WorkDate ); if ( ! OgConfig.IsValid() ) { __.Print( " Ошибка чтения настроек программы из " + OgConfig.Config_FileName() ); __.Print( OgConfig.ErrInfo()) ; Command.Close(); Connection.Close(); return; } SeanceNum = ( int ) __.IsNull( Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4 @TaskCode='" + TASK_CODE + "',@ParamCode='NumSeance' ") , (int) 0 ); if ( SeanceNum < 1 ) { __.Print( " Ошибка определения номера сеанса " ); Command.Close(); Connection.Close(); return ; } TodayDir = (string)OgConfig.TodayDir() ; TmpDir = (string)OgConfig.TmpDir() ; StatDir = (string)OgConfig.StatDir() ; if ( (TodayDir == null) || (InputDir == null) ) { __.Print( " Ошибка чтения настроек программы из " + OgConfig.Config_FileName() ); Command.Close(); Connection.Close(); return; } TodayDir = TodayDir.Trim() ; StatDir = StatDir.Trim(); TmpDir = TmpDir.Trim(); if ( ! __.DirExists( TodayDir ) ) __.MkDir( TodayDir ); if ( ! __.DirExists( StatDir ) ) __.MkDir( StatDir ); if ( ! __.DirExists( TmpDir ) ) __.MkDir( TmpDir ); if ( ! __.SaveText( StatDir + "\\" + "test.dat" , "test.dat" , CAbc.CHARSET_DOS ) ) { __.Print( " Ошибка записи в каталог " + StatDir ); Command.Close(); Connection.Close(); return ; } __.DeleteFile(StatDir + "\\" + "test.dat"); LogFileName = OgConfig.LogDir() + "\\SEANS" + SeanceNum.ToString("000") + ".TXT"; Err.LogTo( LogFileName ); __.AppendText( LogFileName , __.Now() + " " + USER_NAME + " загружает файл " + CleanFileName + CAbc.CRLF , CAbc.CHARSET_WINDOWS ); TmpFileName = TodayDir + CAbc.SLASH + CleanFileName ; if ( ! __.FileExists( TmpFileName ) ) __.CopyFile( FileName , TmpFileName ) ; if ( ! __.FileExists( TmpFileName ) ) { __.Print( " Ошибка записи файла " + TmpFileName ); Command.Close(); Connection.Close(); return ; } TmpFileName = TmpDir + CAbc.SLASH + __.Right( "0" + __.Hour(__.Clock()).ToString() , 2 ) + __.Right( "0" + __.Minute( __.Clock()).ToString() , 2 ) + __.Right( "0" + __.Second( __.Clock()).ToString() , 2 ) ; if( ! __.DirExists( TmpFileName ) ) __.MkDir( TmpFileName ) ; TmpFileName = TmpFileName + CAbc.SLASH + CleanFileName ; if ( __.FileExists( TmpFileName ) ) __.DeleteFile( TmpFileName ) ; if ( __.FileExists( TmpFileName ) ) { __.Print("Ошибка удаления файла ",TmpFileName) ; Command.Close(); Connection.Close(); return ; } __.CopyFile( FileName , TmpFileName ) ; if ( DEBUG ) __.Print(" Беру настройки шлюза здесь : " + OgConfig.Config_FileName() ); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // проверяем пачку AboutError = CheckPfuFile( FileName , UniqNum ) ; if ( __.IsEmpty( AboutError ) ) { if ( ! CConsole.GetBoxChoice( " Всего строк : " + TotalLines.ToString() , " Общая сумма : " + ( __.CCur( TotalCents ) / 100 ).ToString().Replace(",",".") , " Дебет.счет : " + __.Left(DebitMoniker , 26 ) , __.Left( DebitName , 42 ) , "__________________________________________" , " Для загрузки нажмите ENTER . " , " Для выхода - ESC." ) ) { __.AppendText( LogFileName , CAbc.CRLF + __.Now() + " загрузка отменена. " + CAbc.CRLF , CAbc.CHARSET_WINDOWS ); Command.Close(); Connection.Close(); return; } } else { __.Print( AboutError ); __.AppendText( LogFileName , CAbc.CRLF + AboutError + CAbc.CRLF , CAbc.CHARSET_WINDOWS ); SavedColor = CConsole.BoxColor ; CConsole.BoxColor = CConsole.RED*16 + CConsole.WHITE ; if ( ! CConsole.GetBoxChoice( " При проверке файла обнаружены ошибки !" , "__________________________________________" , " Всего строк : " + TotalLines.ToString() , " Общая сумма : " + ( __.CCur( TotalCents ) / 100 ).ToString().Replace(",",".") , " Дебет.счет : " + __.Left(DebitMoniker , 26 ) , __.Left( DebitName , 42 ) , "__________________________________________" , " Для отмены загрузки нажмите ESC . " , " Для выполнения загрузки - ENTER ." ) ) { __.AppendText( LogFileName , CAbc.CRLF + __.Now() + " загрузка отменена. " + CAbc.CRLF , CAbc.CHARSET_WINDOWS ); CConsole.BoxColor = SavedColor ; Command.Close(); Connection.Close(); return; } CConsole.BoxColor = SavedColor ; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // загружаем пачку LoadPfuFile( FileName , UniqNum ); __.AppendText( LogFileName , CAbc.CRLF + __.Now() + " загрузка завершена. " + CAbc.CRLF , CAbc.CHARSET_WINDOWS ); CConsole.ShowBox(CAbc.EMPTY," Подождите..." ,CAbc.EMPTY) ; Command.Execute(" exec pMega_OpenGate_PayRoll;2 " + " @FileName='" + CleanFileName + "-" + UniqNum.ToString().Trim() + "'" + ", @DayDate=" + WorkDate.ToString() ) ; CConsole.Clear(); Connection.Close(); }//FOLD01
} //FOLD00 // Проверка всех строк входного файла public string CheckAll(CCommand Command, string BankCode) //fold00 { string Result = CAbc.EMPTY , CmdText = CAbc.EMPTY , SavedCode = CAbc.EMPTY , AboutError = CAbc.EMPTY , DebitIBAN = CAbc.EMPTY , CreditIBAN = CAbc.EMPTY , DebitMoniker = CAbc.EMPTY , CreditMoniker = CAbc.EMPTY; bool HaveError = false; int LineNum = 0; FieldValues[FLD_DEBITMFO] = BankCode; FieldValues[FLD_CREDITMFO] = BankCode; if (!Reader.Open(FileName, CharSet)) { Reader.Close(); return("Ошибка чтения исходного файла !"); } SavedCode = FieldValues[FLD_CODE]; while (Reader.Read()) { LineNum++; PrepareFields(); DebitMoniker = FieldValues[FLD_DEBITACC].Replace("'", "`").Trim(); CreditMoniker = FieldValues[FLD_CREDITACC].Replace("'", "`").Trim(); if (DebitMoniker[0] > '9') { DebitIBAN = DebitMoniker; DebitMoniker = CAbc.EMPTY; } if (CreditMoniker[0] > '9') { CreditIBAN = CreditMoniker; CreditMoniker = CAbc.EMPTY; } CConsole.ShowBox(CAbc.EMPTY, " Проверяется строка" + __.StrI(LineNum, 5) + " ", CAbc.EMPTY); CmdText = "exec dbo.pMega_OpenGate_CheckPalvis " + " @Code = '" + FieldValues[FLD_CODE].Replace("'", "`").Trim() + "'" + ",@Ctrls = ''" + ",@SourceCode = '" + FieldValues[FLD_DEBITMFO].Replace("'", "`").Trim() + "'" + ",@DebitMoniker = '" + DebitMoniker + "'" + ",@DebitState = '" + FieldValues[FLD_DEBITSTATE].Replace("'", "`").Trim() + "'" + ",@DebitIBAN = '" + DebitIBAN + "'" + ",@TargetCode = '" + FieldValues[FLD_CREDITMFO].Replace("'", "`").Trim() + "'" + ",@CreditMoniker= '" + CreditMoniker + "'" + ",@CreditState = '" + FieldValues[FLD_CREDITSTATE].Replace("'", "`").Trim() + "'" + ",@CreditIBAN = '" + CreditIBAN + "'" + ",@CrncyAmount = " + FieldValues[FLD_SUMA].Replace(" ", CAbc.EMPTY).Trim() + ",@CurrencyId = " + FieldValues[FLD_CURRENCY].Replace("'", "`").Trim() + ",@UserName = '******'" ; AboutError = (string)__.IsNull(Command.GetScalar(CmdText), CAbc.EMPTY); if (__.IsEmpty(FieldValues[FLD_PURPOSE].Trim())) { AboutError += " Не заполнено назначение платежа ;"; } if (__.IsEmpty(FieldValues[FLD_DEBITNAME].Trim())) { AboutError += " Не заполнено название дб. счета ;"; } if (__.IsEmpty(FieldValues[FLD_CREDITNAME].Trim())) { AboutError += " Не заполнено название кт. счета ;"; } if (AboutError != null) { if ((AboutError.Trim() != "")) { HaveError = true; Result += " Ошибка в строке " + LineNum.ToString() + " : " + AboutError.Trim() + CAbc.CRLF; } } } FieldValues[FLD_CODE] = SavedCode; CConsole.Clear(); byte SavedColor = CConsole.BoxColor; if ((( int )__.IsNull(Command.GetScalar("exec dbo.pMega_OpenGate_CheckPalvis;2 @TaskCode='" + TASK_CODE + "',@FileName='" + CleanFileName + "'"), (int)0)) > 0) { CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.GetBoxChoice("Внимание ! Файл " + CleanFileName + " сегодня уже загружался !", "", "Для выхода нажмите ENTER."); CConsole.BoxColor = SavedColor; Result += "Файл " + CleanFileName + " сегодня уже загружался !" + CAbc.CRLF; } CConsole.BoxColor = SavedColor; Reader.Close(); return(Result); } //FOLD00
public static void Main() { Err.LogToConsole(); int ErcDate = 0; bool UseErcRobot = false; // подключаться ли к серверу под логином ErcRobot string FileName = CAbc.EMPTY; const string ROBOT_LOGIN = "******"; const string ROBOT_PWD = "35162987"; const string TASK_CODE = "OpenGate"; string StatDir = null; string DataBase = null; string ServerName = null; string ScroogeDir = null; string SettingsDir = null; string ConnectionString = null; if (System.Console.BufferHeight > 50) { System.Console.WindowHeight = 25; System.Console.BufferHeight = 25; } System.Console.Title = "Загрузка в `Скрудж` платежей из А-файлов "; System.Console.BackgroundColor = 0; System.Console.Clear(); CCommon.Print("", " Загрузка в `Скрудж` платежей из А-файлов. Версия 3.03 от 29.08.2019г."); if (CCommon.ParamCount() < 2) { CCommon.Print(" В строке запуска нужно указатьть один из режимов :"); CCommon.Print(" /A диалоговый режим, для загрузки файлов для универсального шлюза ;"); CCommon.Print(" /С проверка одного файла, имя которого задано далее в строке ;"); CCommon.Print(" /D `браковка` заготовок из файла, имя которого задано далее в строке ;"); CCommon.Print(" /S пакетный режим , для загрузки файлов от САКР ( маска !A??_*.* ) ;"); CCommon.Print(" /U диалоговый режим, для загрузки файлов от ЕРЦ ( кроме !A??_*.* ) ;"); CCommon.Print(" /Z диалоговый режим, для загрузки файлов зарплаты( маска !A*.Z?? ) ."); CCommon.Print("", " /R дополнительная опция - подключаться под пользователем ErcRobot ."); return; } if (CCommon.ParamCount() == 0) { return; } for (int i = 1; i < CCommon.ParamCount(); i++) { if (CAbc.ParamStr[i].Trim().ToUpper() == "/R") { UseErcRobot = true; System.Console.Title = System.Console.Title + " * "; } else if (CAbc.ParamStr[i].Trim().Substring(0, 1) == "/") { WorkMode = CCommon.Upper(CAbc.ParamStr[i]).Trim(); } else { FileName = CAbc.ParamStr[i].Trim(); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Вычитываем настройки "Скрудж-2" ErcAFile = new CErcAFile(); ErcEFile = new CErcEFile(); Scrooge2Config = new CScrooge2Config(); if (!Scrooge2Config.IsValid) { CCommon.Print(Scrooge2Config.ErrInfo); return; } ScroogeDir = (string)Scrooge2Config["Root"]; SettingsDir = (string)Scrooge2Config["Common"]; ServerName = (string)Scrooge2Config["Server"]; DataBase = (string)Scrooge2Config["DataBase"]; if (ScroogeDir == null) { CCommon.Print(" Не найдена переменная `Root` в настройках `Скрудж-2` "); return; } if (ServerName == null) { CCommon.Print(" Не найдена переменная `Server` в настройках `Скрудж-2` "); return; } if (DataBase == null) { CCommon.Print(" Не найдена переменная `Database` в настройках `Скрудж-2` "); return; } ScroogeDir = ScroogeDir.Trim(); if (SettingsDir != null) { SettingsDir = ScroogeDir + "\\" + SettingsDir; } ServerName = ServerName.Trim(); DataBase = DataBase.Trim(); CCommon.Print(" Беру настройки `Скрудж-2` здесь : " + ScroogeDir); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Подключаемся к базе данных ConnectionString = "Server=" + ServerName + ";Database=" + DataBase; if (UseErcRobot) { ConnectionString += ";UID=" + ROBOT_LOGIN + ";PWD=" + ROBOT_PWD + ";"; } else { ConnectionString += ";Integrated Security=TRUE;"; } Connection = new CConnection(ConnectionString); if (Connection.IsOpen()) { /* CCommon.Print(" Сервер : " + ServerName ) */; } else { CCommon.Print(" Ошибка подключения к серверу !"); return; } Command = new CCommand(Connection); if (Command.IsOpen()) { /* CCommon.Print(" База данных : " + DataBase ) */; } else { CCommon.Print(" Ошибка подключения к базе данных !"); return; } System.Console.Title = System.Console.Title + " | " + ServerName + "." + DataBase; // - - - - - - - - - - - - - - - - - // считываем настройки шлюза в ЕРЦ AppSettings = new CAppSettings(Connection); ErcDate = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;7 "), (int)0); if (ErcDate < 1) { CCommon.Print(" Ошибка определения даты текущего рабочего дня. "); return; } switch (WorkMode) { case WorkModes.CHECK: { SeanceNum = 1; ErcConfig = new COpenwayConfig(); ErcConfig.Open(ErcDate); InputDir = (string)ErcConfig["InputDir"]; break; } case WorkModes.DISABLE: { SeanceNum = 1; ErcConfig = new COpenwayConfig(); ErcConfig.Open(ErcDate); InputDir = (string)ErcConfig["InputDir"]; break; } case WorkModes.SALARY: { SeanceNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4 @TaskCode='ErcGate',@ParamCode='NumSeance' "), (int)0); ErcConfig = new CSalaryConfig(); ErcConfig.Open(ErcDate); InputDir = (string)ErcConfig["SalaryDir"] + "\\IN\\"; break; } case WorkModes.OPENGATE: { SeanceNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4 @TaskCode='OpenGate',@ParamCode='NumSeance' "), (int)0); ErcConfig = new COpenwayConfig(); ErcConfig.Open(ErcDate); InputDir = (string)ErcConfig["InputDir"]; break; } case WorkModes.SAKR: case WorkModes.ERC: { SeanceNum = ( int )CCommon.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4 @TaskCode='ErcGate',@ParamCode='NumSeance' "), (int)0); ErcConfig = new CErcConfig(); ErcConfig.Open(ErcDate); InputDir = (string)ErcConfig["InputDir"]; break; } default: { CCommon.Print("", "Ошибка в строке параметров программы ! "); return; break; } } if (!ErcConfig.IsValid()) { CCommon.Print(" Ошибка чтения настроек программы из " + ErcConfig.Config_FileName()); System.Console.WriteLine(ErcConfig.ErrInfo()); return; } if (SeanceNum < 1) { CCommon.Print(" Ошибка определения номера сеанса "); return; } TodayDir = (string)ErcConfig.TodayDir(); TmpDir = (string)ErcConfig.TmpDir(); StatDir = (string)ErcConfig.StatDir(); if ((TodayDir == null) || (InputDir == null)) { CCommon.Print(" Ошибка чтения настроек программы из " + ErcConfig.Config_FileName()); return; } TodayDir = TodayDir.Trim(); InputDir = InputDir.Trim(); if ((TodayDir == "") || (InputDir == "")) { CCommon.Print(" Ошибка чтения настроек программы из " + ErcConfig.Config_FileName()); return; } if (!CCommon.DirExists(StatDir)) { CCommon.MkDir(StatDir); } if (!CCommon.SaveText(StatDir + "\\" + "test.dat", "test.dat", CAbc.CHARSET_DOS)) { CCommon.Print(" Ошибка записи в каталог " + StatDir); return; } CCommon.DeleteFile(StatDir + "\\" + "test.dat"); LogFileName = ErcConfig.LogDir() + "\\" + ((WorkMode == WorkModes.CHECK) ? "W" + CCommon.Hour(CCommon.Now()).ToString("00") + CCommon.Minute(CCommon.Now()).ToString("00") + CCommon.Second(CCommon.Now()).ToString("00") : "SEANS" + SeanceNum.ToString("000") ) + ".TXT"; CCommon.Print(" Беру настройки шлюза здесь : " + ErcConfig.Config_FileName()); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // основной блог работы программы switch (WorkMode) { // - - - - - - - - - - - - - - - - - - - - - - - // Загружаем сторонние платежи case WorkModes.SAKR: { foreach (string FName in CCommon.GetFileList(InputDir + "!A??_*.*")) { if (FName != null) { if (FileName.Trim() != "") { ProcessAFile(Command, FileName, false); } } } // Загружаем допреквизиты foreach (string FName in CCommon.GetFileList(InputDir + "!E*.*")) { if (FName != null) { if (FName.Trim() != "") { if (ErcEFile.Load(Command, FileName)) { CCommon.MoveFile(FileName, TodayDir + CAbc.SLASH + CCommon.GetFileName(FileName)); } } } } // Завершающие действия CCommon.Print(" Пересчет промежуточных данных ..."); Command.Execute("exec dbo.pMega_OpenGate_PalvisBind "); break; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Загружаем коммунальные платежи из файла, который выбирает пользователь case WorkModes.ERC: { FileName = SelectFileName(InputDir + "!A*.*"); while (FileName != "") { if (ErcAFile.UserAccepted(FileName)) { ProcessAFile(Command, FileName, true); } FileName = SelectFileName(InputDir + "!A*.*"); } break; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Загружаем зарплатные платежи из файла, который выбирает пользователь case WorkModes.SALARY: { FileName = SelectFileName(InputDir + "!A*.Z*"); while (FileName != "") { if (ErcAFile.UserAccepted(FileName)) { ProcessAFile(Command, FileName, true); } FileName = SelectFileName(InputDir + "!A*.*"); } break; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Загружаем платежи по универсальному шлюзу из файла, который выбирает пользователь case WorkModes.OPENGATE: { if (FileName != "") { if (CCommon.FileExists(FileName)) { if (ErcAFile.UserAccepted(FileName)) { ProcessAFile(Command, FileName, true); } } } else { FileName = SelectFileNameGUI(SettingsDir, InputDir); if (FileName != "") { if (ErcAFile.UserAccepted(FileName)) { ProcessAFile(Command, FileName, true); if (CCommon.FileExists(FileName)) { CCommon.DeleteFile(FileName); } } } } break; } // - - - - - - - - - - - - // Только проверка файла case WorkModes.CHECK: { string AboutError = ""; if (FileName.Length > 0) { if (!CCommon.FileExists(FileName)) { CCommon.Print("", "Не найден файл " + FileName); FileName = ""; } } if (FileName != "") { Err.LogToConsole(); AboutError = ErcAFile.Check(Command, FileName); CConsole.Clear(); if (AboutError == "") { CCommon.Print("", " " + ErcAFile.String_Count.ToString() + " строк на общую суммму " + CCommon.StrN(ErcAFile.Total_Credit, 11).Replace(",", "."), "" , " Ошибок не найдено."); } else { CCommon.AppendText(LogFileName, CCommon.Now() + " " + CCommon.Upper(CCommon.GetUserName()) + " проверяет файл " + CCommon.GetFileName(FileName) + CAbc.CRLF + CAbc.CRLF + AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS); CCommon.Print(AboutError); } } else { FileName = SelectFileNameGUI(SettingsDir, InputDir); if (FileName != "") { if (ErcAFile.UserAccepted(FileName)) { AboutError = ErcAFile.Check(Command, FileName); CConsole.Clear(); if (AboutError == "") { CCommon.Print("", " " + ErcAFile.String_Count.ToString() + " строк на общую суммму " + CCommon.StrN(ErcAFile.Total_Credit, 11).Replace(",", "."), "" , " Ошибок не найдено."); } else { CCommon.AppendText(LogFileName, CCommon.Now() + " " + CCommon.Upper(CCommon.GetUserName()) + " проверяет файл " + CCommon.GetFileName(FileName) + CAbc.CRLF + CAbc.CRLF + AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS); CCommon.Print(AboutError); } } if (CCommon.FileExists(FileName)) { CCommon.DeleteFile(FileName); } } } break; } // - - - - - - - - - - - - - - - - - - // `запретить` заготовки из А-файла case WorkModes.DISABLE: { CConsole.Clear(); Err.LogToConsole(); if (CCommon.ParamCount() > 2) { FileName = CAbc.ParamStr[2].Trim(); } if (FileName == "") { CCommon.Print("", "Не задано имя файла !"); } else { FileName = CCommon.GetFileName(FileName); if (Command.Execute("exec dbo.pMega_OpenGate_Disable @TaskCode='OpenGate',@FileName='" + FileName + "'")) { CCommon.Print("", "заготовки из файла " + FileName + " запрещены ."); } else { CCommon.Print("", "Ошибка выполнения команды на сервере !"); } } break; } } Command.Close(); Connection.Close(); }
static void Main() { const bool DEBUG = false ; string ScroogeDir = CAbc.EMPTY , ServerName = CAbc.EMPTY , DataBase = CAbc.EMPTY , ConnectionString = CAbc.EMPTY ; int UserId = 0 , GroupId = 0 , BranchId = 0 , DateFrom = 0 , DateInto = 0 ; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - CParam Param = new CParam(); if (!DEBUG) { if (__.ParamCount() < 2) { PrintAboutMe(); return; } } if (!CCommon.IsEmpty(Param["UserId"])) { UserId = __.CInt(Param["UserId"]); } if (!CCommon.IsEmpty(Param["GroupId"])) { UserId = __.CInt(Param["GroupId"]); } if (!CCommon.IsEmpty(Param["BranchId"])) { BranchId = __.CInt(Param["BranchId"]); } if (!CCommon.IsEmpty(Param["DateInto"])) { DateInto = __.GetDate(Param["DateInto"]); } if (!CCommon.IsEmpty(Param["DateFrom"])) { DateFrom = CCommon.GetDate(Param["DateFrom"]); } if ((DateFrom == 0) && (DateInto != 0)) { DateFrom = DateInto; } if (DateInto == 0) { __.Print("Ошибка : не задана отчетная дата !"); return; } if ((BranchId == 0) && (UserId == 0) && (GroupId == 0)) { __.Print("Ошибка : не заданы условия построения отчета !"); return; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - CConsole.Color = CConsole.GRAY; CConsole.Clear(); CCommon.Print("", " Построение выписок в формате Скрудж-2. Версия 1.01 от 13.10.2017г.", ""); CScrooge2Config Scrooge2Config = new CScrooge2Config(); if (!Scrooge2Config.IsValid) { CCommon.Print(Scrooge2Config.ErrInfo); return; } ScroogeDir = (string)Scrooge2Config["Root"].Trim(); ServerName = (string)Scrooge2Config["Server"]; DataBase = (string)Scrooge2Config["DataBase"]; if (ScroogeDir == null) { CCommon.Print(" Не найдена переменная `Root` в настройках `Скрудж-2` "); return; } if (ServerName == null) { CCommon.Print(" Не найдена переменная `Server` в настройках `Скрудж-2` "); return; } if (DataBase == null) { CCommon.Print(" Не найдена переменная `Database` в настройках `Скрудж-2` "); return; } CCommon.Print(" Беру настройки `Скрудж-2` здесь : " + ScroogeDir); __.Print(" Сервер : " + ServerName); __.Print(" База данных : " + DataBase + CAbc.CRLF); ConnectionString = "Server=" + ServerName + ";Database=" + DataBase + ";Integrated Security=TRUE;"; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - System.Console.Title = " Выписка в формате Скрудж-2 | " + ServerName + "." + DataBase; CSc2Extract Sc2Extract = new CSc2Extract(); if (Sc2Extract.Open(ConnectionString)) { Sc2Extract.Path = __.GetCurDir(); Sc2Extract.DateFrom = DateFrom; Sc2Extract.DateInto = DateInto; Sc2Extract.CbMode = false; Sc2Extract.CoolSum = false; Sc2Extract.ApartFile = true; Sc2Extract.NeedPrintMsg = true; Sc2Extract.OverMode = 2; Sc2Extract.BranchId = BranchId; Sc2Extract.GroupId = GroupId; Sc2Extract.UserId = UserId; Sc2Extract.Build(); Sc2Extract.Close(); __.Print("Выписки построены.", "Для продолжения нажмите Enter..."); CConsole.ClearKeyboard(); CConsole.Flash(); CConsole.ReadChar(); } }
public string Check(CCommand Command, string SourceFileName) { string Result = ""; string AboutError = ""; bool HaveError = false; string ShortFileName = CCommon.GetFileName(SourceFileName); TotalCredit = 0; StringCount = 0; if (AFileReader.Open(SourceFileName, CAbc.CHARSET_DOS)) { HaveError = false; while (AFileReader.Read()) { TotalCredit += CCommon.CInt64(AFileReader[CSepAFileInfo.L_SUMA].Trim()); StringCount++; AboutError = ""; CmdText = "exec dbo.pMega_OpenGate_CheckPalvis" + " @Code = '" + AFileReader[CSepAFileInfo.L_NDOC].Replace("'", "`").Trim() + "'" + ",@Ctrls = '" + AFileReader[CSepAFileInfo.L_NDOC].Replace("'", "`").Trim() + "'" + ",@SourceCode = '" + AFileReader[CSepAFileInfo.L_DEBITMFO].Replace("'", "`").Trim() + "'" + ",@DebitMoniker = '" + AFileReader[CSepAFileInfo.L_DEBITACC].Replace("'", "`").Trim() + "'" + ",@DebitState = '" + AFileReader[CSepAFileInfo.L_OKPO1].Replace("'", "`").Trim() + "'" + ",@DebitIBAN = '" + AFileReader[CSepAFileInfo.L_DEBITIBAN].Replace("'", "`").Trim() + "'" + ",@TargetCode = '" + AFileReader[CSepAFileInfo.L_CREDITMFO].Replace("'", "`").Trim() + "'" + ",@CreditMoniker= '" + AFileReader[CSepAFileInfo.L_CREDITACC].Replace("'", "`").Trim() + "'" + ",@CreditState = '" + AFileReader[CSepAFileInfo.L_OKPO2].Replace("'", "`").Trim() + "'" + ",@CreditIBAN = '" + AFileReader[CSepAFileInfo.L_CREDITIBAN].Replace("'", "`").Trim() + "'" + ",@CrncyAmount = " + AFileReader[CSepAFileInfo.L_SUMA].Replace("'", "`").Trim() + ",@CurrencyId = " + AFileReader[CSepAFileInfo.L_CURRENCY].Replace("'", "`").Trim() + ",@FileName = '" + ShortFileName.Replace("'", "`").Trim() + "'" + ",@LineNum = " + StringCount.ToString() + ",@UserName = '******'" ; AboutError = (string)Command.GetScalar(CmdText); if (AFileReader[CSepAFileInfo.L_PURPOSE].Trim() == "") { AboutError += " Не заполнено назначение платежа ;"; } if (AFileReader[CSepAFileInfo.L_DEBITNAME].Trim() == "") { AboutError += " Не заполнено название дб. счета ;"; } if (AFileReader[CSepAFileInfo.L_CREDITNAME].Trim() == "") { AboutError += " Не заполнено название кт. счета ;"; } if (AboutError != null) { if ((AboutError.Trim() != "")) { HaveError = true; Result = Result + " Ошибка в строке " + StringCount.ToString() + " : " + AboutError.Trim() + CAbc.CRLF; } } CConsole.ShowBox("", " Проверяется строка" + CCommon.StrI(StringCount, 5) + " ", ""); } CConsole.Clear(); if (HaveError) { Result = Result + "Ошибка в реквизитах платежей !" + CAbc.CRLF; } if (TotalCredit != CCommon.CInt64(AFileReader.Head(CSepAFileInfo.H_TOTALCREDIT).Trim())) { Result = Result + CAbc.CRLF + "Неверная итоговая сумма платежей !" + CAbc.CRLF; } if (CCommon.IsDigit("0" + AFileReader.Head(CSepAFileInfo.H_STRCOUNT).Trim()) == false) { Result = Result + CAbc.CRLF + "Неверное общее количество строк !" + CAbc.CRLF; } else if (StringCount != CCommon.CInt32("0" + AFileReader.Head(CSepAFileInfo.H_STRCOUNT).Trim())) { Result = Result + CAbc.CRLF + "Неверное общее количество строк !" + CAbc.CRLF; } } else { Result += "Ошибка чтения файла !" + CAbc.CRLF; } AFileReader.Close(); byte SavedColor = CConsole.BoxColor; if ((( int )CCommon.IsNull(Command.GetScalar("exec dbo.pMega_OpenGate_CheckPalvis;2 @TaskCode='OpenGate',@FileName='" + ShortFileName + "'"), (int)0)) > 0) { CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.GetBoxChoice("Внимание ! Файл " + ShortFileName + " сегодня уже загружался !", "", "Нажмите Enter."); HaveError = true; Result += "Файл " + ShortFileName + " сегодня уже загружался !" + CAbc.CRLF; CConsole.BoxColor = SavedColor; } return(Result); }
// - - - - - - - - - - - - - - - - - - - - - - - - - - static void ProcessAFile(CCommand Command, string FileName, bool IsCheckNeeded) { string ShortFileName = null; string BranchCode = null; string TmpFileName = null; string AboutError = null; bool Result = false; byte SavedColor = CConsole.BoxColor; if (FileName == null) { return; } if (FileName.Trim() == "") { return; } ShortFileName = CCommon.GetFileName(FileName); CCommon.AppendText(LogFileName, CCommon.Now() + " " + CCommon.Upper(CCommon.GetUserName()) + " загружает файл " + ShortFileName + CAbc.CRLF, CAbc.CHARSET_WINDOWS); if (ShortFileName.IndexOf("_") < 0) { BranchCode = ""; } else { BranchCode = ShortFileName.Substring(2, 2); } TmpFileName = TodayDir + CAbc.SLASH + ShortFileName; if (!CCommon.FileExists(TmpFileName)) { CCommon.CopyFile(FileName, TmpFileName); } if (!CCommon.FileExists(TmpFileName)) { return; } TmpFileName = TmpDir + CAbc.SLASH + CCommon.Right("0" + CCommon.Hour(CCommon.Clock()).ToString(), 2) + CCommon.Right("0" + CCommon.Minute(CCommon.Clock()).ToString(), 2) + CCommon.Right("0" + CCommon.Second(CCommon.Clock()).ToString(), 2); if (!CCommon.DirExists(TmpFileName)) { CCommon.MkDir(TmpFileName); } TmpFileName = TmpFileName + CAbc.SLASH + ShortFileName; if (CCommon.FileExists(TmpFileName)) { CCommon.DeleteFile(TmpFileName); } if (CCommon.FileExists(TmpFileName)) { CConsole.GetBoxChoice("", "Ошибка при удалении файла ", TmpFileName, "", " Для выхода нажмите Esc."); return; } CCommon.CopyFile(FileName, TmpFileName); if (!CCommon.FileExists(TmpFileName)) { CConsole.GetBoxChoice("", "Ошибка при создании файла ", TmpFileName, "", " Для выхода нажмите Esc."); return; } Err.LogTo(LogFileName); CCommon.DeleteFile(FileName); CConsole.BoxColor = SavedColor; if (IsCheckNeeded) { AboutError = ErcAFile.Check(Command, TmpFileName); CConsole.Clear(); if (AboutError != null) { if (AboutError.Trim() != "") { CCommon.AppendText(LogFileName, AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS); CCommon.Print(AboutError); CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; if (!CConsole.GetBoxChoice("Внимание ! При проверке " + ShortFileName + " обнаружены ошибки !" , "", "Для отмены загрузки нажмите Esc , для продолжения - Enter" ) ) { CCommon.CopyFile(TmpFileName, FileName); CCommon.Print(AboutError); CConsole.BoxColor = SavedColor; return; } } } } CConsole.BoxColor = SavedColor; if (WorkMode == WorkModes.OPENGATE) { Result = ErcAFile.Load(Command, TmpFileName, BranchCode, "OpenGate"); if (Result) { // добавление в PayRoll информации о файле CConsole.BoxColor = SavedColor; CConsole.Clear(); CConsole.ShowBox("", " Подождите...", ""); Command.Execute(" exec pMega_OpenGate_PayRoll;2 @FileName='" + CCommon.GetFileName(TmpFileName) + "'"); } } else { Result = ErcAFile.Load(Command, TmpFileName, BranchCode, "ErcGate"); } if (Result) { CCommon.AppendText(LogFileName, CCommon.Now() + " загрузка закончена." + CAbc.CRLF, CAbc.CHARSET_WINDOWS); } else { CCommon.CopyFile(TmpFileName, FileName); CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.GetBoxChoice("", " При загрузке " + ShortFileName + " возникли ошибки !", ""); } CConsole.BoxColor = SavedColor; CConsole.Clear(); Err.LogToConsole(); }
static void Main() //FOLD00 { const bool DEBUG = false; bool UseErcRobot = false; // подключаться ли к серверу под логином ErcRobot const string ROBOT_LOGIN = "******"; const string ROBOT_PWD = "35162987"; const string TASK_CODE = "OpenGate"; CPayRoll PayRoll; CCommand Command; CConnection Connection; COpengateConfig OgConfig; CScrooge2Config Scrooge2Config; byte SavedColor; int ErcDate = 0 , SeanceNum = 0; string TmpDir = CAbc.EMPTY , StatDir = CAbc.EMPTY , BankCode = "351629" , FileName = CAbc.EMPTY , TodayDir = CAbc.EMPTY , InputDir = CAbc.EMPTY , DataBase = CAbc.EMPTY , ScroogeDir = CAbc.EMPTY , SettingsDir = CAbc.EMPTY , ServerName = CAbc.EMPTY , AboutError = CAbc.EMPTY , LogFileName = CAbc.EMPTY , TmpFileName = CAbc.EMPTY , CleanFileName = CAbc.EMPTY , ConnectionString = CAbc.EMPTY; CConsole.Clear(); __.Print(CAbc.EMPTY, " Загрузка зарплатных ведомостей в `Скрудж`. Версия 2.01 от 21.08.2019г.", CAbc.EMPTY); System.Console.Title = "Загрузка в `Скрудж` зарплатных ведомостей"; __.DeleteOldTempDirs("??????", __.Today() - 1); if (DEBUG) { FileName = "D:\\WorkShop\\zkm.dif"; Err.LogTo("D:\\WorkShop\\zkm.log"); } else if (__.ParamCount() > 1) { for (int i = 1; i < __.ParamCount(); i++) { if (CAbc.ParamStr[i].Trim().ToUpper() == "/R") { UseErcRobot = true; System.Console.Title = System.Console.Title + " * "; } else { FileName = CAbc.ParamStr[i].Trim(); } } } if (__.IsEmpty(FileName)) { __.Print(" Не указано имя файла для обработки ! "); __.Print(" Формат запуска : PayrollImporter.exe <FileName> [/R]"); __.Print(" Пример : PayrollImporter.exe * "); return; } // ----------------------------------------------------- // Вычитываем настройки "Скрудж-2" Scrooge2Config = new CScrooge2Config(); if (!Scrooge2Config.IsValid) { __.Print(Scrooge2Config.ErrInfo); return; } ScroogeDir = (string)Scrooge2Config["Root"]; SettingsDir = (string)Scrooge2Config["Common"]; ServerName = (string)Scrooge2Config["Server"]; DataBase = (string)Scrooge2Config["DataBase"]; if (ScroogeDir == null) { __.Print(" Не найдена переменная `Root` в настройках `Скрудж-2` "); return; } if (ServerName == null) { __.Print(" Не найдена переменная `Server` в настройках `Скрудж-2` "); return; } if (DataBase == null) { __.Print(" Не найдена переменная `Database` в настройках `Скрудж-2` "); return; } ScroogeDir = ScroogeDir.Trim(); if (SettingsDir != null) { SettingsDir = ScroogeDir + "\\" + SettingsDir; } ServerName = ServerName.Trim(); DataBase = DataBase.Trim(); if (DEBUG) { __.Print(" Беру настройки `Скрудж-2` здесь : " + ScroogeDir); } if (FileName == "*") { FileName = SelectFileNameGUI(SettingsDir); } if (FileName == null) { return; } if (__.IsEmpty(FileName)) { return; } if (!__.FileExists(FileName)) { __.Print(" Не найден указанный файл ! ", "", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } CleanFileName = __.GetFileName(FileName); PayRoll = new CPayRoll(); if (!PayRoll.Open(FileName)) { __.Print("Ошибка открытия исходного файла !", "", "Для выхода нажмите ENTER."); PayRoll.Close(); CConsole.WaitForEscOrEnter(); return; } if (!PayRoll.Preview()) { PayRoll.Close(); return; } // ----------------------------------------------------- // Подключаемся к базе данных ConnectionString = "Server=" + ServerName + ";Database=" + DataBase; if (UseErcRobot) { ConnectionString += ";UID=" + ROBOT_LOGIN + ";PWD=" + ROBOT_PWD + ";"; } else { ConnectionString += ";Integrated Security=TRUE;"; } Connection = new CConnection(ConnectionString); if (Connection.IsOpen()) { if (DEBUG) { __.Print(" Сервер : " + ServerName); } } else { __.Print("", " Ошибка подключения к серверу !"); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } Command = new CCommand(Connection); if (Command.IsOpen()) { if (DEBUG) { __.Print(" База данных : " + DataBase); } } else { __.Print("", " Ошибка подключения к базе данных !"); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } System.Console.Title = System.Console.Title + " | " + ServerName + "." + DataBase; // ----------------------------------------------------- // Вычитываем из БД информацию про МФО и дебет-счет BankCode = ( string )__.IsNull(Command.GetScalar(" select Code from dbo.vMega_Common_MyBankInfo with ( NoLock ) "), CAbc.EMPTY); if (BankCode == null) { BankCode = "351629"; } else if (__.IsEmpty(BankCode)) { BankCode = "351629"; } if (!PayRoll.GetDebitInfo(Command)) { Command.Close(); Connection.Close(); PayRoll.Close(); return; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // считываем настройки шлюза в ЕРЦ ErcDate = ( int )__.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;7 "), (int)0); if (ErcDate < 1) { __.Print(" Ошибка определения даты текущего рабочего дня. "); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } OgConfig = new COpengateConfig(); OgConfig.Open(ErcDate); if (!OgConfig.IsValid()) { __.Print(" Ошибка чтения настроек программы из " + OgConfig.Config_FileName()); __.Print(OgConfig.ErrInfo()); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } SeanceNum = ( int )__.IsNull(Command.GetScalar(" exec dbo.pMega_OpenGate_Days;4 @TaskCode='" + TASK_CODE + "',@ParamCode='NumSeance' "), (int)0); if (SeanceNum < 1) { __.Print(" Ошибка определения номера сеанса "); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } TodayDir = (string)OgConfig.TodayDir(); TmpDir = (string)OgConfig.TmpDir(); StatDir = (string)OgConfig.StatDir(); if ((TodayDir == null) || (InputDir == null)) { __.Print(" Ошибка чтения настроек программы из " + OgConfig.Config_FileName()); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } TodayDir = TodayDir.Trim(); StatDir = StatDir.Trim(); TmpDir = TmpDir.Trim(); if (!__.DirExists(TodayDir)) { __.MkDir(TodayDir); } if (!__.DirExists(StatDir)) { __.MkDir(StatDir); } if (!__.DirExists(TmpDir)) { __.MkDir(TmpDir); } if (!__.SaveText(StatDir + "\\" + "test.dat", "test.dat", CAbc.CHARSET_DOS)) { __.Print(" Ошибка записи в каталог " + StatDir); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } __.DeleteFile(StatDir + "\\" + "test.dat"); LogFileName = OgConfig.LogDir() + "\\SEANS" + SeanceNum.ToString("000") + ".TXT"; Err.LogTo(LogFileName); __.AppendText(LogFileName, __.Now() + " " + __.Upper(__.GetUserName()) + " загружает файл " + CleanFileName + CAbc.CRLF, CAbc.CHARSET_WINDOWS); TmpFileName = TodayDir + CAbc.SLASH + CleanFileName; if (!__.FileExists(TmpFileName)) { __.CopyFile(FileName, TmpFileName); } if (!__.FileExists(TmpFileName)) { __.Print(" Ошибка записи файла " + TmpFileName); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } TmpFileName = TmpDir + CAbc.SLASH + __.Right("0" + __.Hour(__.Clock()).ToString(), 2) + __.Right("0" + __.Minute(__.Clock()).ToString(), 2) + __.Right("0" + __.Second(__.Clock()).ToString(), 2); if (!__.DirExists(TmpFileName)) { __.MkDir(TmpFileName); } PayRoll.CopyTempFile(TmpFileName); TmpFileName = TmpFileName + CAbc.SLASH + CleanFileName; PayRoll.CopyTempFile(TmpFileName); if (__.FileExists(TmpFileName)) { __.DeleteFile(TmpFileName); } if (__.FileExists(TmpFileName)) { __.Print("Ошибка удаления файла ", TmpFileName); Command.Close(); Connection.Close(); PayRoll.Close(); __.Print("", "Для выхода нажмите ENTER."); CConsole.WaitForEscOrEnter(); return; } __.CopyFile(FileName, TmpFileName); if (DEBUG) { __.Print(" Беру настройки шлюза здесь : " + OgConfig.Config_FileName()); } // ----------------------------------------------------- // Проверяем пачку AboutError = PayRoll.CheckAll(Command, BankCode); if (AboutError != CAbc.EMPTY) { __.Print(AboutError); __.AppendText(LogFileName, CAbc.CRLF + AboutError + CAbc.CRLF, CAbc.CHARSET_WINDOWS); SavedColor = CConsole.BoxColor; CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; if (!CConsole.GetBoxChoice(" При проверке файла обнаружены ошибки !" , " Для отмены загрузки нажмите ESC . " , " Для продолжения - ENTER ." ) ) { __.AppendText(LogFileName, CAbc.CRLF + __.Now() + " загрузка отменена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS); CConsole.BoxColor = SavedColor; Command.Close(); Connection.Close(); PayRoll.Close(); return; } CConsole.BoxColor = SavedColor; } else { if (!CConsole.GetBoxChoice(" При проверке файла ошибок не найдено." , " Для загрузки нажмите ENTER . " , " Для выхода - ESC." ) ) { __.AppendText(LogFileName, CAbc.CRLF + __.Now() + " загрузка отменена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS); Command.Close(); Connection.Close(); PayRoll.Close(); return; } } // ----------------------------------------------------- // Загружаем пачку if (!PayRoll.InsertAll(Command, BankCode)) { SavedColor = CConsole.BoxColor; CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.GetBoxChoice(CAbc.EMPTY, " При загрузке файла были ошибки !", CAbc.EMPTY); CConsole.BoxColor = SavedColor; } // ----------------------------------------------------- Command.Close(); Connection.Close(); PayRoll.Close(); __.AppendText(LogFileName, CAbc.CRLF + __.Now() + " загрузка завершена. " + CAbc.CRLF, CAbc.CHARSET_WINDOWS); } //FOLD00
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Запуск списка регламентных процедур на Sql-сервере static bool StartSqlRoutine(string CmdText) { CConnection Connection2; bool Result = true; if (CmdText == null) { return(false); } if (CmdText.Trim() == "") { return(false); } CArray CommandList = new CArray(); CArray NamesList = new CArray(); CConsole.ShowBox("", "Выполнение команды на сервере", ""); Connection = new CConnection(ConnectionString); RecordSet = new CRecordSet(Connection); if (RecordSet.Open(CmdText)) { while (RecordSet.Read()) { NamesList.Add(RecordSet["Name"]); CommandList.Add(RecordSet["Command"]); } } else { Result = false; } CConsole.Clear(); RecordSet.Close(); string Cmd = CAbc.EMPTY , Msg = CAbc.EMPTY , Results = CAbc.EMPTY; CCommand Command = new CCommand(Connection); for (int I = 0; I < NamesList.Count; I++) { CCommon.Print(NamesList[I] + " - выполняется."); CConsole.ShowBox("", "Выполнение команды на сервере", ""); Cmd = DateSubstitution((string)CommandList[I]); CmdText = " exec dbo.Mega_Common_WriteToLoginfo " + " @TaskCode='Mega_Day_Routine-" + Mode.ToString().Trim() + "'" + ",@Info='start : " + Cmd + "'"; Command.Execute(CmdText); Connection2 = new CConnection(ConnectionString); RecordSet = new CRecordSet(Connection2); RecordSet.Timeout = 599; if (RecordSet.Open(Cmd)) { Msg = (string)NamesList[I]; int Count = 0; if (RecordSet.Read()) { do { Count++; }while (RecordSet.Read()); } Msg = NamesList[I] + " - OK." + ((Count > 0) ? " ( " + Count.ToString() + " row(s) affected )" : ""); } else { Result = false; Msg = NamesList[I] + " - Ошибка !"; } RecordSet.Close(); Connection2.Close(); CmdText = " exec dbo.Mega_Common_WriteToLoginfo " + " @TaskCode='Mega_Day_Routine-" + Mode.ToString().Trim() + "'" + ",@Info='stop : " + Cmd + "'"; Command.Execute(CmdText); CmdText = " exec dbo.Mega_Common_WriteToLoginfo " + " @TaskCode='Mega_Day_Routine-" + Mode.ToString().Trim() + "'" + ",@Info='" + Msg.Replace("'", "`") + "'"; Command.Execute(CmdText); Err.Print(CAbc.TAB + CAbc.TAB + Msg + CAbc.CRLF); CConsole.Clear(); Results += Msg + CAbc.CRLF; CCommon.Write(Results); } Connection.Close(); CCommon.Print(CAbc.EMPTY, CAbc.EMPTY, "Готово. Для продолжения нажмите Enter."); CConsole.ClearKeyboard(); CConsole.Flash(); CConsole.ReadChar(); return(Result); }
} //FOLD00 // Разпознание колонок входного файла public bool Preview() //fold00 { int Choice = 0; const int MAX_COL = 100; // Максимальное кол-во столбцов в файле string[] Lines = new string[HEIGHT]; int[] Sizes = new int[MAX_COL]; if (!Reader.Open(FileName, CharSet)) { Reader.Close(); return(false); } TotalLines = Reader.Count; int I, LineNum = 0; for (I = 0; I < MAX_COL; I++) { Sizes[I] = 0; } for (I = 0; I < HEIGHT; I++) { Lines[I] = CAbc.EMPTY; } while (Reader.Read()) { if (++LineNum > HEIGHT - 2) { break; } for (I = 1; (I < MAX_COL) && (I <= Reader.FieldCount); I++) { Sizes[I] = (Reader[I].Trim().Length > Sizes[I]) ? Reader[I].Trim().Length : Sizes[I]; Lines[LineNum - 1] += ( (I > 1) ? TAB.ToString() : CAbc.EMPTY ) + __.FixUkrI(Reader[I].Trim()); } } Reader.Close(); if (LineNum == 0) { return(false); } string Line; string[] Columns; CConsole.Clear(); TotalColumns = 0; for (I = 0; I < LineNum; I++) { if (Lines[I] == null) { break; } if (Lines[I] == CAbc.EMPTY) { break; } Columns = Lines[I].Split(TAB); if (Columns == null) { continue; } if (Columns.Length == 0) { continue; } Line = " "; int J = 0; foreach (string Column in Columns) { Line += ( (J > 0) ? " | " : CAbc.EMPTY ) + __.Left(Column, Sizes[J + 1]); J++; } TotalColumns = (J > TotalColumns) ? J : TotalColumns; __.Print(__.Left(Line, WIDTH - 1)); } if (TotalColumns == 0) { return(false); } __.Print(__.Replicate("_", WIDTH - 1), "Для продолжения нажмите ENTER.Для выхода - ESC."); if (!CConsole.WaitForEscOrEnter()) { return(false); } for (int J = 0; J < TotalColumns; J++) { CConsole.Clear(); for (I = 0; (I < LineNum) && (I < HEIGHT - 1); I++) { Columns = Lines[I].Split(TAB); if (Columns == null) { continue; } if (Columns.Length <= J) { continue; } __.Print(__.Left(Columns[J], WIDTH - 1)); } int MenuCount = 1; if (FieldFromFile[FLD_SUMA] == 0) { MenuCount++; } if (FieldFromFile[FLD_CREDITACC] == 0) { MenuCount++; } if (FieldFromFile[FLD_CREDITNAME] == 0) { MenuCount++; } if (FieldFromFile[FLD_CREDITSTATE] == 0) { MenuCount++; } string[] MenuItems = new string[MenuCount]; int[] MenuKinds = new int[MenuCount]; I = 0; MenuItems[I] = " ( пропустить ) "; MenuKinds[I] = 0; if (FieldFromFile[FLD_SUMA] == 0) { I++; MenuItems[I] = " сумма"; MenuKinds[I] = FLD_SUMA; } if (FieldFromFile[FLD_CREDITACC] == 0) { I++; MenuItems[I] = " кредит-счет"; MenuKinds[I] = FLD_CREDITACC; } if (FieldFromFile[FLD_CREDITNAME] == 0) { I++; MenuItems[I] = " название кт.счета"; MenuKinds[I] = FLD_CREDITNAME; } if (FieldFromFile[FLD_CREDITSTATE] == 0) { I++; MenuItems[I] = "идент код. кт.счета"; MenuKinds[I] = FLD_CREDITSTATE; } Choice = CConsole.GetMenuChoice(MenuItems); if (Choice == 0) { break; } if (Choice > 1) { FieldFromFile[MenuKinds[Choice - 1]] = J + 1; } } return(true); } //FOLD00
} //FOLD00 // Получение информации о дб.счете public bool GetDebitInfo(CCommand Command) //fold00 { string[] MenuItems = new string[6]; bool Choice = false; string CmdRes = CAbc.EMPTY , CmdText = CAbc.EMPTY , SavedCode = CAbc.EMPTY; do { do { if (FieldValues[FLD_DEBITACC] == CAbc.EMPTY) { __.Print(CAbc.EMPTY); __.Write("Введите номер дебет.счета : "); FieldValues[FLD_DEBITACC] = __.Input().Trim(); } CmdText = " select Convert(Char(16),LTrim( a.StateCode ) ) + LTrim( a.ShortName ) " + " from dbo.SV_Accounts as a with ( NoLock ) where a.SubCount=0 " + " and a.Code='" + __.GetCodeByMoniker(FieldValues[FLD_DEBITACC]) + "'"; CmdRes = (string)Command.GetScalar(CmdText); if (CmdRes == null) { FieldValues[FLD_DEBITACC] = CAbc.EMPTY; } else if (CmdText.Length < 16) { FieldValues[FLD_DEBITACC] = CAbc.EMPTY; } else { FieldValues[FLD_DEBITSTATE] = CmdRes.Substring(0, 16).Trim(); FieldValues[FLD_DEBITNAME] = __.FixUkrI(CmdRes.Substring(16).Trim()); } } while (FieldValues[FLD_DEBITACC] == CAbc.EMPTY); MenuItems[0] = "Дебет.счет : " + FieldValues[FLD_DEBITACC]; MenuItems[1] = "Идент.код : " + FieldValues[FLD_DEBITSTATE]; MenuItems[2] = __.Left("'" + FieldValues[FLD_DEBITNAME].Trim() + "'", 36); MenuItems[3] = "_____________________________________"; MenuItems[4] = "Для продолжения нажмите ENTER."; MenuItems[5] = "Для отмены ESC."; Choice = CConsole.GetBoxChoice(MenuItems); if (!Choice) { FieldValues[FLD_DEBITACC] = CAbc.EMPTY; } else if (__.FileExists(ModelFileName)) { __.DeleteFile(ModelFileName); } } while (!Choice); CConsole.Clear(); if ((FieldFromFile[FLD_SUMA] < 1) || (FieldFromFile[FLD_SUMA] == null)) { byte SavedColor = CConsole.BoxColor; CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.GetBoxChoice("Не указана колонка с суммой !", "", "Для выхода нажмите ENTER."); CConsole.BoxColor = SavedColor; return(false); } __.Write(" Назначение платежа ( " + FieldValues[FLD_PURPOSE] + ") : "); string Purpose = __.Input().Trim(); if (Purpose.Length > 1) { FieldValues[FLD_PURPOSE] = __.FixUkrI(Purpose); } __.Write(" Нумеровать документы с номера ( " + FieldValues[FLD_CODE] + " ) : "); string Code = __.Input().Trim(); if (Code.Length > 0) { FieldValues[FLD_CODE] = Code; } FieldValues[FLD_CODE] = (__.CLng(FieldValues[FLD_CODE]) - 1).ToString(); __.Write(" Вводить датой ( " + __.StrD(DayDate, 8, 8).Replace(",", ".") + " ) : "); Code = __.Input().Trim(); if (Code.Length > 0) { if (__.GetDate(Code) > 40000) { DayDate = __.GetDate(Code); } } // ------------------------------------------------------------- if (!Reader.Open(FileName, CharSet)) { Reader.Close(); return(false); } TotalLines = 0; SavedCode = FieldValues[FLD_CODE]; while (Reader.Read()) { PrepareFields(); TotalLines++; TotalSum += __.CLng("0" + FieldValues[FLD_SUMA].Trim()); } FieldValues[FLD_CODE] = SavedCode; Reader.Close(); bool Result = CConsole.GetBoxChoice( " Всего строк : " + __.Right(TotalLines.ToString(), 11) , " Общая сумма : " + __.StrN(TotalSum / 100, 11).Replace(",", ".") , "_________________________________" , " Для продолжения нажмите ENTER." , " Для выхода - ESC. " ); return(Result); } //FOLD00
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - public static void Main() { const bool DEBUG = false; CParam Param = new CParam(); int Choice = 0; bool Result = false; byte SavedColor = 7; string OutputDir = CAbc.EMPTY; string ScroogeDir = CAbc.EMPTY; string ServerName = CAbc.EMPTY; string DataBase = CAbc.EMPTY; string LogFileName = CAbc.EMPTY; string UnsolverBillsCmdText = CAbc.EMPTY; int UnsolvedBillsExists = 0; string[] Titles = { "ОТКРЫТИЕ ДНЯ", "ЗАКРЫТИЕ ДНЯ" }; string[] LogFileNames = { "dayopen.log", "dayclose.log" }; string NOW_STR = CCommon.StrD(CCommon.Today(), 10, 10).Substring(6) + CCommon.StrD(CCommon.Today(), 10, 10).Substring(2, 4) + CCommon.StrD(CCommon.Today(), 10, 10).Substring(0, 2); Err.LogToConsole(); CConsole.Clear(); CCommon.Print(" Оболочка открытия и закрытия дня в `Скрудже`. Версия 3.13 от 02.10.2018г.", ""); if (DEBUG) { Mode = 1; } else if (CCommon.IsEmpty(Param["Mode"])) { CCommon.Print("Не указан режим работы программы !"); } else { switch (Param["Mode"].ToUpper()) { case "OPEN": { Mode = 1; break; } case "CLOSE": { Mode = 2; break; } default: { CCommon.Print("Неверно указан режим работы программы !"); break; } } } if ((Mode != 1) && (Mode != 2)) { return; } if ((Mode == 2) && (!CCommon.DirExists("Z:\\"))) { SavedColor = CConsole.BoxColor; CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.ShowBox("", "Не подключен Z:\\", ""); CConsole.ClearKeyboard(); CConsole.ReadChar(); CConsole.BoxColor = SavedColor; CConsole.Clear(); CConsole.ShowCursor(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Запрос пользователю на ввод даты дня, который открывается или закрывается while (DayDate == 0) { switch (Mode) { case 1: { CCommon.Write("Какую дату открываем ? ( " + NOW_STR.Replace("/", ".") + " ) "); break; } default: { CCommon.Write("Какую дату закрываем ? ( " + NOW_STR.Replace("/", ".") + " ) "); break; } } Answer = CCommon.Input().Trim(); if (Answer == "") { DayDate = CCommon.Today(); } else { DayDate = CCommon.GetDate(Answer); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - Scrooge2Config = new CScrooge2Config(); if (!Scrooge2Config.IsValid) { CCommon.Print(Scrooge2Config.ErrInfo); return; } ScroogeDir = (string)Scrooge2Config["Root"]; OutputDir = (string)Scrooge2Config["Output"]; ServerName = (string)Scrooge2Config["Server"]; DataBase = (string)Scrooge2Config["DataBase"]; if (ScroogeDir == null) { CCommon.Print(" Не найдена переменная `Root` в настройках `Скрудж-2` "); return; } if (ServerName == null) { CCommon.Print(" Не найдена переменная `Server` в настройках `Скрудж-2` "); return; } if (DataBase == null) { CCommon.Print(" Не найдена переменная `Database` в настройках `Скрудж-2` "); return; } CCommon.Print(" Беру настройки `Скрудж-2` здесь : " + ScroogeDir); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ConnectionString = "Server=" + ServerName + ";Database=" + DataBase + ";Integrated Security=TRUE;"; Connection = new CConnection(ConnectionString); if (Connection.IsOpen()) { CCommon.Print(" Сервер " + ServerName); CCommon.Print(" База " + DataBase + CAbc.CRLF); } else { CCommon.Print(CAbc.CRLF + " Ошибка подключения к серверу !"); return; } System.Console.Title = " " + Titles[Mode - 1] + " | " + ServerName + "." + DataBase; Command = new CCommand(Connection); int IsFullAccess = ( int )CCommon.IsNull(Command.GetScalar(" select dbo.Fn_IsFullAccess( DEFAULT ) "), (int)0); string InfNBU_OutPath = ( string )CCommon.IsNull(Command.GetScalar(" exec dbo.Mega_Day_Open;5 @Mode=2 ; "), (string)CAbc.EMPTY); if (Mode == 2) { // Записываю в историю логин пользователя, который закрывает день Command.Execute(" exec dbo.Mega_Day_Close;12 @DayDate = " + DayDate.ToString() + " , @UserCode = '" + UserCode + "' "); // Проверка : имеются ли непроведенные документы ? UnsolverBillsCmdText = " If Exists ( select 1 from dbo.Mega_SV_WaitingBills with (NoLock) where (DayDate=" + DayDate.ToString() + " ) and ((PermitFlag & 255 )!=255) and ((ProcessFlag & 3)!=3) ) select Convert(Integer,1) else select Convert(Integer,0) "; UnsolvedBillsExists = ( int )CCommon.IsNull(Command.GetScalar(UnsolverBillsCmdText), (int)0); } Command.Close(); Connection.Close(); if (IsFullAccess < 1) { CCommon.Print(CAbc.CRLF + " Для работы программы пользователю необходим полный доступ в Скрудже !"); return; } InfNBU_OutPath = InfNBU_OutPath.Trim(); if (InfNBU_OutPath.Length == 0) { Err.Print(CCommon.Now().ToString() + "Ошибка определения выходного каталога для ОДБ." + CAbc.CRLF + CAbc.CRLF); } if (UnsolvedBillsExists == 1) { SavedColor = CConsole.BoxColor; CConsole.BoxColor = CConsole.RED * 16 + CConsole.WHITE; CConsole.ShowBox("", "Имеются непpоведенные документы", "", " Пpоведите их или удалите !", ""); CConsole.ClearKeyboard(); CConsole.ReadChar(); CConsole.BoxColor = SavedColor; CConsole.Clear(); CConsole.ShowCursor(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (OutputDir != null) { OutputDir = ScroogeDir + "\\" + OutputDir.Trim(); if (!CCommon.DirExists(OutputDir)) { CCommon.MkDir(OutputDir); } if (CCommon.DirExists(OutputDir)) { OutputDir += "\\" + CCommon.StrD(DayDate, 8, 8).Replace("/", "").Replace(".", ""); if (!CCommon.DirExists(OutputDir)) { CCommon.MkDir(OutputDir); } if (!CCommon.DirExists(OutputDir)) { OutputDir = ScroogeDir + "\\"; } } LogFileName = OutputDir + "\\" + LogFileNames[Mode - 1]; } else { LogFileName = ScroogeDir + "\\" + LogFileNames[Mode - 1]; } Err.LogTo(LogFileName); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Основной цикл программы do { System.Console.Title = " " + Titles[Mode - 1] + " " + CCommon.StrD(DayDate, 8, 8) + " | " + ServerName + "." + DataBase; string[] FilesForMEDOC = CCommon.GetFileList(InfNBU_OutPath + "\\@*.*"); if (FilesForMEDOC != null) { if (FilesForMEDOC.Length > 0) { CConsole.GetBoxChoice( "" , "В каталоге " + InfNBU_OutPath , "Найдены файлы для налоговой @*.*" , "Не забудьте их отправить!" , "" ); } } if (!LoadHistory(Mode)) { Err.Print(CCommon.Now().ToString() + "Ошибка получения с сервера истории работы программы !"); } Choice = CConsole.GetMenuChoice(MenuNames); if (Choice > 0) { Err.Print(CCommon.Now().ToString() + "\t< " + MenuNames[Choice - 1] + " ( " + UserCode + " ) " + CAbc.CRLF); if (!SaveHistory(Mode, Choice)) { Err.Print("Ошибка сохранения на сервере истории работы программы !"); } switch (MenuKinds[Choice - 1].Trim().ToUpper()) { case "EXE.COPY": { Result = StartExeCopy( MacroSubstitution(MenuCommands[Choice - 1]) , MacroSubstitution( DateSubstitution( MenuParams[Choice - 1] ) ) ); break; } case "SQL.CMD": { Result = StartSqlCmd( DateSubstitution( MenuCommands[Choice - 1] ) ); break; } case "SQL.RS": { Result = StartSqlRS( DateSubstitution( MenuCommands[Choice - 1] ) ); break; } case "SQL.ROUTINE": { Result = StartSqlRoutine( DateSubstitution( MenuCommands[Choice - 1] ) ); break; } case "EXC": { Result = StartExc(ScroogeDir , MacroSubstitution( DateSubstitution( MenuCommands[Choice - 1] ) ) ); break; } case "URL.IE": { Result = StartUrl( DateSubstitution( MenuCommands[Choice - 1] ) ); break; } default: { break; } } Err.Print(CCommon.Now().ToString() + "\t " + MenuNames[Choice - 1] + " ( " + Result.ToString() + " ) > " + CAbc.CRLF); } } while (Choice != 0); }