Обсуждение:Длм-ка dtb.d32 - объекты для разработки своих консольных приложений (+)

0 (0)
  • Развернуть Обсуждение:Длм-ка dtb.d32 - объекты для разработки своих консольных приложений (+) ( Обсуждение примера  11.11.2003 16:31 )
    5(1)
    Средство разработки своих консольных форм и их объектов + объекты для доступа к данным и фильтрации
    22.02.2006 В примеры добвлен макрос dtbconsole.mac, который будет содержать
    функции, эмулирующие РСЛ-ные консольные функции (для режима "DTB
    under GUI"). Пока там dtb_MsgBox и dtb_MsgBoxEx.
    18.02.2006 Сделаны доступными функции:
    dtb_ScreenSize - Возвращает размеры консольного экрана
    SetConsoleScreenBufferSize - Устанавливает размер экрана. Но
    только в сторону увеличения раз-меров.
    dtb_GetConsoleTitle - Возвращает заголовок консоли
    dtb_SetConsoleTitle - Устанавливает заголовок консоли
    dtb_CreateConsole - Создает консоль (только в режиме "DTB under GUI")
    dtb_DeleteConsole - Уничтожает консоль (только в режиме "DTB under GUI")
    dtb_CheckConsole - Проверяет режим приложения
    dtb_DisableClose - Отключает "крестик", которым можно закрыть консольное окно
    Исправлен метод TlgList.Del(TlgNode * node). При удалении первого узла
    программа падала. Теперь все ОК.

    13.02.2006 Бета-версия. Длм-ка переписана для работы под графическим приложением
    (например по интерфейсом EasyWin). Если приложение не консольное, то при
    первом вызове консольных функций создается отдельное консольное окно.
    Реализована эмуляция всех fs-функций, кроме fs_wrtMarkStr.
    Не реализована пока эмуляция функций: MsgBox, MsgBoxEx, InitProgress,
    UseProgress, RemProgress, GetInt (все Get-ы), menu.
    Вместо message() юзайте dtb_message().
    Под XP (наверное и под 2000) у консольного окна можно через "Свойства"
    окна задать шрифт и размеры окна, и применить их для "всех окон с тем же
    именем", тогда эти настройки будут использованы в дальнейшем.
    Для терминала теперь достаточно одной длм-ки t_textgp.d32. В ней объеди-
    нены функции обмена терминал-сервер с упаковкой и без. При этом в направ-
    лении сервер-терминал, если упакованный буфер больше неупакованного, то
    посылается неупакованный. t_textga.d32 больше не используется.
    Исправлено некорретное сохранение и восстановление строки статуса, сфор-
    мированной приложением до запуска первой формы dtb. Ранее считалось, что
    это 24-ая строка (нумерация с 0) с шириной 80 символов. При закрытии пос-
    ледней формы на окне с размерами буфера больше 25 х 80 выводилась строка
    с пробелами. Теперь сохраняется и восстанавливается по факту (определяются
    размеры экрана и т.д.).
    16.09.2005 Введено свойство TlgNode.Value аналогичное TlgNode.Object.
    Конструктор TlgFile теперь поддерживает контейнер на основе ADO-
    RecordSet, созданного rsax.d32.
    15.09.2005 Немного изменен алгоритм определения местонахождения TlgFile при
    открытии. Теперь, если в TlgFile.Open не задан путь к файлу, то
    сначала определяется путь местонахождения словаря и подставляется к
    файлу, если же он не задан - берется стандартный каталог данных.
    07.09.2005 При присвоении TlgField значения типа V_UNDEF стандартная функция
    dlm-ки ValueCopy вызывала сбой программы. Теперь эта ситуация обой-
    дена.
    01.08.2005 Исправлена работа TlgFile. Если по полю в ключе одновременно стоят
    ограничения по SetMinMax и SetValues, то это будет корректно отраба-
    тываться. Добавлено свойство bool TlgField.InValues - значение поля
    соответствует SetValues или нет.
    В TjkEdit дата по умолчанию теперь выводится в виде "dd.mm.yyyy".
    26.05.2005 Новое свойство int TlgField.ToType. Содержит код типа, в который
    автоконвертируется TlgField.Value во время метода Get. Например,
    у вас поле в базе типа V_STRING, содержит только цифры. Тогда, за-
    дав ToType=V_INTEGER, вы получите автоконвертирование в целое зна-
    чение. Если ToType=0 (по умолчанию) или равно текущему типу поля,
    конвертации не происходит. При использовании автоконвертации в гриде
    желательно устанавливать у поля грида Length, равным его Width.


    Посмотреть пример
    >> Ответить
    • Развернуть Работа в 3-х звенке ( omm  18.02.2004 05:30 )
      0(0)
      При вызове метода формы в 3-х звенке программа зависает, а в 2-х звенке работает все нормально. В чем может быть причина?
      P.S.: файлы для терминальной части лежат в C:\Terminal
      >> Ответить
    • Развернуть Изменения в dtb.d32 (+) ( григ  05.03.2004 10:30 )
      0(0)
      04.03.2004 Добавлено свойство TlgFile.FormatCurrency для более гибкого регулиро-
      вания формата денежных полей в файле. Возможные значения:
      0 - зависит от глобальных установок dtbSetCurrency (по умолчанию)
      1 - старый формат 10-ти байтовый long double (LDMON)
      2 - новый формат 8-ми байтовый целый (Currency).
      Также модернизирован метод TlgField.Set. Теперь новое значение
      предварительно приводится к типу поля (для невычисляемых полей).

      >> Ответить
    • Развернуть Где файлы библиотеки dtb? ( Iv  20.07.2004 16:29 )
      0(0)
      В представленной архивном файле sample166.zip находятся только примеры, а самой библиотеки dtb нет.
      >> Ответить
    • Развернуть Как узнать размеры окна консоли ( Iv  22.07.2004 10:06 )
      0(0)
      Существует ли функция в dtb с помощью которой можно было бы узнать размеры окна консоли? Или есть стандартные функции в RSL?
      >> Ответить
    • Развернуть Не работает в БОУРМ TlgFile. ( Iv  27.07.2004 10:26 )
      0(0)
      На строку в макросе:
       TlgFile("..\\DBFile\\clbpDoc.dbt", "..\\DBFile\\clntbnk.def"); 
      Выдаются сообщения
      1. Неверный ключ 2 в ..\dbfile\clntbnk.def
      2. TlgDef: нет в словаре файла ..\DBFile\clbpDoc.dbt!
      3. TlgFile не создан!

      Возможно ли вообще нормальная работа dbt в БОУРМЕ?
      >> Ответить
    • Развернуть Не работает пример использования источника данных ADO в гриде dtb ( Iv  30.07.2004 18:09 )
      0(0)
      Файл dtb_ado.mac.
      При запуске макроса ругается на строку
      File0.First;
      Текст сообщения:

      Ошибка dtb_ado.mac
      Строка 43
      Ошибка выполнения : Invoke, ошибка вызова свойства/метода DISP_E_EXCEPTION

      Хотя сам SQL-запрос работает
      >> Ответить
    • Развернуть Ошибка в макросе после обновления версии dtb ( alexeaa207  03.12.2004 09:29 )
      0(0)
      После обновления версии dtb стала появляться ошибка типа "Не определена операция Money + MoneyL"

      В Макросе примерно следующее:

      pd = TlgFile("pay_doc.dbt") /* файл из RS-Retail*/

      pd.AddAllFields;
      pdInSum = pd.AddField("InSum");
      pd.Open(0,-2);

      Total = $0;

      pd.First;
      While(NOT pd.eof)
      Total = Total + pdInSum.Value; /* ругается на этот оператор */
      end;


      Пробовал задавать dtbSetCurrency(False,True) - не помогло
      Пробовал явно задавать pd.FormatCurrency = 2 - не помогает.

      В чем может быть дело? (и где взять последнюю доку, а то у меня очень древняя)

      dtb.d32 размер 786432 от 02.12.04
      >> Ответить
    • Развернуть Теряется связка с мастер-файлом ( mlv  23.12.2004 17:22 )
      0(0)
      Мастер-файл и текущий файл связаны по полю, которое в ключе подчиненного файла идет вторым. На первое поле в ключе подчиненного файла наложен SetMinMax и Max>Min. Как сделать так, чтобы отрабатывалось движение при всех значениях первого поля из заданного диапазона, при хорошем быстродействии.
      >> Ответить
    • Развернуть Как "подружить" TlgFile и TRecHandler (или TbFile) ( alexeaa207  28.02.2005 13:44 )
      0(0)
      Имеется давний макрос, которому в качестве параметра передается rr - типа Record.

      Теперь понабилось использовать вызов этот макроса из программы, которая работает уже с TlgFile.
      Можно использовать GetBufer, но проблема в том, что хочется отказаться от Record совсем, чтобы в определении использовать имя словаря в качестве переменной (record требует явный строковый литерал)

      Пример.(сейчас)

      Файл tst1.mac

      Macro tstFunct( rr ) /* вызывется в массе других программ, так что переделывать его не хочется*/
      println(rr.Sum);
      end;

      Файл tstMain

      record rr ("postdoc.dbt","n:\\dbfile\\bank.def") /* работа с БД RS-BANK 5.0 из RS-Retail, в котором другая структура postdoc*/

      fil = TlgFile("postdoc.dbt", GetINIString("MYDISTDBFILE")+"\\bank.def");
      fil.Open;
      .....


      rr = fil.GetBufer;
      tstFunct(rr);

      Хочется избавиться от явного имени словаря в объявлении record (например использованием TRecHandler)

      При этом решение

      rr = TRecHandler("postdoc.dbt", GetINIString("MYDISTDBFILE")+"\\bank.def");
      rr.SetRecordAddr( fil.GetBufer );

      не проходит. Т.е., ругаться-то не ругается, но и к полям записи неверно обращается

      Есть ли выход?

      >> Ответить
    • Развернуть При обращении через ADODB к MS SQL серваку вылетает ошибка: ( Smolenkov  29.03.2005 17:01 )
      0(0)
      ┌──────────────────────────────────────────────────────────────────────┐
      │                            ActiveX Error:                            │
      │ [Microsoft][ODBC SQL Server Driver][SQL Server]Could not find stored │
      │                        procedure 'ToString'.                         │
      │                              (80040E14)                              │
      └──────────────────────────────────────────────────────────────────────┘
      
      1.Подключаемся через АДО к серваку.
      2. Делаем запрос (select)
      3. Кол-во выбранных записей > 0
      4. File0=TlgFile(rs), где rs - RecordSet с выборкой.
      5. Создаем Grid0 с Grid0.Source=File0
      6. Начинаем цеплять поля к Grid0: Grid0.AddField(File0.GetField("XXXXXX")); (или ...AddField(XXXXXX) - где XXXXXX объявлется как поле после (4))
      7. На 6-ом шаге получаем выше описанную ошибку с сообением от DTB: "Ошибка выполнения :Метод AddField:нет источника данных для навигации"
      Что я делаю не так? (что мало вероятно) если это ошибка разработчиков DLM, то когда нужно исправиться :))

      >> Ответить
    • Развернуть Работа с GRID-ом ( Iv  22.04.2005 12:30 )
      0(0)
      Можно ли в одной колонке GRID-а выводить значения нескольких полей dbt-файла
      >> Ответить
    • Развернуть Можно ли сделать ячейку Grid-а редактируемой? ( Iv  11.07.2005 11:16 )
      0(0)
      Можно ли сделать ячейку Grid-а редактируемой?
      >> Ответить
    • Развернуть Глюк при определении источника данных в Гриде? ( Iv  13.07.2005 15:45 )
      0(0)
      Не правильно определяется источник данных.
      Если
      L1 = TlgList("List1");
      G1 = Form1.AddGrid(6);
      T1 = G1.AddField(L1);
      
      Тогда при
       G1.Field(0).SourceField 
      получаем "TlgNode", хотя по документации должны получить "TlgList"
      >> Ответить
    • Развернуть Возможно ли создавать свои классы на основе классов dtb? ( Iv  19.07.2005 15:02 )
      0(0)
      Возможно ли создавать свои классы на основе классов dtb?
      У меня выдается ошибка
      Т.е. на строку
      CLASS (TlgFile) TBaseFile(TableName, DicName)
      получаем TlgDef: не могу найти словарь W!
      Может, я что-то не так делаю?
      >> Ответить
      • Развернуть Я посмотрю это дело, как руки дойдут (-) ( григ  16.09.2005 14:06 )
        0(0)
        Not specified
        >> Ответить
      • Развернуть Руки дошли, разобрался (+) ( григ  11.10.2005 14:07 )
        0(0)
        Для версии РСЛ 949 и длм-объектов, требующих входные параметры для конструктора видимо не получится. Почему-то РСЛ перестал передавать входные параметры в конструктор родительского объекта. Объект отдельно создается без параметров, а потом они инициализируются в Init... Очень странная логика. TlgFile обязательно требует входных параметров в конструкторе и его такая логика не устраивает. Используй композицию объектов, а не наследование.
        >> Ответить
    • Развернуть Виндовый интерфейс ( Oleg_S  27.12.2005 10:52 )
      0(0)
      как заставить dtb работать в виндовом интерфейсе?
      >> Ответить
      • Развернуть Пока никак. В праздники займусь (-) ( григ  27.12.2005 12:22 )
        0(0)
        Not specified
        >> Ответить
        • Развернуть Виндовый интерфейс ( Oleg_S  27.12.2005 12:39 )
          0(0)
          григ, (я так понимаю это Григорий Лупов), как скоро будет реализация?
          или может стоит посмотреть в сторону VCLRSL?
          >> Ответить
          • Развернуть В эти праздники буду пробовать (+) ( григ  27.12.2005 12:58 )
            0(0)
            Не хватает времени. Сразу скажу, что будет на уровне отдельного консольного окна, а не в окне с EasyWin-ом, т.к. разработчики не дали инструментарий для работы с графическим окном. А если новое окно - будут проблемы с настройкой внешнего вида: шрифт, размеры, когда окно гасить и т.д. В консольном режиме dtb работает по старому.
            VclRsl - принципиально другая вещь, там идет действительно самостоятельное графическое окно и ему не важно в каком режиме работает окно RS-Bankа. В принципе можно работать с этой длм-кой. Но у многих есть наработки на dtb.d32, поэтому я все равно буду дорабатывать под параллельную работу с EasyWin (хотя я сам и не буду этот интерфейс юзать).
            А в целом, оглядываясь назад, не может не радовать тот факт, что R-Style не забывает сторонних разработчиков и всегда подкидывает им очередную бесплатную проблему.
            >> Ответить
            • Развернуть ГОСПОДА, программисты, может поддержим разработчика? ( Oleg_S  27.12.2005 13:20 )
              0(0)
              Предлагаю скинуться хотя бы по полтинику...
              Если посчитать, то DTB сильно сокращает время разработки, повышает вашу квалификацию в глазах юзеров, и соответственно повышает вашу зарплату :)
              Очень уж нуно виндовый интерфейс...
              >> Ответить
            • Развернуть Сделал. Теперь dtb.d32 может работать и в графических приложениях (+) ( григ  13.02.2006 09:20 )
              0(0)
              с формированием своего консольного окна. Кто хочет потестить - давайте заявки.

              Не реализована пока эмуляция функций: MsgBox, MsgBoxEx, InitProgress, UseProgress, RemProgress, GetInt (все Get-ы), menu.
              Вместо message() юзайте dtb_message().

              Под XP (наверное и под 2000) у консольного окна можно через "Свойства" окна задать шрифт и размеры окна, и применить их для "всех окон с тем же именем", тогда эти настройки будут использованы в дальнейшем.
              >> Ответить
              • Развернуть В каком виде заявки? ( Oleg_S  13.02.2006 09:29 )
                0(0)
                1. Просто ответить?
                2. Написать мыло?
                3. Заполнить форму?


                >> Ответить
              • Развернуть dtb.d32 и графические приложения ( Oleg_S  15.02.2006 06:40 )
                0(0)
                Дошли руки до проверки. Оригинальное решение. Я даже от неожиданности дар речи потерял :-)
                Однако работать можно и теперь это не останавливает при переходе на графику. Спасибо!
                Вот только один вопрос: консоль так и останется или со временем dtb тоже станет "гуЁвым"?
                >> Ответить
                • Развернуть Останется консольным, не все же будут работать в GUI (+) ( григ  15.02.2006 07:58 )
                  0(0)
                  Разработчик планирует поддерживать три интерфейса: консоль, EasyWin и RS-Forms. Чтобы работать в EasyWin с графическим окном, надо писать эмуляцию fs-функций и Win32API-консольных функций для графики, т.к. Сергей Кубрин пока не дал в свободное пользование функций по работе с графическим окном EW. Если даст - можно будет думать над переделкой.
                  Пока же dtb просто создает свое консольное окно и работает в нем. И все ваши наработки на Dtb будут работать нормально в приложении с GUI-интерфейсом. И действительно, теперь можно думать о переходе под графику. Только мне еще нужно дописать свои аналоги тех функций РСЛ, которые работают с экраном.
                  Если же нужен GUI-интерфейс, пользуйтесь vclrsl.d32. Очень старая разработка.

                  >> Ответить
                  • Развернуть Останется консольным, не все же будут работать в GUI (+) ( Oleg_S  15.02.2006 08:21 )
                    0(0)
                    Согласен, что не все будут работать.
                    По поводу всяких мессаджбоксов: мне кажется, что можно оставить как есть. Пусть они выдаются в "гуях". Лучше все силы отдать на гуевое дтб, причем если эрос-банк используется в консоли, то и дтб должно быть консольным, а если эрос-банк гуевый, то и дтб гуевый автоматически. Это как бы максимальная задача и как я понял все зависит от Кубрина.
                    Будем ждать!
                    >> Ответить
                    • Развернуть Сергей, что скажешь? Я же говорил, что такое решение половинчатое. (-) ( григ  15.02.2006 10:09 )
                      0(0)
                      Not specified
                      >> Ответить
                      • Развернуть Ответ ( Кубрин Сергей  20.02.2006 19:29 )
                        0(0)
                        Григорий, я дал тебе ответ. Можешь его здесь выложить в развёрнутом виде.
                        Если кратко:
                        - Выдать эмуляцию fs функций для EasyWin мне не жалко, но таковой не существует в природе.
                        - Стандартное GUI средство расширения приложений RS-Bank - это RS-Forms, которое мы будем активно развивать. EasyWin - это переходный вариант.
                        >> Ответить
                        • Развернуть Вот развернутый ответ (+) ( григ  21.02.2006 07:32 )
                          0(0)
                          Никаких «символ-атрибут в заданной позиции» в EasyWin не существует. Теоретически ты можешь использовать как для EasyWin режима так для консольного режима, технологию, применяемую для EasyWin. EasyWin на лету конвертирует описание консольных панелей из LBR в окна Windows. У тебя уже есть графическая библиотека VCLRSL. Поэтому ты можешь реализовать автоматическое преобразование своих консольных DTB панелей в графические панели VCLRSL. Но ещё лучше не тратить столько сил и времени на занятие искусством. Продукты R-Style планируется переводить на RS-Forms, хотя это займёт не один год. Зачем опять идти кривым путём. Не лучше ли заняться разработкой специализированных ActiveX контролов, которые станут полезным расширением стандартной палитры элементов. DTB выполнил свою роль. Пора поставить точку.

                          Сергей Кубрин, директор Управления технологического развития R-Style Softlab


                          >> Ответить
                          • Развернуть DTB и его роль в RSL ( Oleg_S  21.02.2006 07:46 )
                            0(0)
                            Если Сергей Кубрин считает, что DTB выполнил свою роль, то пусть подскажет как средствами RSL заменить не визуальную часть. А это самое мощное, что есть в DTB. Т.е. если отказываться от него, то надо доработать класс TbFile на предмет: фильтрации, построение отношений (один-к-одному, один-ко-многим) и т.д.
                            Если все это перейдет в стандарт RSL, то думаю все будут только "ЗА". А пока рано списывать DTB!!!
                            >> Ответить
                            • Развернуть Невизуальную часть можно юзать без проблем (-) ( григ  21.02.2006 09:22 )
                              0(0)
                              Not specified
                              >> Ответить
                              • Развернуть Невизуальную часть можно юзать без проблем ( Oleg_S  21.02.2006 09:29 )
                                0(0)
                                Это я писал для Кубрина.
                                Может он подумает над тем, что иногда разработки пользователей надо включать в стандарт?
                                >> Ответить
                                • Развернуть Наврядли они пойдут этим путем, скорее будут свои аналоги делать. (-) ( moleg  21.02.2006 09:45 )
                                  0(0)
                                  Not specified
                                  >> Ответить
                                • Развернуть Поскольку ( Кубрин Сергей  21.02.2006 11:35 )
                                  0(0)
                                  речь шла о визуальной части, мои высказывания относятся только к визуальной части DTB. Все остальные прелести DTB, равно как и другие наработки Григория и ещё многих энтузиастов никуда не денутся. DLM интерефейс будет поддерживаться пока существует RSL. Фактически наработки Григория уже и так являются стандартом в области расширений RSL. О чём тут ещё думать? В своё время Григорий получал от меня предложение о работе в нашей компании. Вероятно, это могло бы вывести его наработки на более высокий уровень. Но ничего страшного, Григорий открыл свои исходные коды. Теперь у всех желающих есть возможность усовершенствовать его библиотеки. Безусловно, у нас есть планы развития наших продуктов и инструментов. Естественно, какие-то вещи, которые были реализованы в DLM пользователей, реализуются нами в ядре. Например, RSCOM сервер rsax перекрывает возможности не только класса Григория TlgActiveX, но так же и нашего стандартного класса ActiveX. Не нужно из этого делать выводы, что мы собираемся переписать всё, что сделано в библиотеках Гигория или кого-либо ещё. Это естественные последствия технологического развития.

                                  В то же время не стоит забывать, что просто есть вещи, которые отжили, или отживают свой срок. В недалёком будущем это будет касаться и TBFile, и объектов Григория для работы с Btrieve файлами. И нет в этом злого умысла, просто не будет этих самых Btrieve файлов, как нет их в версии RS-Bank V6. TBfile в этой системе - это эмуляция Btrive файла. Гораздо лучше воспользоваться возможностями SQL и для фильтраци данных, объединения таблиц и т.п. В принципе, эти же возможносоти доступны и для Pervasive SQL. Из RSL SQL доступен как при помощи нашей библиотеки RSD, так и при помощи Microsoft ADO. В этом свете мне представляется совершенно бесполезным превращать TBFile в этакий микро SQL менеджер. Нравится это или не нравится, но его время, как и время консоли, увы, уходит.

                                  >> Ответить
                                  • Развернуть Re: Не нужно из этого делать выводы ... ( moleg  21.02.2006 11:45 )
                                    0(0)
                                    Не нужно из этого делать выводы, что мы собираемся переписать всё, что сделано в библиотеках Гигория или кого-либо ещё. Это естественные последствия технологического развития.
                                    Это, в принципе, я и имел ввиду.
                                    >> Ответить
                                  • Развернуть Если это рассматривать в подобном ключе, то совершенно согласен (-) ( Oleg_S  21.02.2006 11:47 )
                                    0(0)
                                    Not specified
                                    >> Ответить
                                  • Развернуть Тут есть один нюанс (+) ( григ  22.02.2006 07:49 )
                                    0(0)
                                    который Сергей, как разработчик инструментария не учитывает. Банковские программисты преимущественно прикладники. Мы пишем модули, программы, которые используются в конкретной банковской задаче. Есть такие проекты, в которых задействованы десятки визуальных форм, вложено очень много человеко-часов. Все работает, только сопровождай, да время от времени вноси небольшие корректировки. И когда предлагается перейти на новый инструмент, но при этом переписать все свои задачи (понятно, что другой интерфес - другие объекты, другие свойства-методы-события, принцип работы), я бы вот сильно подумал, переходить или нет. Как бы получается с одной стороны, если вам что-то не хватает, берите РСЛ и пишите свои задачи, а с другой стороны, новый этап технологического развития, забудьте все, что писали ранее и пользуйтесь либо RS-Forms (шаг вперед), либо lbr (два шага назад). Хотелось бы как-то по возможности, чтобы новое органично сочеталось со старым.

                                    >> Ответить
                                    • Развернуть Честно говоря, ( Кубрин Сергей  22.02.2006 11:14 )
                                      0(0)
                                      я уже устал объяснять на разных уровнях (и пользователям и нашим разработчикам), что есть вещи несовместимые и никаких нюансов тут нет. Нужны старые прикладные наработки? Пожалуйста. Но они по-старому и будут работать, т.е. в консоли. Даже Btrieve API в SQL версии RS-Bank работает и будет работать. Но не думайте, что это оптимальный вариант работы с СУБД. Это только органичное сочетание. Переходить или не переходить - думать надо всегда. Вероятно, что-то должно перевесить.
                                      >> Ответить
              • Развернуть В каталоге примеров Р-Стайла выложил новый вариант dtb.d32 (+) ( григ  22.02.2006 10:57 )
                0(0)
                А также ее исходники.
                >> Ответить
                • Развернуть Обновил dtbConsole.mac (+) ( григ  26.02.2006 08:15 )
                  0(0)
                  26.02.2006 В dtbConsole.mac добавлены функции dtb_GetTrue, dtb_GetString,
                  dtb_GetStringR, dtb_GetInt, dtb_GetDouble, dtb_GetMoney, dtb_GetDate,
                  dtb_GetTime, dtb_Menu.

                  Осталось придумать эмуляцию Progress
                  >> Ответить
                  • Развернуть Объясните, пожалуйста, ( Кубрин Сергей  26.02.2006 10:43 )
                    0(0)
                    зачем нужна эмуляция MsgBox, Get..., индикаторов и других стандартных функций?
                    >> Ответить
                    • Развернуть Затем, чтобы они выдавались в моем консольном окне (+) ( григ  26.02.2006 11:35 )
                      0(0)
                      И так пользователю приходится работать с двумя окнами, так если при этом еще и между окнами переключаться, чтобы на Getxxx ответить...
                      >> Ответить
                      • Развернуть Григорий, ( Кубрин Сергей  26.02.2006 11:46 )
                        0(0)
                        если открытие консольного окна выполнять стандартным способом так, как я описал при помощи посылки сообщений, то консольное окно становится вершиной стека, и в него перенаправляется весь вывод. Так сделано специально, чтобы не только MsgBox отображался в консольном окне, но если даже из RSL кода будет вызвана какая-либо встроенная процедура RS-Bank, отображающая пользовательский интерфейс, то и её вывод пойдёт в консоль, пока консольное окно не уёдёт с вершины стека.
                        >> Ответить
                        • Развернуть Я пробовал, не получилось (+) ( григ  26.02.2006 12:29 )
                          0(0)
                          я и подумал, что способ с посылкой сообщений работает с более свежей версией терминал-сервер.
                          Вот кусок кода:
                          typedef HWND (WINAPI* GetWndType) (void); typedef BOOL (WINAPI* SetFWType) (HWND hWnd);
                          
                          EXP32 void DLMAPI EXP InitExec( void )
                          {
                          	  // Открыть консольное окно, если оно не открыто и 
                          	  // активизировать его.	
                                  if (RslSendMes (1001, NULL) == 1)
                                     {
                                     GetWndType ptr;
                                     SetFWType  ptr2;
                                     HMODULE hmod = GetModuleHandle ("kernel32.dll");
                                     ptr = (GetWndType)GetProcAddress (hmod, "GetConsoleWindow");
                                     hmod = GetModuleHandle ("user32.dll");
                                     ptr2 = (SetFWType)GetProcAddress (hmod, "SetForegroundWindow");
                                     if (ptr && ptr2)  
                                        {     
                                        HWND wnd = ptr ();
                                        if (wnd)
                                           ptr2 (wnd); 
                                        }
                                     }
                          
                          // Далее код инициализации .......
                          
                          }
                          
                          EXP32 void DLMAPI EXP DoneExec( void )
                          {
                          	// Код деинициализации ....
                          
                          	// Закрыть консольное окно, если оно было откыто
                                RslSendMes (1002, NULL);
                          }
                          
                          Собственно на RslSendMes (1001, NULL); мы должны получить консольное окно. Остальной код просто делает его активным. Окно не выходит. Терминал версии 5.09.134.0.
                          Поэтому я по простому сам создаю окно, сам туда вывожу данные, сам читаю клаву и мышку.


                          >> Ответить
        • Развернуть dbt и Pervasive 8.0 ( JVR  08.01.2006 13:37 )
          0(0)
          Добрый вечер!
          Скажите, а работа dtb на Pervasive 8.0 тестировалась? Я на днях попробовал - поля типа MONEY (новые деньги PV8) не отображаются - вернее отображается 0 (реально в поле файла значение не нулевое).

          Заранее благодарю
          >> Ответить
    • Развернуть раскраска ( g-retic  11.01.2006 11:42 )
      0(0)
      возможно ли в гриде изменить цвет наименований столбцов ?
      >> Ответить
    • Развернуть SetMinMax на дату ( Oleg_S  07.03.2006 09:32 )
      0(0)
      Var DocR = TlgFile("arhdoc.dbt"),
      docrDateC = DocR.AddField("Date_Carry"),
      docrAccPayer = DocR.AddField("Account_Payer");

      DocR.Open(2);
      docrAccPayer.SetMinMax("70206810000000000000", "70209810999999999999");
      docrDateC.SetMinMax(Date(1,2,2006),Date(28,2,2006));
      DocR.ApplyRange();

      результат 0
      может дату не так надо задавть?
      хотя пробовал и так: docrDateC.SetMinMax("01.02.2006", "27.02.2006");
      >> Ответить
      • Развернуть Сори... DocR.Open(1); (-) ( Oleg_S  07.03.2006 09:49 )
        0(0)
        Not specified
        >> Ответить
        • Развернуть Может дату вообще нельзя задавать? (-) ( Oleg_S  07.03.2006 09:52 )
          0(0)
          Not specified
          >> Ответить
          • Развернуть Открывать надо с 0-ым Open(0) ( PAN  07.03.2006 09:55 )
            0(0)
            Not specified
            >> Ответить
            • Развернуть Открывать надо с 0-ым Open(0) ( Oleg_S  07.03.2006 10:02 )
              0(0)
              Зачем?
              в 1-м ключе Date_Carry тоже есть
              да, даже если и небыло бы, то отбор должен вестись по значению
              >> Ответить
              • Развернуть Тут такая особенность: ( григ  07.03.2006 10:53 )
                0(0)
                У тебя по умолчанию поле Date_Carry участвует в отсечке по Range. Т.е. любой выход значения Date_Carry за пределы SetMinMax-а прекращает перебор записей, потому она и отсечка по Range. Если сделать docrDateC.SetMinMax(Date(1,2,2006),Date(28,2,2006),false); - участвует только в фильтре по данным. Отрабатывать будет, но долго. Предпочтительно делать связку с account.dbt. По нему делать SetMinMax по счетам и идти по нему. А связку с документами делать по SetMaster и на документах делать SetMinMax по Date_Carry. Будет и быстро и правильно.


                >> Ответить
                • Развернуть Тут такая особенность: ( Oleg_S  07.03.2006 11:02 )
                  0(0)
                  я так понял, что связку счетов и документов делаем по апликейшинкинд и кей
                  в таком случае Date_Carry в документах тоже будет по значению, поскольку в 6-м ключе нет Date_Carry
                  это не будет долго?
                  >> Ответить
                  • Развернуть Ты что-то путаешь (+) ( григ  07.03.2006 11:16 )
                    0(0)
                    Связка делается по счетам:
                     ac=TlgFile("account.dbt"); ac.Open;
                      ac.AddAllFields;
                      ac.GetField("Account").SetMinMax("701","702"); //выбирается все счета по 701 б/с первого порядка
                      ac.ApplyRange;
                    
                     arhdoc=TlgFile("arhdoc.dbt"); arhdoc.Open(1);
                      arhdoc.AddAllFields;
                      arhdoc.GetField("Date_Carry").SetMinMax(db,de);
                      field=arhdoc.GetField("Result_Carry); field.SetValues(23); field.KindValues=false;
                      arhdoc.ApplyRange;
                    
                     arhdoc.SetMaster(ac,"Account","Real_Payer",arhdoc.KeyNum);
                    
                     ac.First;
                     while(not ac.eof)
                      arhdoc.First;
                      while(not arhdoc.eof)
                       ...
                       arhdoc.Next;
                      end;
                      ac.Next;
                     end;
                    

                    >> Ответить
                    • Развернуть Ты что-то путаешь (+) ( Oleg_S  07.03.2006 11:27 )
                      0(0)
                      да, конечно, это я с дуру... конечно по счетам...
                      просто запарился...
                      и в ключе дата есть...
                      спасибо!
                      >> Ответить
    • Развернуть Непонятки с новым DTB под EasyWin-ом ( mcb  21.04.2006 13:50 )
      0(0)
      Поставил новый DTB (dtb.d32 -> Mac, define.def -> DBFile, t_textgp.d32, t_textgp.dlm -> Терминал). Запускаю RS-Bank в EasyWin-e. При отладке макроса должно появиться новое консольное окно? У меня при вызове метода Show объекта TjkForm ничего не происходит, а dtb_CreateConsole возвращает True. Подскажите что я делаю не так?
      >> Ответить
    • Развернуть Как перехватить событие в Grid? ( Oleg_S  05.05.2006 09:58 )
      0(0)
      Есть форма, на ней Grid с несколькими колонками.
      Надо при изменении значения в одной колонке, произвести подсчет и вывести значение в той же строке другой колонки.
      Как?
      Заранее спасибо.
      >> Ответить
      • Развернуть Хм-м. Вообще-то редактируемый грид - (+) ( григ  05.05.2006 12:07 )
        0(0)
        Это самый простой грид и вешать на него такие крутости не рекомендую. Лучше всего форма+нередактируемый грид + форма-карточка, при выходе из которой грид обновляется.
        Значение поля файла обновится только при переходе к другой записи. Горизонтальный скроллинг-редактирование грида к обновление полей файла не приведет.
        Но если очень надо, то надо ловить событие form_OnEditExit(Sender) - выход из поля, либо клавишу Enter - условный конец редактирования и делать
        field=Sender.Owner.Field(Sender.Owner.iCol);
        field.SourceField.Set(field.Value);

        >> Ответить
    • Развернуть Список с использованием объекта ( Oleg_S  06.05.2006 08:15 )
      0(0)
      Есть вот такой объект:

      import CommonInter;
      var clnts = TClientList;
      var stat, i;
      if (not clnts.MayUpdate)
      clnts.MayUpdate = true;
      end;

      clnts.ClearFilterKey();
      clnts.SetFilter_CodClient(0,9999999999);
      clnts.SetFilter(false);
      stat = clnts.first();
      i = 0;
      while(stat)
      i = i+1;
      printLn(clnts.CurRec.rec.Name1," ",clnts.CurRec.rec.Name2," ",clnts.CurRec.rec.Name3);
      stat = clnts.next();
      end;

      Можно ли этот список совместить с grid?
      Или выход один - скопировать все в промежуточный файл?

      Заранее спасибо
      >> Ответить
      • Развернуть Можно без файла (+) ( григ  06.05.2006 09:52 )
        0(0)
        Грид может работать на основе списка TlgList, данные хранятся в TlgNode.Object. Для каждого столбца нужен свой TlgList. Их Size должны быть одинаковы.
        Т.е. нужно перекачать данные из твоего списка в TlgList и далее
        EditG=grid.Add(List0);
        EditG=grid.Add(List1);
        ...


        >> Ответить
        • Развернуть А на какие объемы я могу расчитывать? ( Oleg_S  06.05.2006 10:02 )
          0(0)
          У нас сотни тысяч клиентов, соответственно надо столько записей в TlgList
          Чем ограничивается список? Виртуальной памятью сервера?
          >> Ответить
          • Развернуть Само-собой память кушается (+) ( григ  06.05.2006 12:28 )
            0(0)
            Если такие объемы - надо dbt-файл. Если бы у тебя был ADO-шный рекордсет с выборокой - можно было бы его пихнуть.
            Вообще - по идее твой TClientList - это оболочка для client.dbt. Кто мешает юзать файл напрямую? В данном же случае сервис TClientList тебе совсем не нужен - значит долой прослойку.
            >> Ответить
            • Развернуть Эта прослойка из Retail... ( Oleg_S  06.05.2006 12:41 )
              0(0)
              Это из Retail, там вся информация разбросана по разным файлам.
              Запасной вариант, разобраться откуда все берется и объединить их по setmaster
              Скорее всего так и придется
              Попутный вопрос:
              Что то у меня не получается поиск в TlgFile
              Per = TlgFile("persn.dbt", "bank.def");
              perID = Per.AddField("PersonID");
              Per.Open(0); // ключ по PersonID
              perID.Set(3213);
              Per.GetEQ - не работает
              >> Ответить
    • Развернуть Кто-нибудь проверял DTB в ReTail 5.10.104.18? ( Oleg_S  06.05.2006 08:38 )
      0(0)
      У меня не работает...
      >> Ответить
    • Развернуть Некорректная работа dtb в 2-х звенке, консольный режим. ( Iv  25.05.2006 11:01 )
      0(0)
      dtb использую в БОУРМ 5.2. В 3-х звенке вроде все хорошо работает, а в 2-х звенке при использовании визуальных форм выдается полная ерунда, как будто с кодировкой что-то не так. Например, вот так выглядит статусная строка
      ESC Вeaод ENTER Вe?оa F4 ?о?a? F5 Сc?aа F7 Соaaaдн
      >> Ответить
    • Развернуть Опять SetMinMax не отрабатывает... ( Oleg_S  31.07.2006 10:52 )
      0(0)
      RS-Bank 5.00.090.33

      dtbSetCurrency (true, true);

      SearchM = $0;

      rSum = rDoc.AddField("Sum"),

      If (GetMoney(SearchM, "Введите сумму документа."))
      rSum.SetMinMax(SearchM, SearchM);
      End;
      >> Ответить
    • Развернуть А переработка под 5.5 планируется? ( Ltybc  24.02.2009 15:44 )
      0(0)
      А то не хотелось бы отказываться от привычного инструмента...
      >> Ответить
    • Развернуть при TlgFile.Insert() или grid.InsertRec() происходит добавление новой строки, но и затирание текущей ( Paul  18.08.2009 14:39 )
      0(0)
      Добрый день, коллеги! Подскажите пожалуйста в следующей проблеме:
      код макроса:
      //----------
      fileSymbCash = TlgFile("symbcash.dbt","bank.def");
      res = fileSymbCash.Open(0, 0,"symbcash.dbt"); // (key, mode, path) mode = 0 Ї®§ў®«пҐв § ЇЁблў вм
      if(not res) MsgBox("ЌҐ ¬®Јг ®вЄалвм д ©«!","symbcash.dbt"); exit(1); end;

      fileSymbCash.AddAllFields();

      fileSymbCash_Kind = fileSymbCash.GetField("Kind");
      fileSymbCash_iApplicationKind = fileSymbCash.GetField("iApplicationKind");
      fileSymbCash_ApplicationKey = fileSymbCash.GetField("ApplicationKey");
      fileSymbCash_Symbol = fileSymbCash.GetField("Symbol");
      fileSymbCash_Sum = fileSymbCash.GetField("Sum");

      fileSymbCash.GetField("iApplicationKind").SetMinMax(AppKey, AppKey);
      fileSymbCash.GetField("ApplicationKey").SetMinMax(AppKind, AppKind);
      fileSymbCash.ApplyRange();
      fileSymbCash.First();

      fileSymbCash.Connect = true;
      //---------------------------------------------------------
      SymbCashForm = TjkForm("SymbCashForm");

      gridSF = SymbCashForm.AddGrid(5);
      gridSF.Name = "gridSF";
      gridSF.Border = 1;
      gridSF.Row = 5;
      gridSF.titles = true;
      gridSF.Width = 40;
      gridSF.X = 2;
      gridSF.Y = 2;

      gridSF_column1 = gridSF.AddField(fileSymbCash_Symbol);
      gridSF_column1.TitleLabel = "Symbol";
      gridSF_column1.Width = 6;

      gridSF_column2 = gridSF.AddField(fileSymbCash_Sum);
      gridSF_column2.TitleLabel = "Summa";
      gridSF_column2.Width = 20;

      MACRO SymbCashForm_OnKey(obj, key)

      if(Key == VK_ENTER)

      elif(Key == VK_F9)

      gridSF.InsertRec();
      //fileSymbCash.Insert();

      end;

      gridSF.Refresh();
      END;
      //----------
      >> Ответить
    • Развернуть DTB и RS-Bank 5.5 !!!!!!!!!!!!!!!!!! ( Oleg_S  20.01.2010 13:34 )
      0(0)
      Кто-нибудь тестировал?
      >> Ответить
    • Развернуть Связка файлов по iApplicationKind/ApplicationKey ( alexeaa207  18.02.2011 18:21 )
      0(0)
      Есть ли возможность при помощи dtb построить grid в колонках которого отображались бы поля документов из разных файлов. Сами документы в файлах связаны один к одному по iApplicationKind/ApplicationKey. При помощи SetMinMax и SetMaster удается добиться отображения только для определенного iAppKind.
      Может есть какой-то еще хитрый способ?

      >> Ответить
    • Развернуть Старый RSL + dtb + RS-BANK 5.5 ( alexeaa207  10.06.2011 10:28 )
      0(0)
      Имеется старая сборка Retail-а(5.1.093.31) и RS-Bank 5.5. Из Retail-а запускается макрос, который лезет в некоторые файлы RS-BANK-а (в частности restdate). При использовании ключей, не включающих сумму (0,1,4) наложенные SetMinMAx + ApplyRange отрабатывают нормально, для ключей же 2,3 при выполнении First программа зависает. Подозреваю, что дело в NUMERIC. Как конкретно нужно работать с этими полями, используя dtb32?
      Для RS-BANK 5.0 все работало с использованием dtbSetCurrency(true).
      Пробовал вариант с dtbSetCurrency(true,true) - не помогло.
      >> Ответить
      • Развернуть Попробуй так: (+) ( григ  14.06.2011 07:39 )
        0(0)
        Сделай тестовый макрос.dtbSetCurrency - пока не используй, создай restdate - поработай с ним.
        >> Ответить
        • Развернуть Пробовал тестовым макросом поработать с postdoc ( alexeaa207  14.06.2011 20:03 )
          0(0)
          Сорри за паузы в ответах - переходим на 5.5

          при работе с postdoc в любом случае поле сумма в отладчике показывается как undefined.

          Мне кажется, что версия RSL имеет значение (у нас rslver.exe показывает 2.01.0110.0, rsl32 кажет 7.11.095.0), но вот вопрос - можно ли к старой сборке "подлить" какие-то dll-ки, чтобы обновить только RSL, или нужно накатываться на более новую сборку целиком?
          >> Ответить
          • Развернуть Должно и так работать (+) ( григ  15.06.2011 07:46 )
            0(0)
            1. Убедись, что dtb.d32 у тебя свежая и в доке у нее описана поддержка V_NUMERIC
            2. В RS 5.5 попробуй тестовым макросом поработать через dtb с postdoc.dbt - должно работать, у других работает нормально. При этом никакие dtbSetCurrecny не нужны длм-ка сама определяет -поддерживает ли РСЛ V_NUMERIC и какой тип поля в базе.
            3. Тот же макрос пробуй в Retail-е.

            Конечно, что касается стандартного РСЛ, то старый РСЛ не будет понимать новый тип V_NUMERIC однозначно.
            Насчет подлить длл-ки - это нужно пообщаться с теми, у кого есть 5.5 или с поддержкой.
            >> Ответить