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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение 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)
Дальше уж сами думайте. Или платите кому нибудь за думанье.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

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

Сообщение 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.
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

я вам не зря советовал отдельный фейс и небольшой пример, но полный.
Как минимум не хватает позиционирования по дополнительным вьюхам типа saldo, oborotka и так далее. Во всех кроме основной мало задать параметры отбора, ди и в основной лучше подпихнуть принудительно.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

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

Сообщение 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.

это весь код, тут большая часть кода повторяется
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение 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 здесь поставить
и так далее по тексту. Вставьте в циклы мессаги - проверьте что вы в них собираете.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

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

Сообщение 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? или его можно удалить?
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

Espada писал(а):Вот .{table 'Saldo' (цикл по локальной таблице) как его правильно задать в ViP?

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

saldo._loop viewtable
{
  ...
}
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

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

Сообщение 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. Но всёравно не считает
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

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

Сообщение Espada »

и ещё небольшой(скорее всего глупый) вопросик в коде отчёта использовал .{

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

weight := 0;
end.
^
.{

^ ^
.{table 'Saldo'
.begin
тобиш end.-в випе заменяю на }
.{table 'Saldo' -на Saldo._loop viewtable
.begin - на {
а на что менять .{ или его можно просто опустить???
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

Espada писал(а):на что менять .{ или его можно просто опустить???
Наверное, можно опустить: это начало цикла, видимо, из формы-прототипа (тогда ещё .} пониже будет).
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

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

Сообщение Espada »

RAJAH писал(а):
Espada писал(а):на что менять .{ или его можно просто опустить???
Наверное, можно опустить: это начало цикла, видимо, из формы-прототипа (тогда ещё .} пониже будет).
Спасибо большое
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Gameus_
Местный житель
Сообщения: 209
Зарегистрирован: 18 окт 2006, 17:03
Откуда: Ростов на Дону Новочеркасск Новороссийск
Контактная информация:

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

Сообщение Gameus_ »

Добрый день!
подскажите, как использовать ф-ю GetKontrBalance в присоединенной форме, при компиляции ругается, хотя в самописном интерфейсе работает. Может есть ньансы?
спасибо!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

На что ругается? #define ComponentVersion делали?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение 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
Gameus_
Местный житель
Сообщения: 209
Зарегистрирован: 18 окт 2006, 17:03
Откуда: Ростов на Дону Новочеркасск Новороссийск
Контактная информация:

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

Сообщение Gameus_ »

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