11.10.2004, 14:43 | #1 |
Участник
|
по прежнему бьюсь с 1 проблемой:
при импорте (в таблицу Gen. Journal Line ) каждая импортируемая запись записывает свой Amount в поле Amount самой первой импортированной записи. при этом все производные поля (Credit, Debet и т.д.) первой записи остаются корректными. стал разбираться с порядком выполнения датаИМпорта поставил в onpredataport дежурный message('g'), а также мессаги в onafterimportrecord... так вот эти message выполняется ПОСЛЕ импорта(после всего остального кода т.е. с запозданием)!!! как понял? ну во-1-х, индикатор состояния "отработал" до вывода сообщения, во-2-х, когда сообщение появилось, через sql сделал запрос и убедился, что записи "уже там", и первая записи уже "повреждена"... результат примерно такой amount debit credit 555.0... 000.0... 111.0... -222.0... 000.0... 222.0... 333.0... 333.0... 000.0... 444.0... 444.0... 000.0... 555.0... 555.0... 000.0... у меня есть ряд вопросов в связи с этим. и главный вопрос: ЧТО ЭТО ЗА ФИГНЯ??????????????????
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|
11.10.2004, 15:15 | #2 |
Участник
|
+++++++++++++++++++++++код датапорта (русские символы как всегда непередаваемо красивы!!!!):
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.
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|
11.10.2004, 15:18 | #3 |
Участник
|
ну и в дополнение - прошу ознакомиться с исходным файлом
[Posting Date],[Shortcut Dimension 1 Code],[Amount] 01.09.2004,0401502,-111 01.09.2004,0401502,-222 01.09.2004,0401502,333 01.09.2004,0401502,444 01.09.2004,0401502,555 и с результатом импорта...
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|
11.10.2004, 15:48 | #4 |
Участник
|
Цитата:
Сообщение от барбудас
ну и в дополнение - прошу ознакомиться с исходным файлом
[Posting Date],[Shortcut Dimension 1 Code],[Amount] 01.09.2004,0401502,-111 01.09.2004,0401502,-222 01.09.2004,0401502,333 01.09.2004,0401502,444 01.09.2004,0401502,555 и с результатом импорта... создаёшь временный рекорд фильтруешь его гетом по первичному ключу таблицы датапорта а только потом делаешь modify этого рекорда. и будет тебе счастье... |
|
11.10.2004, 16:05 | #5 |
Участник
|
Цитата:
Сообщение от Uni_DeMoN
делаешь так:
создаёшь временный рекорд фильтруешь его гетом по первичному ключу таблицы датапорта а только потом делаешь modify этого рекорда. и будет тебе счастье... зачем (то бишь нафига) делать временный рекорд если я хочу запись обработать в момент ИМПОРТа
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|
11.10.2004, 16:21 | #6 |
Участник
|
Цитата:
Сообщение от барбудас
Цитата:
Сообщение от Uni_DeMoN
делаешь так:
создаёшь временный рекорд фильтруешь его гетом по первичному ключу таблицы датапорта а только потом делаешь modify этого рекорда. и будет тебе счастье... зачем (то бишь нафига) делать временный рекорд если я хочу запись обработать в момент ИМПОРТа поэтому я подстраховаюсь именно таким способом. вот пример (замена кода менеджера у списка номенклатурны позиций) |
|
11.10.2004, 17:33 | #7 |
Участник
|
to барбудас :
чего-то мне даже интересно стало может постнешь экспорт (я имею в виду fob-file) своего датапорта полностью?
__________________
С уваженем, rootadmin |
|
12.10.2004, 10:41 | #8 |
Участник
|
Цитата:
Сообщение от rutadmeen
to барбудас :
чего-то мне даже интересно стало может постнешь экспорт (я имею в виду fob-file) своего датапорта полностью? Вроде бы проблема решена... но тем не менее предвижу, что подобных проблем будет возникать великое множество (да и в данном датапорте, наверно, куча багов ещё...). Поэтому постю датапорт - буду счастлив, если эксперты там обнаружат баги и симптомы некорректного восприятия мной навижн-подхода к программированию. Файл-источник я вроде уже выкладывал (см. выше). Спасибо, что Вам небезинтересны чужие трудности ЗЫ. У нас в Питере заморозки. Вчера "накрапывал" снежок...
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|
12.10.2004, 11:38 | #9 |
Moderator
|
Ну ты хотфикс-то поставил?
ЗЫ Чой-то сегодня аська не работает... |
|
12.10.2004, 16:58 | #10 |
Участник
|
у меня тож аська не работает
такое ощущение что у нас на работе она работает у тех, кто ее раньше включил нет, хотфикс пока не поставил. медлю
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|
13.10.2004, 12:47 | #11 |
Участник
|
ну фиг знает... у меня датапорт отработал нормально. даже когда я убрал комменты с валидейтов.
__________________
С уваженем, rootadmin |
|
14.10.2004, 12:20 | #12 |
Участник
|
ну значит видимо нужен хотфикс...
__________________
извиняюсь если вопрос ТУП - спрашиваю исключительно потому, что не знаю. спасибо, что не послали |
|