Artikel yang diterbitkan dengan cepat menyediakan informasi langsung dari dalam organisasi dukungan Microsoft. Informasi yang dimuat di sini dibuat sebagai respons terhadap topik yang muncul atau unik, atau dimaksudkan untuk melengkapi informasi Basis Pengetahuan lainnya.
Artikel ini berlaku untuk Microsoft Dynamics NAV 2009 untuk semua negara dan semua bahasa lokal.
Gejala
Saat Anda membuat faktur layanan untuk kontrak layanan baru di Microsoft Dynamics NAV 2009 Service Pack 1, tipe entri Penjualan dan tipe entri Penggunaan entri buku besar layanan diperbarui. Namun, hanya tipe entri Penjualan yang dapat dilihat dalam kotak dialog Entri Buku Besar Layanan . Tipe entri Penggunaan tidak dapat ditampilkan dalam kotak dialog Entri Buku Besar Layanan .
Penyebab
Masalah ini terjadi karena baris Penggunaan yang dibuat diposting ke akun buku besar umum (G/L). Selain itu, baris tidak memiliki nilai dalam Item Layanan Tidak. (Dilayankan) atau dalam Item Tidak. (Dilayankan) Kolom. Saat Anda membuka kotak dialog Entri Buku Besar Layanan dari kartu item layanan, data difilter pada Item Layanan Tidak. (Dilayankan) Kolom. Oleh karena itu, jika nilai tidak ada, garis tidak muncul.
Resolusi
Informasi hotfix
Hotfix yang didukung kini tersedia dari Microsoft. Namun, hanya dimaksudkan untuk memperbaiki masalah yang dijelaskan dalam artikel ini. Terapkan hanya ke sistem yang mengalami masalah khusus ini. Hotfix ini mungkin menerima pengujian tambahan. Oleh karena itu, jika Anda tidak terpengaruh oleh masalah ini, kami menyarankan agar Anda menunggu paket layanan Microsoft Dynamics NAV 2009 berikutnya atau versi Microsoft Dynamics NAV berikutnya yang berisi hotfix ini.
Catatan Dalam kasus khusus, biaya yang biasanya ditimbulkan untuk panggilan dukungan mungkin dibatalkan jika Profesional Dukungan Teknis untuk Microsoft Dynamics dan produk terkait menentukan bahwa pembaruan tertentu akan mengatasi masalah Anda. Biaya dukungan biasa akan berlaku untuk pertanyaan dan masalah dukungan tambahan yang tidak memenuhi syarat untuk pembaruan tertentu yang dimaksud.
Informasi penginstalan
Microsoft menyediakan contoh pemrograman untuk ilustrasi saja, tanpa jaminan baik tersurat maupun tersirat. Ini termasuk, tetapi tidak terbatas pada, jaminan tersirat dari kelayakan jual atau kesesuaian untuk tujuan tertentu. Artikel ini mengasumsikan bahwa Anda sudah terbiasa dengan bahasa pemrograman yang ditunjukkan dan dengan alat yang digunakan untuk membuat dan men-debug prosedur. Teknisi dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, tetapi mereka tidak akan mengubah contoh ini untuk menyediakan fungsionalitas tambahan atau prosedur konstruksi untuk memenuhi persyaratan tertentu Anda.
Catatan Sebelum Anda menginstal hotfix ini, verifikasi bahwa semua pengguna klien Microsoft Navision telah keluar dari sistem. Ini termasuk pengguna klien Microsoft Navision Application Services (NAS). Anda harus menjadi satu-satunya pengguna klien yang masuk ketika Anda menerapkan hotfix ini.
Untuk menerapkan hotfix ini, Anda harus memiliki lisensi pengembang.
Kami menyarankan agar akun pengguna di jendela Windows Logins atau di jendela Login Database diberi ID peran "SUPER". Jika akun pengguna tidak dapat ditetapkan sebagai ID peran "SUPER", Anda harus memverifikasi bahwa akun pengguna memiliki izin berikut:
- Izin Ubah untuk objek yang akan Anda ubah.
- Izin Jalankan untuk objek System Object ID 5210 dan untuk objek System Object ID 9015.
Catatan Anda tidak harus memiliki hak untuk penyimpanan data kecuali Anda harus melakukan perbaikan data.
Perubahan kode
Catatan Selalu uji perbaikan kode di lingkungan terkontrol sebelum Anda menerapkan perbaikan pada komputer produksi Anda.
Untuk mengatasi masalah ini, ikuti langkah-langkah ini:
Ubah kode dalam fungsi ValidateNextInvoicePeriod dalam tabel Header Kontrak Layanan (5965) sebagai berikut:
Kode yang sudah ada 1... END; PROCEDURE ValidateNextInvoicePeriod@9(); VAR InvFrom@1001 : Date; InvTo@1000 : Date; NoOfMonths@1002 : Integer; NoOfDays@1003 : Integer; ...Kode pengganti 1
... END; PROCEDURE ValidateNextInvoicePeriod@9(); VAR // Add the following line. ServiceContractLine@1002 : Record 5964; InvFrom@1001 : Date; InvTo@1000 : Date; NoOfMonths@1002 : Integer; NoOfDays@1003 : Integer; ...Kode yang sudah ada 2
... IF Prepaid THEN BEGIN IF (DATE2DMY(InvFrom,2) = DATE2DMY(InvTo,2)) AND (DATE2DMY(InvFrom,3) = DATE2DMY(InvTo,3)) THEN BEGIN // Delete the following line. "Amount per Period" := ServContractMgt.CalcContractAmount(Rec,InvFrom,InvTo); END ELSE BEGIN "Amount per Period" := 0; ServContractMgt.NoOfMonthsAndDaysInPeriod(InvFrom,InvTo,NoOfMonths,NoOfDays); "Amount per Period" := ...Kode pengganti 2
... IF Prepaid THEN BEGIN IF (DATE2DMY(InvFrom,2) = DATE2DMY(InvTo,2)) AND (DATE2DMY(InvFrom,3) = DATE2DMY(InvTo,3)) THEN BEGIN // Add the following lines. ServiceContractLine.RESET; ServiceContractLine.SETRANGE("Contract Type","Contract Type"); ServiceContractLine.SETRANGE("Contract No.","Contract No."); IF ServiceContractLine.FINDSET THEN REPEAT "Amount per Period" := ServContractMgt.CalcContractAmount(Rec,InvFrom,InvTo, ServiceContractLine."Line No."); UNTIL ServiceContractLine.NEXT=0; // End of the lines. END ELSE BEGIN "Amount per Period" := 0; ServContractMgt.NoOfMonthsAndDaysInPeriod(InvFrom,InvTo,NoOfMonths,NoOfDays); "Amount per Period" := ...Ubah kode dalam DataItem 1 dalam laporan Buat Faktur Kontrak (6030) sebagai berikut:
Kode yang sudah ada 1... IF "Amount per Period" > 0 THEN BEGIN IF NOT ServContractMgt.CheckIfServiceExist(ServContractHeader) THEN ResultDescription := Text006; IF ResultDescription = '' THEN BEGIN // Delete the following lines. InvoicedAmount := ROUND( ServContractMgt.CalcContractAmount(ServContractHeader,InvoiceFrom,InvoiceTo), Currency."Amount Rounding Precision"); IF InvoicedAmount = 0 THEN BEGIN CurrReport.SKIP; END; // End of the lines. CASE TRUE OF NOT "Combine Invoices": BEGIN InvoiceNo := ServContractMgt.CreateServHeader(ServContractHeader,PostingDate,ContractExist); ...Kode pengganti 1
... IF "Amount per Period" > 0 THEN BEGIN IF NOT ServContractMgt.CheckIfServiceExist(ServContractHeader) THEN ResultDescription := Text006; IF ResultDescription = '' THEN BEGIN CASE TRUE OF NOT "Combine Invoices": BEGIN InvoiceNo := ServContractMgt.CreateServHeader(ServContractHeader,PostingDate,ContractExist); ...Kode yang sudah ada 2
... NoOfInvoices := NoOfInvoices + 1; END; END; ResultDescription := InvoiceNo; // Delete the following line. ServContractMgt.CreateAllServLines(InvoiceNo,ServContractHeader,InvoicedAmount); END; LastCustomer := "Bill-to Customer No."; LastContractCombined := "Combine Invoices"; END ELSE ...Kode pengganti 2
... NoOfInvoices := NoOfInvoices + 1; END; END; ResultDescription := InvoiceNo; // Add the following lines. ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); IF ServContractLine.FINDSET THEN REPEAT InvoicedAmount := ROUND( ServContractMgt.CalcContractAmount(ServContractHeader,InvoiceFrom,InvoiceTo,ServContractLine."Line No."), Currency."Amount Rounding Precision"); IF InvoicedAmount <> 0 THEN ServContractMgt.CreateAllServLines(InvoiceNo,ServContractHeader,InvoicedAmount,ServContractLine."Line No."); UNTIL ServContractLine.NEXT=0; // End of the lines. END; LastCustomer := "Bill-to Customer No."; LastContractCombined := "Combine Invoices"; END ELSE ...Ubah kode dalam fungsi CreateInvoice dalam codeunit ServContractManagement (5940) sebagai berikut:
Kode yang sudah ada 1... IF ServContractToInvoice.Prepaid THEN PostingDate := InvoiceFrom ELSE PostingDate := InvoiceTo; // Delete the following line. InvoicedAmount := CalcContractAmount(ServContractToInvoice,InvoiceFrom,InvoiceTo); IF InvoicedAmount = 0 THEN ERROR(Text007); ...Kode pengganti 1
... IF ServContractToInvoice.Prepaid THEN PostingDate := InvoiceFrom ELSE PostingDate := InvoiceTo; IF InvoicedAmount = 0 THEN ERROR(Text007); ...Kode yang sudah ada 2
... IF InvNo = '' THEN InvNo := CreateServHeader(ServContractToInvoice,PostingDate,FALSE); // Delete the following lines. IF InvoicingStartingPeriod THEN BEGIN GetNextInvoicePeriod(ServContractToInvoice,InvoiceFrom,InvoiceTo); PostingDate := InvoiceFrom; InvoicedAmount := CalcContractAmount(ServContractToInvoice,InvoiceFrom,InvoiceTo); END; // End of the lines. IF NOT CheckIfServiceExist(ServContractToInvoice) THEN ERROR( Text010, ServContractToInvoice."Contract No.", ...Kode pengganti 2
... IF InvNo = '' THEN InvNo := CreateServHeader(ServContractToInvoice,PostingDate,FALSE); IF NOT CheckIfServiceExist(ServContractToInvoice) THEN ERROR( Text010, ServContractToInvoice."Contract No.", ...Kode yang sudah ada 3
... Text010, ServContractToInvoice."Contract No.", ServContractToInvoice.FIELDCAPTION("Invoice after Service")); // Delete the following lines. CreateAllServLines(InvNo,ServContractToInvoice,InvoicedAmount); END; PROCEDURE CreateServiceLedgerEntry@4(ServHeader2@1001 : Record 5900;ContractType@1020 : Integer;ContractNo@1002 : Code[20];InvFrom@1003 : Date;InvTo@1004 : Date;AmountToInvoice@1005 : Decimal;SigningContract@1023 : Boolean;AddingNewLines@1012 : Boolean;VAR InvAmountRounded@8000 : Decimal) ReturnLedgerEntry@1000 : Integer; // End of the lines. VAR ServContractLine@1022 : Record 5964; ServContractHeader@1021 : Record 5965; Currency@1026 : Record 4; ...Kode pengganti 3
... Text010, ServContractToInvoice."Contract No.", ServContractToInvoice.FIELDCAPTION("Invoice after Service")); // Add the following lines. ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractToInvoice."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractToInvoice."Contract No."); IF ServContractLine.FINDSET THEN REPEAT IF InvoicingStartingPeriod THEN BEGIN GetNextInvoicePeriod(ServContractToInvoice,InvoiceFrom,InvoiceTo); PostingDate := InvoiceFrom; InvoicedAmount := CalcContractAmount(ServContractToInvoice,InvoiceFrom,InvoiceTo,ServContractLine."Line No.") END ELSE InvoicedAmount := CalcContractAmount(ServContractToInvoice,InvoiceFrom,InvoiceTo,ServContractLine."Line No."); CreateAllServLines(InvNo,ServContractToInvoice,InvoicedAmount,ServContractLine."Line No."); UNTIL ServContractLine.NEXT=0; END; PROCEDURE CreateServiceLedgerEntry@4(ServHeader2@1001 : Record 5900;ContractType@1020 : Integer;ContractNo@1002 : Code[20];InvFrom@1003 : Date;InvTo@1004 : Date;AmountToInvoice@1005 : Decimal;SigningContract@1023 : Boolean;AddingNewLines@1012 : Boolean;VAR InvAmountRounded@8000 : Decimal;LineNo@1011 : Integer) ReturnLedgerEntry@1000 : Integer; // End of the lines. VAR ServContractLine@1022 : Record 5964; ServContractHeader@1021 : Record 5965; Currency@1026 : Record 4; ...Ubah kode dalam fungsi CreateServiceLedgerEntry dalam codeunit ServContractManagement (5940) sebagai berikut:
Kode yang sudah ada 1... InvAmountRounded := 0; ServContractLine.RESET; ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); IF AddingNewLines THEN ServContractLine.SETRANGE("New Line",TRUE) ELSE ServContractLine.SETFILTER("Starting Date",'<=%1',ServContractHeader."Next Invoice Date"); ...Kode pengganti 1
... InvAmountRounded := 0; ServContractLine.RESET; ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); // Add the following line. ServContractLine.SETRANGE("Line No.",LineNo); IF AddingNewLines THEN ServContractLine.SETRANGE("New Line",TRUE) ELSE ServContractLine.SETFILTER("Starting Date",'<=%1',ServContractHeader."Next Invoice Date"); ...Kode yang sudah ada 2
... ServLedgEntry."Posting Date" := ServHeader2."Posting Date"; ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); IF AddingNewLines THEN ServContractLine.SETRANGE("New Line",TRUE) ELSE IF (NOT SigningContract) THEN BEGIN ...Kode pengganti 2
... ServLedgEntry."Posting Date" := ServHeader2."Posting Date"; ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); // Add the following line. ServContractLine.SETRANGE("Line No.",LineNo); IF AddingNewLines THEN ServContractLine.SETRANGE("New Line",TRUE) ELSE IF (NOT SigningContract) THEN BEGIN ...Ubah kode dalam fungsi CreateServLine dalam codeunit ServContractManagement (5940) sebagai berikut:
Kode yang sudah ada 1... AdjustServiceInvoiceDimensions(ServContract2,ServInvNo); END; // Delete the following line. PROCEDURE CreateServLine@9(ServHeader@1000 : Record 5900;ContractType@1010 : Integer;ContractNo@1001 : Code[20];InvFrom@1002 : Date;InvTo@1003 : Date;InvoiceAmount@1004 : Decimal;ServiceApplyEntry@1005 : Integer;SignningContract@1011 : Boolean); // End of the line. VAR ServContractHeader@1009 : Record 5965; StdText@1006 : Record 7; Cust@1007 : Record 18; ...Kode pengganti 1
... AdjustServiceInvoiceDimensions(ServContract2,ServInvNo); END; // Add the following line. PROCEDURE CreateServLine@9(ServHeader@1000 : Record 5900;ContractType@1010 : Integer;ContractNo@1001 : Code[20];InvFrom@1002 : Date;InvTo@1003 : Date;InvoiceAmount@1004 : Decimal;ServiceApplyEntry@1005 : Integer;SignningContract@1011 : Boolean;LineNo@1013 : Integer); // End of the line. VAR ServContractHeader@1009 : Record 5965; StdText@1006 : Record 7; Cust@1007 : Record 18; ...Kode yang sudah ada 2
... StdText@1006 : Record 7; Cust@1007 : Record 18; ServDocReg@1008 : Record 5936; ServiceLedgerEntry@1012 : Record 5907; BEGIN ServContractHeader.GET(ContractType,ContractNo); IF ServContractHeader."Invoice Period" = ServContractHeader."Invoice Period"::None THEN ...Kode pengganti 2
... StdText@1006 : Record 7; Cust@1007 : Record 18; ServDocReg@1008 : Record 5936; ServiceLedgerEntry@1012 : Record 5907; // Add the following line. ServContractLine@1014 : Record 5964; BEGIN ServContractHeader.GET(ContractType,ContractNo); IF ServContractHeader."Invoice Period" = ServContractHeader."Invoice Period"::None THEN ...Kode yang sudah ada 3
... ServLine.RESET; ServLine.INIT; ServLineNo := ServLineNo + 10000; ServLine."Document Type" := ServHeader."Document Type"; ServLine."Document No." := ServHeader."No."; ServLine."Line No." := ServLineNo; ...Kode pengganti 3
... ServLine.RESET; ServLine.INIT; // Add the following lines. ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); ServContractLine.SETRANGE("Line No.",LineNo); IF ServContractLine.FINDFIRST THEN ServLine."Service Item No." := ServContractLine."Service Item No."; // End of the lines. ServLineNo := ServLineNo + 10000; ServLine."Document Type" := ServHeader."Document Type"; ServLine."Document No." := ServHeader."No."; ServLine."Line No." := ServLineNo; ...Ubah kode dalam fungsi CalcContractAmount dalam codeunit ServContractManagement (5940) sebagai berikut:
Kode yang sudah ada 1... WDate := CALCDATE('<CM>',OldWDate) + 1; UNTIL WDate > Day2; END; // Delete the following line. PROCEDURE CalcContractAmount@19(ServContractHeader@1001 : Record 5965;PeriodStarts@1002 : Date;PeriodEnds@1003 : Date) AmountCalculated@1000 : Decimal; // End of the line. VAR ServContractLine@1004 : Record 5964; Currency@1008 : Record 4; LinePeriodStarts@1005 : Date; ...Kode pengganti 1
... WDate := CALCDATE('<CM>',OldWDate) + 1; UNTIL WDate > Day2; END; // Add the following line. PROCEDURE CalcContractAmount@19(ServContractHeader@1001 : Record 5965;PeriodStarts@1002 : Date;PeriodEnds@1003 : Date;LineNo@1011 : Integer) AmountCalculated@1000 : Decimal; // End of the line. VAR ServContractLine@1004 : Record 5964; Currency@1008 : Record 4; LinePeriodStarts@1005 : Date; ...Kode yang sudah ada 2
... ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); IF ServContractHeader.Prepaid THEN ServContractLine.SETFILTER("Starting Date",'<=%1',ServContractHeader."Next Invoice Date") ELSE IF ServContractHeader."Last Invoice Date" <> 0D THEN ...Kode pengganti 2
... ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); // Add the following line. ServContractLine.SETRANGE("Line No.",LineNo); IF ServContractHeader.Prepaid THEN ServContractLine.SETFILTER("Starting Date",'<=%1',ServContractHeader."Next Invoice Date") ELSE IF ServContractHeader."Last Invoice Date" <> 0D THEN ...Ubah kode dalam fungsi CreateRemainingPeriodInvoice dalam codeunit ServContractManagement (5940) sebagai berikut:
Kode yang sudah ada 1... IF (InvFrom = 0D) OR (InvFrom > InvTo) THEN EXIT; IF CONFIRM(Text006,TRUE,InvFrom,InvTo) THEN BEGIN // Delete the following line. Amt := CalcContractAmount(CurrServContract,InvFrom,InvTo); InvoiceNo := CreateServHeader(CurrServContract,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,InvoiceNo); ServMgtSetup.GET; IF NOT CurrServContract.Prepaid THEN ...Kode pengganti 1
... IF (InvFrom = 0D) OR (InvFrom > InvTo) THEN EXIT; IF CONFIRM(Text006,TRUE,InvFrom,InvTo) THEN BEGIN InvoiceNo := CreateServHeader(CurrServContract,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,InvoiceNo); ServMgtSetup.GET; IF NOT CurrServContract.Prepaid THEN ...Kode yang sudah ada 2
... ServHeader, ServContractLine, CurrServContract."Contract Type", CurrServContract."Contract No."); UNTIL ServContractLine.NEXT = 0; END ELSE CreateHeadingServLine( ServHeader, ...Kode pengganti 2
... ServHeader, ServContractLine, CurrServContract."Contract Type", CurrServContract."Contract No."); // Add the following lines. Amt := CalcContractAmount(CurrServContract,InvFrom,InvTo,ServContractLine."Line No."); AppliedEntry := CreateServiceLedgerEntry( ServHeader,CurrServContract."Contract Type", CurrServContract."Contract No.",InvFrom,InvTo,Amt,TRUE,FALSE,InvAmountRounded,ServContractLine."Line No."); CreateServLine( ServHeader,CurrServContract."Contract Type", CurrServContract."Contract No.",InvFrom,InvTo,InvAmountRounded,AppliedEntry,TRUE,ServContractLine."Line No."); // End of the lines. UNTIL ServContractLine.NEXT = 0; END ELSE CreateHeadingServLine( ServHeader, ...Kode yang sudah ada 3
... ServHeader, CurrServContract."Contract Type", CurrServContract."Contract No."); // Delete the following lines. AppliedEntry := CreateServiceLedgerEntry( ServHeader,CurrServContract."Contract Type", CurrServContract."Contract No.",InvFrom,InvTo,Amt,TRUE,FALSE,InvAmountRounded); CreateServLine( ServHeader,CurrServContract."Contract Type", CurrServContract."Contract No.",InvFrom,InvTo,InvAmountRounded,AppliedEntry,TRUE); // End of the lines. CurrServContract.MODIFY; InvoicingStartingPeriod := TRUE; END; END; ...Kode pengganti 3
... ServHeader, CurrServContract."Contract Type", CurrServContract."Contract No."); CurrServContract.MODIFY; InvoicingStartingPeriod := TRUE; END; END; ...Ubah kode dalam fungsi CreateAllServLines dalam codeunit ServContractManagement (5940) sebagai berikut:
Kode yang sudah ada 1... ServContractDim,TableID, DocumentType,DocumentNo,LineNo); END; // Delete the following line. PROCEDURE CreateAllServLines@2(InvNo@1001 : Code[20];ServContractToInvoice@1000 : Record 5965;InvoicedAmount@1002 : Decimal); // End of the line. VAR ServContractLine@1007 : Record 5964; ServHeader@1006 : Record 5900; InvoiceFrom@1004 : Date; ...Kode pengganti 1
... ServContractDim,TableID, DocumentType,DocumentNo,LineNo); END; // Add the following line. PROCEDURE CreateAllServLines@2(InvNo@1001 : Code[20];ServContractToInvoice@1000 : Record 5965;InvoicedAmount@1002 : Decimal;LineNo@1009 : Integer); // End of the line. VAR ServContractLine@1007 : Record 5964; ServHeader@1006 : Record 5900; InvoiceFrom@1004 : Date; ...Kode yang sudah ada 2
... IF ServHeader.GET(ServHeader."Document Type"::Invoice,InvNo) THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type","Contract Type"); ServContractLine.SETRANGE("Contract No.","Contract No."); IF NOT "Contract Lines on Invoice" THEN CreateHeadingServLine(ServHeader,"Contract Type","Contract No."); IF ServContractLine.FIND('-') THEN REPEAT ...Kode pengganti 2
... IF ServHeader.GET(ServHeader."Document Type"::Invoice,InvNo) THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type","Contract Type"); ServContractLine.SETRANGE("Contract No.","Contract No."); // Add the following line. ServContractLine.SETRANGE("Line No.",LineNo); IF NOT "Contract Lines on Invoice" THEN CreateHeadingServLine(ServHeader,"Contract Type","Contract No."); IF ServContractLine.FIND('-') THEN REPEAT ...Kode yang sudah ada 3
... IF (ServContractLine."Contract Expiration Date" = 0D) OR (ServContractLine."Contract Expiration Date" >= InvoiceFrom) THEN CreateDetailedServLine(ServHeader,ServContractLine,"Contract Type","Contract No."); // Delete the following lines. UNTIL ServContractLine.NEXT = 0; END; ServiceApplyEntry := CreateServiceLedgerEntry( ServHeader,"Contract Type","Contract No.",InvoiceFrom,InvoiceTo,InvoicedAmount,FALSE,FALSE,InvAmountRounded); CreateServLine( ServHeader,"Contract Type","Contract No.", InvoiceFrom,InvoiceTo,InvAmountRounded,ServiceApplyEntry,FALSE); // End of the lines. CreateLastServLines(ServHeader,"Contract Type","Contract No."); VALIDATE("Last Invoice Date","Next Invoice Date"); "Print Increase Text" := FALSE; ...Kode pengganti 3
... IF (ServContractLine."Contract Expiration Date" = 0D) OR (ServContractLine."Contract Expiration Date" >= InvoiceFrom) THEN CreateDetailedServLine(ServHeader,ServContractLine,"Contract Type","Contract No."); // Add the following lines. ServiceApplyEntry := CreateServiceLedgerEntry( ServHeader,"Contract Type","Contract No.",InvoiceFrom,InvoiceTo,InvoicedAmount,FALSE,FALSE,InvAmountRounded, ServContractLine."Line No."); CreateServLine( ServHeader,"Contract Type","Contract No.", InvoiceFrom,InvoiceTo,InvAmountRounded,ServiceApplyEntry,FALSE, ServContractLine."Line No."); UNTIL ServContractLine.NEXT = 0; END; // End of the lines. CreateLastServLines(ServHeader,"Contract Type","Contract No."); VALIDATE("Last Invoice Date","Next Invoice Date"); "Print Increase Text" := FALSE; ...Ubah kode dalam fungsi SignContractQuote dalam codeunit SignServContractDoc (5944) sebagai berikut:
Kode yang sudah ada 1... FromServContractLine@1008 : Record 5964; ToServContractHeader@1007 : Record 5965; FiledServContractHeader2@1009 : Record 5970; ServItem@1006 : Record 5940; InvFrom@1003 : Date; InvTo@1004 : Date; TempDate@1005 : Date; InvAmountRounded@1010 : Decimal; ...Kode pengganti 1
... FromServContractLine@1008 : Record 5964; ToServContractHeader@1007 : Record 5965; FiledServContractHeader2@1009 : Record 5970; ServItem@1006 : Record 5940; // Add the following line. ServContractLine@1001 : Record 5964; InvFrom@1003 : Date; InvTo@1004 : Date; TempDate@1005 : Date; InvAmountRounded@1010 : Decimal; ...Kode yang sudah ada 2
... LastPrepaidPostingDate := 0D; ToServContractHeader.TRANSFERFIELDS(FromServContractHeader); // Delete the following lines. IF InvoiceNow THEN BEGIN PostingDate := InvoiceFrom; AmountNow := ServContractMgt.CalcContractAmount(FromServContractHeader,InvoiceFrom,InvoiceTo); InvoiceAmountDueToSigning := AmountNow; END; // End of the lines. ToServContractHeader."Contract Type" := ToServContractHeader."Contract Type"::Contract; ToServContractHeader.Status := ToServContractHeader.Status::Signed; IF InvoiceNow THEN BEGIN ToServContractHeader."Last Invoice Date" := ToServContractHeader."Starting Date"; ...Kode pengganti 2
... LastPrepaidPostingDate := 0D; ToServContractHeader.TRANSFERFIELDS(FromServContractHeader); ToServContractHeader."Contract Type" := ToServContractHeader."Contract Type"::Contract; ToServContractHeader.Status := ToServContractHeader.Status::Signed; IF InvoiceNow THEN BEGIN ToServContractHeader."Last Invoice Date" := ToServContractHeader."Starting Date"; ...Kode yang sudah ada 3
... ServContractMgt.CreateServHeader(ToServContractHeader,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); ServMgtSetup.GET; // Delete the following lines. AppliedEntry := ServContractMgt.CreateServiceLedgerEntry( ServHeader,ToServContractHeader."Contract Type", ToServContractHeader."Contract No.",InvoiceFrom, InvoiceTo,AmountNow,TRUE,FALSE,InvAmountRounded); // End of the lines. IF ToServContractHeader."Contract Lines on Invoice" THEN BEGIN ToServContractLine.RESET; ToServContractLine.SETRANGE("Contract Type",ToServContractHeader."Contract Type"); ToServContractLine.SETRANGE("Contract No.",ToServContractHeader."Contract No."); ...Kode pengganti 3
... ServContractMgt.CreateServHeader(ToServContractHeader,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); ServMgtSetup.GET; IF ToServContractHeader."Contract Lines on Invoice" THEN BEGIN ToServContractLine.RESET; ToServContractLine.SETRANGE("Contract Type",ToServContractHeader."Contract Type"); ToServContractLine.SETRANGE("Contract No.",ToServContractHeader."Contract No."); ...Kode yang sudah ada 4
... ServHeader, ToServContractHeader."Contract Type", ToServContractHeader."Contract No."); // Delete the following lines. ServContractMgt.CreateServLine( ServHeader, ToServContractHeader."Contract Type", ToServContractHeader."Contract No.", InvoiceFrom,InvoiceTo,InvAmountRounded,AppliedEntry,TRUE); // End of the lines. ToServContractHeader.MODIFY; ServContractMgt.FinishCodeunit; END; ...Kode pengganti 4
... ServHeader, ToServContractHeader."Contract Type", ToServContractHeader."Contract No."); // Add the following lines. ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",FromServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",FromServContractHeader."Contract No."); IF ServContractLine.FINDSET THEN REPEAT IF InvoiceNow THEN BEGIN PostingDate := InvoiceFrom; AmountNow := ServContractMgt.CalcContractAmount(FromServContractHeader,InvoiceFrom,InvoiceTo,ServContractLine."Line No."); InvoiceAmountDueToSigning := AmountNow; END; AppliedEntry := ServContractMgt.CreateServiceLedgerEntry( ServHeader,ToServContractHeader."Contract Type", ToServContractHeader."Contract No.",InvoiceFrom, InvoiceTo,AmountNow,TRUE,FALSE,InvAmountRounded,ServContractLine."Line No."); ServContractMgt.CreateServLine( ServHeader, ToServContractHeader."Contract Type", ToServContractHeader."Contract No.", InvoiceFrom,InvoiceTo,InvAmountRounded,AppliedEntry,TRUE,ServContractLine."Line No."); UNTIL ServContractLine.NEXT=0; // End of the lines. ToServContractHeader.MODIFY; ServContractMgt.FinishCodeunit; END; ...Ubah kode dalam fungsi SignContract dalam codeunit SignServContractDoc (5944) sebagai berikut:
Kode yang sudah ada 1... END; END; END; // Delete the following lines. IF InvoiceNow THEN BEGIN PostingDate := InvoiceFrom; AmountNow := ServContractMgt.CalcContractAmount(ServContractHeader,InvoiceFrom,InvoiceTo); END; // End of the lines. IF InvoiceNow THEN BEGIN ServContractHeader."Last Invoice Date" := ServContractHeader."Starting Date"; ServContractHeader.VALIDATE("Last Invoice Period End",InvoiceTo); ...Kode pengganti 1
... END; END; END; IF InvoiceNow THEN BEGIN ServContractHeader."Last Invoice Date" := ServContractHeader."Starting Date"; ServContractHeader.VALIDATE("Last Invoice Period End",InvoiceTo); ...Kode yang sudah ada 2
... ServContractMgt.CreateServHeader(ServContractHeader,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); ServMgtSetup.GET; // Delete the following lines. AppliedEntry := ServContractMgt.CreateServiceLedgerEntry( ServHeader,ServContractHeader."Contract Type", ServContractHeader."Contract No.",InvoiceFrom, InvoiceTo,AmountNow,TRUE,FALSE,InvAmountRounded); // End of the lines. IF ServContractHeader."Contract Lines on Invoice" THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ...Kode pengganti 2
... ServContractMgt.CreateServHeader(ServContractHeader,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); ServMgtSetup.GET; IF ServContractHeader."Contract Lines on Invoice" THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ...Kode yang sudah ada 3
... ServContractMgt.CreateHeadingServLine( ServHeader, ServContractHeader."Contract Type", ServContractHeader."Contract No."); // Delete the following lines. ServContractMgt.CreateServLine( ServHeader, ServContractHeader."Contract Type", ServContractHeader."Contract No.", InvoiceFrom,InvoiceTo,InvAmountRounded,AppliedEntry,TRUE); // End of the lines. ServContractHeader.MODIFY; ServContractMgt.FinishCodeunit; END; ...Kode pengganti 3
... ServContractMgt.CreateHeadingServLine( ServHeader, ServContractHeader."Contract Type", ServContractHeader."Contract No."); // Add the following lines. ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",ServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",ServContractHeader."Contract No."); IF ServContractLine.FINDSET THEN REPEAT AmountNow := ServContractMgt.CalcContractAmount(ServContractHeader,InvoiceFrom,InvoiceTo,ServContractLine."Line No."); AppliedEntry := ServContractMgt.CreateServiceLedgerEntry( ServHeader,ServContractHeader."Contract Type", ServContractHeader."Contract No.",InvoiceFrom, InvoiceTo,AmountNow,TRUE,FALSE,InvAmountRounded,ServContractLine."Line No."); ServContractMgt.CreateServLine( ServHeader, ServContractHeader."Contract Type", ServContractHeader."Contract No.", InvoiceFrom,InvoiceTo,InvAmountRounded,AppliedEntry,TRUE,ServContractLine."Line No."); UNTIL ServContractLine.NEXT = 0; // End of the lines. ServContractHeader.MODIFY; ServContractMgt.FinishCodeunit; END; ...Ubah kode dalam fungsi AddendumToContract dalam codeunit SignServContractDoc (5944) sebagai berikut:
Kode yang sudah ada 1... ServContractMgt.InitCodeUnit; ServHeaderNo := ServContractMgt.CreateServHeader(FromServContractHeader,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); // Delete the following lines. AppliedEntry := ServContractMgt.CreateServiceLedgerEntry( ServHeader,FromServContractHeader."Contract Type", FromServContractHeader."Contract No.",InvoiceFrom,InvoiceTo,RemainingAmt,TRUE,TRUE,InvAmountRounded); // End of the lines. IF FromServContractHeader."Contract Lines on Invoice" THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",FromServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",FromServContractHeader."Contract No."); ...Kode pengganti 1
... ServContractMgt.InitCodeUnit; ServHeaderNo := ServContractMgt.CreateServHeader(FromServContractHeader,PostingDate,FALSE); ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); IF FromServContractHeader."Contract Lines on Invoice" THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",FromServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",FromServContractHeader."Contract No."); ...Kode yang sudah ada 2
... ServHeader, FromServContractHeader."Contract Type", FromServContractHeader."Contract No."); // Delete the following lines. ServContractMgt.CreateServLine( ServHeader,FromServContractHeader."Contract Type", FromServContractHeader."Contract No.",InvoiceFrom,InvoiceTo,InvAmountRounded,AppliedEntry,TRUE); // End of the lines. ServContractMgt.FinishCodeunit; END; IF InvoicePrepaid AND FromServContractHeader.Prepaid THEN BEGIN ...Kode pengganti 2
... ServHeader, FromServContractHeader."Contract Type", FromServContractHeader."Contract No."); // Add the following lines. ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",FromServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",FromServContractHeader."Contract No."); IF ServContractLine.FIND('-') THEN REPEAT AppliedEntry := ServContractMgt.CreateServiceLedgerEntry( ServHeader,FromServContractHeader."Contract Type", FromServContractHeader."Contract No.",InvoiceFrom,InvoiceTo,RemainingAmt,TRUE,TRUE,InvAmountRounded, ServContractLine."Line No."); ServContractMgt.CreateServLine( ServHeader,FromServContractHeader."Contract Type", FromServContractHeader."Contract No.",InvoiceFrom,InvoiceTo,InvAmountRounded,AppliedEntry,TRUE, ServContractLine."Line No."); UNTIL ServContractLine.NEXT = 0; // End of the lines. ServContractMgt.FinishCodeunit; END; IF InvoicePrepaid AND FromServContractHeader.Prepaid THEN BEGIN ...Kode yang sudah ada 3
... ServContractLine."Line Amount" / 12 * NoOfMonthsAndMParts,Currency."Amount Rounding Precision"); UNTIL ServContractLine.NEXT = 0; IF RemainingAmt <> 0 THEN BEGIN ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); AppliedEntry := // Delete the following lines. ServContractMgt.CreateServiceLedgerEntry( ServHeader,FromServContractHeader."Contract Type", FromServContractHeader."Contract No.",FirstPrepaidPostingDate, LastPrepaidPostingDate,RemainingAmt,FALSE,TRUE,InvAmountRounded); // End of the lines. IF FromServContractHeader."Contract Lines on Invoice" THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",FromServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",FromServContractHeader."Contract No."); ...Kode pengganti 3
... ServContractLine."Line Amount" / 12 * NoOfMonthsAndMParts,Currency."Amount Rounding Precision"); UNTIL ServContractLine.NEXT = 0; IF RemainingAmt <> 0 THEN BEGIN ServHeader.GET(ServHeader."Document Type"::Invoice,ServHeaderNo); IF FromServContractHeader."Contract Lines on Invoice" THEN BEGIN ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",FromServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",FromServContractHeader."Contract No."); ...Kode yang sudah ada 4
... ServContractMgt.CreateHeadingServLine( ServHeader, FromServContractHeader."Contract Type", FromServContractHeader."Contract No."); // Delete the following lines. ServContractMgt.CreateServLine( ServHeader, FromServContractHeader."Contract Type", FromServContractHeader."Contract No.", FirstPrepaidPostingDate,LastPrepaidPostingDate, InvAmountRounded,AppliedEntry,FALSE); // End of the lines. END; ServContractMgt.FinishCodeunit; END; ...Kode pengganti 4
... ServContractMgt.CreateHeadingServLine( ServHeader, FromServContractHeader."Contract Type", FromServContractHeader."Contract No."); // Add the following lines. ServContractLine.RESET; ServContractLine.SETRANGE("Contract Type",FromServContractHeader."Contract Type"); ServContractLine.SETRANGE("Contract No.",FromServContractHeader."Contract No."); IF ServContractLine.FIND('-') THEN REPEAT AppliedEntry := ServContractMgt.CreateServiceLedgerEntry( ServHeader,FromServContractHeader."Contract Type", FromServContractHeader."Contract No.",InvoiceFrom,InvoiceTo,RemainingAmt,TRUE,TRUE,InvAmountRounded, ServContractLine."Line No."); ServContractMgt.CreateServLine( ServHeader,FromServContractHeader."Contract Type", FromServContractHeader."Contract No.",InvoiceFrom,InvoiceTo,InvAmountRounded,AppliedEntry,TRUE, ServContractLine."Line No."); UNTIL ServContractLine.NEXT = 0; // End of the lines. END; ServContractMgt.FinishCodeunit; END; ...
Prasyarat
Anda harus menginstal Microsoft Dynamics NAV 2009 untuk menerapkan hotfix ini.
Informasi penghapusan
Anda tidak dapat menghapus hotfix ini.
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".
MICROSOFT DAN/ATAU PEMASOKNYA TIDAK MEMBUAT PERNYATAAN ATAU JAMINAN TENTANG KESESUAIAN, KEANDALAN, ATAU KEAKURATAN INFORMASI YANG TERDAPAT DALAM DOKUMEN DAN GRAFIK TERKAIT YANG DITERBITKAN DI SITUS WEB INI ("MATERI") UNTUK TUJUAN APA PUN.
MATERI DAPAT MENCAKUP KETIDAKAKURATAN TEKNIS ATAU KESALAHAN TIPOGRAFI DAN DAPAT DIREVISI KAPAN SAJA TANPA PEMBERITAHUAN. SEJAUH DIIZINKAN OLEH HUKUM YANG BERLAKU, MICROSOFT DAN/ATAU PEMASOKNYA MENYANGKAL DAN MENGECUALIKAN SEMUA PERNYATAAN, JAMINAN, DAN KETENTUAN BAIK TERSURAT, TERSIRAT MAUPUN WAJIB, TERMASUK NAMUN TIDAK TERBATAS PADA REPRESENTASI, JAMINAN, ATAU KETENTUAN JABATAN, NON-PELANGGARAN, KONDISI ATAU KUALITAS YANG MEMUASKAN, KELAYAKAN UNTUK DIPERDAGANGKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU, SEHUBUNGAN DENGAN MATERI.