// подгрузка полей БД из имеющейся метаинформации
strw = "select * from fields where parentform = '" + desc->formname + "' ";
if (!desc->takefieldsfrom.IsEmpty()) strw += "or parentform = '" + desc->takefieldsfrom + "' ";
strw += "order by sortorder";
if (SELECT(mqrA, strw))
{
do
// сразу создадим все формы полей, инициализируем их, а также оставим ВСЮ семантику в этих формах
TfieldAddInfo *inf = new TfieldAddInfo();
inf->fieldname = mqrA->FieldByName("fieldname")->AsString;
inf->title = mqrA->FieldByName("title")->AsString;
inf->type = mqrA->FieldByName("type")->AsString;
inf->childform = mqrA->FieldByName("childform")->AsString;
inf->sql = mqrA->FieldByName("sql")->AsString;
inf->ReadOnly = mqrA->FieldByName("readonly")->AsBoolean;
inf->isqbe = mqrA->FieldByName("isqbe")->AsBoolean;
inf->value = mqrA->FieldByName("value")->AsString.Trim();
inf->code = mqrA->FieldByName("code")->AsInteger;
if (inf->type == (AnsiString)"T")
TfrmeFT *fr = new TfrmeFT(this, form->dsrcBrowse, inf);
fr->Parent = form->editarea; fr->Name = ""; fr->Align = alTop; inf->form = fr;
}
if ((inf->type == (AnsiString)"I") || (inf->type == (AnsiString)"S"))
TfrmeFV *fr = new TfrmeFV(this, form->dsrcBrowse, inf);
if (inf->type == (AnsiString)"C")
TfrmeFieldsN *fr = new TfrmeFieldsN(this, form->dsrcBrowse, inf);
if (inf->type == (AnsiString)"F") // поле интерпетируется на этапе подстановки при New,
{ // а также для фильтрации (т.е. используется для
// реализации ограниченных наборов)
form->FilterBy("flt_" + inf->fieldname, inf->sql);
if (inf->type == (AnsiString)"L")
TfrmeList *fr = new TfrmeList(this, form->dsrcBrowse, inf);
if (SELECT(mqrB, "select * from fieldelements where parentfield = " +
mqrA->FieldByName("code")->AsString + " order by sortorder"))
fr->AddElement(mqrB->FieldByName("title")->AsString, mqrB->FieldByName("value")->AsString);
mqrB->Next();
} while (!mqrB->Eof);
fr->Go();
mqrB->Close();
fldlst->Add(inf);
mqrA->Next();
} while (!mqrA->Eof);
mqrA->Close();
bool f = ((desc->type == (AnsiString)"T") && (!desc->parentfield.Trim().IsEmpty()));
form->spbTree->Visible = f;
form->dbnPlus->Visible = f;
form->SetTreeMode(f);
TuneFilters();
form->Go();
//---------------------------------------------------------------------------
void __fastcall TfrmUniForm::TuneFromBtn(TbtnAddInfo *lnkinfo, AnsiString linkvalue, AnsiString linktitle, AnsiString parentform)
if (!lnk) lnk = new TlnkFromBtn();
form->lnkb = lnk;
lnk->linkform = lnkinfo->linkform;
lnk->linktofield = lnkinfo->linktofield;
lnk->linkfromfield = lnkinfo->linkfromfield;
lnk->linkvalue = linkvalue;
lnk->linktitle = linktitle;
lnk->parentform = parentform;
void __fastcall TfrmUniForm::TuneForLink()
link = true;
slv = new TformDescription();
UploadMetaInfo(slv, lnk->linkform);
form->slv = slv;
form->link = link;
desc->listfield = "add_lnkform_nam";
void __fastcall TfrmUniForm::InitTblAdd()
// инициализация tblAdd
AnsiString str;
str = "select " + slv->listfield + ", " + slv->keyfield + " from " + slv->table;
form->tblAdd->SQL->Clear();
form->tblAdd->SQL->Add(str);
try
form->tblAdd->Close();
form->tblAdd->Open();
} catch(EOracleError &E)
ShowMessage(E.Message + ", запрос: '" + str + "'");
return;
void __fastcall TfrmUniForm::TuneFilters()
if (!parentform) return;
TList* patfrm_fltlst = ((TfrmUniForm*)parentform)->fltlst;
TList* patfrm_fldlst = ((TfrmUniForm*)parentform)->fldlst;
if (patfrm_fltlst)
for (int r=0; r<fltlst->Count; r++)
for (int i=0; i<patfrm_fltlst->Count; i++)
TfltAddInfo* tm_r = ((TfltAddInfo*)(fltlst->Items[r]));
TfltAddInfo* tm_i = ((TfltAddInfo*)(patfrm_fltlst->Items[i]));
if (tm_r->name == tm_i->name)
tm_r->retid = tm_i->retid;
tm_r->rettitle = tm_i->rettitle;
TfrmFilter* src = ((TfrmFilter*)tm_r->pntr);
src->edt->Text = tm_i->rettitle;
// в uid возвращается выбранный код
AnsiString str = tm_r->filtersql;
if (retid.IsEmpty()) str="";
else StrRpl(str, "%1", retid);
form->FilterBy("a" + IntToStr(tm_r->code), str);
if (accept && patfrm_fldlst)
TfrmUniForm* uni = ((TfrmUniForm*)parentform);
if (!uni->form->tblBrowse->IsEmpty())
for (int r=0; r<patfrm_fldlst->Count; r++)
for (int i=0; i<fltlst->Count; i++)
TfieldAddInfo *fl = ((TfieldAddInfo*)patfrm_fldlst->Items[r]);
TfrmeFieldsN *tm_i = ((TfrmeFieldsN*)(fl->form));
TfltAddInfo *tm_r = ((TfltAddInfo*)(fltlst->Items[i]));
if ((fl->type == (AnsiString)"C") && (fl->fieldname == tm_r->name))
if (!uni->form->tblBrowse->FieldByName(fl->fieldname)->IsNull)
tm_r->retid = uni->form->tblBrowse->FieldByName(fl->fieldname)->AsString;
tm_r->rettitle = tm_i->name->Text;
src->edt->Text = tm_i->name->Text;
void __fastcall TfrmUniForm::CommonButtonClick(TObject *Sender)
TbtnAddInfo* tm = ((TbtnAddInfo*)btnlst->Items[((TToolButton*)Sender)->Tag]);
if (form->tblBrowse->IsEmpty()) return;
// обработка настройки дочерней формы по нажатию кнопки контекстного перехода
AnsiString _title = tm->childtitle, _filter = tm->sql;
UseReplaces(_title, _filter);
bool s = (tm->type == (AnsiString)"S"), l = (tm->type == (AnsiString)"L");
if (!s && !l) return;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12