Типът на записа "Използване" не се вижда в диалоговия прозорец "Записи в книгата за услуги", когато създавате фактура за услуги за нов договор за услуги в Microsoft Dynamics NAV 2009 Service Pack 1

Отнася се за
Dynamics NAV 2009 Service Pack 1

Бързо публикуваните статии предоставят информация директно от организацията за поддръжка на 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 на системен обект.

                
Забележка: Не е необходимо да имате права за хранилищата за данни, освен ако не трябва да извършите поправка на данни.

Промени в кода

Забележка: Винаги тествайте корекциите на кода в контролирана среда, преди да ги приложите към производствените си компютри.
За да решите този проблем, изпълнете следните стъпки:

  1. Променете кода във функцията 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" :=
    ...
    
    
  2. Променете кода в 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
    ...
    
    
  3. Променете кода във функцията 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;
    ...
    
    
  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
    ...
    
    
  5. Променете кода във функцията 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;
    ...
    
    
  6. Променете кода във функцията 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
    ...
    
    
  7. Променете кода във функцията 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;
    ...
    
    
  8. Променете кода във функцията 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;
    ...
    
    
  9. Променете кода във функцията 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;
    ...
    
    
  10. Променете кода във функцията 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;
    ...
    
    
  11. Променете кода във функцията 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 И/ИЛИ НЕЙНИТЕ ДОСТАВЧИЦИ ОТХВЪРЛЯТ И ИЗКЛЮЧВАТ ВСИЧКИ ДЕКЛАРАЦИИ, ГАРАНЦИИ И УСЛОВИЯ, НЕЗАВИСИМО ДАЛИ СА ИЗРИЧНИ, ПОДРАЗБИРАЩИ СЕ, ИЛИ ЗАКОНОВИ, ВКЛЮЧИТЕЛНО, НО НЕ САМО, ДЕКЛАРАЦИИ, ГАРАНЦИИ ИЛИ УСЛОВИЯ ЗА СОБСТВЕНОСТ, НЕНАРУШЕНИЕ, ЗАДОВОЛИТЕЛНО СЪСТОЯНИЕ ИЛИ КАЧЕСТВО, ПРОДАВАЕМОСТ И ПРИГОДНОСТ ЗА ОПРЕДЕЛЕНА ЦЕЛ, ПО ОТНОШЕНИЕ НА МАТЕРИАЛИТЕ.