× Linguagem de Programação ADVPL

Perguntas Validações de campo

Mais
9 anos 10 meses atrás #26886 por gustavo
Olá mestres advpl!

Estou criando um fonte onde um fornecedor não pode ter mais de uma serie na pre nota. Sei que tenho que visualizar o campo de especie do documento pois ele que vai dizer se já existe uma série para aquele tipo de fornecedor.

tenho um esboço feito mas sem sucesso.

Alguém tem alguma ideia?

#Include 'Protheus.ch'

User Function travserie()

Local aEspDoc := {'ALG','BOL','CA','CF','CTA','CTE','CTF','CTM','CTR','FAT','NF','NFA';
,'NFCE','NFCEE','NFCF','NFCFG','NFD','NFDS','NFE','NFFA','NFP','NFPS';
,'NFS','NFSC','NFST','OCC','REC','REE','REEM','RPS','SPED'}

Local cSerie := SD1->D1_SERIE
Local cForn := SD1->D1_FORNECE

DbSelectArea('SD1')
SD1->(DbSetOrder(1))
SD1->(DbGoTop())

If SD1->(DbSeek(xFilial('SD1') + D1_FORNECE + D1_LOJA + D1_SERIE))


While Eof('SD1') .And. SD1->D1_SERIE <> cSerie .And. SD1->D1_FORNECE == cForn

/*If aScan(aDoc,aSerie + cForn) = 1

Aviso('Serie','Já existe uma série lançada para esse tipo de nota deste fornecedor. Favor verificar.')

SD1->(DbSkip())

EndDo

EndIf*/

Return

Obrigado

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26891 por kanaamlrr
Respondido por kanaamlrr no tópico Validações de campo
Tenta colocar a negação antes do EOF()

While !Eof('SD1') .And. SD1->D1_SERIE <> cSerie .And. SD1->D1_FORNECE == cForn

Pode ser que seja isso.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26912 por gustavo
Respondido por gustavo no tópico Validações de campo
Obrigado Kanaãm mas não funcionou :/

Alterei meu fonte mas não funcionou, quero verificar se já existe algum ou se o ultimo cadastro como foi feito, a série da nota, especie da nota o fornecedor e a loja tem que ser os mesmos do cadastro anterior do ultimo fornecedor. Pois estão querendo implantar aqui que o fornecedor só pode ter um tipo de série para a especie da nota exemplo danfe se o cara lançou uma danfe com a serie 001 ela tem que ser assimaté o fim e não pode mudar.

User Function MT140TOK()

Local cSerie := (M->F1_SERIE)
Local cForn := (M->F1_FORNECE)
Local cLoja := (M->F1_LOJA)
Local cEspecie := (M->F1_ESPECIE)

DbSelectArea('SF1')
SF1->(DbSetOrder(1))
SF1->(DbSeek(xFilial('SF1') + F1_SERIE + F1_FORNECE + F1_LOJA + F1_ESPECIE))

If ExistCpo('SF1',cSerie + cForn + cLoja + cEspecie)

While !EOF() .And. cSerie <> F1_SERIE .And. cForn == F1_FORNECE .And. cLoja == C1_LOJA .And. cEspecie == 1_ESPECIE

Aviso('Serie inválida para este foenecedor e essa espécie.')

SF1->(DbSkip())

EndDO

EndIf

Return

Obrigado

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #26915 por kanaamlrr
Respondido por kanaamlrr no tópico Validações de campo
Bom dia Gustavo.
Para esse caso, não existe um índice específico para essa chave de busca que você precisa utilizar.
Seria necessário criar um índice customizado na sua SIX com a chave F1_FORNECE+F1_LOJA+F1_ESPECIE+F1_SERIE e utilizar ele de preferencia com um nickname para poder fazer a busca.

Ou utilizar uma query para verificar a situação, o que eu acho que seria mais vantagem nesse caso.

Faça um select mais ou menos assim:
cQry := " SELECT F1_SERIE, F1_FORNECE, F1_LOJA, F1_ESPECIE FROM "+RetSqlName("SF1")+" SF1 "
cQry += " WHERE "+RetSqlCond("SF1")+" AND F1_SERIE = '"+cSerie+"' AND F1_FORNECE = '"+cForn+"' AND F1_LOJA = '"+cLoja+"' AND F1_SERIE = '"+cSerie+"'"


Depois é só verificar se tem algum retorno para essa serie/fornecedor
Se tiver significa que é válido.

abraço!

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.107 segundos
Joomla templates by a4joomla