Exemplo de rdmake para limpar os campos de telefones e deixar apenas números válidos (0123456789) #INCLUDE 'RWMAKE.CH' /* Programa: Limpa Autor:Microsiga Descricao: Limpa os caracteres invalidos do campo de Telefone */ Function Limpa() LOCAL nOpca := 0 LOCAL aSays := {} LOCAL aButtons := {} AADD(aSays,'Esta rotina irá realizar a atualização do número de Telefone das tabelas de Clientes, Contatos e Prospects') AADD(aButtons,{ 1,.T.,{|o| nOpca:= 1, o:oWnd:End() }} ) AADD(aButtons,{ 2,.T.,{|o| o:oWnd:End() }} ) FormBatch('De/Para de Telefone',aSays,aButtons,,150,350 ) If nOpcA == 1 Processa({||AtuSA1()},,'Atualizando Telefone do Cadastro de Clientes') Processa({||AtuSU5()},,'Atualizando Telefone do Cadastro de Contatos ') Processa({||AtuSUS()},,'Atualizando Telefone do Cadastro de Prospects ') Endif Aviso('Atencao !!', 'Processamento Efetuado com Sucesso !!', {' Ok '}) Return(.T.) /* Funcao: AtuSA1 Autor: Microsiga Descricao: Funcao De/Para de TELEFONE da tabela SA1 - Atualizacao de Telefone para retirar caracteres da base */ Static Function ATUSA1() DbSelectArea('SA1') ProcRegua(RecCount()) DbSeek(xFilial('SA1'),.T.) While !Eof() .AND. xFilial('SA1') == SA1->A1_FILIAL IncProc('Efetuando De/Para Telefone: '+A1_TEL) BEGIN TRANSACTION Reclock('SA1',.F.) If !Empty(A1_TEL) Replace SA1->A1_TEL With LimpaTel(SA1->A1_TEL) Endif If !Empty(A1_FAX) Replace SA1->A1_FAX With LimpaTel(SA1->A1_FAX) Endif MsUnlock() END TRANSACTION DbSkip() End Return(.T.) /* Funcao: AtuSU5 Autor: Microsiga Descricao: Funcao De/Para de TELEFONE da tabela SU5 - Atualizacao de Telefone para retirar caracteres da base */ Static Function ATUSU5() DbSelectArea('SU5') ProcRegua(RecCount()) DbSeek(xFilial('SU5'),.T.) While !Eof() .AND. xFilial('SU5') == SU5->U5_FILIAL IncProc('Efetuando De/Para Telefone: '+ SU5->U5_FONE) BEGIN TRANSACTION Reclock('SU5',.F.) If !Empty(U5_FONE) Replace SU5->U5_FONE With LimpaTel(SU5->U5_FONE) Endif If !Empty(U5_CELULAR) Replace SU5->U5_CELULAR With LimpaTel(SU5->U5_CELULAR) Endif If !Empty(U5_FAX) Replace SU5->U5_FAX With LimpaTel(U5_FAX) Endif If !Empty(U5_FCOM1) Replace SU5->U5_FCOM1 With LimpaTel(SU5->U5_FCOM1) Endif If !Empty(U5_FCOM2) Replace SU5->U5_FCOM2 With LimpaTel(SU5->U5_FCOM2) Endif MsUnlock() END TRANSACTION DbSkip() End Return(.T.) /* Funcao: AtuSUS Autor: Microsiga Descricao: Funcao De/Para de TELEFONE da tabela SUS - Atualizacao de Telefone para retirar caracteres da base */ Static Function ATUSUS() DbSelectArea('SUS') ProcRegua(RecCount()) DbSeek(xFilial('SUS'),.T.) While !Eof() .AND. xFilial('SUS') == SUS->US_FILIAL IncProc('Efetuando De/Para Telefone: '+ SUS->US_FONE) BEGIN TRANSACTION Reclock('SUS',.F.) If !Empty(US_FONE) Replace SUS->US_FONE With LimpaTel(SUS->US_FONE) Endif If !Empty(US_FAX) Replace SUS->US_FAX With LimpaTel(SUS->US_FAX) Endif MsUnlock() END TRANSACTION DbSkip() End Return(.T.) /* Funcao:LimpaTel Autor: Microsiga Descricao: Limpa os caracteres invalidos do campo de Telefone Parametros: ExpC1 : CAMPO DA TABELA REFERENTE A TELEFONE */ Static Function LimpaTel(cTel) Local nCont := 0 // Contador Local cTelNumero := '' // Codigo de telefone somente com NUMEROS - sem mascara For nCont := 1 TO LEN(cTel) If (Substr(cTel,nCont,1) $ '0123456789') cTelNumero += Substr(cTel,nCont,1) Endif Next nCont Return(cTelNumero)
Exemplo de Rdmake para busca de telefones do usuário definidos nos cadastros do Protheus #INCLUDE 'RWMAKE.CH' /* Ponto de Entrada: TMKANI Autor: Microsiga Descrição: Esse programa faz a busca do ANI (TipoA) nos campos especificos da base de dados Paramêtros: Tipo da Identificação (1 - Código, 2 - CNPJ, 3 - TipoA) ; ID - conteúdo do tipo de identificação Retorno Esperado: Array com 3 posicoes: 1 - Alias, 2 - Indice , 3 - Chave 1) Essa função é um PONTO DE ENTRADA na idenficação da chamada pelo Protheus. Não pode ter tela. 2) Esse exemplo faz uma busca no cadastro de contatos. Lembre-se é preciso ter a estrutura criada (campos e indíces) para usar esse P.E. */ User Function TMKANI(cTipo,cID) Local cPictTel := PesqPict('SU5','U5_FONE') // Picture do campo de telefone novo Local cPictDDD:= PesqPict('SU5','U5_DDD2') // Picture do campo de DDD novo Local lFind := .F. // Flag para apontar se achou o registro no banco Local aRetorno:= {} // Array de retorno - OBRIGATORIO Local cAlias := '' // Alias da tabela que está o ID Local nOrdem := 0 // Ordem da tabela que está o ID Local cChave := '' // Chave da tabela que está o ID If (cTipo == '3') //Identificacao por Telefone If Len(TRIM(cId)) >= 10 cDDD := Left(cId,2) // cAni := Substr(cId,3, Len(TRIM(cId))-2 ) //123456789012345 cAni := Transform(cAni,'@R 999999999999999') cDDD := Transform(cDDD,cPictDDD) Else cAni := cId cDDD := SPACE(3) Endif DbSelectArea('SU5') If !lFind DbSetOrder(8) //Telefone Especifico da base de dados do cadastro de contatos If DbSeek(xFilial('SU5') + cAni + cDDD) lFind := .T. cAlias := 'SU5' nOrdem := 8 cChave := SU5->U5_FCOM2 // Essa estrutura de retorno e obrigatoria Aadd(aRetorno,{cAlias,nOrdem,cChave}) Endif Endif Endif Return(aRetorno) |