Beispiel #1
0
    // - - - - - - - - - - - - - - - - - - - - - - - - -
    //	Запуск команды на 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);
    }
Beispiel #2
0
	}//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
Beispiel #3
0
	}//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
Beispiel #5
0
    // - - - - - - - - - - - - - - - - - - - - - - - -
    //	Запуск выборки на 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);
    }
Beispiel #6
0
 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);
         }
     }
 }
Beispiel #7
0
    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]);
                }
            }
        }
    }
Beispiel #8
0
    //-----------------------------------------------------------------------------------------
    //	основная программа
    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
Beispiel #10
0
	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
Beispiel #12
0
    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();
    }
Beispiel #13
0
    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();
        }
    }
Beispiel #14
0
    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);
    }
Beispiel #15
0
    //  - - - - - - - - - - - - - - - - - - - - - - - - - -
    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
Beispiel #17
0
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    //	Запуск  списка регламентных процедур на 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
Beispiel #20
0
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    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);
    }