добавил message в начало и в конец события - выводятся нули и там и там.
что в начале что в конце бондс = 0.
Я думаю что наверное надо написать какому полю должен быть равен _gruz при наложении условия? Как это описать?
Код: Выделить всё
//Добавлять во все проекты -----------------
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
//-----------------------------------------
#include GALNET.CCM
//Выбираем с чем работаем (в данном случае ресурс L_SOPRDOC)
#Component "L_SOPRDOC"
//Выбираем интерфейс из ресурса (в данном случае AKTREC)
//Обозначаем переменные
var _corg, _cmc, _csporder, _cpodr:comp; // _gruz,
var _kol, _price:double;
var _dsopr :date;
var _gruz, _adr :string;
//Временная таблица для 'Возврат материальной ценности'
table struct tmpVozvratMC "Возврат материальной ценности"
(
NNAKL :string "№ Накладной" ,
DATA :date "Дата",
NAMEMC :string "Наименование товара",
CENA :double "Цена",
CGRUZTO :string "Наименование грузополучателя",
PARTYNAME :string "Название партии",
NORDER :string "№ Ордера",
SKLAD :string "Наименование склада",
ADRES :string "Адрес грузополучателя",
OTGRUZ :double "Количество отгруженного товара",
VOZVRAT :double "Количество возвращенного товара",
KONTRAGENT :string "Наименование контрагента",
KOLFACT :double "Кол-во фактическое",
SPORDERNREC :comp "NREC ордера",
CGRUZFROM :comp "Код грузоотправителя"
)
with index
(
ind = CGRUZTO //Индекс по грузополучателю
);
//Временная таблица для 'Грузополучатели'
table struct tmpGruzto "Грузополучатели"
(
CGRUZTO :string "Наименование грузополучателя",
ADRES :string "Адрес грузополучателя",
KATORG3 :string "Наименование контрагента",
CGRUZTONREC :comp "NREC грузополучателя"
)
with index
(
ind = CGRUZTONREC //Индекс по NREC грузополучателя
);
// тут временная таблица закончилась
//Выбираем интерфейс из ресурса (в данном случае AKTREC)
alter interface AKTREC;
// Будем изменять обработчики таблице "SPSOPR"
tableEvent table SPSOPR
// Объявляем обработчик который нам нужен
cmPick:
{
// выбираем случай из "#NAMEMCUSL:" и присваиваем запуск интерфейса
case curfield of
#NAMEMCUSL:
{
if runinterface (L_MCU::GETMC,spsopr.cmcusl) = cmdefault and spsopr.cmcusl != 0
if isnew()
insert current spsopr;
else
update current spsopr;
rereadrecord(#spsopr);
runinterface (L_SOPRDOC::Example, katsopr.corgbase, spsopr.cmcusl, spsopr.kolfact, spsopr.price, spsopr.csporder, katsopr.dsopr, katsopr.cpodrto);
spsopr.rprice:=spsopr.price;
update current spsopr;
PutCommand(cmRefreshBDdata)
}
// иначе обрабатываем обычный "cmPick"
else if(inherited::HandleEvent(cmPick) = heOk) {}
end;
}
end;
//Обработка события внутри родительского интерфейса только для этого окна
window EDITSOPR
handleEvent
cmRestoreDoc:
{
runinterface (L_MCU::GETMC,spsopr.cmcusl);
}
end;
end;
end.
// Создаем свой интерфейс с именем "Example"
Interface Example 'Возврат материальной ценности' (,,scinterface), escClose, cyan, doAccept;
//Передаем ему параметры
parameters _corg, _cmc, _kol, _price, _csporder, _dsopr, _cpodr
//Создаем представление для временной таблицы tmpVozvratMC
create view as select * from tmpVozvratMC
//bounds filGruz = _gruz == tmpVozvratMC.cgruzfrom(noindex)
bounds filGruz = _gruz == tmpVozvratMC.CGRUZTO
bounds filAdr = _adr == tmpVozvratMC.ADRES(noindex)
;
// Выводим то что будет отображаться в нашем интерфейсе
browse EmployeeBrowse;
table tmpVozvratMC
Fields
tmpVozvratMC.NNAKL '№ Накладной':[8], protect;
tmpVozvratMC.DATA 'Дата':[8], protect;
tmpVozvratMC.NAMEMC 'Наименование товара':[25], protect;
tmpVozvratMC.CENA 'Цена':[10], protect;
tmpVozvratMC.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpVozvratMC.PARTYNAME 'Название партии':[25], protect;
tmpVozvratMC.NORDER '№ Ордера':[10], protect;
tmpVozvratMC.SKLAD 'Наименование склада':[15], protect;
tmpVozvratMC.ADRES 'Адрес грузополучателя':[25], protect;
tmpVozvratMC.OTGRUZ 'Кол-во отгруженного товара':[5], protect;
tmpVozvratMC.VOZVRAT 'Кол-во возвращенного товара':[5], protect;
(tmpVozvratMC.OTGRUZ - tmpVozvratMC.VOZVRAT) 'Кол-во доступное для возврата':[5], protect;
tmpVozvratMC.KONTRAGENT 'Наименование контрагента':[25], protect;
end;
handleevent
cmInit :
{
//Присваиваем имя вызываемому интерфейсом окну
SetWindowTitle(wnMainWindow,'Возврат материальной ценности ' + tmpVozvratMC.NAMEMC);
//Обрабатываем прямой SQL для первого интерфейса
sql select
SET1.KATSOPRNSOPR
,SET1.KATSOPRDSOPR
,SET1.KATMCNAME
,SET1.SPSOPRPRICE
,SET1.katorg2name
,SET1.KATPARTYNAME
,SET1.SKLORDERNORDER
,SET1.KATPODRNAME
,SET1.KATORG2ADDR
,SET1.SPORDERKOL
,SET2.SPORDERKOL2
,SET1.KATORG1NAME
,SET1.SPSOPRKOLFACT
,SET1.SPORDERNREC
,SET1.KATSOPRCGRUZFROM
from
(select
SPORDER.NREC as SPORDERNREC
,KATSOPR.NSOPR as KATSOPRNSOPR
,KATSOPR.DSOPR as KATSOPRDSOPR
,KATMC.NAME as KATMCNAME
,SPSOPR.PRICE as SPSOPRPRICE
,katorg2.name as katorg2name
,KATPARTY.NAME as KATPARTYNAME
,SKLORDER.NORDER as SKLORDERNORDER
,KATPODR.NAME as KATPODRNAME
,KATORG2.ADDR as KATORG2ADDR
,SPORDER.KOL as SPORDERKOL
,KATORG1.NAME as KATORG1NAME
,SPSOPR.CSPORDER as SPSOPRCSPORDER
,SPSOPR.KOLFACT as SPSOPRKOLFACT
,KATSOPR.CGRUZFROM as KATSOPRCGRUZFROM
from
KATSOPR
INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC
INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR
INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC
LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC
LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC
LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC
LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC
LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC
where
201 = KATSOPR.VIDSOPR and
(katsopr.corgbase = :_corg ) and
(spsopr.cmcusl = :_cmc ) and
(katsopr.dsopr <= :_dsopr ) and
// (katpodr.nrec = :_cpodr ) можно фильтровать и так, и как представлено ниже. В КВЕРИ выглядит одинаково
(katsopr.cpodrfrom = :_cpodr )
) as SET1
LEFT OUTER JOIN
(select
SPSOPR.CSPORDER
,SUM (SPORDER.KOL) as SPORDERKOL2
from
KATSOPR
INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC
INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR
INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC
LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC
LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC
LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC
LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC
LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC
where
106 = KATSOPR.VIDSOPR
group by KATMC.NAME, KATORG1.NAME, katorg2.name, SPSOPR.CSPORDER, SPORDER.CSPORDV) as SET2
ON SET1.SPORDERNREC = SET2.CSPORDER
into tmpVozvratMC
;
}
cmDefault:
{
_kol:=tmpVozvratMC.KOLFACT
_price:=tmpVozvratMC.CENA
_csporder:=tmpVozvratMC.SPORDERNREC
}
cmpick:
{
_gruz:='0';
message (_gruz)
RUNINTERFACE (L_SOPRDOC::Example2, _corg);
if _gruz !='0'
{
subbounds(tbfilGruz);
addbounds(tbfilGruz);
message (_gruz)
}
else
subbounds(tbfilGruz)
PutCommand(cmRefreshBDdata)
message (_gruz)
}
end;
end.
// Вызов второго интерфейса для использования его в качестве фильтров для первого интерфейса
Interface Example2 'Грузополучатели' , escClose, cyan, doAccept;
//Передаем ему параметры
parameters _CORG
//, _gruz, _adr
//Создаем представление для временной таблицы tmpGruzto
create view as select * from tmpGruzto;
// Выводим то что будет отображаться в нашем интерфейсе
browse GruztoBrowse;
Fields
tmpGruzto.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpGruzto.ADRES 'Адрес грузополучателя':[25], protect;
end;
handleevent
cmInit :
{
//Обрабатываем прямой SQL для второго интерфейса
sql select distinct KATORG.NAME
,KATORG.ADDR
,KATORG3.NAME
,KATORG.NREC
from KATORG
,KATSOPR
,KATORG KATORG3
where KATSOPR.CGRUZTO = KATORG.NREC and
KATSOPR.CORGBASE = KATORG3.NREC and
(katsopr.corgbase = :_corg )
into tmpGruzto
}
end;
end.