Страница 2 из 3
Re: перенос функции
Добавлено: 27 май 2013, 19:03
edward_K
Вот вот. Сделайте маленький фейсик, народ поможет, но привести его нужно целиком.
в фейсе должен быть типа такого
create view
var
pcOrg :comp
select katorg.nrec
from katorg
where (( pcOrg == katorg.nrec
.....
))
parameters pcOrg;
...
HandleEvent
cmInit:
{ if getfirst katorg<>0 message('???')
....
closeinterface(cmDone)
}
end;
end.
вызывать соотв. RunInterface(?????, basedoc.corg)
Дальше уж сами думайте. Или платите кому нибудь за думанье.
Re: перенос функции
Добавлено: 27 май 2013, 19:25
Espada
RAJAH писал(а):Espada писал(а):
Код: Выделить всё
create view condition org as basedoc.cdogovor=coGetTune('MYORG');
Вы ж про ДО на продажу говорили? А ограничение-то на контрагента указывает на собственную организацию (coGetTune('
MYORG')), и, вообще, ссылка на каталог договоров (basedoc.cdogovor)!
спасибо за то, что указал на ошибку. Внимательно разобравшись с данной строкой поняли, что она не влияет на данный код. По совету Edwarda сделал небольшой фейсик
Код: Выделить всё
#component "L_BaseDoc"
const
cmbut1=143213;
end;
alter interface VSCHET;
var
weight_tek:Double
weight:Double
data:Date
nomer:String
i:Double
j:Double
org:Word
saldo_tekD:Double
saldo_tekK:Double
saldo_vx:Double
saldo_vxD:Double
saldo_vxK:Double
attrsaldoD:Double
attrsaldoK:Double
saldo_ISX:Double
saldo_ISXD:Double
saldo_ISXK:Double
k:Double
d_ob:Double
k_ob:Double
Nastr:String
OP:Date
VIDS:String
org_nrec:Double
Create view massa
from katsopr, spsopr, katmc
where
((
org_nrec == KatSopr.cOrg
...
));
Create view Org_attr
from katorg,synonym attrnam attrnamD,synonym attrval attrvalD,synonym attrnam attrnamK,synonym attrval attrvalK,synonym attrnam attrnamM,synonym attrval attrvalM
where
...
Create view Saldo from SALDMOUN
where
...
Create view obormot from oborot
where
...
Create view obormotka from oborot
where
...
window wvschet;
handleevent
cmInit:
{
...
}
cmbut1:
{
{
org_nrec:=katorg.nrec;
data := To_Date(01,10,2012);
org := 1418;
Nastr := sGetTune('DAT_M_OT');
OP := To_Date(Substr(Nastr, 1, 2),Substr(Nastr, 4, 2),Substr(Nastr, 7, 4));
}
{
if Saldo.SALDMOUN.VIOB = '1' Then VIDS := 'Дебет';
if Saldo.SALDMOUN.VIOB = '2' Then VIDS := 'Кредит';
}
{
if VIDS = 'Дебет' d := d + Saldo.SALDMOUN.SUMS;
if VIDS = 'Кредит' k := k + Saldo.SALDMOUN.SUMS;
}...
};
if saldo_ISX < 0
{
saldo_ISXD := 0;
saldo_ISXK := saldo_ISX*(-1);
};
...
{
if ( Substr(massa.katmc.KGROUPMC, 1, 2) = '04' and Substr(massa.katmc.KGROUPMC, 1, 4) <> '0410')
weight := weight + massa.sporder.kol;
}
{
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamD = tsOk and Org_Attr.getfirst AttrValD = tsOk)
{
saldo_tekD := Org_Attr.AttrValD.vdouble;
if (saldo_tekD = saldo_ISXD)
{} else if
(saldo_tekD <> saldo_ISXD)
{
Org_Attr.AttrValD.vdouble := saldo_ISXD;
Org_Attr.update current AttrValD;
i:=i+1;
};
};
...
}
{
if (Org_Attr.getfirst AttrValD <> tsOk)
{
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamD = tsOk)
{
Org_Attr.AttrValD.vstring := '';
Org_Attr.AttrValD.cattrnam := Org_Attr.attrnamD.nrec;
Org_Attr.AttrValD.wtable := word(org);
Org_Attr.AttrValD.crec := org_nrec;
Org_Attr.AttrValD.vdouble := saldo_ISXD;
Org_Attr.insert current AttrValD;
i:=i+1;
};
};
attrsaldoD:= Org_Attr.AttrValD.vdouble;
...
end;
end;
end.
Re: перенос функции
Добавлено: 27 май 2013, 19:57
edward_K
я вам не зря советовал отдельный фейс и небольшой пример, но полный.
Как минимум не хватает позиционирования по дополнительным вьюхам типа saldo, oborotka и так далее. Во всех кроме основной мало задать параметры отбора, ди и в основной лучше подпихнуть принудительно.
Re: перенос функции
Добавлено: 28 май 2013, 16:04
Espada
Ребят, перепробовал, наверное, всё! никак у меня не хочет перечитывать. или я думал может где-то косяк и не берутся данные из каталога.
Код: Выделить всё
#include ExtAttr.Vih
#component "L_BaseDoc"
const
cmbut1=143213;
end;
alter interface VSCHET;
var
iAttr : iExtAttr
weight_tek:Double
weight:Double
data:Date
nomer:String
i:Double
j:Double
org:Word
saldo_tekD:Double
saldo_tekK:Double
saldo_vx:Double
saldo_vxD:Double
saldo_vxK:Double
attrsaldoD:Double
attrsaldoK:Double
saldo_ISX:Double
saldo_ISXD:Double
saldo_ISXK:Double
k:Double
d_ob:Double
k_ob:Double
Nastr:String
OP:Date
VIDS:String
org_nrec:Double
Create view massa
from katsopr, spsopr, katmc
where
((
org_nrec == KatSopr.cOrg
and data <<= katsopr.dsopr
and word (201) == KatSopr.VidSopr (NoIndex)
and katsopr.nrec == spsopr.csopr
and spsopr.nrec == sporder.cspsopr
and sporder.CMC == katmc.nrec
));
Create view Org_attr
from katorg,synonym attrnam attrnamD,synonym attrval attrvalD,synonym attrnam attrnamK,synonym attrval attrvalK,synonym attrnam attrnamM,synonym attrval attrvalM
where
((
org_nrec == katorg.nrec and // Кредит
word(1418) == attrnamK.wtable and
'Сальдо исходящее (кредит)' == attrnamK.name and
word(1418) == attrvalK.wtable and
katorg.nrec == attrvalK.crec and
attrnamK.nrec == attrvalK.cattrnam and
word(1418) == attrnamD.wtable and // Дебет
'Сальдо исходящее (дебет)' == attrnamD.name and
word(1418) == attrvalD.wtable and
katorg.nrec == attrvalD.crec and
attrnamD.nrec == attrvalD.cattrnam and
word(1418) == attrnamM.wtable and // Масса
'Отгрузка за период' == attrnamM.name and
word(1418) == attrvalM.wtable and
katorg.nrec == attrvalM.crec and
attrnamM.nrec == attrvalM.cattrnam
));
Create view Saldo from SALDMOUN
where
((
'562' == SALDMOUN.SCHETO and
OP == SALDMOUN.DATESAL and
org_nrec == SALDMOUN.KAUOS[1](noindex)
));
Create view obormot from oborot
where
((
OP <<= oborot.DATob and
'562' == oborot.SCHETO and
org_nrec == oborot.KAUOS[1](noindex)
));
Create view obormotka from oborot
where
((
OP <<= oborot.DATob and
'562' == oborot.SCHETK and
org_nrec == oborot.KAUKS[1](noindex)
));
window wvschet;
handleevent
cmInit:
{
if(Inherited::HandleEvent(cmInit) = heOk)
{
}
var pobj1,pobj2:longint;
var err:string;
cfsCreateObject ('button','SCVSCHET','but1',False,pobj2);
cfsSetProp(pobj2,'Origin_X',563);
cfsSetProp(pobj2,'Origin_Y',306);
cfsSetProp(pobj2,'Size_X',189);
cfsSetProp(pobj2,'Size_Y',25);
cfsSetProp(pobj2,'Title','Пересчитать скидки');
cfsSetProp(pobj2,'StatusCtx',sci13Esc);
cfsSetProp(pobj2,'Command',cmBut1);
}
cmbut1:
{
{
org_nrec:=katorg.nrec;
data := To_Date(01,10,2012);
org := 1418;
Nastr := sGetTune('DAT_M_OT');
OP := To_Date(Substr(Nastr, 1, 2),Substr(Nastr, 4, 2),Substr(Nastr, 7, 4));
saldo_vxD := 0;
saldo_vxK := 0;
attrsaldoD := 0;
attrsaldoK := 0;
saldo_ISXD := 0;
saldo_ISXK := 0;
i := 0;
j := 0;
d := 0;
k := 0;
k_ob := 0;
d_ob := 0;
weight := 0;
}
{
if Saldo.SALDMOUN.VIOB = '1' Then VIDS := 'Дебет';
if Saldo.SALDMOUN.VIOB = '2' Then VIDS := 'Кредит';
}
{
if VIDS = 'Дебет' d := d + Saldo.SALDMOUN.SUMS;
if VIDS = 'Кредит' k := k + Saldo.SALDMOUN.SUMS;
}
{
saldo_vx := d - k;
if saldo_vx >= 0 saldo_vxD := saldo_vx;
if saldo_vx <= 0 saldo_vxK := saldo_vx*(-1);
}
{
d_ob := d_ob + obormot.oborot.sumob;
}
{
k_ob := k_ob + obormotka.oborot.sumob;
}
{
saldo_ISX := saldo_vxD - saldo_vxK + d_ob - k_ob;
if saldo_ISX > 0
{
saldo_ISXD := saldo_ISX;
saldo_ISXK := 0;
};
if saldo_ISX < 0
{
saldo_ISXD := 0;
saldo_ISXK := saldo_ISX*(-1);
};
if saldo_ISX = 0
{
saldo_ISXD := 0;
saldo_ISXK := 0;
};
weight :=0;
}
{
if ( Substr(massa.katmc.KGROUPMC, 1, 2) = '04' and Substr(massa.katmc.KGROUPMC, 1, 4) <> '0410')
weight := weight + massa.sporder.kol;
}
{
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamD = tsOk and Org_Attr.getfirst AttrValD = tsOk)
{
saldo_tekD := Org_Attr.AttrValD.vdouble;
if (saldo_tekD = saldo_ISXD)
{} else if
(saldo_tekD <> saldo_ISXD)
{
Org_Attr.AttrValD.vdouble := saldo_ISXD;
Org_Attr.update current AttrValD;
i:=i+1;
};
};
attrsaldoD:= Org_Attr.AttrValD.vdouble;
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamK = tsOk and Org_Attr.getfirst AttrValK = tsOk)
{
saldo_tekK := Org_Attr.AttrValK.vdouble;
if (saldo_tekK = saldo_ISXK)
{} else if
(saldo_tekK <> saldo_ISXK)
{
Org_Attr.AttrValK.vdouble := saldo_ISXK;
Org_Attr.update current AttrValK;
j:=j+1;
};
};
attrsaldoK:= Org_Attr.AttrValK.vdouble;
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamM = tsOk and Org_Attr.getfirst AttrValM = tsOk)
{
weight_tek := Org_Attr.AttrValM.vdouble;
if (weight_tek = weight)
{} else if
(weight_tek <> weight)
{
Org_Attr.AttrValM.vdouble := weight;
Org_Attr.update current AttrValM;
};
};
}
{
if (Org_Attr.getfirst AttrValD <> tsOk)
{
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamD = tsOk)
{
Org_Attr.AttrValD.vstring := '';
Org_Attr.AttrValD.cattrnam := Org_Attr.attrnamD.nrec;
Org_Attr.AttrValD.wtable := word(org);
Org_Attr.AttrValD.crec := org_nrec;
Org_Attr.AttrValD.vdouble := saldo_ISXD;
Org_Attr.insert current AttrValD;
i:=i+1;
};
};
attrsaldoD:= Org_Attr.AttrValD.vdouble;
if (Org_Attr.getfirst AttrValK <> tsOk)
{
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamK = tsOk)
{
Org_Attr.AttrValK.vstring := '';
Org_Attr.AttrValK.cattrnam := Org_Attr.attrnamK.nrec;
Org_Attr.AttrValK.wtable := word(org);
Org_Attr.AttrValK.crec := org_nrec;
Org_Attr.AttrValK.vdouble := saldo_ISXK;
Org_Attr.insert current AttrValK;
j:=j+1;
};
};
attrsaldoK:= Org_Attr.AttrValK.vdouble;
if (Org_Attr.getfirst AttrValM <> tsOk)
{
if (Org_Attr.getfirst katorg = tsOk and Org_Attr.getfirst attrnamM = tsOk)
{
Org_Attr.AttrValM.vstring := '';
Org_Attr.AttrValM.cattrnam := Org_Attr.attrnamM.nrec;
Org_Attr.AttrValM.wtable := word(org);
Org_Attr.AttrValM.crec := org_nrec;
Org_Attr.AttrValM.vdouble := weight;
Org_Attr.insert current AttrValM;
};
};
}
{
saldo_vxD := 0;
saldo_vxK := 0;
attrsaldoD := 0;
attrsaldoK := 0;
saldo_ISXD := 0;
saldo_ISXK := 0;
d := 0;
k := 0;
k_ob := 0;
d_ob := 0;
}
message(iAttr.sGetAttr(coKatorg,katorg.nrec,'Сальдо исходящее (дебет)'));
}
end;
end;
end.
это весь код, тут большая часть кода повторяется
Re: перенос функции
Добавлено: 28 май 2013, 16:18
edward_K
Черт. если вам говорят - сделайте небольшой пример то так и надо делать.
последний вам ответ - уже повторный
Код: Выделить всё
{
if Saldo.SALDMOUN.VIOB = '1' Then VIDS := 'Дебет';
if Saldo.SALDMOUN.VIOB = '2' Then VIDS := 'Кредит';
}
{
if VIDS = 'Дебет' d := d + Saldo.SALDMOUN.SUMS;
if VIDS = 'Кредит' k := k + Saldo.SALDMOUN.SUMS;
}
перед этим куском в форме у вас что-то было.
наверное надо saldo._loop saldmoun здесь поставить
и так далее по тексту. Вставьте в циклы мессаги - проверьте что вы в них собираете.
Re: перенос функции
Добавлено: 28 май 2013, 16:41
Espada
edward_K писал(а):Черт. если вам говорят - сделайте небольшой пример то так и надо делать.
последний вам ответ - уже повторный
Код: Выделить всё
{
if Saldo.SALDMOUN.VIOB = '1' Then VIDS := 'Дебет';
if Saldo.SALDMOUN.VIOB = '2' Then VIDS := 'Кредит';
}
{
if VIDS = 'Дебет' d := d + Saldo.SALDMOUN.SUMS;
if VIDS = 'Кредит' k := k + Saldo.SALDMOUN.SUMS;
}
перед этим куском в форме у вас что-то было.
наверное надо saldo._loop saldmoun здесь поставить
и так далее по тексту. Вставьте в циклы мессаги - проверьте что вы в них собираете.
Вот часть кода откуда переделывал
Код: Выделить всё
.endfields
.begin
data := To_Date(01,10,2012);
...
weight := 0;
end.
^
.{
^ ^
.{table 'Saldo'
.begin
if Saldo.SALDMOUN.VIOB = '1' Then VIDS := 'Дебет';
if Saldo.SALDMOUN.VIOB = '2' Then VIDS := 'Кредит';
end.
^ ^ &'&&&&&&&&&&&&&&&&&& ^ ^
.begin
if VIDS = 'Дебет' d := d + Saldo.SALDMOUN.SUMS;
if VIDS = 'Кредит' k := k + Saldo.SALDMOUN.SUMS;
end.
.}
.begin
saldo_vx := d - k;
Вот .{table 'Saldo' (цикл по локальной таблице) как его правильно задать в ViP? или его можно удалить?
Re: перенос функции
Добавлено: 28 май 2013, 23:14
RAJAH
Espada писал(а):Вот .{table 'Saldo' (цикл по локальной таблице) как его правильно задать в ViP?
Re: перенос функции
Добавлено: 29 май 2013, 14:16
Espada
RAJAH писал(а):Espada писал(а):Вот .{table 'Saldo' (цикл по локальной таблице) как его правильно задать в ViP?
Спасибо. сделал так как вы сказали
Код: Выделить всё
saldo._loop viewtable
{
{
if Saldo.SALDMOUN.VIOB = '1' Then VIDS := 'Дебет';
if Saldo.SALDMOUN.VIOB = '2' Then VIDS := 'Кредит';
}
...
}
...
obormot._loop viewtable
{
{
d_ob := d_ob + obormot.oborot.sumob;
}
}
obormotka._loop viewtable
{
{
k_ob := k_ob + obormotka.oborot.sumob;
}
}
и т.д
компиляция проходит нормально. однако всёравно не считает. И ещё заметил лаг с переменной D я её не мог объявить т.к. при компиляции писало, что переменная уже объявлена(но я её не объявлял). Задал переменную R и в коде где использовалось D подставил R. Но всёравно не считает
Re: перенос функции
Добавлено: 29 май 2013, 14:38
Espada
и ещё небольшой(скорее всего глупый) вопросик в коде отчёта использовал .{
Код: Выделить всё
weight := 0;
end.
^
.{
^ ^
.{table 'Saldo'
.begin
тобиш end.-в випе заменяю на }
.{table 'Saldo' -на Saldo._loop viewtable
.begin - на {
а на что менять .{ или его можно просто опустить???
Re: перенос функции
Добавлено: 29 май 2013, 22:34
RAJAH
Espada писал(а):на что менять .{ или его можно просто опустить???
Наверное, можно опустить: это начало цикла, видимо, из формы-прототипа (тогда ещё .} пониже будет).
Re: перенос функции
Добавлено: 30 май 2013, 12:14
Espada
RAJAH писал(а):Espada писал(а):на что менять .{ или его можно просто опустить???
Наверное, можно опустить: это начало цикла, видимо, из формы-прототипа (тогда ещё .} пониже будет).
Спасибо большое
Re: перенос функции
Добавлено: 01 июн 2017, 21:27
Gameus_
Добрый день!
подскажите, как использовать ф-ю GetKontrBalance в присоединенной форме, при компиляции ругается, хотя в самописном интерфейсе работает. Может есть ньансы?
спасибо!
Re: перенос функции
Добавлено: 02 июн 2017, 09:10
RAJAH
На что ругается? #define ComponentVersion делали?
Re: перенос функции
Добавлено: 02 июн 2017, 09:46
edward_K
У вас должно быть что то такое
Если в проекте то перед компиляцией форм
Если через Fcom(не помню точно
_
Код: Выделить всё
#declare
#include GKonBal.vih
#include GKonBalB.vih
#end
В форме
Код: Выделить всё
.var
gkb : GKonBalObj;
gkbb: GKonBalBuyerObj;
.endvar
Ну и где то
Код: Выделить всё
if (TypeDolg = 1) // как покупатель
GKB.GetKontrBalance(comp(KontrComp),
d1,
Tune_SoprKontr,
BalR,
BalV,
BalB)
else
GKBB.GetKontrBalanceBuyer(comp(KontrComp),
d1,
Tune_SoprKontr,
BalR,
BalV,
BalB);
Ну и где то должно быть
Re: перенос функции
Добавлено: 02 июн 2017, 18:01
Gameus_
Спасибо, получилось откомпилить! но результат не сходиться.
изначально задача следующая, в реестр платежных документов необходимо вывести данные по кредиторской задолженности.
Но начинаю сравнивать результат расчета с актом сверки взаиморасчетов по договорам (поставщики получатели) результат частенько не сходиться, не на много, но не сходиться. Или функция считает по другому алгоритму, не как акт сверки?
А если нужно считать кредиторскую задолженность в разрезе договоров, то придется самому ее рассчитывать?