Erro MVC - SetRelation

Boa tarde ,

Estou com o erro abaixo quando vou realizar o relacionamento das tabelas , mas não conseguir identificar qual o problema: - o que poderia ser ?

variable does not exist C7_NUM on BUILDWHERE(PROTHEUSFUNCTIONMVC.PRX)

segue o trecho do relacionamento:

oModel:SetRelation('SD1DETAIL',{{'D1_FILIAL', 'C7_FILIAL'},{'D1_PEDIDO', 'C7_NUM'},{'D1_ITEMPC', 'C7_ITEM'} }, SD1->(IndexKey(22)))

Tiago o erro é gerado logo na chamada do setRelation ou somente quando você realmente utiliza o modelo? Poderia por favor colocar o seu exemplo completo?

Tiago, dei uma olhada no fonte, não parece ter nada errado, qual o error completo, por favor.

Tiago, verifica os 2 pontos abaixo:

  1. Usa o xFilial("SC7") ao invés do C7_FILIAL;
  2. Verifica se o índice 22 está correto.

Então acredito que o correto seria assim:

oModel:SetRelation('SD1DETAIL',{{'D1_FILIAL', 'xFilial("SC7")'},{'D1_PEDIDO', 'C7_NUM'},{'D1_ITEMPC', 'C7_ITEM'} }, SD1->(IndexKey(21)))

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

O erro é gerado na chamada final do fonte, mas só é gerado se eu inserir o trecho do setrelation

Tiago,

Com o seu fonte, consegui reproduzir o problema em meu ambiente.

O erro ocorre pelo fato do campo C7_NUM não constar no modelo. Já o fato do campo C7_NUM não constar no modelo, se dá por conta do campo C7_NUM "não ser usado" (SX3), somente campos usados fazem parte do modelo de dados. Pelo que verifiquei no Configurador, está bloqueada a alteração de uso desse campo.


Acredito que existam algumas opções:

  • Entrar em contato com a TOTVS, equipe responsável pelo alias SC7 e entender porque esse campo não está com as flags de usado e porque não é possível alterar o mesmo.

    • Alterar o modelo e adicionar esse campo manualmente, fiz esse teste a rotina passou a funcionar perfeitamente, exemplo:

//Isso deve ser feito no ModelDef, após obter a estrutura da SC7 via função FWFormStruct
If SC7->(FieldPos("C7_NUM")) > 0 .And. !oStFilho:HasField("C7_NUM")
    oStFilho:AddField("", "", "C7_NUM", "C", Len(SC7->C7_NUM))
EndIf

Obs.: Acho importante compreender junto a TOTVS quais as regras desse campo e talvez, como paliativo, manter o código acima que adiciona manualmente o campo.


Documentações:

https://tdn.totvs.com/display/framework/FWFormStruct

https://tdn.totvs.com/display/framework/FWFormModelStruct