-
Posts
500 -
Joined
-
Last visited
-
Days Won
11
Posts posted by Ariston Santos
-
-
Muito boa.
Obrigado.
-
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)
-
É 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!
-
Perfeito.
Inno Setup com ISStudio é show de bola.
Também testei NSIS com Nsisqssg. Ele é Igualmente bom.
Muito obrigado pela dica.
-
Sou Fivewin desde que o conheci em 97.
Mudar? Nem pensar.
"Could this be love at first sight?" - Autor desconhecido
-
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!
-
Para quem ainda esta em DBF e tem problema de lentidão, perca dois dias apenas em busca aqui no forum sobre ADS, eu nunca entendi o pq do pessoal não usar, lembro que em 2009 ia perder clientes potencias por problema de lentidão em rede com relatorios, alguns chegava a levar ate 15 minutos, com o ADS caiu para coisa de segundos, as mudança nos codigo fonte são retículas de tão simples. o desempenho é mesma coisa se tiver usando banco de dados relacional.
Luiz Fernando
Amigo, poste um prg simples, demonstrando como fazer um cadastro usando ADS.
Ah! E o link para a gente baixar o ADS.
Pode ser?
-
E o custo da licença?
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:
-
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.
-
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.
-
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)
-
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.
-
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!
-
Dê uma olhada neste site. Se achar interessante, tenho a rotina para envio de SMS deles. Posso disponibilizar.
-
Testei aqui mas retornou este erro:
A navegação para a página da Web foi cancelada
Você pode tentar:
Atualizar a página. -
Este executável, VIDEOAC.exe, onde encontrá-lo?
-
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!
-
Olá, miragerr
Poderia disponibilizar aqui (para todos), ou enviar para meu e-mail? (ariston.ap@hotmail.com)
Grato!
-
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.
-
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
-
-
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!
-
ADS é gratuito?
Onde posso baixar?
-
Amigo, Isso está certo?
Você define mImpressora como local atribuindo o valor de PrgGetName()
Local nLinI:=0, nColI:=0, nLinF:=0, nColF:=0,mImpressora:=PrnGetName()
.. mas em seguida atribui "etiqueta" a mIMPRESSORA.
mIMPRESSORA:="etiqueta"
Isso torna a primeira atribuição desnecessária e mIMPRESSORA terá sempre o valor "etiqueta". O problema é se a impressora não estiver com este nome em "Dispositivos e Impressoras", no Windows.
Creio que o único problema está sendo o nome da impressora.
Folder para FolderEx
in Programação
Posted
Tente um Refresh() no folderex ao clicar: