Обсуждение:Menu Navigator (RS-Bank 5.0)

0 (0)
  • Развернуть Обсуждение:Menu Navigator (RS-Bank 5.0) ( Обсуждение примера  21.05.2008 11:36 )
    0(0)
    Модуль для работы с пунктами меню пользователей и пользовательскими модулями.

    Не дает править меню пользователя 9999, остальных пользователей - без ограничений.

    Программа соответствует идеалогии программы The FAR manager.

    Остальное в setup.txt.

    Посмотреть пример
    >> Ответить
    • Развернуть Отличное решение, спасибо. ( Sergey  22.05.2008 10:59 )
      0(0)
      Есть похожий, тоже замечательный, инструмент. которым я уже почти 5 лет пользуюсь -

      http://support.softlab.ru/Portal/Samples/sample.asp?Typ=12&Id=177

      У Вашего есть преимущества - не используется VCH (а значит можно применить EasyWin), легко установить (впервый раз вижу такую заботу об самих автоматизаторах:)), более похож на привычный файлер по идеологии.
      Есть, имхо, недостатки - нет, или я не нашел процедур массовой обработки меню (копирования, удаления), процедур поиска дублей, сравнения меню. Не нашел простой возможности поменять расположение источника или приемника меню (например - другой каталог DBFILE).

      Вместе эти сервисы вообще сила :).
      >> Ответить
      • Развернуть Процедуры массовой обработки есть ( Vlada  22.05.2008 11:16 )
        0(0)
        По Ins выделяете нужные пункты меню (выделение символом *) или программные модули (желтым цветом) и копируете (перемещаете, удаляете), сколько душе угодно! Поиск также есть (Alt+F7)- вводите или название пункта или номер программного модуля - выдаст список. Поиск идет в глубину от текущего уровня, поэтому в одном спике могут быть пункты из разных по глубине уровней вложенности. Эту процедуру еще буду додумывать, как сделать более наглядной))) Про источник-приемник меню - поясните, пожалуйста)))
        >> Ответить
        • Развернуть Еще хорошо бы совместимость со старыми версиями RSL ( Ltybc  22.05.2008 11:38 )
          0(0)
          Убрать break и continue, которые появились только с 5.0.90. И константы K_ENTER и прочие тоже, как мне кажется.

          >> Ответить
        • Развернуть Это массовая обработка источник, а хочется - приемника. Или я не понял. ( Sergey  22.05.2008 12:03 )
          0(0)
          Массовое копирование от одного многим (выбранным пользователям, выбранным группам пользователей, всем) - вот что хочется. Понятно, что с синхронизацией. Это есть в варианте Грига, который я привел как используемый.

          Еще всегда хотел, но руки не доходят, до процедуры массового удаления пунктов меню, которые в силу какой-то причины, могут стать не нужными всем.

          Источник - приемник: Образец меню может быть не данном каталоге баз данных, а в другом. Например, рабочий каталог -C:\Rsbank\Dbfile, а тот, откуда берем выборы меню, выборы модулей - может находиться в другом месте D:\Rsbank.tst\DBFILE. И наоборот.
          Для чего полезно? - На тестовой базе выполнили обновление, все настроили, проверили. Потом выполнили обновление на рабочем и все, что нужно, с помощью Вашей программой в меню добавили (удалили).


          >> Ответить
          • Развернуть Ясно... ( Vlada  22.05.2008 12:13 )
            0(0)
            Про источник-приемник понятно... Во время разработки эту потребность не учла((( Будет возможность - исправлю! Массовое копирование и удаление - та же история. Пока работает только в режиме "от одного к одному"...
            >> Ответить
          • Развернуть Удаление Пункта меню у Всех пользователей хочется ( LeonL  22.05.2008 14:41 )
            0(0)
            Допустим Shift+F8 грохнуть данный пункт меню у все пользователей сразу.
            >> Ответить
          • Развернуть Массового удаления у меня нет, но есть полуавтомат: (+) ( григ  22.05.2008 14:44 )
            0(0)
            Alt_F7 - поиск макроса, меню, задаем номер опера, с которого идет поиск - если поиск удачный меню приемника синхронизируется. Удаляем что хотим. Shift_F7 - поиск продолжается.
            20.03.2006
            По ALT_F7 поиск оперов, имеющих такое же наименование пункта меню или такой же макрос,
            подключенный к текущему пункту меню (по умолчанию макрос берется текущий с полным путем
            в скобочках)
            По SHIFT_F7 - продолжение поиска.
            В режиме поиска по ESC - можно выйти из поиска.
            При поиске перебирается все меню пользователя, независимо от названия родительских
            пунктов меню.

            00.00.2007
            По F1 можно задать образец ФИО пользователя (часть ФИО) и выбрать из найденных вариантов
            нужный.

            >> Ответить
      • Развернуть Без VCH плохо ( LeonL  26.05.2008 15:31 )
        0(0)
        Размеры окон неменяются, а с VCH можно было бы сделать автоматическое масштабирование под размеры окна. Иначе у меня получается что работа с меню идет гдето в уголке экрана.
        >> Ответить
    • Развернуть Ошибка. (+) ( $erge  22.05.2008 16:42 )
      0(0)
      Вроде бы удалось выявить последовательность действий которая гарантированно вываливает программу с ошибкой.

      Запускаем, затем сразу ALT+F2, "Модули пользователей", выбираем модуль, заходим (Enter) и сразу жмем PgDown. Вылетает с ошибкой на всех модулях, где есть пользовательские записи и которые не попадают на первую страницу списка (то есть их сразу "не видно"), например Системный сервис и Частные вклады.
      >> Ответить
      • Развернуть У себя такой ошибки не наблюдаю.... ( Vlada  23.05.2008 06:18 )
        0(0)
        Повторила последовательсность действий - если в подсистеме есть модули, "не попадающие на первую страницу" - переход на следующую; если модулей мало (все попадают на "первую страницу") - переход на последний в списке модуль. Как выглядит ошибка (строка в коде, сообщение)?
        >> Ответить
        • Развернуть Ещё одна ошибка в блоках обработки скролинга ( karakatica  23.05.2008 08:14 )
          0(0)
          Неправильно организован вызов встроенных процедур при обработке скролинга
          Вы пишите:
          if ( this.GoUp( this.item(id), id ) == 0 )
          updatefields( this );
          return CM_IGNORE;
          elif ( this.GoUp( this.item(id), id ) == 1 )
          return CM_IGNORE;
          end;
          написав такую структуру Вы не отдаетё себе отчёт в том, что фунция GoUp (равно как и другие аналогичные)
          Вызываются у ВАС дважды !!!!
          Если уж Вы хотите, чтобы оформление выглядело подобным образом
          нужно писать
          if ( this.GoUp( this.item(id), id ) == 0 )
          updatefields( this );
          return CM_IGNORE;
          else //только 2 значения может принимать функция GoUp (равно как и другие аналогичные) 0 или 1
          return CM_IGNORE;
          end;
          В Вашем случае сначала выполняется строка
          if ( this.GoUp( this.item(id), id ) == 0 )
          а затем
          elif ( this.GoUp( this.item(id), id ) == 1 )
          т. е. происходит двойной вызов функции GoUp (равно как и другие аналогичные)
          Если бы в эту структуру добавили строку
          elif ( this.GoUp( this.item(id), id ) == 2 ) //при наличии ещё и значения 2
          то функция GoUp (равно как и другие аналогичные) будет уже выполняться трижды !!!!









          >> Ответить
          • Развернуть Не совсем так... ( Vlada  23.05.2008 08:26 )
            0(0)
            Согласна с тем, что дважды вызывать фунцкию не нужно, это можно сделать по другому, но тот способ, который Вы предлагаете, работать не будет (попробуйте и убедитесь), так как ИНАЧЕ в данном случае будет означать не только возврат единицы... Всю работу функции скроллинга по массиву объяснять не буду - она простая.
            >> Ответить
            • Развернуть Согласна с тем, что дважды вызывать фунцкию не нужно, это можно сделать по другому, но тот способ, к ( karakatica  23.05.2008 09:15 )
              0(0)
              Не работает, потому что неверно выбран алгоритм обработки скролинга.
              При просмотре Вашего макроса, я обратил внимание на то, что в скролинге пользователей отсутсвует
              постраничное листание (PageDown и PageUp), установка в начало списка и конец списка, а также поиск.

              Сложность построения этих функций связано с тем, что при инициализации Вы потеряли 16 значений переменной
              Ind (все первые 16 значений == 0) - и переменная Ind потеряла идентичность по отношению к позиции курсора в скролинге,
              что существенно усложняет написание кода по поиску и по страничному листанию.
              С великим трудом мне удалось сделать на вашем материале (без изменения Вашего кода) листание вперёд (PageDown).
              Данная ситуация приводит, к сожаления, к написанию лишнего кода.
              Вы потому и фунции вызываете дважды - по причине неверно выбранной технологии обработки скролинга....

              И дело не в простоте скролинга (по вашим словам ) а в его корректности (или некорректности написания).
              Можно привести массу примеров работающих кодов, написанных по неверно выбранной технологии.
              Выбор же технологии - это выбор между корректно правильным и неправильным использованием написания кода, выбор между красивым и не красивым.

              Если бы мне сказали, то что я Вам сказал, - я бы потрудился переписать соответсвующий код.
              И не стал бы полемизировать на эту тему...





              >> Ответить
        • Развернуть Последовательность действий: (+) ( $erge  23.05.2008 09:33 )
          0(0)
          Выбираю подсистему, не попадающую на 1ю страницу списка (например ЧВ), захожу внутрь списка модулей пользователя этой подсистемы (их у нас больше 16) и сразу же (выделенными в этот момент являются "точки") нажимаю PgDown(PgUp) - вылетает с ошибкой "Undefined + Integer" на строке 3579. (при этом есть нажимать стрелки вверх/вниз все работает).
          Эти же действия со списком системных модулей приводят к такому же результату.
          >> Ответить
    • Развернуть Re ( rs2004  23.05.2008 12:22 )
      0(0)
      При пустом файле itemuser.dbt макрос install ломается на 113 строчке Undefined + Integer.....
      Ф-я GetLastNumber() не определена......
      >> Ответить
    • Развернуть Если установлена 7 версия первасива, то падает с ошибкой открытия mn.def ( LeonL  23.05.2008 12:51 )
      0(0)
      конструкции типа OnError полезны.
      >> Ответить