Browse переход на следующую запись

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

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

Ответить
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Browse переход на следующую запись

Сообщение Zver »

Вроде всё просто:
есть Browse по таблице БД, который используется для множественного выбора набора записей пользователем.

Выбранные записи отображаются списком в соседнем окне.

Заполнение списка происходит при обработке события cmDefault, кроме того происходит позиционирование на следующую запись таблицы.

Проблема:
При выборе записи происходит переход на следующий столбец Browse.

MnPlan_All - синоним таблицы MnPlan.

Описание browse

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

browse brMnPlanForSelect 'Заказы для выбора';
  show at (,10,50,22);
  table MnPlan_All;
  fields
    flMnPlan_ForSelect   #3'Заказ' ('Есть подзаказы') : [20], protect;
    flHasSubOrder        #3'П'                        : [ 5], protect;
    flMnPlan_Satatus_All #3'Статус'                   : [20], protect;
end;   
Обработка выбора:

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

tableEvent table MnPlan_All
  cmDefault:
  {
    case flTypeSelMC of
       MC_BY_VP     :  Message('Для составления отчета используется ВП ' + flVP_Select);
       MC_BY_OSNZAK :  Message('Для составления отчета основной заказ ' + flVP_Select);
      else
      {
        Ins_mtMnPlan_Selected(MnPlan_All.nRec);
        GetNext MnPlan_All;
        ReReadRecord(#MnPlan_All);
      }
    end;
  }

end;  
Программист-самоучка
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Browse переход на следующую запись

Сообщение Den »

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

Re: Browse переход на следующую запись

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

ну видимо нажатие клавиши ввод - подразумевает смену активно поля, т.е. одно закончили заполнять переходим на другое.
вообще событие диалогового окна или интерфейса.
а чем не угодили пометки через insert ? cmMarkUnMark ?
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Browse переход на следующую запись

Сообщение Zver »

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

Выбор записи запрограммирован на обработку события cmDefault.
Программист-самоучка
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Browse переход на следующую запись

Сообщение Den »

Чтобы отменить стандартную обработку события CmDefault нужно сказать stop;
А вообще да - описывать Cmdefault в табличных обработчиках не принято.
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Browse переход на следующую запись

Сообщение Zver »

Теперь понятно, буду думать как извернуться.
Программист-самоучка
LaaLaa

Re: Browse переход на следующую запись

Сообщение LaaLaa »

Вместо
Zver писал(а):

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

        GetNext MnPlan_All;
        ReReadRecord(#MnPlan_All);
эффективнее использовать RedrawCurrentAndGo

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

Функция RedrawCurrentAndGo  
Назначение
Функция RedrawCurrentAndGo предназначена для прорисовки текущей записи и перемещения на следующую /предыдущую запись в браузере или дереве. Например, при обработке пометки записи.

Описание
function RedrawCurrentAndGo (
  aFormatID : longInt;
  aGoNext : boolean
) : boolean;

Параметры
aFormatID : longInt - идентификатор (имя) формата (browse, tree).
aGoNext : boolean - направление перемещения на следующую (truе) или на предыдущую (false) записи.

Возвращаемое значение
True при успешном выполнении операции, false - в противном случае.
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Browse переход на следующую запись

Сообщение Zver »

Попробовал команду RedrawCurrentAndGo.

Если событие cmDefault вызывается двойным щелчком мыши - переход на следующую колонку не происходит.
При нажатии на клавишу Enter - происходит переход на следующий столбец.

Смотрел в отладчике, исполняется один и тот же код.

Вот новый код обработчика событий:

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


tableEvent table MnPlan_All
  cmDefault:
  {
    case flTypeSelMC of
       MC_BY_VP     :  Message('Для составления отчета используется ВП ' + flVP_Select);
       MC_BY_OSNZAK :  Message('Для составления отчета основной заказ ' + flVP_Select);
      else
      {
        Ins_mtMnPlan_Selected(MnPlan_All.nRec);
        //GetNext MnPlan_All;
        //ReReadRecord(#MnPlan_All);
        RedrawCurrentAndGo(brMnPlanForSelect, true);
      }
    end;
  }

end; 
Программист-самоучка
Ответить