Essa semana tive que dar uma revisada no comando changecompany, que faz a mudança da “empresa” atual para qualquer outra registrada no ax, precisava dar suporte a alguns desenvolvedores que trabalham comigo e resolvi escrever a respeito.

O comando básico é:

1
2
3
4
5
6
//Atualmente estamos na empresa DAT
changeCompany("DA2")
{
    //Agora estamos na empresa DA2
}
//Aqui voltamos para a empresa DAT

Em um cenário comum, imagine que temos as empresas DAT (default), DA2 (empresa 2) e DA3 (empresa 3), e queremos listar todos os clientes cadastrados nas 3 empresas, logo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
static void job1(Args _args)
{
  CustTable   ctDAT, ctDA2, ctDA3;
  ;
  //Estamos na empresa DAT
  while select ctDAT
  {
    print ctDAT.Name;
  }
 
  changeCompany("DA2")
  {
    while select ctDA2
    {
      print ctDA2.Name;
    }
  }
 
  changeCompany("DA3")
  {
    while select ctDA3
    {
      print ctDA3.Name;
    }
  }
}

Dessa forma temos primeiro os nomes dos clientes da DAT impressos, seguido pelos nomes da DA2 e por fim os nomes da DA3.

Você também pode fazer inserts usando os dados de outras empresas e etc, basta usar esse mesmo modelo e pronto, sem problemas.

Caso queira pegas os dados de todas as empresas, você pode fazer um select na tabela do sistema DataArea, pegar os ids e rodar o changecompany como exibido acima. Já o AX 2009 implementa o crossCompany, que é muito mais fácil.

[]s
Pichler