Этот список МЦ можно задавать различными способами. Один из них - все МЦ из приходной накладной.
Можно просто включить таблицу KatSopr в главную логическую таблицу и по ней строить броуз.
Однако хочу сделать так, чтобы всё, что связано с выбором приходной накладной, находилось в отдельном окне.
И логическая таблица, и функции и обработчики событий.
Для этого создаю вторую логическую таблицу, которая создаётся при запуске окна.
Однако построить броуз по этой таблице не могу. Не выводится ни одна запись.
Вот код для описания окна:
Код: Выделить всё
Window wnSlcNakl 'Выбор приходной' dialog;
var
sDogovor_NoDoc : string;
sPrinakl_nSopr : string;
create view wv_wnSlcNakl
var
vw_cDogovor : comp;
select
KatMc.Name
(FieldName = flMC_Name)
,katmc.Obozn
(FieldName = flMC_obozn)
from
KatMc
, mtMC_List
, KatSopr
, Dogovor
where
((
mtMC_List.cMc == KatMc.NRec
and 101 == KatSopr.VidSopr
))
bounds ByDogovor = vw_cDogovor /== KatSopr.cDogovor
and 0 <<= katSopr.dSopr
;
browse brPriNakl 'приходные накладные';
show at (,,,11);
table KatSopr;
fields
wv_wnSlcNakl.KatSopr.NSopr 'номер накладной' : [20], protect;
wv_wnSlcNakl.KatSopr.Descr 'Дескриптор' : [20], protect;
wv_wnSlcNakl.KatSopr.dSopr 'Выписана' : [20], protect;
wv_wnSlcNakl.KatSopr.dOpr 'Дата оприходования' : [20], protect;
end;
browse brmtMC_List 'Спецификация приходной накладной'
show at (,12,,19);
table mtMC_List;
fields
mtMC_List.Npp 'Номер позиции' : [ 5], protect;
mtMC_List.MC_BarKod 'Баркод' : [20], protect;
wv_wnSlcNakl.flMC_Name 'Наименование' : [20], protect;
wv_wnSlcNakl.flMC_obozn 'Обозначение' : [20], protect;
mtMC_List.dKol 'Количество' : [10], protect;
end;
screen scFilters;
show at(,20,,);
fields
sPrinakl_nSopr;
wFilters : noprotect;
sDogovor_NoDoc: pickButton;
<<
Выбрана накладная .@@@@@@@@@@@@@@@@@@ Фильтры [.] `по договору .@@@@@@@@@@@@@@@@@@
[.] `по контрагенту
>>
end;
Procedure Fill_mtMC_List(_cKatSopr: comp);
var
iNum: integer;
{
mtClear(#mtMC_List, mfNormal);
iNum := 0;
vw_cKatSopr := KatSopr.NRec;
_Loop SpSopr where ((KAtSopr.NRec == SpSopr.cSopr))
{
++iNum;
vw_cMc := SpSopr.cMCUSL;
if (GetFirst FastFirstrow KatMc_Get = tsOK) // == KatMc_Get.Nrec
insert into mtMC_List set
mtMC_List.cKatSopr := KatSopr.NRec
, mtMC_List.Npp := SpSopr.Npp
, mtMC_List.MC_BarKod := KAtMc_Get.BarKod
, mtMC_List.dKol := SpSopr.Kol
, mtMC_List.cmc := SpSopr.cMCUSL;
}
ReReadRecord(#mtMC_List);
}
windowEvent wnSlcNakl;
cmDefault:
{
Fill_mtMC_List(KatSopr.NRec);
set sPrinakl_nSopr := KatSopr.NSopr;
RereadRecord(tnmtMC_List);
}
cmDone:
{
set flMC_Indent := 'Выбрана накладная ' + KatSopr.NSopr;
vw_cSklad := KatSopr.cPodrTo;
}
cmPick:
case curfield of
#sDogovor_NoDoc:
{
if( (wFilters & 1) > 0 )
{
RunInterface( 'L_DOGOVOR::GetSomeDogovor', 0, 0, 0, 1, false, wv_wnSlcNakl.vw_cDogovor, false, 0 );
if (wv_wnSlcNakl.GetFirst FastFirstRow Dogovor where (( wv_wnSlcNakl.vw_cDogovor == Dogovor.NRec )) = tsOk )
sDogovor_NoDoc := wv_wnSlcNakl.DOGOVOR.NoDoc;
wv_wnSlcNakl.PushBounds(wv_wnSlcNakl.tbByDogovor);
RereadRecord(wv_wnSlcNakl.tnKatSopr);
}
}
end;
end;
end;