Бързо публикуваните статии предоставят информация директно от организацията за поддръжка на Microsoft. Информацията, която се съдържа в този документ, е създадена в отговор на нововъзникнали или уникални теми или е предназначена да допълни друга информация в базата знания.
Тази статия се отнася за Microsoft Dynamics NAV 2009 за всички страни и всички езикови променливи.
Симптоми
Когато създавате фактура за услуги за нов договор за услуги в Microsoft Dynamics NAV 2009 Service Pack 1, типът на записа "Продажби" и типът на записа "Използване" на записа в книгата на услугите се актуализират. Обаче само типът на записа "Продажби" може да се види в диалоговия прозорец "Записи на книгата за услуги". Типът на записа "Използване" не се вижда в диалоговия прозорец " Записи в книгата на услугите ".
Причина
Този проблем възниква, защото създаденият ред за използване е осчетоводен в акаунт в главната книга (G/L). Освен това редът няма стойност в полето "Номер на услугата". (Обслужване) или в елемента No. (Обслужване) колона. Когато отворите диалоговия прозорец " Записи в книгата на услугите " от карта на продукт на услугата, данните се филтрират по "Номер на услуга". (Обслужване) колона. Следователно, ако стойността не съществува, редът не се появява.
Решение
Информация за горещи поправки
Поддържа гореща поправка вече се предлага от Microsoft. Целта му е обаче само да коригира проблема, който е описан в тази статия. Прилагайте го само към системи, които срещат този конкретен проблем. Тази гореща корекция може да бъде подложена на допълнително тестване. Ето защо, ако не сте сериозно засегнати от този проблем, ви препоръчваме да изчакате следващия сервизен пакет за Microsoft Dynamics NAV 2009 или следващата версия на Microsoft Dynamics NAV, която съдържа тази гореща корекция.
Забележка: При специални случаи таксите, които обикновено се начисляват за свързани с поддръжката разговори, могат да бъдат отменени, ако специалист по техническа поддръжка за Microsoft Dynamics и свързаните продукти реши, че проблемът може да бъде решен със специфична актуализация. Стандартните такси за поддръжката ще важат за допълнителни въпроси, свързани с нея, както и за проблеми, които не спадат към съответната актуализация.
Информация за инсталиране
Microsoft предоставя примери за програмиране само за илюстрация, без гаранция, нито изрична, или подразбираща се. Това включва, но не се ограничава до, подразбиращите се гаранции за продаваемост или годност за определена цел. В тази статия се предполага, че сте запознати с езика за програмиране, който се демонстрира, и с инструментите, които се използват за създаване и за процедури за отстраняване на грешки. Инженерите по поддръжка на Microsoft могат да ви помогнат да обяснят функционалността на дадена процедура, но няма да променят тези примери, за да предоставят допълнителна функционалност или да конструират процедури, които да отговарят на вашите конкретни изисквания.
Забележка Преди да инсталирате тази гореща корекция, уверете се, че всички потребители на клиента на Microsoft Navision са излезли от системата. Това включва потребители на клиенти на Microsoft Navision Application Services (NAS). Когато внедрявате тази гореща корекция, трябва да сте единственият клиентски потребител е влязъл.
За да приложите тази гореща корекция, трябва да имате лиценз за разработчик.
Препоръчваме на потребителския акаунт в прозореца за влизане в Windows или в прозореца за влизане в база данни да бъде присвоен ИД на роля "SUPER". Ако на потребителския акаунт не може да бъде присвоен ИД на роля "SUPER", трябва да се уверите, че този потребителски акаунт има следните разрешения:
- Разрешението за промяна за обекта, който ще променяте.
- Разрешението за изпълнение за обекта 5210 на системен обект с ИД 5210 и за обекта 9015 на системен обект.
Забележка: Не е необходимо да имате права за хранилищата за данни, освен ако не трябва да извършите поправка на данни.
Промени в кода
Забележка: Винаги тествайте корекциите на кода в контролирана среда, преди да ги приложите към производствените си компютри.
За да решите този проблем, изпълнете следните стъпки:
Променете кода във функцията ValidateNextInvoicePeriod в заглавната таблица на договора за услуга (5965), както следва:
Съществуващ код 1... END; PROCEDURE ValidateNextInvoicePeriod@9(); VAR InvFrom@1001 : Date; InvTo@1000 : Date; NoOfMonths@1002 : Integer; NoOfDays@1003 : Integer; ...Код за замяна 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; ...Съществуващ код 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" := ...Код за замяна 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" := ...Променете кода в DataItem 1 в отчета "Създаване на фактури по договор" (6030) както следва:
Съществуващ код 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); ...Код за замяна 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); ...Съществуващ код 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 ...Код за замяна 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 ...Променете кода във функцията CreateInvoice в кодовата единица ServContractManagement (5940), както следва:
Съществуващ код 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); ...Код за замяна 1
... IF ServContractToInvoice.Prepaid THEN PostingDate := InvoiceFrom ELSE PostingDate := InvoiceTo; IF InvoicedAmount = 0 THEN ERROR(Text007); ...Съществуващ код 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.", ...Код за замяна 2
... IF InvNo = '' THEN InvNo := CreateServHeader(ServContractToInvoice,PostingDate,FALSE); IF NOT CheckIfServiceExist(ServContractToInvoice) THEN ERROR( Text010, ServContractToInvoice."Contract No.", ...Съществуващ код 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; ...Код за замяна 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; ...Променете кода във функцията CreateServiceLedgerEntry в кодовата единица ServContractManagement (5940), както следва:
Съществуващ код 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"); ...Код за замяна 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"); ...Съществуващ код 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 ...Код за замяна 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 ...Променете кода във функцията CreateServLine в кодовата единица ServContractManagement (5940), както следва:
Съществуващ код 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; ...Код за замяна 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; ...Съществуващ код 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 ...Код за замяна 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 ...Съществуващ код 3
... ServLine.RESET; ServLine.INIT; ServLineNo := ServLineNo + 10000; ServLine."Document Type" := ServHeader."Document Type"; ServLine."Document No." := ServHeader."No."; ServLine."Line No." := ServLineNo; ...Код за замяна 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; ...Променете кода във функцията CalcContractAmount в кодовата единица ServContractManagement (5940), както следва:
Съществуващ код 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; ...Код за замяна 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; ...Съществуващ код 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 ...Код за замяна 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 ...Променете кода във функцията CreateRemainingPeriodInvoice в кодовата единица ServContractManagement (5940), както следва:
Съществуващ код 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 ...Код за замяна 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 ...Съществуващ код 2
... ServHeader, ServContractLine, CurrServContract."Contract Type", CurrServContract."Contract No."); UNTIL ServContractLine.NEXT = 0; END ELSE CreateHeadingServLine( ServHeader, ...Код за замяна 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, ...Съществуващ код 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; ...Код за замяна 3
... ServHeader, CurrServContract."Contract Type", CurrServContract."Contract No."); CurrServContract.MODIFY; InvoicingStartingPeriod := TRUE; END; END; ...Променете кода във функцията CreateAllServLines в кодовата единица ServContractManagement (5940), както следва:
Съществуващ код 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; ...Код за замяна 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; ...Съществуващ код 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 ...Код за замяна 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 ...Съществуващ код 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; ...Код за замяна 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; ...Променете кода във функцията SignContractQuote в кодовата единица SignServContractDoc (5944), както следва:
Съществуващ код 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; ...Код за замяна 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; ...Съществуващ код 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"; ...Код за замяна 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"; ...Съществуващ код 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."); ...Код за замяна 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."); ...Съществуващ код 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; ...Код за замяна 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; ...Променете кода във функцията SignContract в кодовата единица SignServContractDoc (5944), както следва:
Съществуващ код 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); ...Код за замяна 1
... END; END; END; IF InvoiceNow THEN BEGIN ServContractHeader."Last Invoice Date" := ServContractHeader."Starting Date"; ServContractHeader.VALIDATE("Last Invoice Period End",InvoiceTo); ...Съществуващ код 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"); ...Код за замяна 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"); ...Съществуващ код 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; ...Код за замяна 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; ...Променете кода във функцията AddendumToContract в кодовата единица SignServContractDoc (5944), както следва:
Съществуващ код 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."); ...Код за замяна 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."); ...Съществуващ код 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 ...Код за замяна 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 ...Съществуващ код 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."); ...Код за замяна 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."); ...Съществуващ код 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; ...Код за замяна 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; ...
Предварителни изисквания
Трябва да имате инсталирана Microsoft Dynamics NAV 2009, за да приложите тази гореща корекция.
Информация за премахване
Не можете да премахнете тази гореща корекция.
Състояние
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.
MICROSOFT И/ИЛИ НЕГОВИТЕ ДОСТАВЧИЦИ НЕ ДАВАТ ОБЕЩАНИЯ ИЛИ ГАРАНЦИИ ОТНОСНО ПРИГОДНОСТТА, НАДЕЖДНОСТТА ИЛИ ТОЧНОСТТА НА ИНФОРМАЦИЯТА, КОЯТО СЕ СЪДЪРЖА В ДОКУМЕНТИТЕ И СВЪРЗАНИТЕ ГРАФИКИ, ПУБЛИКУВАНИ НА ТОЗИ УЕБ САЙТ ("МАТЕРИАЛИТЕ"), ЗА КАКВАТО И ДА Е ЦЕЛ.
МАТЕРИАЛИТЕ МОГАТ ДА ВКЛЮЧВАТ ТЕХНИЧЕСКИ НЕТОЧНОСТИ ИЛИ ПЕЧАТНИ ГРЕШКИ И МОГАТ ДА БЪДАТ КОРИГИРАНИ ПО ВСЯКО ВРЕМЕ БЕЗ ПРЕДИЗВЕСТИЕ. ДО МАКСИМАЛНАТА СТЕПЕН, РАЗРЕШЕНА ОТ ПРИЛОЖИМОТО ЗАКОНОДАТЕЛСТВО, MICROSOFT И/ИЛИ НЕЙНИТЕ ДОСТАВЧИЦИ ОТХВЪРЛЯТ И ИЗКЛЮЧВАТ ВСИЧКИ ДЕКЛАРАЦИИ, ГАРАНЦИИ И УСЛОВИЯ, НЕЗАВИСИМО ДАЛИ СА ИЗРИЧНИ, ПОДРАЗБИРАЩИ СЕ, ИЛИ ЗАКОНОВИ, ВКЛЮЧИТЕЛНО, НО НЕ САМО, ДЕКЛАРАЦИИ, ГАРАНЦИИ ИЛИ УСЛОВИЯ ЗА СОБСТВЕНОСТ, НЕНАРУШЕНИЕ, ЗАДОВОЛИТЕЛНО СЪСТОЯНИЕ ИЛИ КАЧЕСТВО, ПРОДАВАЕМОСТ И ПРИГОДНОСТ ЗА ОПРЕДЕЛЕНА ЦЕЛ, ПО ОТНОШЕНИЕ НА МАТЕРИАЛИТЕ.