Странности Vip TXO
Добавлено: 06 июл 2016, 18:14
Доброго времени суток.
Столкнулись с большой странностью в работе VIP ТХО.
Есть 2 базы. Одна Воронежская. другая Белгородская. Версия Галактики одинаковая, СУБД Oracle 8, но в Белгородской клиент Оракла 10.
До последнего времени ТХО работала там и там, но пришлось поменять условия в запросе. И вот уже 4 дня наблюдаю сказочную картину.
Код
Так вот ЭТОТ код работает в Белгородской базе на ура!
Но виснет в Воронежской базе, причем не доходит даже до Message('Этот вариант',0); т.е. сразу после запуска на экране унылая надпись : "Формируются типовые проводки" и все на веки вечные!.
Стоит переделать код, а именно: добавить неименованную вьюху с выбором , например, kated, а неименованную в данном варианте кода назвать именем и везде указать это имя , как код начинает работать в Воронеже, но перестает работать в Белгороде, причем перестает работать участок кода
Не возвращает GetMarkerCount(liMrk_Org)! То есть и неработоспособность разная, в этом случае не виснет все, а отрабатывает программа, но проводки не формируются из-за того, что маркер не возвращается. В чем может быть загвоздка и как ее победить???
Столкнулись с большой странностью в работе VIP ТХО.
Есть 2 базы. Одна Воронежская. другая Белгородская. Версия Галактики одинаковая, СУБД Oracle 8, но в Белгородской клиент Оракла 10.
До последнего времени ТХО работала там и там, но пришлось поменять условия в запросе. И вот уже 4 дня наблюдаю сказочную картину.
Код
Код: Выделить всё
VipInterface TXO_FNTXOAll implements ObjTxoIdentPlugin;
//Interface TXO_Factnota;
Interface TXO_FNTXOAll;
var _hTxo : longint; // нужны, чтобы можно было использовать сведения о разноске
var _buf : TTxoApiInfoDoc; // в процедуре ParamParser
var sum : double;
var piExAttr : iExtAttr;
var CurTiDkGal : word;
var CurSoprDoc : comp;
var CurKodPlan : String;
var KAU : String;
var CurPlan : Comp;
var NumberKAU : String;
var NumberKAU2 : String;
var NumberKAU3 : String;
var NumberKau4 : String;
var groupe : String;
var VidSkidki : String;
var FactNota : Double;
var UslKrnota : double;
var sumfact : Double;
var NrecKau, NrecKau62, NrecKau622 : Comp;
var NrecS : Comp;
var nrecSpsopr : Comp;
var NKau : Word;
var NameKauS : String;
var sMyOrg : String;
var nrecSopr : Comp;
var NrecMC : Comp;
var wMarkFilters : word; // маска фильтров
var liMrk_Org : longint ; // идентификаторы собственных маркеров
var isMrk_Org : boolean ; // чекеры активности фильтров
var i : Integer;
var CmpItem : Comp;
var err : boolean;
var SchO, SchK : String;
var dtBegDate, dtFinDate : date;
var _Org_Name, _Org_UNN : string ; // Обозначения фильтров на II листе
create view
as select
oborot.sumob, oborot.SchetO, oborot.SchetK, oborot.datob,Oborot.kauos[1],Oborot.kauos[2],Oborot.kauos[3],
Oborot.kauos[4], katmc.barkod, spsopr.nrec, spdocnal.Nalog, oborot.csoprdoc, katsopr.nrec
from
oborot, spkau, spsopr, katmc, spdocnal
where
((
SchO == oborot.Scheto and
Schk == oborot.SchetK
// and (oborot.datob >=dtBegDate and oborot.datob<=dtFinDate)
and oborot.kauos[2]==spkau.nrec
and oborot.csoprdoc==katsopr.nrec
and katsopr.nrec==spsopr.csopr
and (katsopr.dsopr >=dtBegDate and katsopr.dsopr<=dtFinDate)
and SpSopr.nRec == SpDocNal.cSpDoc
and ( SpDocNal.TipDoc = SpSopr.VidSopr
and SpDocNal.cDoc = SpSopr.cSopr )
and spsopr.cmcusl==katmc.nrec
)) and (spkau.name='Не является доходом (расходом)')and (oborot.kauos[3]=spsopr.cmcusl) and (substr(katsopr.descr,1,2)<>'AT');
// подключаем функции для работы с типами документов (isKatSoprTO, isKatSoprFROM, ...)
#INCLUDE FunTipDoc.vpp
Create view tPlan
as Select planssch.kod from planssch
where((CurPlan==planssch.nrec));
Create view tKau as Select SpKau.Nrec
from SpKau where
((NKau==SpKau.KODGRKAU and
KAU==SpKau.Name));
Create view vtMyOrg as
Select KatOrg.Name
From KatOrg
Where (( coGetTune('MYORG') /== KatOrg.Nrec ))
;
Create View TKauN as Select SpKau.Name
from SpKau Where ((Nrecs==SpKau.nrec));
Create view vtOrg as
select KatOrg.nrec, KatOrg.UNN, KatOrg.Name, tblOrg.*
from KatOrg, tblOrg
where (( tblOrg.cRec /== KatOrg.nrec ))
;
Create View TKat as Select Spsopr.nrec, Spsopr.cmcusl
from Spsopr
where((Nrecsopr==Spsopr.csopr)) and Spsopr.cmcusl=NrecMC;
! -----------------------------------------------------------------------
Function GetInfo : string;
{
GetInfo := 'Скидка по накладным (Проводки ТОЛЬКО через процент в ТХО) ' ;
}
Function ParamMaster : string ;
{ Message('Настройка: Счет Д <режим0> Счет К <режим1> '#13+
'В параметрах надо указать системныe номерa КАУ <Виды деятельности, 90>,<Налоговый учет, 90,91>,'#13+
'<Виды деятельности, 62>, <Ставка> &VIP_[Obj:"Nota"][par1:"NomerKau"][par2:"NomerKau2"][par3:"NomerKau3"][par3:"NomerKau3"]');
ParamMaster:='';
}
Procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
{
// ограничения на разносимый документ
TXOAllowRecallStoreCycles(hTXO);
Message('Этот вариант',0);
CurTiDkGal := buf.TiDkGal;
CurSoprDoc := buf.cSoprDoc;
CurPlan := buf.cPlansSch;
if (TPlan.getFirst planssch = tsOK)
{
CurkodPlan:=TPlan.planssch.kod;
}
if (vtMyOrg.GetFirst KatOrg = tsOK)
{ sMyOrg := vtMyOrg.KatOrg.Name ;
}
SchO:= CurKodPlan+'90';
SchK:=CurKodPlan+'62';
KAU:='Внереализационные доходы (расходы)';
_hTxo := hTxo ;
_buf := buf ;
//==========================================================================
//======= Наложение и обработка фильтров ==================================
//==========================================================================
isMrk_Org := FALSE;
// Запускаем интерфейс ввода параметров отчета (периода выборки и фильтров)
RunInterface( F_TxoApi::NotaFactDocFilters
, dtBegDate
, dtFinDate
, wMarkFilters
, Groupe
, FactNota
);
Groupe:=Ltrim(Rtrim(String(Groupe)));
VidSkidki:=Ltrim(Rtrim(String(VidSkidki)));
// Зачищаем таблицы фильтров, снимаем все ограничения с вьюх
delete all from tblOrg;
NumberKau:=TxoParamValue(hTxo,1);
NumberKau2:=TxoParamValue(hTxo,2);
NumberKAU3:=TxoParamValue(hTxo,3);
NumberKAU4:=TxoParamValue(hTxo,4);
// Инициализируем необходимые маркеры, заполняем таблицы фильтров, включаем ограничения во вьюхах.
//------------------------------------------------------------------------------------------------
if( (wMarkFilters AND _Org ) = _Org )
then { liMrk_Org := InitMarker(szMrk_Org,8,10,10) ;
isMrk_Org := TRUE ;
// Заполняем таблицу фильтров по Контрагентам, исходя из значений маркера
for( i:=0; i<=GetMarkerCount(liMrk_Org)-1; inc(i) ) {
if( GetMarker( liMrk_Org, i, cmpItem ) )
then { vtOrg.insert tblOrg
set tblOrg.crec := cmpItem
;
} // then
} // for
if( vtOrg.GetFirst tblOrg = tsOK )
do { vtOrg.tblOrg.UNN := vtOrg.KatOrg.UNN;
vtOrg.tblOrg.Name := vtOrg.KatOrg.Name;
vtOrg.update current tblOrg;
} while vtOrg.GetNext tblOrg = tsOK;
} // _Org
//---------------------------------------------------------------
// заполнить нециклическую аналитику
if (getfirst oborot = tsOk)
{
NKau:=Word(NumberKau2);
if (TKau.getFirst SpKau = tsOK)
{
NrecKau:=TKau.SpKau.nrec;
}
// построить выгрузку циклов
_loop Oborot
{
NrecS:=Oborot.kauos[1];
if (TKauN.getFirst SpKau = tsOK)
{
NameKauS:=TKauN.SpKau.name;
}
if (Pos('Реализация',NameKauS)>0)
{
NameKauS:='Реализация готовой продукции';
}
if (Pos('Экспорт',NameKauS)>0)
{
NameKauS:='Экспорт';
}
NKau:=Word(NumberKau3);
Kau:=NameKauS;
if (TKau.getFirst SpKau = tsOK)
{
NrecKau62:=TKau.SpKau.nrec;
}
cmpItem:=oborot.KAUOS[4];
nrecspsopr:=spsopr.nrec;
NrecMC:=oborot.KAUOS[3];
NrecSopr:=oborot.csoprdoc;
if (double(SpDocNal.Nalog)=20) then {KAU:='НДС 20%'}
else if (double(SpDocNal.Nalog)=18) then {KAU:='НДС 18%'}
else if (double(SpDocNal.Nalog)=10) then {KAU:='НДС 10%'}
else if (double(SpDocNal.Nalog)=0) then {KAU:='НДС 0%'};
NKau:=Word(NumberKau4);
if (TKau.getFirst SpKau = tsOK)
{
NrecKau622:=TKau.SpKau.nrec;
}
if (Groupe='1') then
{
if (substr(katmc.barkod,1,9)='109-93120') then
{
// очистить промежуточный буффер
TxoBodyClear(hTxo);
UslKrNota:=0;
// закачать значение КАУ
UslKrnota:=piExAttr.doGetAttr( 1110, NRECSPSOPR, 'Кредит-нота(условная)' ); // Кредит-нота
if (vtorg.getfirst tblOrg where ((cmpItem==tblOrg.crec)) = tsOK)
{
// формируем Д 90-01 - Кр 62-03
TxoBodyAddSchet(hTxo,wFlKau_Mode0,SchO,'01');
TxoBodyAddSchet(hTxo,wFlKau_Mode1,SchK,'03');
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau) , Oborot.kauos[1]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau2) , Oborot.kauos[2]);
// закачать суммы
TxoBodySetSum(hTxo, -FactNota*oborot.sumob/UslKrNota,0, 0);
// добавить в выгрузку
TxoBodyInsert(hTxo);
// формируем проводку Д62-01 - Кр 90-01
TxoBodyAddSchet(hTxo,wFlKau_Mode0,SchK,'01');
TxoBodyAddSchet(hTxo,wFlKau_Mode1,SchO,'01');
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, Word(NumberKau) , Oborot.kauos[1]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, Word(NumberKau2) , NrecKau);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau3) , NrecKau62);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau4) , NrecKau622);
// закачать суммы
sumfact:=FactNota*oborot.sumob/UslKrNota;
TxoBodySetSum(hTxo, -sumfact,0, 0);
// добавить в выгрузку
TxoBodyInsert(hTxo);
}
}
}
else
{
if (substr(katmc.barkod,1,9)<>'109-93120') then
{
// очистить промежуточный буффер
TxoBodyClear(hTxo);
UslKrNota:=0;
// закачать значение КАУ
UslKrnota:=piExAttr.doGetAttr( 1110, NRECSPSOPR, 'Кредит-нота(условная)' ); // Кредит-нота
if (vtorg.getfirst tblOrg where ((cmpItem==tblOrg.crec)) = tsOK)
{
// формируем Д 90-01 - Кр 62-03
TxoBodyAddSchet(hTxo,wFlKau_Mode0,SchO,'01');
TxoBodyAddSchet(hTxo,wFlKau_Mode1,SchK,'03');
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau) , Oborot.kauos[1]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau2) , Oborot.kauos[2]);
// закачать суммы
TxoBodySetSum(hTxo, -FactNota*oborot.sumob/UslKrNota,0, 0);
// добавить в выгрузку
TxoBodyInsert(hTxo);
// формируем проводку Д62-01 - Кр 90-01
TxoBodyAddSchet(hTxo,wFlKau_Mode0,SchK,'01');
TxoBodyAddSchet(hTxo,wFlKau_Mode1,SchO,'01');
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatOrg , cmpItem);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_KatMC , Oborot.kauos[3]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode0, cgKau_Dogovor, Oborot.kauks[2]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, Word(NumberKau) , Oborot.kauos[1]);
TxoBodyAddKau(hTxo, wFlKau_Mode1, Word(NumberKau2) , NrecKau);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau3) , NrecKau62);
TxoBodyAddKau(hTxo, wFlKau_Mode0, Word(NumberKau4) , NrecKau622);
// закачать суммы
sumfact:=FactNota*oborot.sumob/UslKrNota;
TxoBodySetSum(hTxo, -sumfact,0, 0);
// добавить в выгрузку
TxoBodyInsert(hTxo);
}
}
}
}
}
} // Procedure StoreCycles
handleevent
end;
END.
Но виснет в Воронежской базе, причем не доходит даже до Message('Этот вариант',0); т.е. сразу после запуска на экране унылая надпись : "Формируются типовые проводки" и все на веки вечные!.
Стоит переделать код, а именно: добавить неименованную вьюху с выбором , например, kated, а неименованную в данном варианте кода назвать именем и везде указать это имя , как код начинает работать в Воронеже, но перестает работать в Белгороде, причем перестает работать участок кода
Код: Выделить всё
if( (wMarkFilters AND _Org ) = _Org )
then { liMrk_Org := InitMarker(szMrk_Org,8,10,10) ;
isMrk_Org := TRUE ;
// Заполняем таблицу фильтров по Контрагентам, исходя из значений маркера
for( i:=0; i<=GetMarkerCount(liMrk_Org)-1; inc(i) ) {
if( GetMarker( liMrk_Org, i, cmpItem ) )
then { vtOrg.insert tblOrg
set tblOrg.crec := cmpItem
;
} // then
} // for