Объектный интерфейс - самописный. Хотелось бы понять, что может означать такая ошибка.
Описание объектного интерфейса:
Код: Выделить всё
//******************************************************************************
// (c) корпорация Галактика
// Галактика 8.1 - Название контура
//******************************************************************************
#ifndef __KatSoprTransfer_vih__
#define __KatSoprTransfer_vih__
#Component "EPA_SOPRDOC"
#doc
добавить описание объекта ...
#end
ObjInterface ObjKatSoprTransfer;
procedure SaveToXML (lMarker: longint);
procedure LoadFromXML ;
procedure SetXML_NAME(_XML_Name: string) ;
end;
VipInterface KatSoprTransfer Implements ObjKatSoprTransfer Licensed(Free);
public:
Procedure ParseDom;
Function GetSpSopr(SSAttrMap : longint; var p_bufSpSopr : type$SpSopr) : boolean;
Procedure AddSpSoprNode(SpSoprsNode: longint);
Function CreateXML(lMarker : longint): boolean;
procedure ObjKatSoprTransfer.SaveToXML(lMarker: longint);
procedure ObjKatSoprTransfer.LoadFromXML;
Procedure ObjKatSoprTransfer.SetXML_NAME(_XML_Name: string) ;
end;
VipInterface KatSoprTransfer_ForEp(KatSoprTransfer) Licensed(Free);
public:
Procedure ParseDom;
Function GetSpSopr(SSAttrMap : longint; var p_bufSpSopr : type$SpSopr) : boolean;
Procedure AddSpSoprNode(SpSoprsNode: longint);
Function CreateXML(lMarker : longint): boolean;
procedure ObjKatSoprTransfer.SaveToXML(lMarker: longint);
procedure ObjKatSoprTransfer.LoadFromXML;
end;
#endif
Код: Выделить всё
#include KatSoprTransfer.vih
#include TransferHelper.vih
#include LinkGrPl.vih
#include ExtAttr.vih
#include SystemHelper.vih
#include GetKau.vih
#include TuneAssistent.vih
#include MsgDlg.vih
#include ObjReservHelper.vih
Interface KatSoprTransfer;
Const
SAVE_MODE : byte = 0;
LOAD_MODE : byte = 1;
FORMAT_DATE: string[10] = 'DD/MM/YYYY';
SEPARATOR : string[1] = ';';
end;
var
XMLPathName : string;
PathComent : string;
Action_mode : byte;
isCanceled : boolean;
KatSoprNrec : comp;
noteStatus : word;
noteName : string;
sDBName : string;
cDBFilial : comp;
domDocument // ссылка на дом-документ
,rootNode // ссылка на корневой узел
,KatSoprsNode : longint; // ссылка на узел корневого элемента <KatSoprs>
cDog : comp; // ссылка на договор
XML_NAME : string;
cMnPlanReserv : comp;
#include ExtAttr.var
#include LinkGrPl.var
#include Getkau.var
create view vTransfer
from
KatSopr
,SpSopr (SPSOPR02)
,KatSopr snKatSopr
,SpSopr snSpSopr
,KatNotes
,KatNotes snKatNotes
,Dogovor
,KatMc
,ObjAccT
,ObjAccT snObjAccT
,SpecMtr
,MnPlan
where
((
KatSoprNrec == KatSopr.Nrec
and KAtSopr.Nrec == SpSopr.cSopr
and KatSopr.cNote == KatNotes.Nrec
and 100 == snKatNotes.Viddoc
and noteStatus == snKatNotes.Status
and noteName == snKatNotes.Name
and cDog == Dogovor.Nrec
and toKatSopr == ObjAccT.TypeOwn
and KatSopr.Nrec == ObjAccT.cOwner
and word(1) == ObjAccT.KindRec
and toZClient == ObjAccT.TypeObj
and cMnPlanReserv == MnPlan.NRec
)) ;
Procedure SaveToDsk; forward;
Procedure LoadFromDsk; forward;
Window wSetSaveLoadPath '', Dialog, EscClose;
Show at (,,50, 5);
Screen scSetSaveLoadPath;
fields
PathComent : skip, {font = { bold = true}};
XMLPathName : noProtect, PickButton;
buttons
cmOk ,,,;
cmCancel ,,,;
<<
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<. Продолжить .> <. Отменить .>
>>
end;
HandleEvent
cmInit :
{
isCanceled := true;
case Action_mode of
SAVE_MODE :
{
PathComent := 'Сохранять данные в папку:';
SetWindowTitle(wSetSaveLoadPath, 'Выбор пути к сохраняемым данным');
}
LOAD_MODE:
{
PathComent := 'Загружать данные из папки:';
SetWindowTitle(wSetSaveLoadPath, 'Выбор пути к загружаемым данным');
}
end;
LoadFromDsk;
}
cmOk :
{
if (Trim(XMLPathName) = '')
{
Message('Необходимо выбрать путь к данным', Warning) ;
Abort;
Exit;
}
isCanceled := false;
SaveToDsk;
CloseWindow(wSetSaveLoadPath);
}
cmPick :
{
Case CurField of
#XMLPathName :
{
Set XMLPathName := GetDirName('Выберите путь к данным') ;
}
end;
}
end;
end; // Window
Function IsAllowedGroupMC(p_KodGr: string): boolean;
var deniedGroup
,tmpS : string;
i : integer;
{
result := true;
if (not ExistTune('KATSOPRTRANSFER.MASK_GROUPMC'))
exit;
deniedGroup := Trim(sGetTune('KATSOPRTRANSFER.MASK_GROUPMC'));
deniedGroup += SEPARATOR; // если в настройке не поставили разделитель - ставим, иначе будет некорректно работать ExtractDelimitedWord
for (i := 1; ; i++)
{
if (deniedGroup = '' or deniedGroup = SEPARATOR)
break;
tmpS := Trim(ExtractDelimitedWord(deniedGroup, i, SEPARATOR));
deniedGroup := Trim(SubStr(deniedGroup, length(tmpS) + 1, length(tmpS)));
if (tmpS = '')
continue;
if (Pos(tmpS, p_KodGr) = 1)
{
result := false;
break;
}
}
}
Procedure LoadFromDsk;
{
ReadMyDSK (XMLPathName, 'KatSoprTransfer_XMLPathName', false);
if (Trim(XMLPathName) = '')
{
Set XMLPathName := GetStringParameter('Files','OutputFilesDirectory',0);
}
}
Procedure SaveToDsk;
{
SaveMyDSK (XMLPathName, 'KatSoprTransfer_XMLPathName' );
}
Procedure SetAttribute(element :Longint; nameAttr, valueAttr:string);
{
XMLDOMElement_SetAttribute(element, nameAttr, valueAttr)
}
Function GetSaldoTune(cFilial: comp) : comp;
{
result := ReservHelper :: GetSaldoDst(cFilial);
/* case GetCurrentBranch of
0001000000000003h : result := 0001000000000005h; //РЭПХ
0001000000000002h : result := 0001000000000001h; //НЗЛ
000100000000000Ah : result := 0001000000000006h; //ЭП
0001000000000004h : result := 000100000000000Ah; //К-Энэрго
else
{
if(getFirst fastFirstRow Filials where (( GetCurrentBranch == Filials.Atl_Nrec )) = tsOK )
Message('Текущий филиал ' + Filials.Name + ' GetCurrentBranch = ' + GetCurrentBranch );
Message('Не удалось определить филиал');
}
end; */
}
Procedure AddSpSoprNode(SpSoprsNode: longint);
{
var
SpSoprNode : longint;
SpSoprNode := XMLDOMDoc_CreateElement(domDocument, 'SpSopr');
rootNode := XMLDOMNode_AppendChild(SpSoprsNode, SpSoprNode);
SetAttribute(SpSoprNode, 'ID' , SpSopr.Nrec) ;
SetAttribute(SpSoprNode, 'cMcUsl' , SpSopr.cMcUsl) ;
SetAttribute(SpSoprNode, 'prMC' , SpSopr.prMC) ;
SetAttribute(SpSoprNode, 'Price' , DoubleToStr(SpSopr.Price , '[|-]3666666666666666666.8888888888888888')) ;
SetAttribute(SpSoprNode, 'KolFact', DoubleToStr(SpSopr.KolFact, '[|-]3666666666666666666.8888888888888888')) ;
SetAttribute(SpSoprNode, 'Kol' , DoubleToStr(SpSopr.Kol , '[|-]3666666666666666666.8888888888888888')) ;
SetAttribute(SpSoprNode, 'Npp' , SpSopr.Npp) ;
SetAttribute(SpSoprNode, 'cOtpEd' , SpSopr.cOtpEd) ;
if ( GetFirst FastFirstRow SpecMtr where
((
1110 == SpecMtr.cOTable
and SpSopr.NRec == SpecMtr.cSpec
and GetSaldoTune(SpSopr.Atl_branch) == SpecMtr.cSaldTune
)) = tsOk)
{
//Message('Найдена запись в SpecMtr, .cObj = ' + SpecMtr.cObj);
SetAttribute(SpSoprNode, 'cMnplanRes', SpecMtr.cObj);
}
//else
// Message('Запись в SpecMtr не найдена');
XMLDOMNode_Release(SpSoprNode);
}
Procedure AddClaimNode(ClaimsNode: longint);
{
var
ClaimNode : longint;
ClaimNode := XMLDOMDoc_CreateElement(domDocument, 'Claim');
rootNode := XMLDOMNode_AppendChild(ClaimsNode, ClaimNode);
SetAttribute(ClaimNode, 'ID' , ObjAccT.cObject) ;
XMLDOMNode_Release(ClaimNode);
}
Procedure AddKatSoprNode;
{
var
KatSoprNode
, ChildNode : longint;
KatSoprNode := XMLDOMDoc_CreateElement(domDocument, 'KatSopr');
rootNode := XMLDOMNode_AppendChild(KatSoprsNode, KatSoprNode);
SetAttribute(KatSoprNode, 'ID' , KatSopr.Nrec) ;
SetAttribute(KatSoprNode, 'VidSopr', KatSopr.VidSopr) ;
SetAttribute(KatSoprNode, 'TipSopr', KatSopr.TipSopr) ;
SetAttribute(KatSoprNode, 'dSopr' , DateToStr(KatSopr.dSopr, FORMAT_DATE)) ;
SetAttribute(KatSoprNode, 'nSopr' , KatSopr.nSopr) ;
SetAttribute(KatSoprNode, 'VhodNal', KatSopr.VhodNal);
SetAttribute(KatSoprNode, 'OrgName', KatSopr.cOrg -> Name);
if (getFirst KatNotes = tsOk)
{
SetAttribute(KatSoprNode, 'Note' , KatNotes.Status +'|'+ KatNotes.Name + '|') ;
}
if (getFirst SpSopr = tsOk)
{
ChildNode := XMLDOMDoc_CreateElement(domDocument, 'SpSoprs');
rootNode := XMLDOMNode_AppendChild(KatSoprNode, ChildNode);
_Loop SpSopr
{
if (SpSopr.PrMc != toMc)
{
Message('Услуги не экспортируются!', Warning);
continue;
}
AddSpSoprNode(ChildNode);
}
XMLDOMNode_Release(ChildNode);
}
if (getFirst ObjAccT = tsOk)
{
ChildNode := XMLDOMDoc_CreateElement(domDocument, 'Claims');
rootNode := XMLDOMNode_AppendChild(KatSoprNode, ChildNode);
_Loop ObjAccT
{
AddClaimNode(ChildNode);
}
XMLDOMNode_Release(ChildNode);
}
XMLDOMNode_Release(KatSoprNode);
}
Function CreateXML(lMarker : longint): boolean;
var
iCount
,Iterator : word;
node // вспомогательные
,nodeChild : longint; // узлы
{
result := false;
iCount := GetMarkerCount(lMarker);
domDocument := XMLDOMDoc_New;
if (domDocument = 0)
Exit;
node := XMLDOMDoc_CreateProcessingInstruction(domDocument, 'xml', 'version="1.0" encoding="UTF-8" standalone="yes"');
nodeChild := XMLDOMNode_AppendChild(domDocument, node);
XMLDOMNode_Release(node);
XMLDOMNode_Release(nodeChild);
node := XMLDOMDoc_CreateComment(domDocument, '"ЭП-Аудит". Экспорт сопроводительных документов');
nodeChild := XMLDOMNode_AppendChild(domDocument, node);
XMLDOMNode_Release(node);
XMLDOMNode_Release(nodeChild);
KatSoprsNode := XMLDOMDoc_CreateElement(domDocument, 'KatSoprs');
rootNode := XMLDOMNode_AppendChild(domDocument , KatSoprsNode);
SetAttribute(KatSoprsNode, 'Database', SystemHelper::GetDatabaseName());
SetAttribute(KatSoprsNode, 'Filial', GetCurrentBranch());
StartNewVisual(vtIndicatorVisual, vfTimer, 'Создание XML-файла...', iCount);
for (Iterator := 0; Iterator < iCount; Iterator++)
{
NextVisual;
if (not GetMarker(lMarker, Iterator, KatSoprNrec))
continue;
if ( getFirst KatSopr = tsOk )
{
AddKatSoprNode;
}
}
result := XMLDOMDoc_Save(domDocument, XMLPathName+XML_NAME);
XMLDOMNode_Release(KatSoprsNode);
XMLDOMNode_Release(rootNode);
XMLDOMDoc_Done(domDocument);
var CliPath : string;
if (IfDefServerApp)
{
PutSrvFileToClient(XMLPathName+XML_NAME, sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS')+XML_NAME, true)
}
StopVisual('', 0);
}
Function LoadXML: boolean;
var AttrItem,
AttrMap,
lNodeList: longint;
Iterator,
iLength : integer;
{
result := false;
domDocument := XMLDOMDoc_New;
if (domDocument = 0)
Exit;
result := XMLDOMDoc_Load(domDocument, XMLPathName+XML_NAME);
if (not result)
{
Message('Не удалось загрузить данные из xml-файла', Error)
}
else
{
result := false;
lNodeList := XMLDOMDoc_GetElementsByTagName(domDocument, 'KatSoprs');
if (lNodeList = 0)
{
Message('Неверный формат DOM-документа!'#13'' +
'Корневой элемент "KatSoprs" не найден.', Error);
Exit;
}
iLength := XMLDOMNodeList_get_Length(lNodeList);
if ( iLength != 1)
{
XMLDOMNode_Release(lNodeList);
Message('Некорректный DOM-документ:'#13'' +
'найдено более одного корневого элемента "KatSoprs".', Error);
Exit;
}
AttrMap := XMLDOMNode_get_Attributes(XMLDOMNodeList_get_Item(lNodeList, 0));
iLength := XMLDOMNamedNodeMap_get_Length(AttrMap) ;
sDBName := '';
cDBFilial := 0h;
for (Iterator := 0; Iterator < iLength; Iterator++)
{
AttrItem := XMLDOMNamedNodeMap_get_Item(AttrMap, Iterator);
if (LoCase(XMLDOMNode_get_NodeName(AttrItem)) != 'database')
continue;
sDBName := XMLDOMAttribute_get_NodeValue(AttrItem);
break;
}
for (Iterator := 0; Iterator < iLength; Iterator++)
{
AttrItem := XMLDOMNamedNodeMap_get_Item(AttrMap, Iterator);
if (LoCase(XMLDOMNode_get_NodeName(AttrItem)) != 'filial')
continue;
cDBFilial := comp(XMLDOMAttribute_get_NodeValue(AttrItem));
break;
}
XMLDOMNode_Release(lNodeList);
XMLDOMNode_Release(AttrMap);
XMLDOMNode_Release(AttrItem);
if (sDBName = '')
{
Message('Некорректный DOM-документ:'#13'' +
'Не удалось определить значение атрибута Database корневого элемента', Error);
Exit;
}
if (not TransferHelper::DataBaseIsPermitted(sDBName, cDBFilial))
{
Message('Не разрешен импорт накладных из БД "' + sDBName + '"'
+ if (cDBFilial = 0, '', ' (филиал: ' + string(cDBFilial,0,0) + ')')
+ ', не задана или задана неверно закупочная организация', Warning);
Exit;
}
if (TransferHelper::GetPurchOrg(sDBName, cDBFilial) = 0)
{
Message('Для БД "' + sDBName + '"' + if (cDBFilial = 0, '', ' (филиал: ' + string(cDBFilial,0,0) + ')')
+ ' не задана или задана неверно закупочная организация', Warning);
Exit;
}
lNodeList := XMLDOMDoc_GetElementsByTagName(domDocument, 'KatSopr');
if (lNodeList = 0)
{
Message('Нет данных для загрузки!', Information);
Exit;
}
iLength := XMLDOMNodeList_get_Length(lNodeList);
XMLDOMNode_Release(lNodeList);
if ( iLength = 0)
{
Message('Нет данных для загрузки!', Information);
Exit;
}
result := true;
}
}
Function GetKatSopr(KSAttrMap : longint; var p_bufKatSopr : type$KatSopr) : boolean;
var
iCount
,Iterator : integer;
AttrItem : longint;
AttrName
,AttrValue : string;
OrgName : string;
// tuneAssist : TuneAssistent;
{
result := false;
ClearAdvRecord(p_bufKatSopr);
if (KSAttrMap = 0)
exit;
iCount := XMLDOMNamedNodeMap_get_Length(KSAttrMap) ;
if (iCount = 0) // в этом случае непонятно что грузить в катсопр
exit;
OrgName := '';
for (Iterator := 0; Iterator < iCount; Iterator++)
{
AttrItem := XMLDOMNamedNodeMap_get_Item(KSAttrMap, Iterator);
AttrName := LoCase(XMLDOMNode_get_NodeName(AttrItem));
AttrValue:= XMLDOMAttribute_get_NodeValue(AttrItem);
Case AttrName of
// дата
'dsopr' :
{
p_bufKatSopr.dSopr := StrToDate(AttrValue, FORMAT_DATE) ;
p_bufKatSopr.dPrice := StrToDate(AttrValue, FORMAT_DATE) ;
}
// номер
'nsopr' : p_bufKatSopr.nSopr := AttrValue;
// входимость налогов
'vhodnal': p_bufKatSopr.VhodNal := word(AttrValue);
// статус
'note' :
{
if ( tuneAssist.LoadSoprStatus != 0h )
p_bufKatSopr.cNote := tuneAssist.LoadSoprStatus;
else
{
noteStatus := word(ExtractDelimitedWord(AttrValue, 1, '|'));
noteName := ExtractDelimitedWord(AttrValue, 2, '|');
if (GetFirst fastFirstRow snKatNotes = tsOK)
{
p_bufKatSopr.cNote := snKatNotes.Nrec
}
}
}
'orgname' :
{
OrgName := AttrValue;
}
end;
}
XMLDOMNode_Release(KSAttrMap);
// проверяем, можно ли загружать накладную с таким контрагентом
if (not TransferHelper::OrgIsPermitted(OrgName))
{
Message('Накладная ' + #_SDOC(p_bufKatSopr.nSopr,p_bufKatSopr.dSopr) + ' не может быть загружена'#13''+
'Неверный контрагент: "' + OrgName + '"', Warning
);
Exit;
}
p_bufKatSopr.Nrec := GetNextNrec(#KatSopr, 0);
p_bufKatSopr.VidSopr := 101; // приходные
p_bufKatSopr.TipSopr := 1;
p_bufKatSopr.YearSopr := Year(p_bufKatSopr.dSopr) ;
p_bufKatSopr.cOrg := TransferHelper::GetPurchOrg(sDBName,cDBFilial); //coGetTune('REPHLOGISTICS.PURCH_ORG') ; // контрагент
p_bufKatSopr.cGruzFrom := TransferHelper::GetPurchOrg(sDBName,cDBFilial); //coGetTune('REPHLOGISTICS.PURCH_ORG') ; // грузоотправитель
p_bufKatSopr.cOrgBase := TransferHelper::GetPurchOrg(sDBName,cDBFilial); //coGetTune('REPHLOGISTICS.PURCH_ORG') ; // контрагент взаиморасчетов
p_bufKatSopr.cGruzTo := coGetTune('MYORG') ; // грузополучатель
p_bufKatSopr.Descr := sGetTune('USER.DESCR');
p_bufKatSopr.DesGr := sGetTune('USER.DESGR');
p_bufKatSopr.cPayment := coGetTune('OPER.BUY.NAKL.CPAYMENT');
// договор из атрибута "Договор с Холдингом " собственной организации
if (piExtAttr.ValueExists(coKatOrg, coGetTune('MYORG'), 'Договор с Холдингом') )
{
cDog := piExtAttr.coGetAttr(coKatOrg, coGetTune('MYORG'), 'Договор с Холдингом');
if (getFirst fastFirstRow Dogovor = tsOk)
{
p_bufKatSopr.cDogovor := if (Dogovor.TidK = 400, Dogovor.Nrec, Dogovor.cDogovor);
p_bufKatSopr.cAppDogovor := if (Dogovor.TidK = 400, 0 , Dogovor.Nrec);
}
}
result := true;
}
Function GetSpSopr(SSAttrMap : longint; var p_bufSpSopr : type$SpSopr) : boolean;
var
iCount
,Iterator : integer;
AttrItem : longint;
AttrName
,AttrValue : string;
{
result := false;
ClearAdvRecord(p_bufSpSopr);
if (SSAttrMap = 0)
exit;
iCount := XMLDOMNamedNodeMap_get_Length(SSAttrMap) ;
if (iCount = 0) // в этом случае непонятно что грузить в spsopr
exit;
for (Iterator := 0; Iterator < iCount; Iterator++)
{
AttrItem := XMLDOMNamedNodeMap_get_Item(SSAttrMap, Iterator);
AttrName := LoCase(XMLDOMNode_get_NodeName(AttrItem));
AttrValue:= XMLDOMAttribute_get_NodeValue(AttrItem);
//Message( 'Атрибут: ' + AttrName + 'Значение ' + AttrValue );
cMnPlanReserv := 0;
Case AttrName of
// ссылка на услуг / мц
'cmcusl' : p_bufSpSopr.cMcUsl := comp(AttrValue) ;
// признак МЦ / услуга
'prmc' : p_bufSpSopr.PrMc := word(AttrValue) ;
// цена
'price' :
{
p_bufSpSopr.Price := double(AttrValue);
p_bufSpSopr.RPrice := double(AttrValue);
}
//количество фактической
'kolfact' : p_bufSpSopr.KolFact:= double(AttrValue);
// количество
'kol' : p_bufSpSopr.Kol := double(AttrValue);
// номер по порядку
'npp' : p_bufSpSopr.Npp := word(AttrValue);
// отпускная единица измерения
'cotped' : p_bufSpSopr.cOtpEd := comp(AttrValue);
// группа налогов
'cgrnal' : p_bufSpSopr.cGrNal := comp(AttrValue);
//заказ, на который зарезервировано
'cmnplanres' :
{
cMnPlanReserv := comp(AttrValue);
if (getFirst FastFirstRow MnPlan = tsOK)
if(MnPlan.Number = '002093')
cMnPlanReserv := 0;
}
end;
}
p_bufSpSopr.Nrec := GetNextNrec(#SpSopr, 0);
XMLDOMNode_Release(SSAttrMap);
result := true;
}
Function GetClaim(ClaimMap : longint; var p_bufObjAccT : type$ObjAccT) : boolean;
var
iCount
,Iterator : integer;
AttrItem : longint;
AttrName
,AttrValue : string;
{
result := false;
ClearAdvRecord(p_bufObjAccT);
if (ClaimMap = 0)
exit;
iCount := XMLDOMNamedNodeMap_get_Length(ClaimMap) ;
if (iCount = 0) // в этом случае непонятно что грузить в spsopr
exit;
p_bufObjAccT.TypeObj := toZClient;
p_bufObjAccT.KindRec := 1;
p_bufObjAccT.NumSort := comp(100000);
for (Iterator := 0; Iterator < iCount; Iterator++)
{
AttrItem := XMLDOMNamedNodeMap_get_Item(ClaimMap, Iterator);
AttrName := LoCase(XMLDOMNode_get_NodeName(AttrItem));
AttrValue:= XMLDOMAttribute_get_NodeValue(AttrItem);
Case AttrName of
// ссылка на услуг / мц
'id' : p_bufObjAccT.cObject := comp(AttrValue) ;
end;
}
XMLDOMNode_Release(ClaimMap);
result := true;
}
function SetSpSopr_defFieldsFromKatSopr(p_bufKatSopr: type$KatSopr; var p_bufSpSopr : type$SpSopr) : boolean;
{
p_bufSpSopr.cSopr := p_bufKatSopr.Nrec;
p_bufSpSopr.VidSopr := p_bufKatSopr.VidSopr;
p_bufSpSopr.dSopr := p_bufKatSopr.dSopr;
// 08.11.10 14:47:17 проверка на архивную МЦ
if (p_bufSpSopr.PrMc = toMc)
{
var b_check : boolean;
do
{
if (getFirst KatMc where ((p_bufSpSopr.cMcUsl == KatMc.Nrec))
!= tsOk
)
{
p_bufSpSopr.cMcUsl := 0;
break;
}
else
{
if (/*KatMc.isArch != 0 or*/ (not IsAllowedGroupMC(KatMc.kGroupMC))) //Убрали проверку на архивность 31.03.2014
{
var l_cMcUsl : comp;
var s : string;
l_cMcUsl := 0;
//s := if (not IsAllowedGroupMC(KatMc.kGroupMC), ' ссылается на МЦ с запрещенной группой'#13'', ' ссылается на архивную МЦ'#13'');
if (not IsAllowedGroupMC(KatMc.kGroupMC))
s := ' ссылается на МЦ с запрещенной группой'#13'';
if (Message('Поз. спец-ии №' + p_bufSpSopr.Npp + s +
'Наименование: "' + if (length(KatMc.Name) > 25, SubStr(KatMc.Name, 1, 25) + '...', KatMc.Name) + '"'#13'' +
'Баркод: "' + KatMc.Barkod + '"'#13'' +
'Обозначение: "' + if (length(KatMc.Obozn) > 25, SubStr(KatMc.Obozn, 1, 25) + '...', KatMc.Obozn) + '"'#13'' +
'Код группы: "' + KatMc.kGroupMC + '"'#13#13'' +
'Заменить МЦ? (иначе пропустить)', Confirmation + YesNo
) != cmYes)
{
p_bufSpSopr.cMcUsl := 0;
break;
}
else
{
iGetKau.GetCodeKau(cgiNo, cgKau_KatMC, l_cMcUsl);
p_bufSpSopr.cMcUsl := l_cMcUsl;
continue;
}
}
break; // выход, если все проверки прошли
}
}
while (true)
}
result := p_bufSpSopr.cMcUsl > 0;
}
Procedure ReCalcNalUch(_cSopr: comp);
{
if (boGetTune('Oper.NalUch') )
{
var sumNalUch, sumNalUchUsl : double;
_Loop snSpSopr where ((_cSopr == snSpSopr.cSopr))
{
RunInterface(L_Sklad::ViewNalUch, snSpSopr.nRec, sumNalUch, sumNalUchUsl, false);
snSpSopr.priceN:= sumNalUch/snSpSopr.kolFact;
snSpSopr.vPriceN:= sumNalUchUsl/snSpSopr.kolFact;
update current snSpSopr;
}
}
}
Procedure InsertSpSopr(p_itemNode: longint; p_bufKatSopr: type$KatSopr);
var
p_nodeList : longint;
p_count : word;
p_bufSpSopr: type$SpSopr;
{
ClearAdvRecord(p_bufSpSopr);
p_nodeList := XMLDOMNode_get_ChildNodes(p_itemNode);
if (p_nodeList = 0)
exit;
p_count := XMLDOMNodeList_get_Length(p_nodeList);
if (p_count = 0 ) // нет позиций спецификации
{
XMLDOMNode_Release(p_nodeList);
exit;
}
var i : integer;
// создаем позиции SpSopr
for (i := 0; i < p_count; i++)
{
p_itemNode := XMLDOMNodeList_get_Item(p_nodeList, i);
if (XMLDOMNode_get_NodeName (p_itemNode) != 'SpSopr' )
{
XMLDOMNode_Release(p_itemNode);
exit;
}
else
if (GetSpSopr( XMLDOMNode_get_Attributes(p_itemNode), p_bufSpSopr))
{
if (not SetSpSopr_defFieldsFromKatSopr(p_bufKatSopr, p_bufSpSopr))
exit;
snSpSopr.buffer := p_bufSpSopr;
if (insert current snSpSopr != tsOk)
#Log('Ошибка вставки в SpSopr')
// Message('Вставляем запись в таблицу SpecMtr, cMnPlanReserv = ' + cMnPlanReserv);
if( cMnPlanReserv != 0 )
insert into SpecMtr set
SpecMtr.cObj := cMnPlanReserv
,SpecMtr.cOTable := 1110
,SpecMtr.cSpec := p_bufSpSopr.NRec
,SpecMtr.cSaldTune := GetSaldoTune(SpecMtr.Atl_Branch);
}
XMLDOMNode_Release(p_itemNode);
}
}
Procedure InsertObjAccT(p_itemNode: longint; p_bufKatSopr: type$KatSopr);
var
p_nodeList : longint;
p_count : word;
p_bufObjAccT: type$ObjAccT;
{
ClearAdvRecord(p_bufObjAccT);
p_nodeList := XMLDOMNode_get_ChildNodes(p_itemNode);
if (p_nodeList = 0)
exit;
p_count := XMLDOMNodeList_get_Length(p_nodeList);
if (p_count = 0 )
{
XMLDOMNode_Release(p_nodeList);
exit;
}
var i : integer;
for (i := 0; i < p_count; i++)
{
p_itemNode := XMLDOMNodeList_get_Item(p_nodeList, i);
if (XMLDOMNode_get_NodeName (p_itemNode) != 'Claim' )
{
XMLDOMNode_Release(p_itemNode);
exit;
}
else
if (GetClaim( XMLDOMNode_get_Attributes(p_itemNode), p_bufObjAccT))
{
p_bufObjAccT.TypeOwn := toKatSopr;
p_bufObjAccT.cOwner := p_bufKatSopr.Nrec;
p_bufObjAccT.VidSopr := p_bufKatSopr.VidSopr;
snObjAccT.buffer := p_bufObjAccT;
if (insert current snObjAccT != tsOk)
#Log('Ошибка вставки в ObjAccT')
}
XMLDOMNode_Release(p_itemNode);
}
}
Procedure ParseDom;
var KSNodeList
,SSNodeList
,ItemNode
,KSChildNodes : longint;
var
iCountKS
,iCountSS
,Iterator : integer;
var
bufKatSopr : type$KatSopr;
bufSpSopr : type$SpSopr;
{
KSNodeList := XMLDOMDoc_GetElementsByTagName(domDocument, 'KatSopr') ;
iCountKS := XMLDOMNodeList_get_Length(KSNodeList);
StartNewVisual(vtIndicatorVisual, vfTimer, 'Идет разбор DOM-документа...', iCountKS);
for (Iterator := 0; Iterator < iCountKS ; Iterator++)
{
NextVisual;
ItemNode := XMLDOMNodeList_get_Item(KSNodeList, Iterator);
if (ItemNode = 0)
continue;
if ( GetKatSopr( XMLDOMNode_get_Attributes(ItemNode), bufKatSopr) )
{
// ищем в базе накладную с таким номером и датой, если есть - спрашиваем, чего делать
if ( RecordExists KatSopr where ((
101 == KatSopr.VidSopr
and bufKatSopr.dSopr == KatSopr.dSopr
and bufKatSopr.nSopr == KatSopr.nSopr
))
= tsOk
)
if (Message('Уже существует накладная №'+ bufKatSopr.nSopr +
' от ' + DateToStr(bufKatSopr.dSopr, FORMAT_DATE)+'.'#13'' +
'Все равно загрузить?'
, Confirmation | YesNo
) != cmYes
)
continue;
snKatSopr.buffer := bufKatSopr;
if (insert current snKatSopr <> tsOk)
{
Message('Ошибка вставки KatSopr');
}
else
{
KSChildNodes := XMLDOMNode_get_ChildNodes(ItemNode);
XMLDOMNode_Release(ItemNode);
if (KSChildNodes = 0) // нет спецификации и ссылок на заявки
continue;
iCountSS := XMLDOMNodeList_get_Length(KSChildNodes);
if (iCountSS > 2 ) // дочерних узлов больше двух, чего быть не может
{
XMLDOMNode_Release(KSChildNodes);
continue;
}
var i : integer;
for (i := 0; i < iCountSS; i++)
{
ItemNode := XMLDOMNodeList_get_Item(KSChildNodes, i);
case (XMLDOMNode_get_NodeName (ItemNode)) of
'SpSoprs' : InsertSpSopr (ItemNode, snKatSopr.buffer);
'Claims' : InsertObjAccT(ItemNode, snKatSopr.buffer);
end;
XMLDOMNode_Release(ItemNode);
}
XMLDOMNode_Release(KSChildNodes) ;
// кооректируем накладные
iGrPl.InsSpGrPlD_Default(snKatSopr.VidSopr, snKatSopr.nRec, snKatSopr.cOrg);
var resultCheckSum : boolean;
RunInterface(
iChkSum
,snKatSopr.Nrec //сопроводительный документ
,0 //по всем позициям
,FALSE //выполнить только пересчет позиции (true)
,if (snKatSopr.cVal = 0, 10, 20) //метод пересчета суммы в валюте по текущему курсу
,resultCheckSum //резутьтат выполнения (был ли пересчет) [возвращаемый]
);
// пересчет для налогового учета
//ReCalcNalUch(snKatSopr.Nrec);
}
}
}
StopVisual('', 0);
XMLDOMNode_Release(KSNodeList);
XMLDOMDoc_Done(domDocument);
}
procedure ObjKatSoprTransfer.SaveToXML(lMarker: longint);
var
iCount
,Iterator : word;
{
Action_mode := SAVE_MODE;
if (lMarker = 0) // ссылка на маркер нулевая
Exit;
if (GetMarkerCount(lMarker) = 0) // ничего не выбрано
Exit;
XMLPathName := if (IfDefServerApp()
, ConvertClientPathToSrv (sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS'))
, sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS')
);
if (Trim(XMLPathName) = '')
RunWindowModal(wSetSaveLoadPath);
if (isCanceled)
Exit;
if (not VerifyPathName(XMLPathName, true))
{
Message('Указанный путь не существует.', Error);
Exit;
}
if (CreateXML(lMarker))
{
Message('Файл успешно создан!', Information);
}
else
{
Message('Не удалось создать файл!', Error);
}
}
procedure ObjKatSoprTransfer.LoadFromXML;
{
Action_mode := LOAD_MODE;
XMLPathName := sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS');
if (Trim(XMLPathName) = '')
RunWindowModal(wSetSaveLoadPath);
if (isCanceled)
Exit;
if (not VerifyPathName(XMLPathName, false))
{
Message('Указанный путь не существует.', Error);
Exit;
}
if (not FileExist (XMLPathName + XML_NAME) )
{
Message('По указанному пути нет данных для загрузки накладных.'#13''+
'Файл "'+XMLPathName + XML_NAME+'" не найден.', Information);
Exit;
}
if (IfDefServerApp())
{
if (GetFileFromClient(XMLPathName+XML_NAME, true) != 0)
{
Message('Файл не найден'#13'' + XMLPathName+XML_NAME, Warning);
Exit;
}
XMLPathName := ConvertClientPathToSrv (sGetTune('REPHLOGISTICS.PATH_FILE_KATSOPRS'));
}
if (not LoadXML)
exit;
ParseDom;
if (boGetTune('REPHLOGISTICS.NEEDDEL_FILE_KATSOPRS'))
{
DeleteFile(XMLPathName + XML_NAME) ;
}
Message('Загрузка накладных завершена', Information);
}
Procedure ObjKatSoprTransfer.SetXML_NAME(_XML_Name : string) ;
{
XML_NAME := _XML_Name;
}
HandleEvent
cmOnVipLoad:
{
XML_NAME := 'KatSoprTransfer_' + SystemHelper::GetDataBaseName() + '.xml'
}
end
end.