- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Validações de campo
×
Linguagem de Programação ADVPL
Perguntas Validações de campo
- gustavo
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 70
- Obrigados Recebidos: 0
9 anos 10 meses atrás #26886
por gustavo
Validações de campo foi criado 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
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
- gustavo
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 70
- Obrigados Recebidos: 0
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
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
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:
Depois é só verificar se tem algum retorno para essa serie/fornecedor
Se tiver significa que é válido.
abraço!
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Validações de campo
Tempo para a criação da página:0.107 segundos