Grupos de Definições

Antes de aplicar qualquer sugestão aqui descrita, verifique os termos do disclaimer do blog.

Dicas para Grupos de Definições do Configurador

Administração > Atividades Periódicas > Configurador > Grupos de definições do configurador

Por que a tabela X não aparece como relacionada com a tabela Y?

Por exemplo, a tabela BankAccountTable não aparece dentro da VendPaymModeTable como na imagem abaixo.

A hierarquia de tabelas no Assistente de Grupo de Definições é montada a partir das relations definidas na própria AOT. A existência dessas relations é que definirá como as tabelas serão montadas para definir a query usada na geração dos arquivos.

Porém, nem todas as tabelas são mostradas aqui, mesmo havendo relations configuradas. O que fazer? Criar relations adicionais na AOT? Bem, além de não recomendado, não é garantia de que irá funcionar.

Para corrigir isso, é necessário alterar o método que preenche as tabelas do assistente. Abra a classe SysReportWizard e edite o método tableFillRelatedContainer.

No início do método, adicione a variável tableRelation conforme abaixo:

// <GBR>
SysDictTable        mainTable;
SysDictRelation     tableRelation;
int                 relatedCounter;
// </GBR>

E, ao final do método, altere o trecho existente pelo seguinte:

// <GBR>
mainTable = new SysDictTable(_tableId);
for (relatedCounter = mainTable.relationCnt(); relatedCounter > 0; relatedCounter--)
{
tableRelation = new SysDictRelation(_tableId);
tableRelation.loadNameRelation(mainTable.relation(relatedCounter));
relatedTable  = new SysDictTable(tableRelation.externTable());
if (SysReportWizard::tableValidate(relatedTable) && !confind(table, relatedTable.id()))
{
table = conins(table, conlen(table) + 1, relatedTable.id());
}
}
// </GBR>

Voilà, o assistente agora mostrará todas as tabelas conforme as relations.

Update: Essa correção também evita (ou minimiza) a ocorrência da mensagem “Combinação inválida de Campo/Campo relacionado” (“Invalid Field/Related field combination“).

Isso porque o código antigo interpretava erroneamente relations onde um dos campos é fixo, como em:

Incomplete link from relations

Nesse exemplo, a relation

LedgerJournalTrans.AccountType == 1

é adicionada como link através de:

QueryBuildDataSource::addLink()

(que é o método que gera tal mensagem), mas o correto é ser adicionada como um range através de:

QueryBuildDataSource::addRange()

Caso você já tenha um objeto da classe QueryBuildLink construído, verifique essa situação através do método incomplete().

Por que nem todos os campos são mostrados na página Soma?

Na verdade, é mais um lembrete que aqui são mostrados apenas os campos “somáveis”, isto é, os campos do tipo Integer e Real apenas. Mesmo que o campo contenha apenas números, ele não será mostrado aqui se for do tipo String. Não há conversão implícita.

Como curiosidade, a lógica desse filtro está ao final de SysReportWizard::sumFillList().

Ao gerar um arquivo de pagamento, recebo uma série de mensagens de erro contendo “O tamanho interno total dos registros na instrução SELECT…”.

Exemplo de mensagem de erro:

O tamanho interno total dos registros na instrução SELECT associada é de 26048 bytes, mas o desempenho do Microsoft Dynamics foi ajustado, por padrão, para não exceder 21504 bytes.

Dependendo da quantidade de tabelas e campos definidas, a query resultante poderá exceder o tamanho máximo do buffer do SQL Server. Caso seja possível, revise o Grupo de Definições para que ele contenha apenas os campos que serão usados no Grupo de Layout. Caso o problema ainda persista, aumente o buffer da seguinte maneira:

  • Abra o item Ferramentas Administrativas (Administrative Tools) do Windows.
  • Execute Microsoft Dynamics AX 2009 Server Configuration.
  • Vá à aba Database Tuning e altere o valor de Maximum buffer size (a unidade é KB).
  • No exemplo acima, precisamos de algo acima de 26.048 bytes. O valor 28 será suficiente.

Dynamics AX 2009 Server Configuration

Nota: Boa parte dessas alterações foram lançadas no Roll-up 6 (RU6) para o Microsoft Dynamics AX 2009. Veja o blog disclaimer.

3 Responses to Grupos de Definições

  1. Renan Castilho Zupa says:

    Oi Daniel, meus parabens pelo blog cara, muitissimo bom.

    Eu gostaria de saber, como faço para no grupo de Definição especificar qual relations usar, por exemplo, a ledgerJournalTrans tem relacionamento com a BankAccountTable de mais de uma forma, eu gostaria de saber como especificar qual forma usar.

    Tambem gostaria de perguntar se existe uma forma de importar arquivos textos usando o configurador sem ser por CNAB, como se fosse uma integração usando o configurador para importar arquivos textos, eu sei que há possibilidade de exportar, mas nao consegui para importar.

    Muito Obrigado

    • Daniel Landi says:

      Oi, Renan.

      Nos casos de vários relacionamentos, o Configurador poderá se perder. O recomendado nesses casos é você criar métodos na tabela LedgerJournalTrans para buscar dados na BankAccountTable.

      Creio que dá para fazer uma importação sim. Veja como exemplo a funcionalidade da NFe de Serviço de SP. A classe ConfImport_ServiceNFe_BR é um exemplo de importação não-relacionada com CNAB.

      Abs.

  2. Renan Castilho Zupa says:

    Bom dia Daniel, muito Obrigado pelas respostas.

    Minha intenção é criar uma classe que seja capaz de através de um grupo de definição e um layout, importar um arquivo texto. Não importando como foi feito o grupo, mas que a classe se adapte de acordo com o grupo de Layout.

    Você acha que isso é reinventar a roda, porque esses exportação e importação DAT/DEF no AX.

    Obrigado desde já.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>