Страница 1 из 1

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

Добавлено: 19 окт 2014, 18:31
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;  

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

Добавлено: 19 окт 2014, 22:03
Den
При выборе записи происходит переход ...
Осталось увидеть как запрограммирован "выбор записи"

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

Добавлено: 20 окт 2014, 08:00
Алексей
ну видимо нажатие клавиши ввод - подразумевает смену активно поля, т.е. одно закончили заполнять переходим на другое.
вообще событие диалогового окна или интерфейса.
а чем не угодили пометки через insert ? cmMarkUnMark ?

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

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

Выбор записи запрограммирован на обработку события cmDefault.

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

Добавлено: 23 окт 2014, 12:27
Den
Чтобы отменить стандартную обработку события CmDefault нужно сказать stop;
А вообще да - описывать Cmdefault в табличных обработчиках не принято.

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

Добавлено: 23 окт 2014, 15:04
Zver
Теперь понятно, буду думать как извернуться.

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

Добавлено: 25 окт 2014, 01:56
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 - в противном случае.

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

Добавлено: 31 окт 2014, 00:22
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;