Jump to content
Fivewin Brasil

Ariston Santos

Membros
  • Posts

    500
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by Ariston Santos

  1. Conceito de CRC (Cyclical Redundancy Check) A sigla CRC (sigla da expressão inglesa Cyclical Redundancy Check e que em português é traduzida por Verificação de Redundância Cíclica) consiste num número criado por um cálculo matemático no computador fonte de um pacote de dados. Quando o pacote chega a seu destino, o cálculo é refeito. Se os resultados forem os mesmos, isso indica que os dados no pacote permaneceram estáveis. No caso do cálculo no destino diferir do cálculo na fonte, tal significa que os dados foram alterados durante a transmissão. Neste caso, a rotina CRC sinaliza o computador fonte para retransmitir os dados. Fonte: http://knoow.net/ciencinformtelec/informatica/crc-cyclical-redundancy-check/
  2. Tente um Refresh() no folderex ao clicar: REDEFINE CHECKBOX oBox VAR lVar ID nId OF oFld:aDialogs[n] ON CHANGE oFld:aDialogs[n]:Refresh()
  3. E-mail via ACBrMonitor, para quem interessar. Testei e funcionou com Hotmail e GMail. GMail precisa autorizar, conforme já orientado. cMailIni := 'EMAIL.Novo("[EMAIL]'+CRLF cMailIni += 'NomeExibicao='+ALLTRIM(_cUser)+CRLF cMailIni += 'Endereco='+Alltrim(_cRemt)+CRLF cMailIni += 'Email='+Alltrim(cServ)+CRLF cMailIni += 'Usuario='+Alltrim(_cRemt)+CRLF cMailIni += 'Senha='+Alltrim(cPass)+CRLF cMailIni += 'Porta='+AllTrim(Str(nPort))+CRLF cMailIni += 'ExigeSSL='+IIF(!lSSL,'0','1')+CRLF // 0=Não, 1=Sim cMailIni += 'ExigeTLS='+IIF(!lTLS,'0','1')+'")' // 0=Não, 1=Sim cArqIni := GetCurDir()+"\tempdir\remetente.ini" IF FILE(cArqIni) ; FERASE(cArqIni) ; ENDIF IF ! FileWrite(cArqIni,cMailIni) ; RETURN .F. ; ENDIF IF ! ACBrMail_Novo(cArqIni) ; RETURN .F. ; ENDIF IF ! ACBrMail_AdicPara(cDest) ; RETURN .F. ; ENDIF IF ! ACBrMail_Assunto(TiraAcentos(AllTrim(cSubject))) ; RETURN .F. ; ENDIF IF ! ACBrMail_UsarHTML() ; RETURN .F. ; ENDIF IF ! ACBrMail_Mensagem(TxtToHtml(cSubject, cTxt)) ; RETURN .F. ; ENDIF // Em HTML /* IF ! ACBrMail_MsgTexto(cTxt) ; RETURN .F. ; ENDIF // Em texto puro */ if len(aAttach) > 0 For x := 1 To Len( aAttach ) if aAttach[x] <> NIL IF ! ACBrMail_Anexo(AllTrim(aAttach[x])) ; RETURN .F. ; ENDIF endif Next EndIf IF ! ACBrMail_Enviar(cTxt) ; RETURN .F. ; ENDIF Return .T. Funcões *-----------------------------------------------------------------------------* * Programa: ACBrMail.prg * * Funcao..: FUNCAO AcbrMonitor/E-mail Em: 30/04/2018 * * Programador...: Ariston Santos * * Skype.........: ariston.ap * * suporte@arsoft-ap.com.br * * www.arsoft-ap.com.br * *-----------------------------------------------------------------------------* #include "fivewin.ch" #include "fileio.ch" //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_Novo(_File_) cCmd := _File_ IF ! MAIL_Comando("EMAIL.Novo", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_UsarHTML() cCmd := "1" IF ! MAIL_Comando("EMAIL.UsarHTML", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_Confirma(lCfrm) // Solicitar confirmação que leu a mensagem cCmd := IIF(lCfrm, "1", "0") IF ! MAIL_Comando("EMAIL.ConfirmarLeitura", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_AdicPara(_Para_) cCmd := AllTrim(_Para_) IF ! MAIL_Comando("EMAIL.AdicionaPara", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_Assunto(_Titulo_) cCmd := AllTrim(_Titulo_) IF ! MAIL_Comando("EMAIL.Assunto", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_Mensagem(_Texto_) // Em formato de HTML cCmd := AllTrim(_Texto_) IF ! MAIL_Comando("EMAIL.TextoMensagem", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_MsgTexto(_Texto_) // Não em formato de texto cCmd := AllTrim(_Texto_) IF ! MAIL_Comando("EMAIL.TextoAlternativo", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_Anexo(_File_) cCmd := AllTrim(_File_) IF ! MAIL_Comando("EMAIL.AdicionaAnexo", ["]+cCmd+["]) ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// FUNCTION ACBrMail_Enviar() IF ! MAIL_Comando("EMAIL.Enviar") ; RETURN .F. ; ENDIF RETURN(.T.) //////////////////////////////////////////////////////////////////////////////// function MAIL_Comando( cIndice, cDados ) LOCAL ret_line := "chr(13)+chr(10)", cRetCmd := "", c_Ende := "" LOCAL lReturn := .T. LOCAL cTcpIp := "1" // Checar se o ACBR está instalado... IF ! lIsDir(cACBrFld) SysRefresh() ; MsgInfo("O ACBrMonitor não está instalado", "Aviso") RETURN(.F.) ENDIF cTcpIp := GetPvProfString( "ACBrMonitor", "Modo_TCP", " ", cACBrFld+"\ACBrMonitor.ini") cIsTxt := GetPvProfString( "ACBrMonitor", "Modo_TXT", " ", cACBrFld+"\ACBrMonitor.ini") c_Gate := GetPvProfString( "ACBrMonitor", "TCP_Porta", "3434", cACBrFld+"\ACBrMonitor.ini") IF cTcpIp = "1" ; c_Ende := "127.0.0.1:"+c_Gate ; ENDIF IF cIsTxt = "1" ; c_Ende := cACBrFld ; ENDIF IF EMPTY(c_Ende) ; MSGINFO("Detectado erro de configuração no ACBrMonitor", "Aviso - "+ProcName()+"("+AllTrim(Str(ProcLine()))+") Informe ao Suporte Técnico"); RETURN .F. ; ENDIF errfile := "ENT.CMD" cDados := iif(ValType(cDados)#"C","",cDados) cBuffer := cIndice + iif( len( cDados )=0,"()","(" + cDados + ")") IF cIsTxt = "1" errhandle := FCREATE(errfile) FWRITE(errhandle,cBuffer+&ret_line.) FCLOSE(errhandle) FERASE( cACBrFld+"\ENT.TXT" ) FERASE( cACBrFld+"\SAI.TXT" ) COPY FILE &(errfile) TO &(cACBrFld+"\"+errfile) FRENAME( cACBrFld+"\"+errfile, cACBrFld+"\ENT.TXT" ) ELSEIF cTcpIp = "1" TRY IF ! ACBR_INIT(c_Ende) // De ACBRBOL.PRG ACBR_END() // De ACBRBOL.PRG SysRefresh() ; MsgAlert("Erro ao tentar abrir a porta de comunicação!","Aviso!") lReturn := .F. ENDIF CATCH END IF !lReturn ; RETURN(.F.) ; ENDIF SysRefresh() IF ! ACBR_ABERTA() ; RETURN .F. ; ENDIF // De ACBRBOL.PRG SysRefresh() cRetCmd := ACBR_COMANDO( cBuffer ) // No ACBRBOL.PRG ACBR_END() // De ACBRBOL.PRG IF "ERRO:" $ cRetCmd SysRefresh() ; MsgAlert(cRetCmd,"Erro!") RETURN(.F.) ENDIF ENDIF RETURN(.T.) FUNCTION TxtToHtml(cTit, cTxt) LOCAL c_Html := "" c_Html := AllTrim("<!DOCTYPE html>") c_Html += AllTrim("<html>") c_Html += AllTrim(" <head>") c_Html += AllTrim(" <title>"+TiraAcentos(AllTrim(cTit))+"</title>") c_Html += AllTrim(" </head>") c_Html += AllTrim(" <body>") c_Html += AllTrim(" "+StrTran(TiraAcentos(AllTrim(cTxt)),CRLF,"<br/>")) c_Html += AllTrim(" </body>") c_Html += AllTrim("</html>") RETURN c_Html FUNCTION TiraAcentos(cStr) LOCAL cStrNew := "", nX, aAcento, aLetras aAcento := {"ã","Ã","Æ","Â"," ","µ","…","·","‚","","ˆ","Ò","¡","Ö","¢","à","ä","å","“","â","£","é","","š","á","Á","à","À","é","É","ê","Ê","í","Í","ó","Ó","õ","Õ","ô","Ô","ú","Ú","ü","Ü","ù","ç","‡","Ç","€","§","¦","º","°","ª","ƒ"} aLetras := {"a","A","a","A","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","u","U","a","A","a","A","e","E","e","E","i","I","o","O","o","O","o","O","u","U","u","U"," ","c","c","C","C",".",".",".",".",".", ""} FOR nX := 1 TO LEN(aAcento) cStrNew := STRTRAN(cStr,aAcento[nX],aLetras[nX]) cStr := cStrNew NEXT IF EMPTY(cStrNew) ; cStrNew := cStr ; ENDIF RETURN(cStrNew)
  4. É verdade. Hoje a pergunta "em que linguagem você programa?" está quase sem sentido. Eu, por exemplo: - Para desktop uso Fivewin / xHarbour / Bcc / Workshop / ACBrMonitorPLUS / Inno Setup. - Para web uso Html / Html5 / Php / CSS / Javascript. - Para Mobile uso Basic 4 Andriod. - Como banco de dados uso DBFCDX / MySQL / SQLLite / Firebird (e em breve MariaDB). - Ainda tem os que não são linguagem programação, mas estruturas para transporte de dados na web, como XML e JSON. Creio que a maioria dos colegas aqui também conhecem e usam essas e ainda outras linguagens. Enfim, programador hoje tem que saber, não uma linguagem, mas PROGRAMAR!
  5. Perfeito. Inno Setup com ISStudio é show de bola. Também testei NSIS com Nsisqssg. Ele é Igualmente bom. Muito obrigado pela dica.
  6. Sou Fivewin desde que o conheci em 97. Mudar? Nem pensar. "Could this be love at first sight?" - Autor desconhecido
  7. Olá, amigos. Até hoje venho usando o Create Install Free para gerar o pacote de distribuição dos meus programas, mas quero mudar. Alguém recomenda um bom, de preferência, 0800 Grato!
  8. Amigo, poste um prg simples, demonstrando como fazer um cadastro usando ADS. Ah! E o link para a gente baixar o ADS. Pode ser?
  9. Não tive custo. Windows Server 2012 RT parece que já vem com licença para 25 usuários via TS, basta saber configurar. Para Windows XP e 7 (recomento do 7 profissional) tem Patch e vídeos no Youtube ensinando a fazer:
  10. Também sofri muito com isso. Hoje, quando o sistema começa a ficar lento em rede, mudo para TS (Terminal Service). Tem como fazer até com Windows XP e 7, mas com Windows Server 2012 fica bem melhor. Vantagens: 1 - O sistema fica só no servidor, portanto a velocidade de processamento será sempre a mesma para todos os usuários; 2 - Não tem problema de corrompimento de dados (índices) por falha da rede porque o fluxo fica só no servidor; 3 - Não há perda de desempenho, não importa quantos usuários estejam usando o sistema ao mesmo tempo. Detalhe: Esta dica eu encontrei aqui, neste fórum. Apliquei e tô feliz.
  11. Comecei em 1994. Naquela época as linguagens de programação já estava mais avençadas e eu tive o privilégio de começar com Clipper 5.
  12. Estou aqui. Não recebi seu e-mail. Mas pode expor a dúvida aqui. Ou, se preferir, manda e-mail para ariston.ap@hotmail.com ou ariston.ap@bol.com.br Ressaltando que o tipo de leitor biométrico que uso e recomendo é o Hamster, da Nitgen (http://www.nitgen.com/eng/product/finkey.html)
  13. STATIC FUNCTION BolRetorno() ACBR_Pegar_Retorno() RETURN NIL //////////////////////////////////////////////////////////////////////////////// Function ACBR_Pegar_Retorno() LOCAL cRetDir := GetPvProfString("BOLETO", "DirArquivoRetorno", "", cACBrFld+"\"+cACBrIni), nSlc := SELECT() LOCAL lLerRet := GetPvProfString("BOLETO", "LerCedenteRetorno", "0", cACBrFld+"\"+cACBrIni) LOCAL aFiles := "" LOCAL cLinha := "" LOCAL aRetorno := {} LOCAL oTxt, nRat LOCAL cF_ini := ALLTRIM(GetPvProfString( "ACESSOS", "ACBrIniFi", " ", ".\siscom.ini")) IF FILE(cF_ini) ; ACBr_Ler_Ini(cF_Ini) ; ENDIF // Forçar leitura do arquivo .ini IF ! lIsDir( cRetDir ) SysRefresh() ; MsgAlert("Diretório Arquivo Retorno (DirArquivoRetorno) não definido no "+cACBrFld+"\"+cACBrIni, "Atenção") RETURN(.f.) ENDIF IF lLerRet <> "1" SysRefresh() ; MsgAlert("Ler Dados Cedente Retorno (LerCedenteRetorno) não habilitado no "+cACBrFld+"\"+cACBrIni, "Atenção") RETURN(.f.) ENDIF USE BANCOS SHARED NEW ordListClear() OrdListAdd("BANCOS", "BANCOD", "BANNOM") IF ! SelectBanco() // Posiciona no registro do Banco, caso existam vários. CLOSE BANCOS SELECT(nSlc) RETURN(.f.) ENDIF ACBR_GravaCedente() CLOSE BANCOS SELECT( nSlc ) IF FILE(cRetDir+"\Retorno.ini") IF fErase(cRetDir+"\Retorno.ini") = -1 MsgStop("Favor excluir o arquivo "+cRetDir+"\Retorno.ini"+" manualmente.","Atenção") RETURN(.F.) ENDIF ENDIF aFiles := cGetFile("Retornos(*.ret)|*.RET|Retornos(*.rst)|*.RST" ,"Selecione o Arquivo!", , cRetDir) IF EMPTY(ALLTRIM(aFiles)) MsgStop("ERRO na Abertura do Arquivo!","Atenção") RETURN(.F.) ENDIF cMD5ret := HB_MD5File(aFiles) IF RetJaProc( cMD5ret ) nOpc := MyAlert("Arquivo já processado. O que gostaria de fazer?", {"Ver", "Porcessar", "Retornar"}, "Já processado") IF nOpc < 1 .OR. nOpc > 2 ; RETURN(.F.) ; ENDIF IF nOpc = 1 ; CntChkRet(aFiles) ; RETURN(.F.) ; ENDIF ENDIF cCmd := "" //LIMPAR LISTA IF ! ACBR_BOL_Comando("BOLETO.LimparLista", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF //CONFIGURAR CEDENTE cCmd := cACBrFld+"\cedente.ini" IF ! ACBR_BOL_Comando("BOLETO.ConfigurarDados", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF cCmd := "" IF ! ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF nRat := Rat( "\", aFiles ) cFld := Subs( aFiles, 1, nRat ) cCmd := cFld+[","]+cFileName(aFiles) IF ! ACBR_BOL_Comando( "BOLETO.LerRetorno", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF ACBR_END() SysWait(0.5) ; SysRefresh() // Dar tempo para o ACBr salvar o arquivo nTenta := 0 WHILE ! FILE(cRetDir+"\Retorno.ini") SysWait(0.5) ; SysRefresh() // Dar tempo para o ACBr salvar o arquivo IF FILE(cRetDir+"\Retorno.ini") ; EXIT ; ENDIF nTenta ++ ; IF nTenta > 10 ; EXIT ; ENDIF // Não esperar mais que 5 segundos. END SysWait(0.5) ; SysRefresh() // Dar tempo para o ACBr salvar o arquivo IF ! FILE(cRetDir+"\Retorno.ini") MsgStop("ERRO na leitura do Arquivo/Retorno!","Atenção") RETURN(.T.) ENDIF STORE "" TO ret_numerodoc, ret_nossonro, ret_id_ocorren, ret_nm_ocorren, ret_mot_rejeic STORE 0 TO ret_vltitulo, ret_vltaxa, ret_vlabatim, ret_vldesconto, ret_vljuros, ret_vlmulta, ret_vlpago STORE CTOD(" ") TO ret_dtvcto, ret_data, ret_dtocorrenc, ret_dtcredito oTxt := TTxtFile():New( cRetDir+"\Retorno.ini" ) oTxt:Gotop() FOR i = 1 TO oTxt:RecCount() // oTxt:nTLines cLinha := oTxt:cLine IF AT("Vencimento=", cLinha) <> 0 ret_dtvcto := CTOD(Subs(cLinha,12,10)) ELSEIF AT("DataDocumento=", cLinha) <> 0 // DataDocumento=FileDate(aFiles) ELSEIF AT("NumeroDocumento=", cLinha) <> 0 ret_numerodoc := ALLTRIM(Subs(cLinha,17,15)) ELSEIF AT("DataProcessamento=", cLinha) <> 0 ret_data := CTOD(Subs(cLinha,19,10)) ELSEIF AT("NossoNumero=", cLinha) <> 0 ret_nossonro := ALLTRIM(Subs(cLinha,13,17)) ELSEIF AT("ValorDocumento=", cLinha) <> 0 ret_vltitulo := ConverteCartValor(Subs(cLinha,16,15)) ELSEIF AT("DataOcorrencia=", cLinha) <> 0 ret_dtocorrenc := CTOD(Subs(cLinha,16,10)) ELSEIF AT("DataCredito=", cLinha) <> 0 ret_dtcredito := CTOD(Subs(cLinha,13,10)) ELSEIF AT("ValorDespesaCobranca=", cLinha) <> 0 ret_vltaxa := ConverteCartValor(Subs(cLinha,22,15)) ELSEIF AT("ValorAbatimento=", cLinha) <> 0 ret_vlabatim := ConverteCartValor(Subs(cLinha,17,15)) ELSEIF AT("ValorDesconto=", cLinha) <> 0 ret_vldesconto := ConverteCartValor(Subs(cLinha,15,15)) ELSEIF AT("ValorMoraJuros=", cLinha) <> 0 ret_vljuros := ConverteCartValor(Subs(cLinha,16,15)) ELSEIF AT("ValorIOF=", cLinha) <> 0 // ValorIOF=0 // 13 ELSEIF AT("ValorOutrasDespesas=", cLinha) <> 0 // ValorOutrasDespesas=0 // 14 ELSEIF AT("ValorOutrosCreditos=", cLinha) <> 0 ret_vlmulta := ConverteCartValor(Subs(cLinha,21,15)) ELSEIF AT("ValorRecebido=", cLinha) <> 0 // ValorRecebido=237,61 // 16 ret_vlpago := ConverteCartValor(Subs(cLinha,15,15)) ELSEIF AT("DescricaoTipoOcorrencia=", cLinha) <> 0 ret_id_ocorren := Subs(cLinha,25,2) ret_nm_ocorren := Subs(cLinha,28,80) /* Tabela de ocorrências Os códigos de movimento '06', '09' e '17' estão relacionados com a descrição C047-C. Domínio: '02' = Entrada Confirmada '03' = Entrada Rejeitada '04' = Transferência de Carteira/Entrada '05' = Transferência de Carteira/Baixa '06' = Liquidação '07' = Confirmação do Recebimento da Instrução de Desconto '08' = Confirmação do Recebimento do Cancelamento do Desconto '09' = Baixa '11' = Títulos em Carteira (Em Ser) '12' = Confirmação Recebimento Instrução de Abatimento '13' = Confirmação Recebimento Instrução de Cancelamento Abatimento '14' = Confirmação Recebimento Instrução Alteração de Vencimento '15' = Franco de Pagamento '17' = Liquidação Após Baixa ou Liquidação Título Não Registrado '19' = Confirmação Recebimento Instrução de Protesto '20' = Confirmação Recebimento Instrução de Sustação/Cancelamento de Protesto '23' = Remessa a Cartório (Aponte em Cartório) '24' = Retirada de Cartório e Manutenção em Carteira '25' = Protestado e Baixado (Baixa por Ter Sido Protestado) '26' = Instrução Rejeitada '27' = Confirmação do Pedido de Alteração de Outros Dados '28' = Débito de Tarifas/Custas */ ELSEIF AT("MotivoRejeicao", cLinha) <> 0 ret_mot_rejeic := ALLTRIM(Subs(cLinha,15,80)) AADD(aRetorno, {ret_dtvcto, ret_numerodoc, ret_data, ret_nossonro, ret_vltitulo, ret_dtocorrenc, ret_dtcredito,; ret_vltaxa, ret_vlabatim, ret_vldesconto, ret_vljuros, ret_vlmulta, ret_vlpago, ret_id_ocorren,; ret_nm_ocorren, ret_mot_rejeic}) STORE "" TO ret_numerodoc, ret_nossonro, ret_id_ocorren, ret_nm_ocorren, ret_mot_rejeic STORE 0 TO ret_vltitulo, ret_vltaxa, ret_vlabatim, ret_vldesconto, ret_vljuros, ret_vlmulta, ret_vlpago STORE CTOD(" ") TO ret_dtvcto, ret_data, ret_dtocorrenc, ret_dtcredito ENDIF oTxt:skip() NEXT oTxt:Close() IF LEN(aRetorno) > 0 // Excluir qualquer registro referente ao arquivo .ret REMRET->(DBSELECTAREA()) REMRET->(DBSETORDER(3)) IF REMRET->(DBSEEK( cMD5ret )) WHILE ! REMRET->(EOF()) IF REMRET->ITEM02 <> cMD5ret ; EXIT ; ENDIF TRY REMRET->(RLOCK()) REMRET->(DBDELETE()) REMRET->(DBUNLOCK()) CATCH oErr END REMRET->(DBSKIP()) END ENDIF REMRET->(dbGoBottom()) FOR nOc := 1 TO LEN(aRetorno) REMRET->(DBAPPEND()) REPLACE REMRET->IDUNIC WITH GeraIdUnico() // ID único (Salvo em vendas e itens de vendas) REPLACE REMRET->ITEM01 WITH aRetorno[nOc,02] // Número do documento REPLACE REMRET->ITEM02 WITH cMD5ret // MD5 do arquivo .ret processado REPLACE REMRET->ITEM03 WITH aRetorno[nOc,02] // Número do documento REPLACE REMRET->ITEM04 WITH aRetorno[nOc,14] // ID da ocorrência - Veja Tabela de ocorrências em ACBR_Pegar_Retorno() REPLACE REMRET->ITEM05 WITH aRetorno[nOc,15] // Descrição da ocorrência REPLACE REMRET->ITEM06 WITH aRetorno[nOc,01] // Vencimento REPLACE REMRET->ITEM07 WITH aRetorno[nOc,03] // Data do processamento REPLACE REMRET->ITEM08 WITH aRetorno[nOc,05] // Valor do documento REPLACE REMRET->ITEM09 WITH aRetorno[nOc,06] // Data da ocorrência REPLACE REMRET->ITEM10 WITH aRetorno[nOc,07] // Data do crédito REPLACE REMRET->ITEM11 WITH aRetorno[nOc,08] // Valor despesa cobrança REPLACE REMRET->ITEM12 WITH aRetorno[nOc,09] // Valor do abatimento REPLACE REMRET->ITEM13 WITH aRetorno[nOc,10] // Valor do desconto REPLACE REMRET->ITEM14 WITH aRetorno[nOc,11] // Valor Mora Juros REPLACE REMRET->ITEM15 WITH aRetorno[nOc,12] // Valor Multa REPLACE REMRET->ITEM16 WITH aRetorno[nOc,13] // Valor Recebido NEXT REMRET->(dbGoTop()) CntChkRet(aFiles) ELSE SysRefresh() ; MsgAlert("Arquivo de retorno sem ocorrências válidas","Aviso") ENDIF SELECT(nSlc) RETURN(.T.) Adapte à sua necessidade.
  14. Oi, amigo. Quem bom saber que este tópico, apesar de ser antigo, ainda está em alta (kkk). A ideia é interessante, mas como no meu caso nunca vai passar de 13 dígitos, vou preferir mantar como está, pois está funcionando bem. Grato!
  15. Dê uma olhada neste site. Se achar interessante, tenho a rotina para envio de SMS deles. Posso disponibilizar. http://www.byjg.com.br/
  16. Testei aqui mas retornou este erro: A navegação para a página da Web foi cancelada Você pode tentar: Atualizar a página.
  17. Sim. Em meu Estado (AP) todos os contribuintes que não tinham a Cadeia V5 instalada deixaram de emitir NF-e. Tive que instalar em todos. Detalhe: Uso ACBrMonitorPLUS!
  18. Olá, miragerr Poderia disponibilizar aqui (para todos), ou enviar para meu e-mail? (ariston.ap@hotmail.com) Grato!
  19. Não. Já tentei todas as opções: Upload da image, Usar image de uma URL. Finge que faz o upload mas não aparece nada. Já tentei png, bmp, gif. Ja tentei modificar a resolução, o tamanho da imagem. Nada funcionou até o momento.
  20. Teste esta função. Use do mesmo modo que usa a MsgRun(...) function MyMsgRun( cCaption, cTitle, bAction ) LOCAL oRunDlg, nWidth, uReturn, oRunBr, nLenCp DEFINE BRUSH oRunBr COLOR GetSysColor(5) DECLARE oGif DEFAULT cCaption := "Please, wait...",; bAction := { || WaitSeconds( 1 ) } IF ! EMPTY(cCaption) IF cTitle == NIL nLenCp := (Len( cCaption )*0.8)+13 ELSE nLenCp := (Max( Len( cCaption ), Len( cTitle ) )*0.8)+13 ENDIF ELSE nLenCp := 13 ENDIF IF cTitle == NIL DEFINE DIALOG oRunDlg ; FROM 0,0 TO 7.0, nLenCp ; STYLE nOr( DS_MODALFRAME, WS_POPUP ) ; TRANSPARENT BRUSH oRunBr ELSE DEFINE DIALOG oRunDlg ; FROM 0,0 TO 8.4, nLenCp ; TITLE cTitle ; STYLE DS_MODALFRAME ; TRANSPARENT BRUSH oRunBr ENDIF oGif := NIL oRunDlg:bStart := {|| (oGif := TGif():New( oRunDlg, ".\bitmaps\loading.gif", 2, 2 ),; SysRefresh(), uReturn := Eval( bAction, oRunDlg ), oRunDlg:End())} nWidth := oRunDlg:nRight - oRunDlg:nLeft oSay := NIL IF ! EMPTY(cCaption) @20, 55 SAY oSay PROMPT cCaption SIZE nWidth - 13, 16 PIXEL OF oRunDlg ENDIF ACTIVATE DIALOG oRunDlg CENTER ON PAINT IIF(oSay<>NIL,oSay:Refresh(),) // ; // VALID (!GetKeyState( VK_ESCAPE ) .AND. !GetKeyState( VK_MENU )) // Não usar isso. Dá erro ao fechar a tela de cadastro de produtos com Alt F4. return uReturn
  21. Deve ser isso mesmo. Vou me contentar com a imagem do "Sem foto". É mais linda!
  22. Olá, amigos. Já tentei de tudo mas não consegui. (1) Como faço para aparecer minha foto no perfil. E aproveitando, (2) tem como colocar uma assinatura automática no final da mensagem, e com imagem? Grato!
  23. ADS é gratuito? Onde posso baixar?
×
×
  • Create New...