Проблема с докомпиляцией интерфейса выбора ДО

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Проблема с докомпиляцией интерфейса выбора ДО

Сообщение Max_Ural »

Есть интерфейс, который открывается при выборе ДО из платежных документов
F_SOPRHOZ::GETDBASE
Мы хотим, чтобы при выборе пункта локального меню Фильтр... сначала вывелось наше меню
Стандартные фильтры
Пользовательские фильтры

Если выбрать Стандартные - то открывается окно, которое есть сейчас
А если пользовательские - то наше окно с дополнительными фильтрами.

Такой механизм сработал в VSchetB, AktUslB, SoprDocB
А в этом интерфейсе - проблема
Когда выбираю пункт локального меню Фильтр - появляется сразу стандартное окно с фильтрами
Когда его закрываю - появляется мое меню с двумя пунктами.
И дальше - как планировалось

Посмотрел в исходнике
В событии cmHotKeys ничего странного не заметил - просто запуск локального меню

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

cmHotKeys:
  if ( CurTable = tnBaseDoc )
    PutHotCommand(RunMenu('GetDBase_HotKeys'));
В событии cmFilterSave тоже вроде ничего необычного нет

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

cmFilterSave:
{
  RunWindowModal(wiGetFiltrToBaseDoc);

  if ( boIsChangedFltr )
    {
      GetSummaBaseDocOne;
      SetBaseFormat;
      if ( (wInitpar and 8) > 0 )
        EvalBalansAsk(False);

      ///если поменялся фильтр то проверяем баундсы
      ///---------------------- предопл ДО
      if ((myVidDoc = 111) or (myVidDoc = 211))
      {
        if BoundActive(tbDogovor02)
        {
          SubBounds(tbDogovor02);
          psCalPlan := 0;
        }
        //на предоплату по своему светяться платежи
        if not (BoundActive(tbPreDOPlat))
          PushBounds(tbPreDOPlat)
      }else
        if BoundActive(tbPreDOPlat)
          PopBounds(tbPreDOPlat)
      ///---------------------- предопл ДО

    }
}
В докомпиляции написал следующее:

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

TABLE STRUCT LOCAL MTFILTR054_101 "ТАБЛИЦА ФИЛЬТРА"(
  NREC     : COMP
, CBASEDOC : COMP
, CFLAG    : BYTE
)
WITH INDEX
(
    MT1 = NREC(surrogate),
    MT2 = CBASEDOC,
    MT3 = CFLAG
);


alter interface GetdBase;
    Create view

    as select *
    FROM
        MTFILTR054_101
    bounds    Boun054_1011 = BASEDOC.NREC /== MTFILTR054_101.CBASEDOC
    ;

    overload
    end;

    handleEvent
        cmFilterSave:{
            message('Зашли в докомпиляцию');
            var br:boolean;
            br:=false;
            case RunMenu('mnuSetFilterType') of
            cmValue1:{
                inherited:: handleEvent (cmFilterSave);
            }
            cmValue2:{
            }
            end;
        }
    end;
end.
Что примечательно - сообщение "Зашли в докомпиляцию" появляется после того, как первый раз отобразилось окно с фильтрами.
Такое впечатление, что моя докомпиляция не перекрыла стандартную, а выполняется после нее, но чем это может быть вызвано - ума не приложу.

Подскажите пожалуйста, в чем особенность данного интерфейса?
Или может я не вижу явный ляп?
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Вероятно в этом интерфейсе локальное меню посылает другую команду.
Можно в отладчике посмотреть проходящие события, или, если менюшка не динамическая, то в конфигураторе меню или консоли управления.
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Сообщение Max_Ural »

Я нашел меню в этом же интерфейсе. Оно вроде статическое.

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

GetDBase_HotKeys Menu
{
  - 'Фильтр...', cmFilterSave, 'Установить фильтр на данные', hcBankLMWVyborDO, 'Alt+B', kbAltB, sci1Esc;
  -----------;
  - 'Альтернатива выбора: ДО другого типа', cmAttrib, 'Переход на документы-основания другого типа', hcBankLMWVyborDO, 'Ctrl+Enter', kbCtrlEnter, sci1Esc;
  -----------;
  - 'Режим формирования суммы платежа по ДО...', cmDocBas, 'Выбрать режим формирования суммы платежа по ДО', hcBankLMWVyborDO, 'Alt+D', kbAltD, sci1Esc;
  -----------;
  - 'Переключение одиночный/групповой выбор', cmManagerId, 'Переключение одиночный/групповой выбор', hcBankLMWVyborDO, 'Alt+M', kbAltM, sci1Esc;
  -----------;
  - 'Расчет баланса...', cmValue16, 'Расчет по ДО сумм отгрузки, оплаты и баланса', hcBankLMWVyborDO, 'Alt+R', kbAltR, sci1Esc;
  -----------;
  - 'Пересчет пропорционально',cmValue19,'Пересчет выбранных сумм пропорционально остатку платежа',hcBankLMWVyborDO,'',, sci1Esc;
}
Попозже попробую залезть в отладчик, может быть там найду ответ

Открыл этот ресурс в Консоли управления
Та же информация
Пункту меню Фильтр соответствует команда FilterSave
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

А вызов родительского обработчика из перекрытого проходит?
Вообще, родительский обработчик где описан? Может это WindowEvent и т.п....
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Сообщение Max_Ural »

Проверил
Окна точно нет
Обработчик описан в панели
Когда в докомпиляции поместил свой обработчик в панель - она вообще перестала вызываться

Как я понял, родительский обработчик вызывается дважды
Первый раз - перед запуском перекрытого события (абсолютно непонятно почему)
Второй раз - там где у меня прописан inherited
Ладно, пока решили обойтись новым пунктом меню и повесить мои фильтры на него
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

А, ну вот наверное и ответ: свой обработчик описан не там, где родительский. В итоге свой не перекрывает родительский, а добавляется к нему (ведь ничто не мешает существованию нескольких обработчиков одного и того же события).
Ответить