Os artigos publicados rapidamente fornecem informações diretamente a partir da organização de suporte da Microsoft. As informações aqui contidas são criadas em resposta a tópicos emergentes ou exclusivos ou destinam-se a complementar outras informações da Base de Dados de Conhecimento.
Sintomas
Quando clica com o botão direito do rato na caixa de diálogo Diário do cartão de rota no Microsoft Dynamics AX 2009 e, em seguida, clica em Configuração para adicionar a coluna Configuração ao separador Descrição Geral , a configuração de uma fatura de materiais (BOM) não é apresentada corretamente na caixa de diálogo Diário do cartão de rota.
Causa
Este problema ocorre porque o Microsoft Dynamics AX não suporta a adição de uma origem de dados ligada atrasada a um controlo de grelha.
Resolução
Informações de Correção
Uma correção suportada está agora disponível na Microsoft. No entanto, destina-se apenas a corrigir o problema descrito neste artigo. Aplique-o apenas a sistemas com este problema específico. Esta correção pode receber testes adicionais. Por conseguinte, se não for gravemente afetado por este problema, recomendamos que aguarde pelo próximo service pack do Microsoft Dynamics AX 2009 ou pela próxima versão que contém esta correção.
Nota Em casos especiais, os custos normalmente incorridos para chamadas de suporte poderão ser cancelados se um Profissional de Suporte Técnico para o Microsoft Dynamics e produtos relacionados determinar que uma atualização específica irá resolver o problema. Os custos de suporte em geral aplicam-se a questões e problemas de suporte adicionais que não se enquadrem na atualização específica em questão.
Esta correção está agendada para ser incluída no Service Pack 2 para o Microsoft Dynamics AX 2009.
Informações de instalação
Antes de instalar esta correção, verifique se os utilizadores do cliente microsoft Dynamics AX têm sessão iniciada no sistema. Deve ser o único utilizador cliente com sessão iniciada quando implementa esta correção.
Para implementar esta correção, tem de ter uma licença de programador.
Nota Recomendamos que a conta de utilizador na janela Inícios de Sessão do Windows ou na janela Inícios de Sessão da Base de Dados seja membro do grupo Utilizadores Administradores no Microsoft Dynamics AX.
Alterações de código
A Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não se limita a, as garantias implícitas de comercialização ou adequação a uma finalidade específica. Este artigo pressupõe que você esteja familiarizado com a linguagem de programação que está sendo demonstrada e com as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um procedimento específico. No entanto, eles não modificarão esses exemplos para fornecer funcionalidade adicional ou procedimentos de construção para atender aos seus requisitos específicos. Teste sempre as correções de código num ambiente controlado antes de aplicar as correções aos seus computadores de produção.
Para aplicar esta correção, siga estes passos:
Altere o código no método datasourceWritePre na classe ProdJournalFormTransRoute da seguinte forma:
Código existentevoid datasourceWritePre() { ; if (prodJournalRoute.ProdPickList && prodJournalRoute.OprPriority && !prodJournalRoute.ProdPickListJournalId) prodJournalRoute.ProdPickList = NoYes::No; if (prodJournalRoute.ProdReportFinished) prodJournalRoute.ProdInventDimId = InventDim::findOrCreate(inventDim).InventDimId; else // Modify the following line. prodJournalRoute.ProdInventDimId = ''; prodJournalRoute.ProdInventDimId = ''; super(); }Código de substituição
void datasourceWritePre() { ; if (prodJournalRoute.ProdPickList && prodJournalRoute.OprPriority && !prodJournalRoute.ProdPickListJournalId) prodJournalRoute.ProdPickList = NoYes::No; if (prodJournalRoute.ProdReportFinished) prodJournalRoute.ProdInventDimId = InventDim::findOrCreate(inventDim).InventDimId; else // The following line is modified. prodJournalRoute.ProdInventDimId = InventDim::inventDimIdBlank(); prodJournalRoute.ProdInventDimId = ''; super(); }Altere o código no método fieldModifiedProdReportFinishedPost na classe ProdJournalFormTransRoute da seguinte forma:
Código existentevoid fieldModifiedProdReportFinishedPost() { InventDim emptyInventDim; ; if (prodJournalRoute.ProdReportFinished) { if (! prodJournalRoute.ProdInventDimId) inventDim_ds.create(); inventDim.data(InventDim::find(ProdTable::find(prodJournalRoute.ProdId).InventDimId)); } else inventDim.data(emptyInventDim); inventDim_ds.setCurrent(); }Código de substituição
void fieldModifiedProdReportFinishedPost() { // Add the following line. InventDim emptyInventDim = InventDim::find(InventDim::inventDimIdBlank()); InventDim emptyInventDim; ; if (prodJournalRoute.ProdReportFinished) { if (! prodJournalRoute.ProdInventDimId) inventDim_ds.create(); inventDim.data(InventDim::find(ProdTable::find(prodJournalRoute.ProdId).InventDimId)); } else inventDim.data(emptyInventDim); inventDim_ds.setCurrent(); }Altere o código no método enableFieldsActive no formulário ProdJournalTransRoute da seguinte forma:
Código existentevoid enableFieldsActive() { prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectHour.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectQuantity.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); }Código de substituição
void enableFieldsActive() { // Add the following lines. int i; container enabledDimFields = InventDim::dimEnabledFieldList(); container dimFields = InventDim::dimFieldList(); ; prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectHour.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectQuantity.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); // Add the following lines. for(i = 0; i < conlen(dimFields) ; i++) { if (inventDim_DS.object(conpeek(dimFields, i))) { if (prodJournalRoute.ProdInventDimId == InventDim::inventDimIdBlank()) { inventDim_DS.object(conpeek(dimFields,i)).enabled(false); } else { inventDim_DS.object(conpeek(dimFields,i)).enabled(confind(enabledDimeFields,i) != 0); } } } }Altere o valor das propriedades do objeto InventDim Data Source no formulário ProdJournalTransRoute da seguinte forma:
- Altere o valor da propriedade LinkType para InnerJoin.
- Altere o valor da propriedade DelayActive para Não.
Adicione o seguinte código no objeto "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ validateWrite".
public boolean validateWrite() { boolean ret; ; if (inventDim.inventDimId == InventDim::inventDimIdBlank()) return true; ret = super(); return ret; }Altere o código no objeto "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ write" da seguinte forma:
Código existentevoid write() { ; prodJournalRoute_ds.write(); }Código de substituição
void write() { ; prodJournalRoute_ds.write(); // Add the following line. element.enableFieldsActive(); }Altere o código em "\Forms\ProdJournalTransRoute\DataSources\ProdJournalRoute\Methods\active" da seguinte forma:
Código existenteint active() { int ret; ret = super(); journalFormTrans.datasourceActivePost(); if (prodJournalRoute.isProjMethodConsumed()) { skipWrite = true; prodJournalRouteProjHour_ds.executeQuery(); prodJournalRouteProjQuantity_ds.executeQuery(); skipWrite = false; } element.enableFieldsActive(); return ret; }Código de substituição
int active() { int ret; // Add the following lines. ; journalFormTrans.updateDesign(InventDimFormDesignUpdate::Init); ret = super(); journalFormTrans.datasourceActivePost(); if (prodJournalRoute.isProjMethodConsumed()) { skipWrite = true; prodJournalRouteProjHour_ds.executeQuery(); prodJournalRouteProjQuantity_ds.executeQuery(); skipWrite = false; } element.enableFieldsActive(); return ret; }Altere o código no método enableFieldsActive no formulário ProdJournalTransJob da seguinte forma:
Código existentevoid enableFieldsActive() { prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectHour.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectQuantity.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); }Código de substituição
void enableFieldsActive() { // Add the following lines. int i; container enabledDimFields = InventDim::dimEnabledFieldList(); container dimFields = InventDim::dimFieldList(); ; prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectHour.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); projectQuantity.visible(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed()); // Add the following lines. for(i = 0; i < conlen(dimFields) ; i++) { if (inventDim_DS.object(conpeek(dimFields, i))) { if (prodJournalRoute.ProdInventDimId == InventDim::inventDimIdBlank()) { inventDim_DS.object(conpeek(dimFields,i)).enabled(false); } else { inventDim_DS.object(conpeek(dimFields,i)).enabled(confind(enabledDimeFields,i) != 0); } } } }Altere o valor das propriedades do objeto InventDim Data Source no formulário ProdJournalTransJob da seguinte forma:
- Altere o valor da propriedade LinkType para InnerJoin.
- Altere o valor da propriedade DelayActive para Não.
Adicione o seguinte código no objeto " \Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ validateWrite".
public boolean validateWrite() { boolean ret; ; if (inventDim.inventDimId == InventDim::inventDimIdBlank()) return true; ret = super(); return ret; }Altere o código no objeto "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ write" da seguinte forma:
Código existentevoid write() { ; prodJournalRoute_ds.write(); }Código de substituição
void write() { ; prodJournalRoute_ds.write(); // Add the following line. element.enableFieldsActive(); }Altere o código em "\Forms\ProdJournalTransJob\DataSources\ProdJournalRoute\Methods\active" da seguinte forma:
Código existenteint active() { int ret; ret = super(); journalFormTrans.datasourceActivePost(); if (prodJournalRoute.isProjMethodConsumed()) { skipWrite = true; prodJournalRouteProjHour_ds.executeQuery(); prodJournalRouteProjQuantity_ds.executeQuery(); skipWrite = false; } element.enableFieldsActive(); return ret; }Código de substituição
int active() { int ret; // Add the following lines. ; journalFormTrans.updateDesign(InventDimFormDesignUpdate::Init); ret = super(); journalFormTrans.datasourceActivePost(); if (prodJournalRoute.isProjMethodConsumed()) { skipWrite = true; prodJournalRouteProjHour_ds.executeQuery(); prodJournalRouteProjQuantity_ds.executeQuery(); skipWrite = false; } element.enableFieldsActive(); return ret; }Altere o código no método insert na tabela ProdJournalRoute da seguinte forma:
Código existentevoid insert() { ttsbegin; if (! this.LineNum) this.LineNum = ProdJournalRoute::lastLineNum(this.JournalId) + 1; if (this.OprFinished) this.JobFinished = NoYes::Yes; this.updateRouteConstantRelease(); super(); ttscommit; }Código de substituição
void insert() { ttsbegin; if (! this.LineNum) this.LineNum = ProdJournalRoute::lastLineNum(this.JournalId) + 1; if (this.OprFinished) this.JobFinished = NoYes::Yes; // Add the following lines. if(!this.ProdInventDimId) this.ProdInventDimId = InventDim::inventDimIdBlank(); this.updateRouteConstantRelease(); super(); ttscommit; }Altere o código no método initValue na tabela ProdJournalRoute da seguinte forma:
Código existentevoid initValue() { super(); this.TransDate= systemdateget(); }Código de substituição
void initValue() { super(); this.TransDate= systemdateget(); // Add the following line. this.ProdInventDimId = InventDim::inventDimIdBlank(); }
Pré-requisitos
Não são necessários pré-requisitos para aplicar esta correção.
Necessidade de reinicialização
Não tem de reiniciar o computador depois de aplicar esta correção.
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
A MICROSOFT E/OU OS RESPETIVOS FORNECEDORES NÃO FAZEM DECLARAÇÕES OU GARANTIAS SOBRE A ADEQUAÇÃO, A FIABILIDADE OU A PRECISÃO DAS INFORMAÇÕES CONTIDAS NOS DOCUMENTOS E OS GRÁFICOS RELACIONADOS PUBLICADOS NESTE WEB SITE (OS "MATERIAIS") PARA QUALQUER FIM.
O MATERIAL PODE INCLUIR IMPRECISÕES TÉCNICAS OU ERROS TIPOGRÁFICOS E PODE SER REVISADO A QUALQUER MOMENTO SEM AVISO PRÉVIO. ATÉ À EXTENSÃO MÁXIMA PERMITIDA PELA LEI APLICÁVEL, A MICROSOFT E/OU OS RESPETIVOS FORNECEDORES EXCLUEM TODAS AS REPRESENTAÇÕES, GARANTIAS E CONDIÇÕES EXPRESSAS, IMPLÍCITAS OU ESTATUTÁRIAS, INCLUINDO, MAS NÃO SE LIMITANDO A REPRESENTAÇÕES, GARANTIAS OU CONDIÇÕES DE TÍTULO, NÃO INFRAÇÃO, CONDIÇÃO OU QUALIDADE SATISFATÓRIA, COMERCIALIZAÇÃO E ADEQUAÇÃO A UM FIM ESPECÍFICO, NO QUE DIZ RESPEITO AOS MATERIAIS.