O "código ' envio-a" campo estiver vazio inesperadamente depois de executar a função Obter Enc. vendas de uma encomenda especial de uma encomenda de compra especiais no Microsoft Dynamics NAV 2009

Modelo: CPR - modelo de correcção de código do Navision

BUGS #: 156421 (Manutenção do conteúdo)

Este artigo aplica-se para o Microsoft Dynamics NAV para todos os países e todos os idiomas.

Sintomas

Depois de executar a função Obter Enc. Vendas de uma encomenda especial em especial nota de encomenda no Microsoft Dynamics NAV 2009, o campo de código ' envio-a no cabeçalho da ordem de compra especial está vazio inesperadamente.
Este problema ocorre nos seguintes produtos:

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Resolução

Informações sobre correção

Agora tem uma correcção suportada disponível na Microsoft. Contudo, destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde o próximo service pack do Microsoft Dynamics NAV 2009 ou a próxima versão do Microsoft Dynamics NAV que contenha esta correcção.

Nota Em casos especiais, os custos normalmente inerentes para suporte chamadas poderão ser anuladas se um técnico de suporte técnico do Microsoft Dynamics e produtos relacionados determina que uma actualização específica resolverá o problema. Os custos de normais do suporte serão aplicados a questões de suporte adicionais e problemas que não se enquadrem na atualização específica em questão.

Se esta correcção não está registada para transferência pública (ou seja, que um URL público para esta correcção não é fornecido neste artigo), a distribuição requer responsável técnico, o membro da equipa de escalamento ou aprovação do gestor e aplicam as seguintes informações:

  • Para receber a correcção, os clientes tem de estar a ocorrer o erro mencionada na secção "Sintomas".

  • Terá de controlar os clientes, esta opção para enviar e fornecer-lhes o próximo service pack quando se tornar disponível (se é lançado um service pack).

Esta correcção está agendada para ser incluída no Microsoft Dynamics NAV 2009 R2.

DynamicsNAVSE VSTF: 255792

Informações de instalação

A Microsoft fornece exemplos de programação apenas a título ilustrativo, sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação que está a ser demonstrada e com as ferramentas que são utilizadas para criar e depurar procedimentos. Técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.

Nota Antes de instalar esta correcção, certifique-se de que todos os utilizadores de cliente do Microsoft Navision são registados no sistema. Isto inclui os utilizadores de clientes do Microsoft Navision Application Server (NAS). Deve ser o único usuário do cliente que tem sessão iniciada quando implementar esta correcção.

Para implementar esta correcção, tem de ter uma licença de desenvolvedor.

Recomendamos que a conta de utilizador na janela Logins do Windows ou na janela Logins de base de dados seja atribuída a ID de função "SUPER". Se a conta de utilizador não é possível atribuir o ID de função "SUPER", tem de verificar que a conta de utilizador tem as seguintes permissões:

  • A permissão Modificar para o objecto que estará a alterar.

  • A permissão executar para o objecto 5210 de ID de objecto de sistema e para o objecto 9015 de ID de objecto de sistema .



Nota Não tem de ter direitos para os arquivos de dados, excepto se tiver de efectuar a reparação de dados.

Alterações de código

Nota Sempre o código de ensaio corrige num ambiente controlado antes de aplicar as correcções para os computadores de produção.
Para resolver este problema, siga estes passos:

  1. Alterar o código na funtion a GetDescriptionAndRcptName no na codeunit ReqJnlManagement (330) da seguinte forma:
    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 folha de requisição.-efectue a codeunit de ordem (333) e, em seguida, especifique a variável da seguinte forma:

    • Nome: DropShptSpecialOrderExists

    • Tipo de dados: Boleano

  3. Adicionar uma nova variável local na função InsertPurchOrderLine no folha de requisição.-efectue a codeunit de ordem (333) e, em seguida, especifique a variável da seguinte forma:

    • Nome: SalesHeader

    • Tipo de dados: registo

    • Subtipo: cabeçalho de vendas

  4. Adicionar uma nova variável local na função InsertPurchOrderLine no folha de requisição.-efectue a codeunit de ordem (333) e, em seguida, especifique a variável da seguinte forma:

    • Nome: DropShptSplOrderDiffAddress

    • Tipo de dados: Booleano

  5. Alterar o código na função InsertPurchOrderLine no folha de requisição.-efectuar ordem codeunit (333) do seguinte modo:
    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 no folha de requisição.-efectue a codeunit de ordem (333) e, em seguida, especifique a variável da seguinte forma:

    • Nome: SalesHeader

    • Tipo de dados: de registo

    • Subtipo: cabeçalho de vendas

  7. Alterar o código na função InsertHeader no folha de requisição.-efectuar ordem codeunit (333) do seguinte modo:
    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 DIST integração (5702) do seguinte modo:
    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 DIST integração (5702) do seguinte modo:
    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 na codeunit manutenção do documento de cópia (6620) do seguinte modo:
    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. Alterar o código no código em Compr.-obter envio directo codeunit (76) do seguinte modo:
    Código existente 1

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

    PurchLine.LOCKTABLE;
    ...

    Código de substituição 1

    ...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;
    ...

    Código existente 2

    ...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 de InsertReqWkshLine no relatório obter encomendas venda (698) do seguinte modo:
    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 cabeçalho da compra (38) e, em seguida, especifique a variável da seguinte forma:

    • Nome: NameAddressDetails

    • Tipo de dados: texto

    • Comprimento: 512

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

    • Nome: NameAddressDetails2

    • Tipo de dados: texto

    • Comprimento: 512

  15. Adicionar uma nova constante de texto na tabela cabeçalho da compra (38) e, em seguida, especifique a constante de texto da seguinte forma:

    • Nome: Text051

    • ConstValue: o campo %1 na encomenda de compra %2 tem de ser a mesma que a encomenda de vendas %3.

  16. Crie uma nova função de CheckAndAddShipToAdd na tabela cabeçalho da compra (38). Para tal, siga estes passos:

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

      • Var: No

      • Nome: SalesHeader

      • Tipo de dados: registo

      • Subtipo: cabeçalho de vendas

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

      • Var: No

      • Nome: ShowError

      • Tipo de dados: Boleano

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

      • Tipo de retorno: Boleano

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

      • Nome: PurchLine2

      • Tipo de dados: registo

      • Subtipo: PurchLine2

    5. Adicione o seguinte código na função CheckAndAddShipToAdd na tabela 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 cabeçalho da compra (38). Para tal, siga estes passos:

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

      • Var: No

      • Nome: SalesHeader

      • Tipo de dados: registo

      • Subtipo: cabeçalho de vendas

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

      • Tipo de retorno: Boleano

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

      • Nome: SalesLine2

      • Tipo de dados: registo

      • Subtipo: linha de vendas

    4. Adicione o seguinte código na função DropShptSplOrderExists na tabela 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

Tem de ter um dos seguintes produtos instalado para aplicar esta correcção:

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Informações de remoção

Não é possível remover esta correcção.

Estado

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Nota Este é um artigo "Publicação rápida" criado diretamente a partir da organização de suporte da Microsoft. As informações contidas neste documento são fornecidas como-se em resposta a questões emergentes. Como resultado da urgência na sua disponibilização, os materiais podem incluir erros tipográficos e podem ser revistos em qualquer altura sem aviso prévio. Para outras considerações, consulte os Termos de utilização .

Autor: avannini
Writer: v-zhipen
Revisor técnico: avannini
Editor:

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×