Две таблицы в одном Browse

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

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

Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: Две таблицы в одном Browse

Сообщение larin »

Набросал пример EventNavigation для вашего случая. Почти работает, но не совсем. Неправильно работают клавиши PageUp PageDown. Где то есть ошибка. Пока не додумал.

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

Interface Test2Table blue;

Var
  WhatTable : integer;  // 0 - KatMc, 1 - KatUsl
  IsStart   : boolean;

Create View As Select * From KATMC, KATUSL;

Browse brTwoTables NotableNavigation;
Fields
  if(WhatTable = 0, 'МЦ', 'Услуга')          'Table': [10], Protect;
  if(WhatTable = 0, KatMC.NRec, KatUsl.Nrec) 'Nrec': [10], Protect;
  if(WhatTable = 0, KatMC.Name, KatUsl.Name) 'Name': [60], Protect;
End;

function GoNext : boolean;
{
  result := false;

  if( IsStart )
  {
    IsStart := false;

    if( WhatTable = 1 )
      exit;

    if( getfirst katmc = tsok )
    {
      result := true;
      exit;
    }
    else
    {
      WhatTable := 1;
      if( getfirst katusl = tsok )
      {
        result := true;
        exit;
      }
    }
  }
  else
  {
    if(WhatTable = 0)
    {
      if( getnext katmc = tsok )
      {
        result := true;
        exit;
      }
      else
      {
        WhatTable := 1;
        if( getfirst katusl = tsok )
        {
          result := true;
          exit;
        }
      }
    }

    if(WhatTable = 1)
    {
      if( getnext katusl = tsok )
      {
        result := true;
        exit;
      }
    }
  }
}

function GoPrev : boolean;
{
  result := false;

  if( IsStart )
  {
    IsStart := false;

    if( WhatTable = 0 )
      exit;

    if( getlast katusl = tsok )
    {
      result := true;
      exit;
    }
    else
    {
      WhatTable := 0;
      if( getlast katmc = tsok )
      {
        result := true;
        exit;
      }
    }
  }
  else
  {
    if(WhatTable = 1)
    {
      if( getprev katusl = tsok )
      {
        result := true;
        exit;
      }
      else
      {
        WhatTable := 0;
        if( getlast katmc = tsok )
        {
          result := true;
          exit;
        }
      }
    }

    if(WhatTable = 0)
    {
      if( getprev katmc = tsok )
      {
        result := true;
        exit;
      }
    }
  }
}

handleevent
  cmInit:
  {
    WhatTable := 0;
    IsStart := true;
  }

  cmDoGetFirst:
  {
    WhatTable := 0;
    IsStart := true;

    //if( not GoNext )
    //  abort;
  }

  cmDoGetLast:
  {
    WhatTable := 1;
    IsStart := true;

    //if( not GoPrev )
    //  abort;
  }

  cmDoGetNext:
  {
    if( not GoNext )
      abort;
  }

  cmDoGetPrev:
  {
    if( not GoPrev )
      abort;
  }
End;

End.
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: Две таблицы в одном Browse

Сообщение larin »

А еще наверно можно попробовать сделать объектную таблицу, в которой запрограммировать последовательность из двух таблиц.

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

Re: Две таблицы в одном Browse

Сообщение cruger »

действительно, на объектах тоже по идее можно
falcon
партнер
Сообщения: 45
Зарегистрирован: Чт, 04/10/2007 09:27
Имя Фамилия: Александр Волков
Откуда: Фалькон плюс

Re: Две таблицы в одном Browse

Сообщение falcon »

Немного непонятно...
Если в обычном интерфейсе не сделать объедененную выборку по двум таблицам, то и в объектной таблице не сделать такую выборку и следовательно не наполнить объектную таблицу...

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

Re: Две таблицы в одном Browse

Сообщение cruger »

в объектном интерфейсе можно сделать ручную навигацию
Ответить