Συμπτώματα
Χρησιμοποιείται ένας τύπος εσφαλμένο παραστατικό, όταν εισάγετε αρχεία LSV ηη (απευθείας χρέωση) και να απορριφθεί πληρωμές που υπάρχει στην Ελβετική έκδοση του Microsoft Dynamics NAV 2009. Όταν μια πληρωμή ακυρώθηκε, ο τύπος παραστατικού είναι ακόμα ρυθμισμένη σε πληρωμή. Ωστόσο, δεν μπορείτε να καταχωρήσετε τις εγγραφές λόγω το εσφαλμένο σύμβολο του ποσού. Ακολουθήστε τα βήματα της ενότητας οι αλλαγές κώδικα για να επιλύσετε αυτό το ζήτημα. Αυτό το ζήτημα παρουσιάζεται στα ακόλουθα προϊόντα:
-
Την Ελβετική έκδοση του Microsoft Dynamics NAV 2009 R2
-
Την Ελβετική έκδοση του Microsoft Dynamics NAV 2009 SP1
Προτεινόμενη αντιμετώπιση
Πληροφορίες άμεσης επιδιόρθωσης
Μια υποστηριζόμενη άμεση επιδιόρθωση είναι τώρα διαθέσιμη από τη Microsoft. Ωστόσο, προορίζεται μόνο για τη διόρθωση του ζητήματος που περιγράφεται σε αυτό το άρθρο. Eφαρμόστε τη μόνο σε συστήματα που αντιμετωπίζουν το συγκεκριμένο ζήτημα. Αυτή η επείγουσα επιδιόρθωση ενδέχεται να υποβληθεί σε πρόσθετο έλεγχο. Επομένως, εάν αυτό το ζήτημα δεν σας επηρεάζει ιδιαίτερα, σας συνιστούμε να περιμένετε έως το επόμενο service pack του Microsoft Dynamics NAV 2009 ή την επόμενη έκδοση του Microsoft Dynamics NAV που περιέχει αυτήν την επείγουσα επιδιόρθωση.
Σημείωση Σε ειδικές περιπτώσεις, οι χρεώσεις που υφίστανται κανονικά για κλήσεις υποστήριξης ενδέχεται να να ακυρωθούν, εάν έναν επαγγελματία τεχνικής υποστήριξης για το Microsoft Dynamics και σχετικά προϊόντα προσδιορίζει ότι μια συγκεκριμένη ενημερωμένη έκδοση θα επιλύσει το ζήτημά σας. Οι συνηθισμένες χρεώσεις υποστήριξης θα ισχύει για πρόσθετες ερωτήσεις υποστήριξης και για θέματα που δεν αφορούν τη συγκεκριμένη ενημερωμένη έκδοση.
Πληροφορίες εγκατάστασης
Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για επεξήγηση, χωρίς καμία εγγύηση, είτε σιωπηρή είτε ρητή. Αυτό περιλαμβάνει, ενδεικτικά, τις σιωπηρές εγγυήσεις εμπορευσιμότητας ή καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία διαδικασιών και τον εντοπισμό σφαλμάτων σε αυτές. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας. Ωστόσο, δεν θα τροποποιήσουν αυτά τα παραδείγματα για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες για να καλύψουν τις συγκεκριμένες απαιτήσεις σας.
Σημείωση Πριν να εγκαταστήσετε αυτήν την επείγουσα επιδιόρθωση, επιβεβαιώστε ότι όλοι οι χρήστες προγράμματος-πελάτη Microsoft Dynamics NAV έχουν αποσυνδεθεί από το σύστημα. Αυτό περιλαμβάνει υπηρεσίες Microsoft Dynamics NAV εφαρμογών διακομιστή (NAS). Θα πρέπει να το πρόγραμμα-πελάτη μόνο χρήστη που είναι συνδεδεμένος κατά την εφαρμογή αυτής της επείγουσας επιδιόρθωσης.
Για να εφαρμόσετε αυτήν την επείγουσα επιδιόρθωση, πρέπει να έχετε μια άδεια χρήσης του προγραμματιστή.
Συνιστούμε ότι ο λογαριασμός χρήστη στο παράθυρο "Συνδέσεις Windows" ή στο παράθυρο συνδέσεις βάσης δεδομένων να αντιστοιχιστεί το "SUPER" αναγνωριστικό ρόλου. Εάν ο λογαριασμός χρήστη δεν μπορεί να αντιστοιχιστεί το Αναγνωριστικό ρόλου "SUPER", πρέπει να επαληθεύσετε ότι ο λογαριασμός χρήστη έχει τα ακόλουθα δικαιώματα:
-
Το δικαίωμα "Τροποποίηση" για το αντικείμενο που θα αλλάξετε.
-
Τα δικαιώματα εκτέλεσης για το αντικείμενο 5210 Αναγνωριστικό αντικειμένου συστήματος και για την 9015 Αναγνωριστικό αντικειμένου συστήματος
το αντικείμενο.
Σημείωση Δεν πρέπει να έχετε δικαιώματα για τους χώρους αποθήκευσης δεδομένων, εκτός και αν έχετε να εκτελέσετε επιδιόρθωση δεδομένων.
Αλλαγές κώδικα
Σημείωση Πάντα δοκιμή κώδικα διορθώνει σε ελεγχόμενο περιβάλλον πριν να εφαρμόσετε τις ενημερώσεις κώδικα στους υπολογιστές παραγωγής.
Για να επιλύσετε αυτό το ζήτημα, ακολουθήστε τα εξής βήματα:
-
Να αλλάξετε τον κωδικό σε καθολικές μεταβλητές στη μονάδα κώδικα LSVMgt (3010831) ως εξής:
Υπάρχοντα κώδικα...Text11500@1150080 : TextConst 'ENU=Could not find Transaction No. %1 in Debit Direct Order No. %2.';
FileMgt@1150042 : Codeunit 419;
FileSystemObject@1150081 : Automation "{420B2830-E718-11CF-893D-00A0C9054228} 1.0:{0D43FE01-F093-11CF-8940-00A0C9054228}:'Microsoft Scripting Runtime'.FileSystemObject";
PROCEDURE ReleaseCustLedgEntries@1(_GenJnlLine@1150000 : Record 81);
BEGIN
...Αντικατάσταση κώδικα
...Text11500@1150080 : TextConst 'ENU=Could not find Transaction No. %1 in Debit Direct Order No. %2.';
FileMgt@1150042 : Codeunit 419;
FileSystemObject@1150081 : Automation "{420B2830-E718-11CF-893D-00A0C9054228} 1.0:{0D43FE01-F093-11CF-8940-00A0C9054228}:'Microsoft Scripting Runtime'.FileSystemObject";
// Add the following line.
IsCancellationExist@1150082 : Boolean;
// End of the added line.
PROCEDURE ReleaseCustLedgEntries@1(_GenJnlLine@1150000 : Record 81);
BEGIN
... -
Αλλάξτε τον κωδικό στη συνάρτηση ImportDebitDirectFile στη μονάδα κώδικα LSVMgt (3010831) ως εξής:
Υπάρχοντα κωδικό 1...FeeAmount := 0;
TotalRecRecords := 0;
TotalRecRecordsRev := 0;
// Journal name for no serie
GlBatchName.GET(ActGenJnlLine."Journal Template Name",ActGenJnlLine."Journal Batch Name");
...Αντικατάσταση κώδικα 1
...FeeAmount := 0;
TotalRecRecords := 0;
TotalRecRecordsRev := 0;
// Add the following line.
IsCancellationExist := FALSE;
// End of the added line.
// Journal name for no serie
GlBatchName.GET(ActGenJnlLine."Journal Template Name",ActGenJnlLine."Journal Batch Name");
...Υπάρχοντα κώδικα 2
...// Split File line into fields
// Delete the following lines.
FileID := COPYSTR(Line,1,3);
IF FileID <> '036' THEN
ERROR(Text049 + Text011);
TA := COPYSTR(Line,36,2);
IF NOT (TA = '97') THEN BEGIN
TotalRecord := FALSE;
EVALUATE(InvoiceAmt,COPYSTR(Line,54,13));
EVALUATE(yyCR,COPYSTR(Line,4,2));
EVALUATE(mmCR,COPYSTR(Line,6,2));
EVALUATE(ddCR,COPYSTR(Line,8,2));
IF yyCR > 98 THEN
PostDate := DMY2DATE(ddCR,mmCR,1900 + yyCR)
ELSE
PostDate := DMY2DATE(ddCR,mmCR,2000 + yyCR);
DebitDirectOrderNo := COPYSTR(Line,34,2);
EVALUATE(DebitDirectRecordNo,COPYSTR(Line,38,6));
EVALUATE(RejectionCode,COPYSTR(Line,543,2));
Currency := COPYSTR(Line,51,3);
// DEBIT DIRECT
LsvJour.RESET;
LsvJour.SETRANGE("Credit Date",PostDate);
LsvJour.SETRANGE("DebitDirect Orderno.",DebitDirectOrderNo);
IF NOT LsvJour.FIND('+') THEN
ERROR(Text059,DebitDirectOrderNo,PostDate);
LsvJournalLine.RESET;
//CH0001.begin
LsvJournalLine.SETCURRENTKEY("LSV Journal No.","Transaction No.");
LsvJournalLine.SETRANGE("LSV Journal No.",LsvJour."No.");
//LsvJournalLine.SETRANGE("Line No.",DebitDirectRecordNo);
LsvJournalLine.SETRANGE("Transaction No.",DebitDirectRecordNo);
//LsvJournalLine.FIND('-');
IF NOT LsvJournalLine.FINDFIRST THEN BEGIN
d.CLOSE;
ERROR(Text11500, DebitDirectRecordNo, DebitDirectOrderNo);
END;
//CH0001.end
InInvoiceNo := LsvJournalLine."Applies-to Doc. No.";
// END DEBIT DIRECT
// Process transaction of credit record
CASE TA OF
'81': // Credit
BEGIN
Transaction := Transaction::Credit;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Open;
LsvJournalLine."DD Rejection Reason" := LsvJournalLine."DD Rejection Reason"::" ";
LsvJournalLine.MODIFY;
IF LSVSetup.READPERMISSION THEN BEGIN
ClosedByESR(InInvoiceNo);
END;
END;
'84': // Cancellation "Storno"
BEGIN
IF RejectionCode <> 2 THEN
Transaction := Transaction::Correction
ELSE
Transaction := Transaction::Cancellation;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Rejected;
LsvJournalLine."DD Rejection Reason" := RejectionCode;
LsvJournalLine.MODIFY;
END;
ELSE
ERROR(Text023 + Text011);
END;
END ELSE BEGIN
TotalRecord := TRUE;
EVALUATE(TempAmount,COPYSTR(Line,60,13));
CreditAmount := CreditAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,82,13));
RejectionAmount := RejectionAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,104,13));
ReversalAmount := ReversalAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,120,11));
FeeAmount := FeeAmount + TempAmount / 100;
// Credit Count
EVALUATE(TempAmount,COPYSTR(Line,54,6));
TotalRecRecords := TotalRecRecords + TempAmount;
// Rejection Count
EVALUATE(TempAmount,COPYSTR(Line,76,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
// Reversal Count
EVALUATE(TempAmount,COPYSTR(Line,98,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
END;
// END OF SPLIT
IF NOT (TotalRecord) AND (Transaction <> Transaction::Correction) THEN BEGIN
// End of the deleted lines.
// Insert GL line
GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
...Αντικατάσταση κώδικα 2
...// Split File line into fields
// Add the following lines.
FileID := COPYSTR(Line,1,3);
IF FileID <> '036' THEN
ERROR(Text049 + Text011);
TA := COPYSTR(Line,36,2);
IF NOT (TA = '97') THEN BEGIN
TotalRecord := FALSE;
EVALUATE(InvoiceAmt,COPYSTR(Line,54,13));
EVALUATE(yyCR,COPYSTR(Line,4,2));
EVALUATE(mmCR,COPYSTR(Line,6,2));
EVALUATE(ddCR,COPYSTR(Line,8,2));
IF yyCR > 98 THEN
PostDate := DMY2DATE(ddCR,mmCR,1900 + yyCR)
ELSE
PostDate := DMY2DATE(ddCR,mmCR,2000 + yyCR);
DebitDirectOrderNo := COPYSTR(Line,34,2);
EVALUATE(DebitDirectRecordNo,COPYSTR(Line,38,6));
EVALUATE(RejectionCode,COPYSTR(Line,543,2));
Currency := COPYSTR(Line,51,3);
// DEBIT DIRECT
LsvJour.RESET;
LsvJour.SETRANGE("Credit Date",PostDate);
LsvJour.SETRANGE("DebitDirect Orderno.",DebitDirectOrderNo);
IF NOT LsvJour.FIND('+') THEN
ERROR(Text059,DebitDirectOrderNo,PostDate);
LsvJournalLine.RESET;
//CH0001.begin
LsvJournalLine.SETCURRENTKEY("LSV Journal No.","Transaction No.");
LsvJournalLine.SETRANGE("LSV Journal No.",LsvJour."No.");
//LsvJournalLine.SETRANGE("Line No.",DebitDirectRecordNo);
LsvJournalLine.SETRANGE("Transaction No.",DebitDirectRecordNo);
//LsvJournalLine.FIND('-');
IF NOT LsvJournalLine.FINDFIRST THEN BEGIN
d.CLOSE;
ERROR(Text11500, DebitDirectRecordNo, DebitDirectOrderNo);
END;
//CH0001.end
InInvoiceNo := LsvJournalLine."Applies-to Doc. No.";
// END DEBIT DIRECT
// Process transaction of credit record
CASE TA OF
'81': // Credit
BEGIN
Transaction := Transaction::Credit;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Open;
LsvJournalLine."DD Rejection Reason" := LsvJournalLine."DD Rejection Reason"::" ";
LsvJournalLine.MODIFY;
IF LSVSetup.READPERMISSION THEN BEGIN
ClosedByESR(InInvoiceNo);
END;
END;
'84': // Cancellation "Storno"
BEGIN
IF RejectionCode <> 2 THEN
Transaction := Transaction::Correction
ELSE
Transaction := Transaction::Cancellation;
LsvJournalLine."LSV Status" := LsvJournalLine."LSV Status"::Rejected;
LsvJournalLine."DD Rejection Reason" := RejectionCode;
LsvJournalLine.MODIFY;
END;
ELSE
ERROR(Text023 + Text011);
END;
END ELSE BEGIN
TotalRecord := TRUE;
EVALUATE(TempAmount,COPYSTR(Line,60,13));
CreditAmount := CreditAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,82,13));
RejectionAmount := RejectionAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,104,13));
ReversalAmount := ReversalAmount + TempAmount / 100;
EVALUATE(TempAmount,COPYSTR(Line,120,11));
FeeAmount := FeeAmount + TempAmount / 100;
// Credit Count
EVALUATE(TempAmount,COPYSTR(Line,54,6));
TotalRecRecords := TotalRecRecords + TempAmount;
// Rejection Count
EVALUATE(TempAmount,COPYSTR(Line,76,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
// Reversal Count
EVALUATE(TempAmount,COPYSTR(Line,98,6));
TotalRecRecordsRev := TotalRecRecordsRev + TempAmount;
END;
// END OF SPLIT
IF NOT (TotalRecord) AND (Transaction <> Transaction::Correction) THEN BEGIN
// End of the added lines.
// Insert GL line
GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
...Υπάρχοντα κώδικα 3
...GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
GenJournalLine."Journal Batch Name" := ActGenJnlLine."Journal Batch Name";
LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
...Αντικατάσταση κώδικα 3
... GenJournalLine.INIT;
GenJournalLine."Journal Template Name" := ActGenJnlLine."Journal Template Name";
GenJournalLine."Journal Batch Name" := ActGenJnlLine."Journal Batch Name";
// Add the following lines.
GenJournalLine."Posting Date" := PostDate;
GenJournalLine."Account Type" := GenJournalLine."Account Type"::Customer;
IF Transaction = Transaction::Cancellation THEN BEGIN
IsCancellationExist := TRUE;
GenJournalLine."Document Type" := GenJournalLine."Document Type"::Refund;
NextDocNo := NoSeriesMgt.GetNextNo(GlBatchName."No. Series",PostDate,FALSE);
END ELSE
GenJournalLine."Document Type" := GenJournalLine."Document Type"::Payment;
// End of the added lines.
LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
...Υπάρχοντα κωδικό 4
...LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
// Delete the following lines.
GenJournalLine."Posting Date" := PostDate;
GenJournalLine."Account Type" := GenJournalLine."Account Type"::Customer;
GenJournalLine."Document Type" := GenJournalLine."Document Type"::Payment;
// End of the deleted lines.
GeneralLedgerSetup.GET;
IF GeneralLedgerSetup."LCY Code" <> Currency THEN
...Αντικατάσταση κώδικα 4
... LastLineNo := LastLineNo + 10000;
GenJournalLine."Line No." := LastLineNo;
GenJournalLine."Document No." := NextDocNo;
// Add the following lines.
IF Transaction = Transaction::Cancellation THEN
NextDocNo := NoSeriesMgt.GetNextNo(GlBatchName."No. Series",PostDate,FALSE);
// End of the added lines.
GeneralLedgerSetup.GET;
IF GeneralLedgerSetup."LCY Code" <> Currency THEN
...Υπάρχοντα κώδικα 5
... IF CustLedgerEntry.FIND('-') THEN
GenJournalLine.VALIDATE("Account No.",CustLedgerEntry."Customer No.");
// Delete the following lines.
GenJournalLine."Applies-to Doc. Type" := GenJournalLine."Applies-to Doc. Type"::Invoice;
GenJournalLine."Applies-to Doc. No." := InInvoiceNo;
// End of the deleted lines.
IF GenJournalLine."Currency Code" <> CustLedgerEntry."Currency Code" THEN
GenJournalLine.VALIDATE("Currency Code",CustLedgerEntry."Currency Code");
...Αντικατάσταση κώδικα 5
... IF CustLedgerEntry.FIND('-') THEN
GenJournalLine.VALIDATE("Account No.",CustLedgerEntry."Customer No.");
// Add the following lines.
IF Transaction <> Transaction::Cancellation THEN BEGIN
GenJournalLine."Applies-to Doc. Type" := GenJournalLine."Applies-to Doc. Type"::Invoice;
GenJournalLine."Applies-to Doc. No." := InInvoiceNo;
END;
// End of the added lines.
IF GenJournalLine."Currency Code" <> CustLedgerEntry."Currency Code" THEN
GenJournalLine.VALIDATE("Currency Code",CustLedgerEntry."Currency Code");
...Υπάρχοντα κώδικα 6
...// *** Bal account per line or as combined entry
// Delete the following line.
IF MultiplePostingDates THEN BEGIN
// End of the deleted line.
// Bal Account per line
IF GenJournalLine.FIND('-') THEN
REPEAT
...Αντικατάσταση κώδικα 6
...// *** Bal account per line or as combined entry
// Add the following line.
IF MultiplePostingDates OR IsCancellationExist THEN BEGIN
// End of the added line.
// Bal Account per line
IF GenJournalLine.FIND('-') THEN
REPEAT
...
Προϋποθέσεις
Πρέπει να έχετε ένα από τα ακόλουθα προϊόντα, για να εφαρμόσετε αυτήν την επείγουσα επιδιόρθωση:
-
Την Ελβετική έκδοση του Microsoft Dynamics NAV 2009 R2
-
Την Ελβετική έκδοση του Microsoft Dynamics NAV 2009 SP1
Πληροφορίες κατάργησης
Δεν μπορείτε να καταργήσετε αυτήν την επείγουσα επιδιόρθωση.
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα των προϊόντων της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".
Σημείωση Αυτό είναι ένα άρθρο "ΤΑΧΕΙΑΣ ΔΗΜΟΣΙΕΥΣΗΣ" που έχει δημιουργηθεί απευθείας από την εταιρεία υποστήριξης της Microsoft. Οι πληροφορίες που περιέχονται στο παρόν έγγραφο παρέχονται ως έχουν, ως απάντηση σε ζητήματα που προέκυψαν. Ως αποτέλεσμα της ταχύτητας διαθεσιμότητάς του, το υλικό ενδέχεται να περιλαμβάνει τυπογραφικά λάθη και μπορεί να αναθεωρηθεί οποιαδήποτε στιγμή, χωρίς προειδοποίηση. Για άλλα θέματα, ανατρέξτε στην ενότητα " Όροι χρήσης".