Как узнать имя локального меню?

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как узнать имя локального меню?

Сообщение edward_K »

тяжко. Только просмотром всех, что есть по компоненте и проверке на совпадение тому, что вы видите в фейсе.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Как узнать имя локального меню?

Сообщение Алексей »

ну так и пришлось... но согласитесь, это же жесть какая то! неужели нельзя было в описаниях интерфейсах сделать вкладку, в которых указать возможные локальные меню. пичаль :)
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Как узнать имя локального меню?

Сообщение Den »

Такого думаю нет. Явного описания локальных меню, использующихся в том или ином интерфейсе, вроде нет нигде.
В саппорте, действительно можно много почерпнуть по меню. И, зачастую , по пунктам меню можно понять то ли это искомое меню.
Но бывают еще менюхи динамически набираемые/загружаемые прямо в коде прикладниками...
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Как узнать имя локального меню?

Сообщение Алексей »

не отрабатывает.... хотя подобный пример на другом интерфейсе работает, может быть это связано с тем, что интерфейс является встраиваемым в другой интерфейс?
нужно в каталоге объектов ремонта в иерархическом виде подключить ещё один пункт. что не так делаю?

Код: Выделить всё

#Component "L_REMONT"
const
   cmIface = 3001;
end
alter interface TREEOBJREM;
var menuID:longint;
create view;
Window TreeObjRem;
HandleEvent
cmInit: message('init');
cmHotKeys:
{
 message('1');
  menuId := LoadMenu('RemObjTree_HotKeys');
  AddMenuItem (menuID,'111111111111111',cmIface);
  PutHotCommand(RunLoadMenu(menuID));
}
cmIface:
{
  message('1 '+objrem.name);
}
end;
End;
end.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Надо имя локального меню в договорах

Сообщение zna »

Добрый день! Нужно имя локального меню Договора- Спецификация, вот его вид:Изображение
Пытался в справочной системе для 9-ки найти в описании L_DOGOVOR- но убрали оттуда содержание меню, оставили только имена. А в 8-ке было содержание меню..
Посмотрите, пож., у кого есть описание..
Перебирал строки с именами меню типа 'L_DOGOVOR::MNUDOGOVORSPDOCS' и др.- не получается. Возможно, динамически строка собирается..
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как узнать имя локального меню?

Сообщение edward_K »

Вот вам все событие.

Код: Выделить всё

cmHotKeys:
{
  var boFlag: boolean;

  boFlag := ( ((SpDocs.prMC = 2) or (SpDocs.prMC = 3)) AND (Dogovor.Direct < 3) AND EditDogPosEnabled(false, false) );

  SetEnableCommand(cmAccording   , boFlag); //Рассчитать стоимость услуги как % от стоимости МЦ
  SetEnableCommand(cmCalcUslParam, boFlag AND (KatUsl.TYPEUSL = 1));
  SetEnableCommand(cmValue20     , boFlag AND (KatUsl.TYPEUSL = 1));

  SetEnableCommand(cmPickClass, (GetCurrentFormat <> scwSpDocNal));
  SetEnableCommand(cmPickAttr , (GetCurrentFormat <> scwSpDocNal));
  SetEnableCommand(cmExAttrBat, (GetCurrentFormat <> scwSpDocNal));

  var CanCopyFromClipbrd: boolean; CanCopyFromClipbrd := TRUE;

  if NOT EditDogPosEnabled(false, false)
    CanCopyFromClipbrd := FALSE
  else
    if (Dogovor.cDogovor <> 0)
      CanCopyFromClipbrd := ((DogOwner.SpecStatus <> 0) or not bSpec);

  SetEnableCommand(cmCopySpecFromClipboard, CanCopyFromClipbrd);

  SetEnableCommand(cmValFld10, (Dogovor.VidDog = vd_12));

  boFlag := EditDogPosEnabled(false, false);

  SetEnableCommand(cmRestoreDoc, boFlag);
  SetEnableCommand(cmSortMC    , boFlag);
  SetEnableCommand(cmVal6      , boFlag);
  SetEnableCommand(cmVal7      , boFlag);
  SetEnableCommand(cmVal8      , boFlag);
  SetEnableCommand(cmValue32   , boFlag and CanCopyFromClipbrd);
  SetEnableCommand(cmValue42   , boFlag);
  SetEnableCommand(cmValue33   , boFlag);
  SetEnableCommand(cmMulSelDO  , boFlag and     Lic_ItemExists('SmetaDocs'));
  SetEnableCommand(cmValue41   , boFlag and not Lic_ItemExists('SmetaDocs'));
  SetEnableCommand(cmValFld10  , boFlag);
  SetEnableCommand(cmValue18   , boFlag);

  epAddMenuEx(coSpDocs, SpDocs.nRec, coDogovor, Dogovor.nRec, IExtMenu(Self));

  sMenuDop := Replace(sMenuDop, ';SEPARATOR;', '');

  var mnuName: string;

  var MenuID, DopMenuID : longint;

  if (Dogovor.cDogovor <> 0)
    {
      mnuName := 'L_Dogovor::mnuDogovorSpDocs';
      MenuID := LoadMenu(mnuName);
    }
  else
    if ((Dogovor.Direct mod 2) = 0)
      {
        mnuName := 'L_Dogovor::mnuDogovorSpDocs2';
        MenuID := LoadMenu(mnuName);

        case wGetTune('DOG.CTRLF3_BUY') of
          0 : mnuName := 'L_Dogovor::mnuDogovorSpDocs2_1';
          1 : mnuName := 'L_Dogovor::mnuDogovorSpDocs2_2';
          2 : mnuName := 'L_Dogovor::mnuDogovorSpDocs2_3';
        else
              mnuName := '';
        end;

        AddMenuItem(MenuID, 'SEPARATOR', 0);
        ConcatMenu(MenuID, LoadMenu(mnuName));

        mnuName := 'L_Dogovor::mnuDogovorSpDocs2_4';
        AddMenuItem(MenuID, 'SEPARATOR', 0);
        ConcatMenu(MenuID, LoadMenu(mnuName));
      }
    else
      {
        mnuName := 'L_Dogovor::mnuDogovorSpDocs1';
        MenuID := LoadMenu(mnuName);

        case wGetTune('DOG.CTRLF3_SELL') of
          0 : mnuName := 'L_Dogovor::mnuDogovorSpDocs1_1';
          1 : mnuName := 'L_Dogovor::mnuDogovorSpDocs1_2';
          2 : mnuName := 'L_Dogovor::mnuDogovorSpDocs1_3';
        else
              mnuName := '';
        end;

        AddMenuItem(MenuID, 'SEPARATOR', 0);
        ConcatMenu(MenuID, LoadMenu(mnuName));

        mnuName := 'L_Dogovor::mnuDogovorSpDocs1_4';
        AddMenuItem(MenuID, 'SEPARATOR', 0);
        ConcatMenu(MenuID, LoadMenu(mnuName));
      }

  if MenuMakerV2::IsOptionalMenuFuncsPresent(IMenuMakerParameters(Self))
    MenuMakerV2::AddItemsOfOptionalMenuFuncs(IMenuMakerParameters(Self), MenuID);

  if (Dogovor.VidDog = vd_19)
    {
      AddMenuItem(MenuID, 'SEPARATOR', 0);
      ConcatMenu(MenuID, LoadMenu('L_Dogovor::mnuDogovorSpDocsBTK'));
    }

  if ( sMenuDop = '' )
    PutHotCommand(RunLoadMenu(MenuID))
  else
    {
      DopMenuID := MenuMaker::LoadDynMenu(sMenuDop);

      ConcatMenu(DopMenuID, MenuID);

      PutHotCommand(RunLoadMenu(DopMenuID));
    }

  EnableCommand(cmRestoreDoc);
  EnableCommand(cmSortMC);
  EnableCommand(cmVal6);
  EnableCommand(cmVal8);
  EnableCommand(cmVal7);
  EnableCommand(cmValFld10);
  EnableCommand(cmValue32);
  EnableCommand(cmValue42);
  EnableCommand(cmValue33);
  EnableCommand(cmValue18);
}
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как узнать имя локального меню?

Сообщение zna »

Так и есть- динамическое меню..
Спасибо, Эдвард
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Как узнать имя локального меню?

Сообщение zna »

Борьба с меню закончилась поражением противника. Ход сражения:
Тяжелая артиллерия, любезно предоставленная главнокомандующим Эдвардом, была возвращена на место за невостребованностью. Вместо неё по совету начштаба Дениса (позывной Den) на передовую позицию выдвинута стрелковая рота именем 'L_DOGOVOR::MNUDOGOVORSPDOCS'. Конфигурация фронта приняла вид:

Код: Выделить всё

cmHotKeys:{
      case CurTable of
       #Spdocs :
          {  
            var MenuIdm: longint;
            var sDynMenum: string;
            MenuIdm := LoadMenu('L_DOGOVOR::MNUDOGOVORSPDOCS');
            AddMenuItem(MenuIdm, 'SEPARATOR', 0);
            AddMenuItemEx(MenuIdm, 'Добавить спецификацию из ДО','','',cmValue59,kbAltP);
            AddMenuItemEx(MenuIdm, 'Удалить всю спецификацию','','',cmValue58,kbAltP);
            AddMenuItem(MenuIdm, 'SEPARATOR', 0);
            PutHotCommand(RunLoadMenu(MenuIdm));
            Stop;
         }
    else inherited :: handleEvent (cmHotKeys);
    end;
}
Залп по неприятелю нанесён кнопкой Огонь (замаскированной как Скомпилировать)
После рассеивания дыма стало видно, что противник бежал, а его место заняли наши войскаИзображение Ура! :-)
Ответить