Класс для просмотра нескольких свзанных таблиц
Скачать (rar-файл; Размер - 9282)Обсудить в форуме
Описание
Классы
CSelect - Создает связь между таблицами (Основной и связаными с ней справочниками)
Проходит по первой таблице и выбирает записи из связанных по кактм либо
параметрам.
CBrowseSel - А это класс который позволяет просмотреть инфу выбранную с помощью CSelect
CSelect - Создает связь между таблицами (Основной и связаными с ней справочниками)
Проходит по первой таблице и выбирает записи из связанных по кактм либо
параметрам.
CBrowseSel - А это класс который позволяет просмотреть инфу выбранную с помощью CSelect
Текст примера
import "..\\mac\\test\\BrowseSel.mac"; import "..\\mac\\test\\Select.mac"; PRIVATE record DlgBrowse("browse","..\\mac\\test\\test.lbr") dialog; PRIVATE CLASS (CSelect) CSelAcc VAR BegBS=""; VAR EndBS=""; VAR Client=0; VAR Acc=Tbfile("account.dbt","r",0); VAR Bal=Tbfile("balance.dbt","r",0); VAR Clt=Tbfile("client.dbt","r",0); InitCSelect(Acc,Bal,Clt); //Метод инициализирует структуры для поиска первой и последней строки MACRO SetFirstLast() m_TopRec.Rec.Account=BegBS; m_BottomRec.Rec.Account=EndBS+"яяяяяяяяяяяяяяяяяяяя"; END; //Поиск счета MACRO Find(a) Acc.Rec.Account=a; Acc.GetGE(); END; ////////////////////////////////////////////// //Переопределяем методы родительского класса ////////////////////////////////////////////// MACRO CheckIdx() return((Substr(Acc.rec.Account,1,5)>=BegBS) AND (Substr(Acc.rec.Account,1,5)<=EndBS)); END; MACRO Link() ClearLink(); Bal.Rec.iNumPlan=0; Bal.Rec.Balance=Substr(Acc.Rec.Account,1,5); if(NOT Bal.GetEQ()) m_FlagLink(1)=FALSE; return FALSE; //Если убрать строку то будут выбираться и записи для которых нет записей в плате счетов(конечно если найдутся такие счета;-) ) end; Clt.Rec.Client=Acc.Rec.Client; if(NOT Clt.GetEQ()) m_FlagLink(2)=FALSE; return FALSE; //Если убрать строку то будут выбираться и записи для которых нет клиентов(конечно если найдутся такие счета;-) ) end; return TRUE; END; MACRO Filter() if((Client!=0) AND (Acc.Rec.Client!=Client)) return FALSE; end; return TRUE; END; END; PRIVATE VAR Acc_Browse =CBrowseSel(CSelAcc(),78); //78-это ширина окна в диалоге для просмотра Acc_Browse.AddColumn("\n Счет\n account.dbt", 0, "Account", 20, "l"); Acc_Browse.AddColumn("\n Наименование бc\n balance.dbt", 1, "Name_Part", 78, "l"); Acc_Browse.AddColumn("\n№ клиента\naccount.dbt", 0, "Client", 9, "r"); Acc_Browse.AddColumn("\n Клиент по счету\n client.dbt", 2, "Name_Client",78, "l"); Acc_Browse.m_Freeze=0; Acc_Browse.m_FreezeMove=TRUE; ////////////////////////////// // Диалоговая процедура ////////////////////////////// MACRO Dlg_Proc(dl,cmd,id,key) VAR i; MACRO SetTitle() dl.Title=" Лицевые счета "+Acc_Browse.m_File.BegBS+"-"+Acc_Browse.m_File.EndBS; if(Acc_Browse.m_File.Client!=0) dl.Title=dl.Title+" Клиент № "+Acc_Browse.m_File.Client; end; // Acc_Browse.m_File.SetFirstLast(); UpdateFields(dl); END; if( cmd == DLG_INIT ) SetTitle(); elif( cmd == DLG_KEY ) /* Клавиши */ if(key==13) //Блокируем выбор return CM_IGNORE; elif(key==316) // F2 подсказка MsgBox("Left,Right-Смещает столбцы.|Ctrl+Right-Заморозить столбец.|Ctrl+Left-Разморозить"); return CM_IGNORE; elif(key==318) //F4 Поиск i=""; if(GetString(i,"Поиск по счету",20)) Acc_Browse.m_File.Find(i); Acc_Browse.Refresh(dl); end; return CM_IGNORE; elif(key==319) //F5 фильтр по БС if(GetString(Acc_Browse.m_File.BegBS,"Фильтр по БС с счета",5)) GetString(Acc_Browse.m_File.EndBS,"Фильтр по БС по счет",5); SetTitle(); Acc_Browse.Top(dl); end; return CM_IGNORE; elif(key==320) //F6 фильтр по клиенту if(GetInt(Acc_Browse.m_File.Client,"Фильтр по клиенту")) SetTitle(); Acc_Browse.Top(dl); end; return CM_IGNORE; end; end; return Acc_Browse.ScrollMes(dl,cmd,id,key); END; //Устанавливаем параметры выборки счетов по индексу Acc_Browse.m_File.BegBS="10000"; Acc_Browse.m_File.EndBS="99999"; //Отключаем фильтрацию по клиенту Acc_Browse.m_File.Client=0; //Вперед за Родину RunDialog(DlgBrowse,"Dlg_Proc"); exit(1);