Configurando o Gerenciador Documentos

Caros,
A idéia hoje é mostrar como configurar o gerenciador de documentos para podermos utilizarmos no proximo tutorial, a idéia consiste em configurar sequencia numérica, diretório de arquivos e algumas outras configurações para o AX saber como tratar quando formos anexar um documento a um registro.

Para começar vamos até: Básico -> Gerenciando Documentos -> Tipos de Documentos.

Neste formulário, vamos apenas configurar o item do tipo “Documento”, vamos para a aba geral e lá vamos configurar o diretório de arquivo morto, que é onde os arquivos gerados pelo AX serão salvos e caso queira configurar algo mais.

Depois, vá até Básico -> Gerenciando Documentos -> Parâmetros e configure na aba Sequencias Numéricas e configure a sequencia númerica que será usada pelo AX para dar nome aos documentos criados.

Ok, agora que já temos o AX configurado e pronto para gerar documentos, vamos para o proximo post, a parte prática!

Próximo post: http://www.daxbr.com.br/?p=1879

[]s
Pichler





Calcular comissões por recebimento (Revisão)

Caros,
Há alguns dias atrás eu postei como chegar ao cálculo de comissões por recebimento, mas agora analisando diferente, eu cheguei a outra query:

SELECT	CS.TRANSDATE										,
		SUM(CS.SETTLEAMOUNTCUR) AS SETTLEAMOUNTMST			,
		CT2.INVOICE											,
		C.NAME        AS CNAME								,
		CMT.AMOUNTMST AS AMOUNTMST							,
		DT.NAME												,
		CT2.AMOUNTCUR AS INVOICEAMOUNT						,
		CASE
			WHEN PC.NUMOFPAYMENT = '' THEN '1'
			WHEN ISNULL(PC.NUMOFPAYMENT, '1') = '1' THEN '1' -- Não sei porque tenho que fazer assim, sei que se comparo com Null ou qualquer outra coisa não funciona.
			ELSE PC.NUMOFPAYMENT
		END                  AS NUMOFPAYMENT				,
		CIT.NAME             AS ITEMNAME
FROM	   CUSTTRANS AS CT
INNER JOIN CUSTSETTLEMENT	CS		ON CS.TRANSCOMPANY	= CT.DATAAREAID		AND CS.TRANSRECID	= CT.RECID			AND CS.ACCOUNTNUM = CT.ACCOUNTNUM
INNER JOIN CUSTTABLE		C		ON C.ACCOUNTNUM		= CT.ACCOUNTNUM		AND C.DATAAREAID	= CT.DATAAREAID
INNER JOIN CUSTTRANS		CT2		ON CT2.RECID		= CT.OFFSETRECID	AND CT2.DATAAREAID	= CT.DATAAREAID
INNER JOIN COMMISSIONTRANS	CMT		ON CMT.INVOICEID	= CT2.INVOICE		AND CMT.DATAAREAID	= CT2.DATAAREAID
INNER JOIN EMPLTABLE		ET		ON ET.EMPLID		= CMT.EMPLID		AND ET.DATAAREAID	= CMT.DATAAREAID
INNER JOIN DIRPARTYTABLE	DT		ON DT.PARTYID		= ET.PARTYID		AND DT.DATAAREAID	= ET.DATAAREAID
INNER JOIN CUSTINVOICEJOUR	CIJ		ON CIJ.INVOICEID	= CT2.INVOICE		AND CIJ.DATAAREAID	= CT2.DATAAREAID
LEFT OUTER JOIN PAYMSCHED	PC		ON PC.NAME			= CIJ.PAYMENTSCHED	AND PC.DATAAREAID	= CIJ.DATAAREAID
INNER JOIN CUSTINVOICETRANS CIT		ON CIT.INVOICEID	= CIJ.INVOICEID		AND CIT.DATAAREAID	= CIJ.DATAAREAID	AND	CIT.INVENTTRANSID      <> '' AND CIT.NUMBERSEQUENCEGROUP = CIJ.NUMBERSEQUENCEGROUP
WHERE CT.TRANSTYPE = '15' AND CIJ.RETURNITEMNUM = '' AND CT2.TRANSTYPE = '2' AND CIJ.INVOICEAMOUNT > 0 AND CT.DATAAREAID = 'DAT'
GROUP BY CS.TRANSDATE, CT2.INVOICE, C.NAME, CMT.AMOUNTMST, DT.NAME, CT2.AMOUNTCUR, PC.NUMOFPAYMENT, CIT.NAME, CT2.TRANSTYPE

A mudança mais significativa é que agora parto da CustTrans onde o tipo de transação for igual a 15 (Payment) enquanto na outra versão, eu partia da CustSettlement (liquidação de clientes).

Post inicial: http://www.daxbr.com.br/?p=1834

Obs.: Novamente, isto serve para a minha situação atual, ou seja, use por sua conta e risco!

[]s
Pichler





Derrubar usuários inativos após X minutos

Caros,
Em algumas implementações, em especial nas que o cliente tem poucas licenças, há um recurso bastante útil que derruba a conexãos dos usuários inativos após X minutos. Para aqueles que não conhecem, o recurso pode ser encontrado em:

Ferramentas -> Opções -> Desligamento Automático = Número de minutos.

Caso queira configurar o de outro(s) usuário(s): Administração -> Usuários -> Escolhe o usuário -> Opções de usuário -> Desligamento Automático.

Caso queira fazer para todos os usuários cadastrados:

1
2
3
4
5
6
static void Job5(Args _args)
{
    UserInfo            userInfo;
    ;
    update_recordset userInfo setting autologoff = 5;
}

Caso queira que todos os novos usuários sejam cadastrados com um valor default quando forem adicionados ao AX, vá no formulário SysUserInfo, DataSource UserInfo, Método write e antes do super() coloque:

1
    userInfo.autoLogOff = 5;

[]s
Pichler





Usando o Error combinado com SysInfoAction_Formrun

Caros,
Uma funcionalidade bem legal do AX e que infelizmente é muito pouco usada é a de associar a um erro que foi gerado por falta de parâmetro, uma forma de o usuário ir para onde ele deve fazer a configuração do ‘tal parâmetro’! Vou tentar ser mais claro usando um exemplo: “Imagine que o usuário tem que configurar a Sequência Numérica antes de realizar o processo de exportação de um arquivo qualquer e ele ainda não configurou! Geralmente geramos apenas um erro do tipo ‘você deve configurar a Sequência ….’ e o usuário ou consultor tem que procurar o que configurar!” No entanto, você pode dar a oportunidade do usuário clicar duas vezes na própria mensagem de erro e abrir o formulário que ele precisa, simples assim! (Ou até mesmo clicar no botão “corrigir erro”)

Vamos ao exemplo:

1
2
3
4
5
6
7
static void Job1(Args _args)
{
    ;
    //Não criei um label porque é só para o exemplo, um label DEVE ser criado sempre!
    error('Você deve configurar os paramêtros do CNAB','http://www.daxbr.com.br', SysInfoAction_Formrun::newFormname(formstr(CNABParameters)));
    //CNABParameters é um formulário que fiz para algumas configurações extras para a integração com o CNAB que o Matiazo disponibilizou em seu site.
}

Isso produz:

Existem algumas variações que podem ser usadas neste caso:

1
2
3
4
5
static void Job2(Args _args)
{
    ;
    error("Você deve configurar os paramêtros do CNAB",'http://www.daxbr.com.br',SysInfoAction_Formrun::newFormnameControlnameDesc(formstr(CNABParameters), identifierstr(Archive_ArchivePath), "@SYS4157"));
}

Mudando o valor do SysInfoAction_Formrun para newFormnameControlnameDesc cria um botão e o resultado é este:

Agora basta usar a criatividade!

Abraço,
Pichler





Calcular comissões por recebimento

Pessoal,
Uma funcionalidade que já vi muita gente reclamando é que o AX calcula o pagamento da comissão, no entanto, não atrela aos recebimentos, ou nem tem um relatório que faz este controle.

Surgiu a necessidade de fazer isso aqui onde estou trabalhando, o esquema aqui é simples, tem sempre um único imposto para determinada situação, então eu já coloco o percentual da comissão menos os impostos na definição do grupo e fica tudo bem, mas ai pra vocês que tiverem casos mais complexos, é só ajustar.

Fiz em SQL porque fiz um relatório no report server, pro meu caso funcionou legal e espero que ajude vocês!

SELECT   CS.TRANSDATE                               ,
         SUM(CS.SETTLEAMOUNTCUR) AS SETTLEAMOUNTMST ,
         CT.INVOICE                                 ,
         C.NAME        AS CNAME                     ,
         CMT.AMOUNTMST AS AMOUNTMST                 ,
         DT.NAME                                    ,
         CT.AMOUNTCUR               AS INVOICEAMOUNT,
         ISNULL(PC.NUMOFPAYMENT, 1) AS NUMOFPAYMENT ,
         CIT.NAME                   AS ITEMNAME
FROM     CUSTSETTLEMENT CS
         INNER JOIN CUSTTRANS CT
         ON       CT.DATAAREAID = CS.DATAAREAID
         AND      CT.RECID      = CS.TRANSRECID
         AND      CT.ACCOUNTNUM = CS.ACCOUNTNUM
         INNER JOIN CUSTTABLE C
         ON       C.ACCOUNTNUM = CT.ACCOUNTNUM
         INNER JOIN COMMISSIONTRANS CMT
         ON       CMT.INVOICEID = CT.INVOICE
         INNER JOIN EMPLTABLE ET
         ON       ET.EMPLID = CMT.EMPLID
         INNER JOIN DIRPARTYTABLE DT
         ON       DT.PARTYID = ET.PARTYID
         INNER JOIN CUSTINVOICEJOUR CIJ
         ON       CIJ.INVOICEID = CT.INVOICE
         LEFT OUTER JOIN PAYMSCHED PC
         ON       PC.NAME = CIJ.PAYMENTSCHED
         INNER JOIN CUSTINVOICETRANS CIT
         ON       CIT.INVOICEID           = CIJ.INVOICEID
         AND      CIT.NUMBERSEQUENCEGROUP = CIJ.NUMBERSEQUENCEGROUP
WHERE    CIJ.INVOICEAMOUNT                > 0
AND      CS.DATAAREAID                    = 'DAT' -- trocar para a sua empresa! (Obrigado Peterson!)
GROUP BY CS.TRANSDATE    ,
         CT.INVOICE      ,
         C.NAME          ,
         CMT.AMOUNTMST   ,
         DT.NAME         ,
         CT.AMOUNTCUR    ,
         PC.NUMOFPAYMENT ,
         CIT.NAME

Vale observar, que eu pego todas as comissões que o valor são maiores do que 0, ou seja, não estou levando em consideração os cancelamentos, que devem sim ser tratados ou então você pagará comissões a vendas canceladas.

[]s
Pichler





Tags / Categorias

RSS



Arquivo

Dynamics Community