Usar a classe PriceDisc no DAX não é sempre a coisa mais fácil do mundo. Se você começar com uma linha de ordem de venda ou uma linha de ordem de compra, você tem métodos que te ajudam a recuperar os preços via Trade Agreements, mas se tudo que você tem é o ItemID e o VendAccount / CustAccount as coisas podem se complicar um pouco.

Meu pensamento era que eu devia ser capaz de usar a PriceDisc assim como a classe InventOnHand, ou seja, você coloca informações básicas, e quanto mais informações você colocar mais preciso será o resultado que você obterá. Mas a dificuldade que tive foi que a classe PriceDisc requer um registro da tabela InventDim, algo que você apenas tem se você inicia de uma linha das ordens de venda ou ordens de compra.

A solução para este problema é o InventDimID “AllBlack” o que basicamente significa um registro vazio da tabela IventDim com o IventDimID “AllBlank”. E se o InventDimId não existe? Por isso você deve usar o método findOrCreateBlank() na tabela InventDim.

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
27
28
29
30
server static public InventDim findOrCreateBlank(boolean testConfigurationKey = true)
{
    #define.blank('AllBlank')
    InventDim   inventDim;
    InventDim   inventDimAllBlank;
    InventDimId inventDimIdBlank = #blank;
    ;
    if (testConfigurationKey && isConfigurationkeyEnabled(configurationkeynum(LogisticsAdvanced)))
      return inventDim;
 
    inventDim = InventDim::find(inventDimIdBlank);
    if (inventDim.RecId && InventDim::isInventDimEqual(inventDim, inventDimAllBlank))
      return inventDim;
 
    if (inventDim.RecId)
      inventDimIdBlank += '2';
 
    inventDim = InventDim::findDim(inventDimAllBlank);
    if (inventDim.RecId)
      return inventDim;
 
    ttsbegin;
 
    inventDim.InventDimId = inventDimIdBlank;
    inventDim.insert(true);
 
    ttscommit;
 
    return inventDim;
}

Este método retorna um buffer InventDim AllBlank se ele existir e cria um se ele não existir. Agora você tem todos os dados que você precisa para obter as informações do Trade Agreements.

Não se esqueça que a moeda e a UnitID também devem bater com seu Trade Agreements.

Uma vez eu já tinha precisado disso, e tinha resolvido usando o findorcreate, agora encontrei um artigo e resolvi traduzir para vocês.

Fonte.: http://www.fourone.se/blog/2008/02/20/the-magic-of-inventdim-%E2%80%9Callblank%E2%80%9D/

[]s
Pichler