Este artigo se aplica ao Microsoft Dynamics NAV para todos os países e todas as localidades de idiomas.

Sintomas

Depois de executar a função de Obter a ordem de venda para uma ordem especial em especial ordem de compra no Microsoft Dynamics NAV 2009, o campo de código de entrega no cabeçalho da ordem de compra especial está vazio inesperadamente.
Esse problema ocorre nos seguintes produtos:

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Resolução

Informações sobre o hotfix

Um hotfix suportado está disponível agora na Microsoft. No entanto, apenas destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico. Esta correção poderá ser submetida a testes adicionais. Portanto, se esse problema não o prejudicar, recomendamos que você aguarde o próximo service pack do Microsoft Dynamics NAV 2009 ou a próxima versão do Microsoft Dynamics NAV que contém esse hotfix.

Observação: Em alguns casos, as taxas cobradas para suporte a chamadas podem ser canceladas se um profissional de suporte técnico do Microsoft Dynamics e produtos relacionados determina que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados para questões de suporte adicionais e problemas que não se qualificam à atualização específica em questão.

Informações sobre a instalação

A Microsoft fornece exemplos de programação somente para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um propósito específico. Este artigo presume que você esteja familiarizado com a linguagem de programação que está sendo demonstrada e com as ferramentas usadas para criar e depurar procedimentos. Engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades específicas.

Observação: Antes de instalar esse hotfix, verifique se todos os usuários de cliente do Microsoft Navision estiver desconectados do sistema. Isso inclui usuários de cliente do Microsoft Navision Application Server (NAS). Você deve ser o único usuário do cliente conectado ao implementar esse hotfix.

Para implementar esse hotfix, você deve ter uma licença de desenvolvedor.

É recomendável que a conta de usuário na janela de Logins do Windows ou na janela banco de dados seja atribuída a ID de função "SUPER". Se a conta de usuário não pode ser atribuída a ID de função "SUPER", você deverá verificar se a conta de usuário tem as seguintes permissões:

  • A permissão Modificar para o objeto que será alterado.

  • A permissão de execução para o objeto de sistema 5210 de identificação de objeto e do objeto de sistema 9015 de identificação de objeto .



Observação: Você não precisa ter direitos para os armazenamentos de dados, a menos que você precise executar o reparo de dados.

Alterações de código

Observação: Sempre teste código correções em um ambiente controlado antes de aplicar as correções para os computadores de produção.
Para resolver esse problema, execute as seguintes etapas:

  1. Alterar o código em que a função de GetDescriptionAndRcptName contínua no na codeunit ReqJnlManagement (330) da seguinte maneira:
    Código existente

    ...ELSE
    Description := '';

    // Delete the following lines.
    ReqLine.Type::Item:
    IF Item.GET(ReqLine."No.") THEN
    Description := Item.Description
    ELSE
    Description := '';
    // End of the lines.

    END;
    END;

    IF ReqLine."Vendor No." = '' THEN
    ...

    Código de substituição

    ...ELSE
    Description := '';
    END;
    END;

    IF ReqLine."Vendor No." = '' THEN
    ...
  2. Adicionar uma nova variável global na Wksh de neces..-fazer pedido codeunit (333) e, em seguida, especifique a variável da seguinte maneira:

    • Nome: DropShptSpecialOrderExists

    • Tipo de dados: Boolean

  3. Adicionar uma nova variável local na função InsertPurchOrderLine na Wksh de neces..-fazer pedido codeunit (333) e, em seguida, especifique a variável da seguinte maneira:

    • Nome: SalesHeader

    • Tipo de dados: registro

    • Subtipo: cabeçalho de venda

  4. Adicionar uma nova variável local na função InsertPurchOrderLine na Wksh de neces..-fazer pedido codeunit (333) e, em seguida, especifique a variável da seguinte maneira:

    • Nome: DropShptSplOrderDiffAddress

    • Tipo de dados: Boolean

  5. Alterar o código da função InsertPurchOrderLine na Wksh de neces..-fazer pedido codeunit (333) da seguinte forma:
    Código existente

    ...WITH ReqLine2 DO BEGIN
    IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
    EXIT;


    IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR
    (PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR
    (PrevShipToCode <> "Ship-to Code") OR
    (PurchOrderHeader."Order Address Code" <> "Order Address Code") OR
    (PurchOrderHeader."Currency Code" <> "Currency Code") OR

    // Delete the following line.
    (PrevPurchCode <> "Purchasing Code")

    THEN BEGIN
    ...

    Código de substituição

    ...WITH ReqLine2 DO BEGIN
    IF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THEN
    EXIT;

    // Add the following lines.
    DropShptSpecialOrderExists := FALSE;
    IF SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.") THEN BEGIN
    DropShptSpecialOrderExists := PurchOrderHeader.DropShptSplOrderExists(SalesHeader);
    IF DropShptSpecialOrderExists THEN
    DropShptSplOrderDiffAddress :=
    NOT PurchOrderHeader.CheckAndAddShipToAdd(SalesHeader,FALSE);
    END;
    // End of the lines.

    IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR
    (PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR
    (PrevShipToCode <> "Ship-to Code") OR
    (PurchOrderHeader."Order Address Code" <> "Order Address Code") OR
    (PurchOrderHeader."Currency Code" <> "Currency Code") OR

    // Add the following lines.
    (PrevPurchCode <> "Purchasing Code") OR
    (DropShptSplOrderDiffAddress)
    // End of the lines.

    THEN BEGIN
    ...
  6. Adicionar uma nova variável local na função InsertHeader na Wksh de neces..-fazer pedido codeunit (333) e, em seguida, especifique a variável da seguinte maneira:

    • Nome: SalesHeader

    • Tipo de dados: registro

    • Subtipo: cabeçalho de venda

  7. Alterar o código da função InsertHeader na Wksh de neces..-fazer pedido codeunit (333) da seguinte forma:
    Código existente

    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    PurchOrderHeader.MODIFY;
    ...

    Código de substituição

    ...PurchOrderHeader.SetShipToForSpecOrder;
    END;

    // Add the following lines.
    IF DropShptSpecialOrderExists THEN BEGIN
    SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.");
    PurchOrderHeader."Ship-to Name" := SalesHeader."Ship-to Name";
    PurchOrderHeader."Ship-to Name 2" := SalesHeader."Ship-to Name 2";
    PurchOrderHeader."Ship-to Address" := SalesHeader."Ship-to Address";
    PurchOrderHeader."Ship-to Address 2" := SalesHeader."Ship-to Address 2";
    PurchOrderHeader."Ship-to Post Code" := SalesHeader."Ship-to Post Code";
    PurchOrderHeader."Ship-to City" := SalesHeader."Ship-to City";
    PurchOrderHeader."Ship-to Contact" := SalesHeader."Ship-to Contact";
    END;
    // End of the lines.

    PurchOrderHeader.MODIFY;
    ...
  8. Altere o código na função EnterPurchaseItemCrossRef na codeunit integração de Dist. (5702) da seguinte forma:
    Código existente

    ...IF Found THEN BEGIN
    "Cross-Reference No." := ItemCrossReference."Cross-Reference No.";
    "Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";
    "Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";
    "Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";

    // Delete the following lines.
    IF ItemCrossReference.Description <> '' THEN BEGIN
    Description := ItemCrossReference.Description;
    "Description 2" := '';
    END;
    // End of the lines.

    END ELSE BEGIN
    "Cross-Reference No." := '';
    "Cross-Reference Type" := "Cross-Reference Type"::" ";
    "Cross-Reference Type No." := '';

    // Delete the following lines.
    IF "Variant Code" <> '' THEN BEGIN
    ItemVariant.GET("No.","Variant Code");
    Description := ItemVariant.Description;
    "Description 2" := ItemVariant."Description 2";
    END ELSE BEGIN
    Item.GET("No.");
    Description := Item.Description;
    "Description 2" := Item."Description 2";
    END;
    // End of the lines.

    GetItemTranslation;
    ...

    Código de substituição

    ...IF Found THEN BEGIN
    "Cross-Reference No." := ItemCrossReference."Cross-Reference No.";
    "Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";
    "Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";
    "Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";
    END ELSE BEGIN
    "Cross-Reference No." := '';
    "Cross-Reference Type" := "Cross-Reference Type"::" ";
    "Cross-Reference Type No." := '';
    GetItemTranslation;
    ...
  9. Altere o código na função GetSpecialOrders na codeunit integração de Dist. (5702) da seguinte forma:
    Código existente

    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
    TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Delete the following line.
    PurchHeader.SetShipToForSpecOrder;

    PurchLine.LOCKTABLE;
    ...

    Código de substituição

    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");
    TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Add the following lines.
    IF DropShptSplOrderExists(SalesHeader) THEN
    CheckAndAddShipToAdd(SalesHeader,TRUE);
    // End of the lines.

    PurchLine.LOCKTABLE;
    ...
  10. Altere o código na função TransfldsFromSalesToPurchLine o código de gerenciamento de documentos de cópia (6620) da seguinte forma:
    Código existente

    ...VALIDATE("Direct Unit Cost");
    END;
    ...

    Código de substituição

    ...VALIDATE("Direct Unit Cost");

    // Add the following lines.
    Description := FromSalesLine.Description;
    "Description 2" := FromSalesLine."Description 2";
    // End of the lines.

    END;
    ...
  11. Altere o código no código da compra.-obter codeunit Shpt. soltar (76) da seguinte forma:
    1 de código existente

    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    PurchLine.LOCKTABLE;
    ...

    1 código de substituição

    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");

    // Add the following line.
    IF DropShptSplOrderExists(SalesHeader) THEN
    CheckAndAddShipToAdd(SalesHeader,TRUE);
    // End of the lines.

    PurchLine.LOCKTABLE;
    ...

    2 de código existente

    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
    PurchLine.Description := SalesLine.Description;
    PurchLine."Sales Order No." := SalesLine."Document No.";
    ...

    Código de substituição 2

    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);
    PurchLine.Description := SalesLine.Description;

    // Add the following line.
    PurchLine."Description 2" := SalesLine."Description 2";

    PurchLine."Sales Order No." := SalesLine."Document No.";
    ...
  12. Altere o código no InsertReqWkshLine no relatório de ordens de venda obter (698) da seguinte forma:
    Código existente

    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";
    SalesHeader.GET(1,SalesLine."Document No.");
    IF SpecOrder <> 1 THEN
    ...

    Código de substituição

    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";

    // Add the following lines.
    Description := SalesLine.Description;
    "Description 2" := SalesLine."Description 2";
    // End of the lines.

    SalesHeader.GET(1,SalesLine."Document No.");
    IF SpecOrder <> 1 THEN
    ...
  13. Adicionar uma nova variável global na tabela de cabeçalho da compra (38) e, em seguida, especifique a variável da seguinte maneira:

    • Nome: NameAddressDetails

    • Tipo de dados: texto

    • Comprimento: 512

  14. Adicionar uma nova variável global na tabela de cabeçalho da compra (38) e, em seguida, especifique a variável da seguinte maneira:

    • Nome: NameAddressDetails2

    • Tipo de dados: texto

    • Comprimento: 512

  15. Adicione uma nova constante de texto na tabela de cabeçalho da compra (38) e especifique a constante de texto da seguinte maneira:

    • Nome: Text051

    • ConstValue: o campo %1 na ordem de compra %2 deve ser o mesmo em vendas ordem de 3%.

  16. Crie uma nova função de CheckAndAddShipToAdd na tabela de cabeçalho da compra (38). Para fazer isso, execute as seguintes etapas:

    1. Adicionar um novo parâmetro local na função CheckAndAddShipToAdd da tabela do cabeçalho da compra (38) e, em seguida, especifique o parâmetro da seguinte forma:

      • Var: No

      • Nome: SalesHeader

      • Tipo de dados: registro

      • Subtipo: cabeçalho de venda

    2. Adicionar um novo parâmetro local na função CheckAndAddShipToAdd da tabela do cabeçalho da compra (38) e, em seguida, especifique o parâmetro da seguinte forma:

      • Var: No

      • Nome: ShowError

      • Tipo de dados: Boolean

    3. Adicionar um valor de retorno na função CheckAndAddShipToAdd da tabela do cabeçalho da compra (38) e, em seguida, especifique o valor de retorno da seguinte maneira:

      • Tipo de retorno: Boolean

    4. Adicionar uma nova variável local na função CheckAndAddShipToAdd da tabela do cabeçalho da compra (38) e, em seguida, especifique a variável da seguinte maneira:

      • Nome: PurchLine2

      • Tipo de dados: registro

      • Subtipo: PurchLine2

    5. Adicione o seguinte código na função CheckAndAddShipToAdd da tabela do cabeçalho da compra (38):

      IF ShowError THEN BEGINPurchLine2.RESET;
      PurchLine2.SETRANGE("Document Type","Document Type"::Order);
      PurchLine2.SETRANGE("Document No.","No.");
      IF NOT PurchLine2.ISEMPTY THEN BEGIN
      IF "Ship-to Name" <> SalesHeader."Ship-to Name" THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Name"),"No.",SalesHeader."No.");
      IF "Ship-to Name 2" <> SalesHeader."Ship-to Name 2" THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Name 2"),"No.",SalesHeader."No.");
      IF ("Ship-to Address" <> SalesHeader."Ship-to Address") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Address"),"No.",SalesHeader."No.");
      IF ("Ship-to Address 2" <> SalesHeader."Ship-to Address 2") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Address 2"),"No.",SalesHeader."No.");
      IF ("Ship-to Post Code" <> SalesHeader."Ship-to Post Code") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Post Code"),"No.",SalesHeader."No.");
      IF ("Ship-to City" <> SalesHeader."Ship-to City") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to City"),"No.",SalesHeader."No.");
      IF ("Ship-to Contact" <> SalesHeader."Ship-to Contact") THEN
      ERROR(Text051,FIELDCAPTION("Ship-to Contact"),"No.",SalesHeader."No.");
      END ELSE BEGIN
      // no purchase line exists
      "Ship-to Name" := SalesHeader."Ship-to Name";
      "Ship-to Name 2" := SalesHeader."Ship-to Name 2";
      "Ship-to Address" := SalesHeader."Ship-to Address";
      "Ship-to Address 2" := SalesHeader."Ship-to Address 2";
      "Ship-to Post Code" := SalesHeader."Ship-to Post Code";
      "Ship-to City" := SalesHeader."Ship-to City";
      "Ship-to Contact" := SalesHeader."Ship-to Contact";
      END;
      END ELSE BEGIN
      NameAddressDetails :=
      SalesHeader."Ship-to Name" + SalesHeader."Ship-to Name 2" +
      SalesHeader."Ship-to Address" + SalesHeader."Ship-to Address 2" +
      SalesHeader."Ship-to Post Code" + SalesHeader."Ship-to City" +
      SalesHeader."Ship-to Contact";
      IF NameAddressDetails2 = '' THEN
      NameAddressDetails2 := NameAddressDetails;
      EXIT(NameAddressDetails2 = NameAddressDetails);
      END;
  17. Crie uma nova função de DropShptSplOrderExists na tabela de cabeçalho da compra (38). Para fazer isso, execute as seguintes etapas:

    1. Adicionar um novo parâmetro local na função DropShptSplOrderExists da tabela do cabeçalho da compra (38) e, em seguida, especifique o parâmetro da seguinte forma:

      • Var: No

      • Nome: SalesHeader

      • Tipo de dados: registro

      • Subtipo: cabeçalho de venda

    2. Adicionar um tipo de valor de retorno na função DropShptSplOrderExists da tabela do cabeçalho da compra (38) e, em seguida, especifique o valor de retorno da seguinte maneira:

      • Tipo de retorno: Boolean

    3. Adicionar uma nova variável local na função DropShptSplOrderExists da tabela do cabeçalho da compra (38) e, em seguida, especifique a variável da seguinte maneira:

      • Nome: SalesLine2

      • Tipo de dados: registro

      • Subtipo: linha de venda

    4. Adicione o seguinte código na função DropShptSplOrderExists da tabela do cabeçalho da compra (38):

      // returns TRUE if sales is either Drop Shipment of Special OrderSalesLine2.RESET;
      SalesLine2.SETRANGE("Document Type",SalesLine2."Document Type"::Order);
      SalesLine2.SETRANGE("Document No.",SalesHeader."No.");
      SalesLine2.SETRANGE("Drop Shipment",TRUE);
      IF NOT SalesLine2.ISEMPTY THEN
      EXIT(TRUE);

      SalesLine2.SETRANGE("Drop Shipment");
      SalesLine2.SETRANGE("Special Order",TRUE);
      EXIT(NOT SalesLine2.ISEMPTY);

Pré-requisitos:

Você deve ter um dos seguintes produtos instalados para aplicar esse hotfix:

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Informações sobre remoção

Você não pode remover esse hotfix.

Status

A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Observação: Este é um artigo de "PUBLICAÇÃO RÁPIDA" criado diretamente de dentro da organização de suporte da Microsoft. As informações contidas neste documento são fornecidas desta maneira, em resposta a problemas emergentes. Como um dos resultados da velocidade da publicação, os materiais podem incluir erros tipográficos e podem ser revisados a qualquer momento sem aviso prévio. Consulte os Termos de uso para outras considerações.

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×