|
11.10.2004, 15:15 | #1 |
Участник
|
+++++++++++++++++++++++код датапорта (русские символы как всегда непередаваемо красивы!!!!):
Documentation() OnInitDataport() CurrDataport.IMPORT := TRUE; RecordsInFile :=0; RecordsImported :=0; OnPreDataport() IF NOT CurrDataport.IMPORT THEN BEGIN; MESSAGE('EXPORT DISABLED!'); CurrDataport.QUIT; END; OnPostDataport() MESSAGE('Èìïîðòèðîâàíî ' + FORMAT(RecordsImported) + ' èç ' + FORMAT(RecordsInFile) + ': óñïåøíî.'); FuncDescrRas(VAR VarManager : Text[30];VAR VarZia : Text[6]) FuncDescrRas : Text[100] FuncDescrRas:=ConstDescrRas + VarManager + VarZia; FuncCompanyName(VarCode : Text[2];VarManager : Text[30]) FuncCompanyName : Text[250] FuncCompanyName:='ÎÎÎ"ÂÓËÊÀÍ"' + ConstCompanyName + VarCode + VarManager; ++++++++++++++++++++++++код импорта записи Documentation() OnPreDataItem() OnBeforeExportRecord() OnAfterExportRecord() OnBeforeImportRecord() INIT; OnAfterImportRecord() RecordsInFile := RecordsInFile+1; IF Amount=0 THEN CurrDataport.SKIP; // âûõîä áåç èìïîðòà Manager:=' ÷åðåç '; ZIA:='(***)'; Company:=''; CFURecord.RESET; CFURecord.SETRANGE(CFURecord."CFU Code","Shortcut Dimension 1 Code"); IF CFURecord.FIND('-') THEN BEGIN Manager:=Manager + CFURecord."Manager Name" + ' ' + CFURecord."Manager Initials"; IF EVALUATE(CFUInt, CFURecord."Internal Code") THEN Company:=FORMAT(CFUInt); ZIA:=' ÇÈÀ' + Company; END ELSE Manager:=Manager + '(ìåíåäæåð íå óêàçàí)'; CFURecord.RESET; Company:=FuncCompanyName(Company, Manager); AccType := "Account Type"::"G/L Account"; IF Amount > 0 THEN // åñëè ðàñõîäíèê BEGIN JournalTemplateName := KRas; AccountNo := ARas; Descr := FuncDescrRas(Manager,ZIA); END ELSE // åñëè ïðèõîäíèê BEGIN JournalTemplateName :=KPri; Descr:=DescrPri; IF DATE2DMY("Posting Date",1)=1 THEN BEGIN AccType := "Account Type"::Customer; AccountNo:=APri1; END ELSE BEGIN AccountNo:=APri; END; END; // íàéäåì LineNo. Lines.RESET; Lines.SETRANGE(Lines."Journal Template Name",JournalTemplateName); Lines.SETRANGE(Lines."Journal Batch Name",KRUB); IF Lines.FIND('+') THEN LineNo:=Lines."Line No." + 10000 ELSE LineNo:= 10000; Lines.RESET; VALIDATE("Journal Template Name",JournalTemplateName); VALIDATE("Journal Batch Name", KRUB); VALIDATE("Line No.", LineNo); VALIDATE("Posting Date"); VALIDATE("Document Type", "Document Type"::Payment); VALIDATE("Account Type", AccType); VALIDATE("Account No.", AccountNo); VALIDATE(Amount,Amount); VALIDATE("Bal. Account Type", "Bal. Account Type"::"Bank Account"); VALIDATE("Bal. Account No.", KRUB); VALIDATE("Text 1", '*'); // + text1 + ZIA); IF Amount > 0 THEN VALIDATE("Text 3", text3) ELSE VALIDATE("Text 2", text2); VALIDATE("Bank Payment Type", "Bank Payment Type"::"Computer Check"); VALIDATE(Description,Descr); VALIDATE("Source Type", "Source Type"::"Bank Account"); VALIDATE("Source No.", KRUB); VALIDATE("Source Code", 'ÔÈÍÆÓÐ'); VALIDATE("Company Name", Company); VALIDATE("Allow Application", TRUE); VALIDATE("Default Tolerance Posting","Default Tolerance Posting"::"Payment Discount Accounts"); // èçìåðåíèÿ VALIDATE("Shortcut Dimension 1 Code","Shortcut Dimension 1 Code"); INSERT; RecordsImported := RecordsImported+1; Lines.RESET; Lines.SETRANGE(Lines."Text 1",'*'); IF Lines.FIND('-') THEN MESSAGE(FORMAT(Lines.Amount)); Lines.RESET; OnPostDataItem() **************************** поясню последний блок - он типа по ходу самый показательный. для каждой записи я нахожу набор уже импортированных (специально в [text 1] пишу '*' чтобы фильтр сделать) и из первой беру amount. и этот самый мессаг (3-я строка с конца) для первой записи выводит -111, для второй -111 (т.е. запись еще не повреждена), для третьей уже 222 (т.е. первая запись повреждена добавлением второй но ПОСЛЕ добавления) и т.д.: -333, 444.
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|