20 октября, суббота 18:54
Bankir.Ru

Объявление

Свернуть
Пока нет объявлений.

Открытие счётов Кворум из сторонней программы.

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Открытие счётов Кворум из сторонней программы.

    Всем добрый день.
    Очень нужно открывать счета в Кворуме из своей программы написанной на Delphi.

    Может кто делал подобное? Поделитесь наработкой плз.

    З.Ы. Точнее сами счета я могу открыть. А вот корректно назначить права на них из моей программы на получается.

    В связи с этим второй вопрос - как формируется значение полей Accounts.RightBuffer и Accounst.ChSum - в особенности интересует последнее поле.

  • #2
    Сообщение от cRazyK Посмотреть сообщение
    Всем добрый день.
    Очень нужно открывать счета в Кворуме из своей программы написанной на Delphi.

    Может кто делал подобное? Поделитесь наработкой плз.

    З.Ы. Точнее сами счета я могу открыть. А вот корректно назначить права на них из моей программы на получается.

    В связи с этим второй вопрос - как формируется значение полей Accounts.RightBuffer и Accounst.ChSum - в особенности интересует последнее поле.
    Судя по всему, контрольная сумма рассчитывалась раньше по следующими функциями

    function GetAccInfoChSum( P: Pointer ): Word;
    var ChStr: string[AccNumLen+CurrCodeOpenDateLen+1];{=19+1}
    begin
    {$ifdef VER_DELPHI}
    P := POINTER (LONGINT(P) - RBOfs);
    {$else}
    PtrRec( P ).Ofs := PtrRec( P ).Ofs - RBOfs;
    {$endif}
    Move( PRBuffer( P )^[0], ChStr[1], AccNumLen );{move AccNum}
    Move( PRBuffer( P )^[CurrCodeOfs], ChStr[AccNumLen+1], CurrCodeOpenDateLen );{move CurrCode&OpenDate}
    ChStr[0] := Chr(SizeOf(ChStr)-1);
    ChStr[SizeOf(ChStr)-1]:=#0;
    GetAccInfoChSum := StringChSum( ChStr );
    end

    procedure SetAccountsChSum( P: Pointer );
    begin
    Word((@PRBuffer(P)^[rlAccounts-SizeOf(Word)])^) := GetAccInfoChSum( P );
    SetBufferChSum( P, rlAccounts, 0 );
    end;

    function StringChSum(s:String):word;
    type PArr=^TArr;
    TArr=array[0..$7F] of word;
    var w,i:word;
    Data:PArr;
    begin
    if s='' then
    begin
    StringChSum:=0;
    exit;
    end;
    Data:=pointer(@s[1]);
    if Boolean(length(S) and 1) then s:=s+#0;
    w:=Data^[0];
    for i:=1 to (Length(s) shr 1)-1 do
    begin
    w:=w xor Data^[i];
    RotateStringL(s);
    end;
    StringChSum:=w;
    end;

    ;
    С уважением,
    Егор

    Комментарий


    • #3
      cRazyK
      У Кворума есть этот функционал в виде библиотеки подключаемой к любому внешнему модулю и для Оракла и для бтрива (заказывали некоторые банки). Обращайтесь, думаю за небольшую плату отдадут.

      Комментарий


      • #4
        Сообщение от Chikov Посмотреть сообщение
        cRazyK
        У Кворума есть этот функционал в виде библиотеки подключаемой к любому внешнему модулю и для Оракла и для бтрива (заказывали некоторые банки). Обращайтесь, думаю за небольшую плату отдадут.
        А как этот модуль назывался???

        Комментарий


        • #5
          Сообщение от Chikov Посмотреть сообщение
          cRazyK
          У Кворума есть этот функционал в виде библиотеки подключаемой к любому внешнему модулю и для Оракла и для бтрива (заказывали некоторые банки). Обращайтесь, думаю за небольшую плату отдадут.
          Точно, называется quorum32.dll. Там большинство функций есть.
          Егор
          С уважением,
          Егор

          Комментарий


          • #6
            Сообщение от Egor_viking Посмотреть сообщение
            Судя по всему, контрольная сумма рассчитывалась раньше по следующими функциями

            function GetAccInfoChSum( P: Pointer ): Word;
            var ChStr: string[AccNumLen+CurrCodeOpenDateLen+1];{=19+1}
            begin
            {$ifdef VER_DELPHI}
            P := POINTER (LONGINT(P) - RBOfs);
            {$else}
            PtrRec( P ).Ofs := PtrRec( P ).Ofs - RBOfs;
            {$endif}
            Move( PRBuffer( P )^[0], ChStr[1], AccNumLen );{move AccNum}
            Move( PRBuffer( P )^[CurrCodeOfs], ChStr[AccNumLen+1], CurrCodeOpenDateLen );{move CurrCode&OpenDate}
            ChStr[0] := Chr(SizeOf(ChStr)-1);
            ChStr[SizeOf(ChStr)-1]:=#0;
            GetAccInfoChSum := StringChSum( ChStr );
            end

            procedure SetAccountsChSum( P: Pointer );
            begin
            Word((@PRBuffer(P)^[rlAccounts-SizeOf(Word)])^) := GetAccInfoChSum( P );
            SetBufferChSum( P, rlAccounts, 0 );
            end;

            function StringChSum(s:String):word;
            type PArr=^TArr;
            TArr=array[0..$7F] of word;
            var w,i:word;
            Data:PArr;
            begin
            if s='' then
            begin
            StringChSum:=0;
            exit;
            end;
            Data:=pointer(@s[1]);
            if Boolean(length(S) and 1) then s:=s+#0;
            w:=Data^[0];
            for i:=1 to (Length(s) shr 1)-1 do
            begin
            w:=w xor Data^[i];
            RotateStringL(s);
            end;
            StringChSum:=w;
            end;

            ;
            А что в эти функции в качестве параметров передавать.

            Комментарий


            • #7
              Так Dll у себя нашёл.
              Может кто описание подкинет?

              Комментарий


              • #8
                Сообщение от cRazyK Посмотреть сообщение
                Так Dll у себя нашёл.
                Может кто описание подкинет?
                Держи header-ы
                Тебе нужен этот:

                unit OpenAccH;

                interface

                {$i libtypes.inc}

                function CheckSymb_Pl(PlCod: Longint; Symb: String): Boolean; Pascal;
                function GetSymb_Pl(PlCod: Longint): String; Pascal;
                function CheckMaskAcc(Mask: String): Boolean; Pascal;
                function CalcNewNum(AccNewPlch, ClientCode: Longint; KindCont: Word; CurrCode, Mask: String): String; Pascal;
                function CreateNewNum(AccNewPlch: Longint; CurrCode, NewAccNum: String): String; Pascal;

                function OpenNewAccount(AccNum, NewAccNum, AccName, CurrCode, ContNum: String; AccNewPlch, ClientCode, OperNum: Longint; ReAccPr, KindCont, DivCode, AccStatus: Word; OpenDate: Date): Boolean; Pascal;

                function OpenNewVBAccount(NewAccNum, AccName, CurrCode: String; AccNewPlch, ClientCode, OperNum: LongInt; OpenDate, AccEndDate: Date): Boolean; Pascal;
                function GetRazd_Rule_Pl(PlCod: Longint): String; Pascal;
                function GetPlCh1Status(Pl1: Word): Word; Pascal;

                implementation

                {$i libnames.inc}

                function CheckSymb_Pl; external Quorum32 name 'CheckSymb_Pl';
                function GetSymb_Pl; external Quorum32 name 'GetSymb_Pl';
                function CheckMaskAcc; external Quorum32 name 'CheckMaskAcc';
                function CalcNewNum; external Quorum32 name 'CalcNewNum';
                function CreateNewNum; external Quorum32 name 'CreateNewNum';
                function OpenNewAccount; external Quorum32 name 'OpenNewAccount';
                function OpenNewVBAccount; external Quorum32 name 'OpenNewVBAccount';
                function GetRazd_Rule_Pl; external Quorum32 name 'GetRazd_Rule_Pl';
                function GetPlCh1Status; external Quorum32 name 'GetPlCh1Status';

                end.
                С уважением,
                Егор

                Комментарий


                • #9
                  Егор.
                  Спасибо за файлик.
                  Попробую.

                  Комментарий


                  • #10
                    Что-то у меня Дельфа в AV выпадает при вызове OpenNewAccount.

                    Может как-то библиотеку инициализировать надо.

                    Есть живой пример?

                    Комментарий


                    • #11
                      а у вас бетрив или оракл?
                      если оракл то вот вам функциевины
                      их можно при желании дорабатывать
                      function ExtOpenAccounts(in_AccNewPlch in s_Accounts.AccNewPlch%TYPE,
                      in_CurrCode in s_Accounts.CurrCode%TYPE,
                      in_AccName in s_Accounts.AccName%TYPE,
                      out_NewAccNum out s_Accounts.NewAccNum%type,
                      in_ContNum in s_Accounts.ContNum%TYPE default '',
                      in_KindCont in s_Accounts.KindCont%TYPE default 6,
                      in_ClientCode in s_Accounts.ClientCode%TYPE default 1)
                      return number is

                      -- Входные данные --
                      -- in_AccNewPlch Accounts.AccNewPlch%TYPE := 40702; -- счет 2 порядка (в данном примере это 40702)
                      -- in_CurrCode Accounts.CurrCode%TYPE := '000'; -- Код валюты (внутренний код валюты (currcode.currency)! в данном примере это код рубля) '000'- рубль)
                      -- in_Opernum Accounts.Opernum%TYPE := 2; -- Ответ. исполнитель (в данном примере это операционист с xu$id=2)
                      -- in_ContNum Accounts.ContNum%TYPE := ''; -- Номер договора (в данном примере это договор с номеро )
                      -- in_KindCont Accounts.KindCont%TYPE := 3; -- Тип договора (в данном примере 3 - это договор на расчетно-кассовое обслуживание)
                      -- in_ClientCode Accounts.ClientCode%TYPE := 1; -- Код клиента владельца счета (в данном примере это клиент с кодом 1)
                      -- in_GrOpernum Accounts.UserGroupCode%TYPE := 1000; -- Код группы (в данном примере это группа с xg$Group=1000)
                      -- in_AccName Accounts.AccName%TYPE; -- Имя счета

                      in_Accnum s_Accounts.Accnum%TYPE := NULL; -- Нужно передавать null !!!!
                      in_ReAccPr s_Accounts.ReAccPr%TYPE := 0; -- Признак переоценки (в данном примере 0 - это переоцениваемый)
                      in_AccStatus s_Accounts.AccStatus%TYPE := 8; -- Статус счета (8 - действующий)

                      ------------------------------------------
                      in_NewAccNum s_Accounts.NewAccnum%TYPE;
                      in_symb VARCHAR2(255) := '';
                      Usercode NUMBER; -- Код пользователя в QUORUM
                      tmp_accnum VARCHAR2(10) := NULL;

                      BEGIN
                      out_NewAccNum := '';

                      -- Инициализируем QUORUM-пользователя
                      -- в Usercode возвращаем Код пользователя в QUORUM
                      -- , соответствующего текущему ORACLE-пользователю
                      -- Достаточно вызвать 1 раз при запуске вашего модуля .
                      IF security.InitOper(Usercode) = 0 THEN
                      DBMS_OUTPUT.put_line('Не могу проинициализировать текущего пользователя !');
                      RETURN 0;
                      END IF;

                      -- Расчет нового номера счета
                      in_NewAccNum := accfunc.CalcAccNum(
                      in_AccNewPlch, in_ClientCode, LIB.GetDivCodeByUser(Usercode), in_CurrCode, in_ContNum, in_symb,
                      tmp_accnum);

                      -- Ключевание нового номера счета
                      IF INSTR(in_NewAccNum, 'Х') > 0 THEN
                      in_NewAccNum := accfunc.NewAccAfterKey(WRKDATE.GetBankNumber, in_NewAccNum);
                      END IF;

                      if common.isNull(in_AccName) then
                      -- Создадим имя по правилам
                      --in_AccName := SUBSTR(accfunc.CalcAccName(in_AccNewPlch, in_ClientCode, LIB.GetDivCodeByUser(Usercode), in_Symb), 1, 48);
                      DBMS_OUTPUT.put_line('Не введено наименование счета!');
                      RETURN 0;
                      end if;


                      -- Собственно открытие счета
                      -- OpenAccUtl.OpenNewAcc возвращает коды ошибок>0
                      -- смысл кодов в теле OpenAccUtl.OpenNewAcc .
                      -- В случае успешного выполнения и если транзакция еще не начата
                      -- функция делает commit
                      -- Заведение счета с указанием группы.
                      IF OpenAccUtl.OPENNEWACCOUNT(
                      in_Accnum, in_NewAccNum, in_AccName, in_CurrCode, in_ContNum, in_AccNewPlch, in_ClientCode, Usercode,
                      in_ReAccPr, in_KindCont, Lib.GetDivCodeByUser(Usercode), in_AccStatus, OpenDay.SeeCurrOperDay) >
                      0 THEN
                      DBMS_OUTPUT.put_line('Ошибка при открытии лицевого счета !');
                      RETURN 0;
                      ELSE
                      DBMS_OUTPUT.put_line('Счет '|| in_NewAccNum || ' успешно открыт .');
                      out_NewAccNum := in_NewAccNum;
                      RETURN 1;
                      END IF;

                      /* Для открытия лицевых внебалансовых счетов
                      нужно использовать вместо OpenAccUtl.OpenNewAcc
                      следующую функцию
                      if OpenAccUtl.OpenNewVBAcc(in_NewAccNum,
                      in_AccName,in_CurrCode,
                      in_AccNewPlch,
                      in_ClientCode,
                      OpenDay.SeeCurrOperDay,
                      Usercode,in_GrOpernum)=0 then
                      MANAGER.PutError('Не могу открыть внебалансовый счет !');
                      end if;
                      */
                      exception
                      when others then
                      DBMS_OUTPUT.put_line('Ошибка при открытии лицевого счета !');
                      RETURN 0;
                      END ExtOpenAccounts;
                      -- jav функция открытия счета end

                      -- jav функция открытия счета begin
                      function ExtOpenAccountsWithDate(in_AccNewPlch in s_Accounts.AccNewPlch%TYPE,
                      in_CurrCode in s_Accounts.CurrCode%TYPE,
                      in_AccName in s_Accounts.AccName%TYPE,
                      in_Hvost in varchar2,
                      in_OpenDate in s_Accounts.OpenDate%TYPE,
                      out_NewAccNum out s_Accounts.NewAccNum%type,
                      in_ContNum in s_Accounts.ContNum%TYPE default '',
                      in_KindCont in s_Accounts.KindCont%TYPE default 6,
                      in_ClientCode in s_Accounts.ClientCode%TYPE default 1)
                      return number is
                      -- Входные данные --
                      -- in_AccNewPlch Accounts.AccNewPlch%TYPE := 40702; -- счет 2 порядка (в данном примере это 40702)
                      -- in_CurrCode Accounts.CurrCode%TYPE := '000'; -- Код валюты (внутренний код валюты (currcode.currency)! в данном примере это код рубля) '000'- рубль)
                      -- in_AccName Accounts.AccName%TYPE; -- Имя счета
                      -- in_Hvost varchar2; -- хвост счета
                      -- in_OpenDate Accounts.OpenDate%TYPE; -- Дата открытия счета

                      -- in_ContNum Accounts.ContNum%TYPE := ''; -- Номер договора (в данном примере это договор с номеро )
                      -- in_KindCont Accounts.KindCont%TYPE := 3; -- Тип договора (в данном примере 3 - это договор на расчетно-кассовое обслуживание)
                      -- in_ClientCode Accounts.ClientCode%TYPE := 1; -- Код клиента владельца счета (в данном примере это клиент с кодом 1)

                      ret number := 0;

                      in_Accnum s_Accounts.Accnum%TYPE := NULL; -- Нужно передавать null !!!!
                      in_ReAccPr s_Accounts.ReAccPr%TYPE := 0; -- Признак переоценки (в данном примере 0 - это переоцениваемый)
                      in_AccStatus s_Accounts.AccStatus%TYPE := 8; -- Статус счета (8 - действующий)

                      ------------------------------------------
                      in_NewAccNum s_Accounts.NewAccnum%TYPE;
                      in_symb VARCHAR2(255) := '';
                      Usercode NUMBER; -- Код пользователя в QUORUM
                      tmp_accnum VARCHAR2(10) := NULL;
                      OurTrans number := Manager.InternalTransaction;

                      BEGIN
                      out_NewAccNum := '';
                      -- а не начать ли нам транзакцию а?
                      IF OurTrans > 1 THEN
                      Manager.BeginTransAction;
                      END IF;

                      -- Инициализируем QUORUM-пользователя
                      -- в Usercode возвращаем Код пользователя в QUORUM
                      -- , соответствующего текущему ORACLE-пользователю
                      -- Достаточно вызвать 1 раз при запуске вашего модуля .
                      IF security.InitOper(Usercode) = 0 THEN
                      DBMS_OUTPUT.put_line('Не могу проинициализировать текущего пользователя !');
                      ret := -1001;
                      raise ACCOUNTS_OPEN_ERROR;
                      -- RETURN 0;
                      END IF;

                      -- Расчет нового номера счета
                      in_NewAccNum := accfunc.CalcAccNumByMask('БББББВВВХ'||lpad(trim(in_Hvost),11,'?'),
                      in_AccNewPlch, in_ClientCode, LIB.GetDivCodeByUser(Usercode), in_CurrCode, in_ContNum, in_symb,
                      tmp_accnum);

                      -- Ключевание нового номера счета
                      IF INSTR(in_NewAccNum, 'Х') > 0 THEN
                      in_NewAccNum := accfunc.NewAccAfterKey(WRKDATE.GetBankNumber, in_NewAccNum);
                      END IF;

                      if common.isNull(in_AccName) then
                      -- Создадим имя по правилам
                      --in_AccName := SUBSTR(accfunc.CalcAccName(in_AccNewPlch, in_ClientCode, LIB.GetDivCodeByUser(Usercode), in_Symb), 1, 48);
                      DBMS_OUTPUT.put_line('Не введено наименование счета!');
                      ret := -1002;
                      raise ACCOUNTS_OPEN_ERROR;
                      -- RETURN 0;
                      end if;


                      -- Собственно открытие счета
                      -- OpenAccUtl.OpenNewAcc возвращает коды ошибок>0
                      -- смысл кодов в теле OpenAccUtl.OpenNewAcc .
                      -- В случае успешного выполнения и если транзакция еще не начата
                      -- функция делает commit
                      -- Заведение счета с указанием группы.
                      ret := OpenAccUtl.OPENNEWACCOUNT(
                      in_Accnum, in_NewAccNum, in_AccName, in_CurrCode, in_ContNum, in_AccNewPlch, in_ClientCode, Usercode,
                      in_ReAccPr, in_KindCont, Lib.GetDivCodeByUser(Usercode), in_AccStatus, OpenDay.SeeCurrOperDay);

                      IF ret > 0 THEN
                      DBMS_OUTPUT.put_line('Ошибка при открытии лицевого счета !');
                      raise ACCOUNTS_OPEN_ERROR;
                      -- RETURN 0;
                      ELSE
                      begin
                      update s_accounts
                      set Priority = ACCOUNTS_PRIORITY_GO
                      where newaccnum = in_NewAccNum;
                      exception
                      when others then
                      manager.puterror('Ошибка при изменении приоритета счета "'||in_NewAccNum||'"');
                      ret := -1003;
                      raise ACCOUNTS_OPEN_ERROR;
                      end;

                      -- а не много ли мы проапдейтили?
                      if SQL%ROWCOUNT > 1 then
                      -- че то не так
                      manager.puterror('Ошибка при изменении приоритета счета "'||in_NewAccNum||'"');
                      ret := -1003;
                      raise ACCOUNTS_OPEN_ERROR;
                      end if;

                      begin
                      update s_accounts
                      set OpenDate = in_OpenDate
                      where newaccnum = in_NewAccNum;
                      exception
                      when others then
                      manager.puterror('Ошибка при изменении даты открытия счета "'||in_NewAccNum||'"');
                      ret := -1004;
                      raise ACCOUNTS_OPEN_ERROR;
                      end;

                      -- а не много ли мы проапдейтили?
                      if SQL%ROWCOUNT > 1 then
                      -- че то не так
                      manager.puterror('Ошибка при изменении даты открытия счета "'||in_NewAccNum||'"');
                      ret := -1004;
                      raise ACCOUNTS_OPEN_ERROR;
                      end if;

                      IF OurTrans > 1 THEN
                      Manager.EndTransAction;
                      END IF;
                      DBMS_OUTPUT.put_line('Счет '|| in_NewAccNum || ' успешно открыт .');
                      out_NewAccNum := in_NewAccNum;
                      RETURN 0;
                      END IF;

                      /* Для открытия лицевых внебалансовых счетов
                      нужно использовать вместо OpenAccUtl.OpenNewAcc
                      следующую функцию
                      if OpenAccUtl.OpenNewVBAcc(in_NewAccNum,
                      in_AccName,in_CurrCode,
                      in_AccNewPlch,
                      in_ClientCode,
                      OpenDay.SeeCurrOperDay,
                      Usercode,in_GrOpernum)=0 then
                      MANAGER.PutError('Не могу открыть внебалансовый счет !');
                      end if;
                      */

                      exception
                      when ACCOUNTS_OPEN_ERROR then
                      IF OurTrans > 1 THEN
                      Manager.AbortTransAction;
                      END IF;
                      -- DBMS_OUTPUT.put_line('Ошибка при открытии лицевого счета !');
                      RETURN ret;
                      when others then
                      IF OurTrans > 1 THEN
                      Manager.AbortTransAction;
                      END IF;
                      DBMS_OUTPUT.put_line('Ошибка при открытии лицевого счета !');
                      RETURN -9999;
                      END ExtOpenAccountsWithDate;
                      -- jav функция открытия счета с изменением даты открытия end

                      Комментарий


                      • #12
                        а еще в последних версиях ошибка есть
                        если у счета наименование больше 80 и включен протокол изменения счетов то работать не будет потому как таблица протокола не расчитана на наименование больше 80 символов

                        Комментарий


                        • #13
                          У нас BTrieve.

                          Комментарий


                          • #14
                            cRazyK Что-то у меня Дельфа в AV выпадает при вызове OpenNewAccount.

                            Может как-то библиотеку инициализировать надо.

                            Надо конечно! И не только библиотеку но и менеджеры всякие...
                            Так что не пытайтесь что-то вытащить из quorum32.dll. Эта библиотека не для этого была реализована.

                            Есть живой пример?

                            Еще раз говорю, что есть не пример, а готовая реализация с подробным описанием. Несколько лет назад лично разрабатывал.
                            Обратитесь в Кворум, может и так отдадут...

                            Комментарий


                            • #15
                              Чтобы Кворум что-то так отдал должен наступить конец света.
                              По крайней мере это справедливо для моего банка.

                              Комментарий


                              • #16
                                cRazyK
                                Рынок, однако...
                                Если будет время, возможно, помогу Вам.

                                Комментарий


                                • #17
                                  Ну так что - больше мыслей нет?

                                  Комментарий


                                  • #18
                                    Сообщение от cRazyK Посмотреть сообщение
                                    Всем добрый день.
                                    Очень нужно открывать счета в Кворуме из своей программы написанной на Delphi.
                                    Проблема всё ещё актуальна.

                                    Может всё-таки кто-то поможет???


                                    З.Ы. Обращение в Кворум просьба не предлагать.

                                    Комментарий


                                    • #19
                                      cRazyK
                                      Запускаешь автомат - кидаешь ему текстовый файлик с желаемым счётом - он тебе открывает счёт и выплевывает тот же текстовый файлик с полным списком параметров открытого счёта ) тупо - но работает

                                      Комментарий


                                      • #20
                                        PowerMan Запускаешь автомат - кидаешь ему текстовый файлик с желаемым счётом
                                        А как же транзакционность?!

                                        Комментарий


                                        • #21
                                          Сообщение от PowerMan Посмотреть сообщение
                                          cRazyK
                                          Запускаешь автомат - кидаешь ему текстовый файлик с желаемым счётом - он тебе открывает счёт и выплевывает тот же текстовый файлик с полным списком параметров открытого счёта ) тупо - но работает
                                          Что за автомат?

                                          У меня кроме автомата с газированной водой ничено нет

                                          Комментарий


                                          • #22
                                            cRazyK
                                            Что за автомат?

                                            У меня кроме автомата с газированной водой ничено нет


                                            УважаемыйPowerMan имел ввиду реализацию процедуры на репортере, которая с какой-то задержкой просматривает по какому-то пути наличие определенного файла с данными по счетам, которые необходимо открыть. При наличие файла открывает счета и кладет результаты в другой файл. Ваша программа формирует даттый файл и читает результаты из файла результатов.
                                            Тупое решение, но работать будет. Правда про транзакционность можете забыть.

                                            Комментарий


                                            • #23
                                              Сообщение от Chikov Посмотреть сообщение
                                              cRazyK
                                              Что за автомат?

                                              У меня кроме автомата с газированной водой ничено нет


                                              УважаемыйPowerMan имел ввиду реализацию процедуры на репортере, которая с какой-то задержкой просматривает по какому-то пути наличие определенного файла с данными по счетам, которые необходимо открыть. При наличие файла открывает счета и кладет результаты в другой файл. Ваша программа формирует даттый файл и читает результаты из файла результатов.
                                              Тупое решение, но работать будет. Правда про транзакционность можете забыть.
                                              Ясно.

                                              А ещё можно в заданный момент времени запустить например Accl,
                                              послать ему коды клавиш на запуск нужной процедуры и закрыть.
                                              И крутиться в фоне постоянно ничего не будет.

                                              Комментарий


                                              • #24
                                                поделитесь dll, вместе поковыряем

                                                Комментарий


                                                • #25
                                                  Ловите!

                                                  Комментарий


                                                  • #26
                                                    Chikov Огромное спасибо.
                                                    Буду пробовать.

                                                    Комментарий


                                                    • #27
                                                      Chikov При попытке выполнить InitManagers
                                                      пишет "Не открылись таблицы прав доступа".

                                                      Чего он хочет?

                                                      Комментарий


                                                      • #28
                                                        А затем Таблица "Параметры операционного дня" не заполнена.
                                                        И вываливается с ошибкой.

                                                        Комментарий


                                                        • #29
                                                          cRazyK
                                                          Нужно прописать в реестре путь на словарь и базу.

                                                          Комментарий


                                                          • #30
                                                            Chikov Прописано.

                                                            Комментарий

                                                            Пользователи, просматривающие эту тему

                                                            Свернуть

                                                            Присутствует 1. Участников: 0, гостей: 1.

                                                            Обработка...
                                                            X