Ponto de Entrada SX5NOTA

Boa tarde, Como irá funcionar o ponto de entrada SX5NOTA.PRW quando tivermos que analisar o campo SX5->X5_CHAVE para filtrar quais séries de notas devem aparecer para o usuário selecionar? Ex: Local cChave := AllTrim(SX5->X5_CHAVE)

PE em Anexo.

Acredito que seja a através da FWgetSX5 - http://tdn.totvs.com/display/PROT/FWGetSX5

Segue exemplo que uso: User Function SX5NOTA()

Local lRet:=.F.,

lRet :=IIf(CFILANT=="02".AND.AllTrim(SX5->X5_CHAVE)$ "1/BRG".AND.UPPER(ALLTRIM(CUSERNAME))$"CLAUDIA/CECILIA",.T.,; IIf(CFILANT=="02".AND.AllTrim(SX5->X5_CHAVE)$ "1/2/BRG",.T.,; IIf(CFILANT=="03".AND.AllTrim(SX5->X5_CHAVE)$ "001/TST",.T.,; IIf(!(CFILANT$"02,03"),.T.,.F.)))) Return(lRet)

O problema dele é exatamente este: Ele não pode ponteirar a SX5 pois isto viola uma regra do Totvs Code Analysis (acesso direto a dicionário)

Repito o dito pelo Jandir.: "O problema é exatamente este: Não pode mais ponteirar a SX5 pois isto viola uma regra do Totvs Code Analysis (acesso direto a dicionário)"

Foi criada uma documentação sobre o assunto, aqui explica certinho (com exemplo), só alterar para SX5:

MP - ADVPL - OPENSXS() PARA LEITURA DE DICIONÁRIO DE DADOS

Bom Dia!
Mas isso irá criar uma tabela temporária com todos os dados da SX5. No caso precisamos pegar o valor da SX5 que está posicionada no momento.

Estou com o mesmo problema, usei o novo exemplo do P.E. disponível em link mas dá error log na linha que atribui o primeiro PARAMIXB

Boa tarde!

Estou usando da seguinte forma.


User Function SX5NOTA()

    Local _cFilial  := Paramixb[1]  //Filial
    Local _cTabela  := Paramixb[2]  //Tabela da SX5
    Local _cChave   := Alltrim(Paramixb[3])  //Chave da Tabela na SX5
    Local _cDescri  := Paramixb[4]  //Conteúdo da Chave indicada
    Local _lRet     := .F.

    Do Case
        Case cFilAnt == "00" .And. (_cChave $ "12|22|32|82|912")
        _lRet := .T.
        Case cFilAnt == "01" .And. (_cChave $ "11|21|51|81|911")
        _lRet := .T.
        Case cFilAnt == "02" .And. (_cChave $ "13|23|33|83|913")
        _lRet := .T.
        Case cFilAnt == "03" .And. (_cChave $ "14|24|34|84|914")
        _lRet := .T.
        Case cFilAnt == "04" .And. (_cChave $ "15|35|85|915")
        _lRet := .T.
        Case cFilAnt == "05" .And. (_cChave $ "16|26|36|86|916")
        _lRet := .T.
    EndCase

Return _lRet

No fonte que tenho o Paramixb está vazio. Alguém utiliza outra forma?

Bom dia, desculpem minha ignorância: este ponto de entrada é para FILTRAR as séries de nota que aparecem para o usuário selecionar ao preparar documento de saída (mostrando somente as que ele pode selecionar) ou ele serve para IMPEDIR o usuário de seguir em frente e faturar com a série incorreta?

Pergunto isso pois faz tempo que tenho este problema, mas eu precisaria FILTRAR, para não ter que o usuário refazer tudo denovo e correr o risco de clicar errado novamente

Olá, se Retornar .T. - a série apresentada se Retornar .F. a série não é apresentada, ou seja, se você tem 2 séries, 001 e NFS. Dai você identifica que a nota é de serviço (através de algum campo seja SC6, ou SC5 mesmo) então você faz o teste: Se a chavesx5 == “001” Return .F. se for “NFS” Return .T. dai vai apresentar somente a série NFS.

Boa tarde Luiz,

Esse ponto de entrada permite filtrar as séries, conforme retorno lógico, sendo que ele é chamado dentro de um loop, veja as documentações abaixo:

https://tdn.totvs.com/pages/releaseview.action?pageId=471926355

https://tdn.totvs.com/pages/releaseview.action?pageId=6784448