Показать сообщение отдельно
Старый 11.10.2004, 15:15   #2  
барбудас is offline
барбудас
Участник
 
55 / 10 (1) +
Регистрация: 30.09.2004
+++++++++++++++++++++++код датапорта (русские символы как всегда непередаваемо красивы!!!!):

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.
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали