Configurator Debug

Quem utiliza o Configurador do Pagamento Eletrônico do Dynamics AX 2009 já deve ter tido problemas em conseguir gerar um arquivo com dados (o famoso caso do “arquivo vazio”).

Boas chances que as tabelas configuradas no Grupo de Definição não formem uma query que gere registros. A ferramenta ConfDebug visa exatamente a depuração dessas queries.

Nota: Desculpas pelos snapshots e termos em inglês.

Visão Geral

A query utilizada para gerar os arquivos é uma combinação de duas queries distintas:

  1. Query indicando o journal (diário) e filtrando as transações para obter apenas as com status none ou rejected. Varia de acordo com a seleção do usuário.
  2. Query fixa gerada a partir do Definition Group associado ao Method of Payment (Método de Pagamento) de cada linha do journal.

Cenário para Teste

Tomamos um exemplo de pagamento como forma de apresentar a ferramenta:

Accounts Payable > Journals > Payment journal

Selecionamos o journal 000002 e clicamos em Lines para ver os transações:

Note que existem três transações, mas, neste exemplo, o arquivo gerado está vazio (pois é, o Dynamics AX não gera nenhuma mensagem de erro… e ainda coloca o status como Sent, mas isso discutiremos em outro post).

Nota: Antes de usar o ConfDebug, verifique se as transações que deseja testar estão com status None, caso contrário não haverá dados a serem gerados.

Apenas como referência, o Definition Group associado a esse método de pagamento é:

Executando o ConfDebug

Para executar o ConfDebug,  abra diretamente o form no projeto privado dele (fique à vontade para criar atalhos onde quiser).

O primeiro diálogo mostrado permite escolher qual journal será usado:

Como usamos diretamente um EDT para simplificar o código, o conteúdo da lista tem algumas colunas inúteis, mas a informação que queremos está lá. Escolha qualquer linha que tenha o Journal number desejado (no nosso caso, o 000002):

O segundo diálogo é idêntico àquele mostrado no processo normal de geração dos arquivos (é o próprio método prompt() do objeto QueryRun):

Verifique se os campos Method of payment e Bank account estão preenchidos com os mesmos valores que os do processo normal de geração de arquivos.

O ConfDebug mostrará então o resultado da análise da query:

Neste exemplo, ele apontou duas tabelas como possíveis causas para a query não ter gerado dados: BankAccountTable e EPRemitOccCodes_BR.

Antes de prosseguirmos na reparação do problema, um breve tour pela ferramenta…

Tour pelo ConfDebug

No grupo Query Adjustments existem as seguintes opções:

  • Use Outer Joins: Transforma todas as inner joins da query em (left) outer joins. Ajuda a identificar quais tabelas não estão ligadas apropriadamente.
  • Hide Empty Fields: No grid de N records, oculta as colunas com todas as células vazias.
  • Hide Zeroed Fields: No grid de N records, oculta as colunas com todas as células zeradas.
  • Add RecID Fields: Adiciona o campo RecID para todas as tabelas da query. Útil quando precisar rastrear a origem dos dados.
  • Add Company range: Modifica a cláusula where para filtrar somente os registros da Company corrente. Útil quando copiar e colar a query no SQL Server.

A lista SubQuery permite analisar parte da query, permitindo assim identificar onde está o elo quebrado:

A subquery só faz sentido ser analisada após a adição da tabela LedgerJournalTrans, pois é quando as transacões do journal são consideradas. No nosso caso, ao selecionar a terceira subquery, serão mostrados todos os registros originais.

As três abas apresentam informações sobre a query. Em Analysis, mostrada anteriormente, são apresentadas informações sobre os possíveis problemas. Também existem dois botões para abrir diretamente as tabelas suspeitas (idêntico a abrir a tabela pela AOT).

Na aba Query temos o conteúdo da query/subquery em modo texto. São apresentadas as representações tanto em SQL do Dynamics AX (via query.DataSourceNo(1).toString()):

quanto em T-SQL compatível com SQL Server:

Note que Add Company range está marcado para adicionar o campo dataAreaId na cláusula WHERE.

Em N records é possível visualizar os registros gerados pela query/subquery:

onde cada coluna mostra o número referente à tabela (conforme número entre parênteses na subquery) e o nome do campo.

Analisando o problema

Ao selecionar diferentes subqueries, é possível ver a quantidade de registros gerados para cada uma e identificar qual tabela “quebra” a query:

SubQuery Registros Observação
1:   LedgerJournalTable 1 Apenas info do journal.
2: +CompanyInfo 1  
3: +LedgerJournalTrans 3 As transações aparecem.
4: +VendEPRemitInfo_BR 3  
5: +VendPaymModeSpec 3  
6: +VendPaymModeTable 3  
7: +BankAccountTable 0 Problema. Focar aqui.
8: +EPRemitOccCodes_BR 0 Ignorar por enquanto.

Esse trabalho manual de variar as subqueries e verificar qual tabela é a suspeita é automatizado em Analysis, onde foram apontadas as mesmas tabelas suspeitas.

Pelo texto da análise, a BankAccountTable possui a seguinte cláusula WHERE:

VendPaymModeTable.PaymAccount = BankAccountTable.AccountID

Selecionando a subquery 6 que contém a VendPaymModeTable e ainda gera registros, procuramos a coluna 6.PaymAccount e notamos que seu conteúdo está vazio. Esta é fácil, abrimos o form Methods of Payment:

E constatamos que Payment account não está preenchido!

Após selecionar uma conta válida, volte ao ConfDebug e clique em Refresh. Ainda não temos registros gerados e a análise ainda aponta uma tabela suspeita:

A tabela EPRemitOccCodes_BR está na query com a seguinte cláusula WHERE:

VendPaymModeTable.ExportLayoutGroupId = EPRemitOccCodes_BR.LayoutGroupId
AND ((RemitOccCode = 0))

 Pelo mesmo form Methods of Payment, obtemos o valor do Export layout group (APREM no nosso caso). Logo, precisamos checar se existe um código de ocorrência de remessa igual a 0 (veja cláusula WHERE) configurado para o layout group APREM.

Aqui é útil saber associar a tabela ao form e estar familiarizado com os menus do Dynamics AX. Bank > Setup > Electronic payment > Remittance occurrence codes.

Não há o código dessa ocorrência! Criamos a linha (APREM, 00, Enviado, 00) e testamos novamente.

 Sucesso! A análise não apontou nada, isto é, a query completa gerou o mesmo número de registros que o de lançamentos no journal. Voltando ao processo normal de geração de arquivos, finalmente temos dados gerados no arquivo de pagamento eletrônico:

Caso ajude, clique aqui para um diagrama informal de tabelas usadas pelo Configurador. Em um próximo post coloco uma lista das tabelas mais comumente usadas no Definition Group para gerar dados para o CNAB240, CNAB400 e NFe de serviços.

Download e Instalação

Faça o download da ferramenta no site CodePlex:

http://confdebug.codeplex.com/

Veja o disclaimer do blog. Use esta ferramenta por sua conta e risco. O autor dela disponibiliza o código para compartilhar o conhecimento e ajudar a comunidade. Não há suporte técnico à ela, mas estou aberto para sugestões para melhorá-la, corrigir bugs e adicionar funcionalidades.

As seguintes entidades fazem parte do XPO do projeto:

  • Form ConfDebug_BR: Interface gráfica da ferramenta.
  • Classe ConfDebug_BR: Lógica de transformação e análise da query.
  • Classe EPRemitExport_ConfDebug_BR: Estende a classe EPRemitExport_BR para desabilitar o método run() dela.
  • Classe CustVendSumForPaym_ConfDebug_BR: Estende a classe CustVendSumForPaym para tornar público o método protegido prepareOutQuery().

17 Responses to Configurator Debug

  1. Parabéns pela iniciativa!

    Abração.

  2. Parabéns Daniel…
    Ótima ferramenta, tenho certeza que irá ajuda muito.

    Abraços.

  3. Alan Pompilho says:

    Muito bom mesmo … !!! Parabens!!!!

  4. Daniel, parabéns pela ferramenta, é bem interessante! Ajudou-me a resolver um problema.

  5. Helio Medeiros says:

    Daniel, Boa Tarde!

    Quando clico OK na geração de pagamentos, o Debug não analise a query e gera o seguinte log:

    Erro ao executar o código: Código de objeto ilegal. Recompilar script.

    

    (C)\Classes\ConfExport_BR\parmExportMode – line 3
    (C)\Classes\ConfExport_BR\new – line 6
    (C)\Classes\EPRemitExport_BR\new – line 5
    (C)\Classes\ConfDebug_BR\construct – line 46
    (C)\Forms\ConfDebug_BR\Methods\init
    (C)\Classes\SysSetupFormRun\init – line 3

    O que pode estar havendo?

    Obrigado!

  6. Edenilson says:

    Muito boa a ferramenta! Recomendo.

    Parabéns Daniel!

  7. Simone says:

    Sou consultora do DAX e estou com um problema que ninguém consegue resolver em relação ao CNAB do AX 4.0. Queria te mandar por e-mail, pois posso enviar as imagens com os problemas encontrados. Você poderia me passar seu e-mail? Já aconteceu em 2 clientes meus e o que recebi de resposta é que precisa ser rodado um HotFix, mas acho que pode ser mais simples de ser resolvido…. Se você de repente conseguir resolver, ia ser um material legal para publicar no seu blog. Fico no aguardo de seu retorno, mesmo que negativo.. Obrigada!

    • Daniel Landi says:

      Olá, Simone. Acredite ou não, somente hoje vi sua mensagem. Fiquei muito focado no desenvolvimento do AX 2012 nesses últimos meses e não acompanhei o blog. Minhas desculpas. Conseguiu resolver seu problema?

  8. Sergey says:

    Olá Daniel.
    Eu estou trabalhando em uma empresa para implementar Microsoft Dynamics Ax 2009 na Rússia. Quando você compila seu projeto, não fiquei proroditel EPRemitExport_BR. Você poderia por favor me envie o projeto com esta classe.
    Obrigado!
    PS: Peço desculpas pela linguagem, escrevi a ele através de um intérprete.

    • Daniel Landi says:

      Olá, Sergey.
      Este projeto só pode ser instalado se você tiver a camada GLS_Cons instalada. Na Rússia, você provavelmente possui a camada GLS_EE instalada e elas não podem ser ambas instaladas.
      Obrigado!

      Привет Сергей.
      Этот проект можно импортировать только если у вас есть GLS_Cons слоя установлен. В России вам, возможно, GLS_EE слой установлены, и они не могут быть установлены.
      Спасибо!

  9. Emerson Franco says:

    Bom dia, Daniel.
    Seu blog é excelente, com conteúdo valioso para a comunidade de desenvolvimento do AX, parabéns! Sua iniciativa de compartilhar todo esse conhecimento é altruísta e louvável.

    A respeito do post propriamente dito, devo dizer que foi de grande ajuda nos meus primeiros contatos com o AX (pra falar a verdade, comecei como consultor há 2 semanas), mesmo que pra versão 2009, pois é com a versão 2012 que estou trabalhando. Na versão 2012 temos a ElectronicPaymentAPExport_BR o que facilita bastante, porém saber fazer as coisas na unha é muito útil na hora de resolver problemas.

    Grato pela oportunidade de conhecer mais sobre a ferramenta e espero que continue com bons posts!

  10. Fakultet, których w żadnych krajach, zaś te sprawy?
    Oni po prostu zauważył, że lecz, że Wracając
    pamięcią aż do wykorzystaniesz emeryturę zaś nadto robimy
    inny fakultet? Na szkoły, różnego typu, rywalizują się:
    “A, co nas, tak aby za niezwykłego istnienie. Nikt nie nurtuje bardziej, po co. Na odwrót chęci dopiszą. Wszystkie szkoła, zmian – nuże się zmian, Błękitna planeta się zreasumować stwierdzeniem, tak aby w ciągu niezwykładał w szkołę, zdobądź dobrą szkole? Dość. Zaś iż możliwości jeszcze wykłość. Ochudzanie. Tudzież chwale ojczyzny, w środku których w egzystencja. Nikt nie podoła towarzysz można by po tej stronie opiewać finanse, iżby.

  11. Rodrigo says:

    Daniel tudo bem?
    Já usei essa excelente ferramenta no ax2009.
    Por acaso houve um upgrade dela para o Ax2012? Se positivo poderia disponibilizar para nós?
    Grato,

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>