Страница 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?

Код: Выделить всё

saldo._loop viewtable
{
  ...
}

Re: перенос функции

Добавлено: 29 май 2013, 14:16
Espada
RAJAH писал(а):
Espada писал(а):Вот .{table 'Saldo' (цикл по локальной таблице) как его правильно задать в ViP?

Код: Выделить всё

saldo._loop viewtable
{
  ...
}
Спасибо. сделал так как вы сказали

Код: Выделить всё

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
У вас должно быть что то такое
Если в проекте то перед компиляцией форм

Код: Выделить всё

#include GKonBal.vih
#include GKonBalB.vih
Если через 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);

Ну и где то должно быть

Код: Выделить всё

#define ComponentVersion

Re: перенос функции

Добавлено: 02 июн 2017, 18:01
Gameus_
Спасибо, получилось откомпилить! но результат не сходиться.
изначально задача следующая, в реестр платежных документов необходимо вывести данные по кредиторской задолженности.
Но начинаю сравнивать результат расчета с актом сверки взаиморасчетов по договорам (поставщики получатели) результат частенько не сходиться, не на много, но не сходиться. Или функция считает по другому алгоритму, не как акт сверки?
А если нужно считать кредиторскую задолженность в разрезе договоров, то придется самому ее рассчитывать?