Jump to content
Fivewin Brasil

evandro

Membros
  • Posts

    2,514
  • Joined

  • Last visited

  • Days Won

    19

Everything posted by evandro

  1. Olá, Sim, é o caminho mais rápido. Reconhece todos os comandos. Depois de estar no Sql ( MySql ) você deve ir migrando para SQL, sem comandos DBF, para ter maior desempenho.
  2. Olá, É que se a string com a query ficar muito grande dá problema. Para evitar eu sempre limito a 5.000 registros. Mas teve uma tabela com muitos campos que tive de reduzir.
  3. Olá, Gere apenas uma linha com os inserts. Pode ser que tenha de dividir em uns 3 ou 4. * 1 2 3 4 5 6 7 8 9 cSql:="INSERT INTO vendas(pedido,data,cliente,subtotal,desconto,total,encargo,terminal,condicao" * 10 11 12 13 14 15 cSql+=",vendedor,usuario,data1,hora1,operacao,empresa"+")" cSql+="VALUES " for i=1 to len(aVendas) cSql+="( "+any2sql(aVendas[i,1])+" ," // 01 cSql+=" "+any2sql(aVendas[i,2])+" ," // 02 cSql+=" "+any2sql(aVendas[i,3])+" ," // 03 cSql+=" "+any2sql(aVendas[i,4])+" ," // 04 cSql+=" "+any2sql(aVendas[i,5])+" ," // 05 cSql+=" "+any2sql(aVendas[i,6])+" ," // 06 cSql+=" "+any2sql(aVendas[i,7])+" ," // 07 cSql+=" "+any2sql(aVendas[i,8])+" ," // 08 cSql+=" "+any2sql(aVendas[i,9])+" ," // 09 cSql+=" "+any2sql(aVendas[i,10])+" ," // 10 cSql+=" "+any2sql(aVendas[i,11])+" ," // 11 cSql+=" SUBSTRING(now(),1,10) ," // 12 cSql+=" SUBSTRING(now(),12,5) ," // 13 cSql+=" "+any2sql(aVendas[i,12])+" ," // 14 cSql+=" "+any2sql(aVendas[i,13])+") " // 15 cSql+=iif( i=len( aVendas), "", "," ) next SqlExecute(cSql) if SQLErrorNO() > 0 fMensagem() return(.f.) endif
  4. Olá, Tanto o FW quanto o Harbour já têm este recurso. Estou migrando o sistema com a opção de um ou outro e, pelo menos nos testes, está tudo muito bom. Criei algumas funções para compatibilizar com a SqlLib. Algumas coisas ficam até melhores ( o retorno da SqlArray() da SqlLib é sempre string e os outros respeitam a origem ). Outras, como não poderia deixar de ser, dificultam, como o uso do USE TABELA e outros recursos como um DBF, pode esquecer. Não tem.
  5. Olá Creio faltar o caminho do executável cComando:="c:\pasta_java\javaws.exe d:\progs\esocial\EsocialSign.jar" MyRun( cComando ) return nil
  6. Olá, Não sou nenhum "jênio", nem conheço metade do que o João postou ( GetInstance()? ). De toda forma, segue uma alternativa: cComando:="javaws.exe d:\progs\esocial\EsocialSign.jar" MyRun( cComando ) return nil /////////////////////////////////////////////////////////////////////////////////////// function MyRun( cComando ) local oShell, oRet oShell := CreateObject( "WScript.Shell" ) oRet := oShell:Run( "%comspec% /c " + cComando, 0, .T. ) oShell := NIL return iif( oRet = 0, .t., .f. ) ///////////////////////////////////////////////////////////////////////////////////////
  7. Olá, Quando você seleciona várias linhas e faz alterações, inserções, etc. em todas elas de uma vez, ou quando insere uma TAG ( to do ) em uma linha e busca pela tag em todo o projeto, ou ainda quando o editor autocompleta, ainda mais na quantidade ilimitada e facilidade de uso de "templates" entre inúmeros outros recursos, verá que vale muito a pena este princípio pouco amistoso. Além do mais, quando se usa mais de uma linguagem ( sei que você não dá conta disso hehehehehe ) ele atende perfeitamente.
  8. Olá, Tem de instalar a linguagem. Pesquise no Google "harbour para sublime text" . Pesquise também "sublime text 3 packages"". Tem muita coisa legal. E busque também "dicas sublime text 3".
  9. Olá, É que passei o link para Windows 64. Segue o link para 32 bits
  10. Olá Sublime Text 3 Dicas para o Sublime Text Mais dicas Linguagem Harbour para o Sublime É um editor cheio de recursos e pacotes (packages) adicionais que o tornam mais poderoso ainda.
  11. Olá, Tem tanto editor muito melhor que este seu ( e nem sei qual é ), que fica até difícil listar. Hoje uso o Sublime. Excelente. Tem recursos que economizam um tempão em algumas tarefas. Atualize-se. Só para te lembrar, estamos em 2017. E no final. Saia da era do bit lascado.
  12. Olá, Agora não mostra mais nada, o que pode estar errado? O uso de um editor modo console. Simples assim.
  13. olá, Evandro meu rei, sem querer abusar, cadê a tela(.RC) de INPUTS desta rotina? Não tem tela para a rotina. Passo os parâmetros. Estas informações vão depender da rotina de origem.
  14. Olá, Segue: ////////////////////////////DADOS DA FUNCAO///////////////////////////////////////////////////// // NOME : EnviaSMS // // SINTESE : Enviar SMS // // PARAMETROS : <1> aDados para envio ([1]='*', [2]=ID do cliente, [3]=celular, [4]=nome ) // // [2] cTexto da mensagem // // RETORNO : Nada // //////////////////////////////////////////////////////////////////////////////////////////////// function EnviarSMS(aDadosEnvio, cMens ) local aOcorr:={}, aSql, aMens:={} local cCmdSql, cDdd:='', cMensagem, cId, cContaSms, cCodeSms, cRmteSms, cCelular, cTexto:='', cMensTotal:='', cMethod:='POST' local lOk:=.t. local x, nEnviados:=0, z, nSoma:=0 local oWs private cTitulo1:='', cTitulo2:='', cMensEnv:='' cMens:=alltrim( cMens ) cTitulo1:='OCORRÊNCIAS ENVIO SMS' //////////// informações cadastradas em um arquivo de configurações /////////////////////////////// cContaSms := //conta na operadora cCodeSms := //senha na operadora cRmteSms := //remetente nLimiteSms := //limite de caracteres cOperSms := //operadora //////////////////////////////////////////////////////////////////////////////////////////////////// oWS := WebConnect():New() for x=1 to len( aDadosEnvio ) if aDadosEnvio[x,1]='*' .and. !empty( SoNumeros( aDadosEnvio[x,3] ) ) lOk:=.t. cCelular:=iif( cCelular<>SoNumeros( aDadosEnvio[x,3] ), alltrim( str( val( SoNumeros( aDadosEnvio[x,3] ) ), 14 ) ), cCelular ) if lOk aMens:={} //Linhas acrescentadas para dividir as msgs caso ultrapasse o tamanho limite if (len(cMens)/nLimiteSMS)>1 //Adiciona as mensagens for z=1 to roundmax((len(rtrim(cMens))/nLimiteSMS)) aadd(aMens,substr(cMens,1+nSoma,nLimiteSMS)) nSoma:=nSoma+nLimiteSMS next //Zera o nSoma nSoma :=0 else //Adiciona somente uma msg aadd(aMens, cMens) endif //Envia todas as msg for z=1 to len(aMens) //Definindo id cId:=strzero(x,4)+strzero(z,2)+SoNumeros( dtoc( oVS:hoje ) )+SoNumeros( substr( time(), 1, 9 ) )+aDadosEnvio[x,2] //Envia msg if upper( cOperSms )='HUMAN' cMensEnv:='http://system.human.com.br:8080/GatewayIntegration/msgSms.do?dispatch=send&account='+cContaSms+'&code='+cCodeSms+'&from='+cRmteSms+'&to=55'+cCelular+'&id='+cId+'&msg='+aMens[z] elseif upper( cOperSms )='COMTELE' cMensEnv:='https://sms.comtele.com.br/api/'+cCodeSms+'/sendmessage?sender='+oVI:vpcCodCoop+'&receivers='+cCelular+'&content='+aMens[z] elseif upper( cOperSms )='MISTERPOSTMAN' cMensEnv:='http://www.misterpostman.com.br/gateway.aspx?UserID='+cContaSms+'&Token='+cCodeSms+'&NroDestino='+cCelular+'&Mensagem='+aMens[z] elseif upper( cOperSms )='M2MOBILE' cMethod:='GET' cId:=SoNumeros( dtoc( oVS:hoje ) )+SoNumeros( substr( time(), 1, 9 ) ) cMensEnv:='https://www.m2mobile.com.br/smsservice/api/Repository/SendSms?logon='+cContaSms+'&password='+cCodeSms+'&mobile='+cCelular+'&message='+aMens[z]+'&dateSend='+dtoc( date() )+'&timeSend='+substr( time(),1,8 )+'&smsId='+cId elseif upper( cOperSms )='ICOOP' cMethod:='GET' cMensEnv:='http://apiweb.icoop-sms.com/index.php?validapi='+cCodeSms+'&acao=enviarSMS&telefone='+cCelular+'&mensagem='+aMens[z] endif cMensTotal+=cMensEnv+CR_LF cTexto := oWS:Open( cMensEnv, cMethod ) sysrefresh() next if substr( Caracter( cTexto ),1,3 )$'000' .or. 'SUCESSO'$upper( cTexto ) .or. cTexto='{"ResponseCode": "100"}' .or. cTexto='"OK"' nEnviados++ else cTexto:=Caracter( cTexto ) aadd( aOcorr, { aDadosEnvio[x,2], aDadosEnvio[x,4], cCelular, substr(cTexto,1,3), substr(cTexto,7 ) } ) endif endif endif next memowrit( 'sms.txt', cMensTotal ) if len( aOcorr )>0 RelatFrh( 'Ocorrências', {}, 'sbr_sms_ocor', 'R', 'SBR_SMS', aOcorr, { 'Conta', 'Nome', 'Celular', 'Cod', 'Ocor' } ) endif if nEnviados>0 Msginfo( 'Enviadas '+alltrim( str( len(aMens), 3 ) )+' mensagens a cada cooperado.'+CR_LF+'Mensagem enviada a '+alltrim( str( nEnviados, 3 ) )+' cooperados'+CR_LF+'Total de mensagens enviadas '+alltrim( str( nEnviados*len(aMens), 3 ) ) ) oWS:end() end return nEnviados /////////////////// Class WebConnect ////////////////// Data oWeb Method New() Constructor Method Open() Method End() INLINE ::oWeb:=Self:=Nil EndClass Method New() Class WebConnect Try ::oWeb := CreateObject('MSXML2.XMLHTTP') Catch ::oWeb := CreateObject('Microsoft.XMLHTTP') End Return Self Method Open( cUrl, cMethod ) Class WebConnect Local cRet := "" DEFAULT cMethod:='POST' If ValType( cUrl ) == 'U' Return cRet EndIf Try ::oWeb:Open( cMethod, cUrl,.f.) ::oWeb:Send() cRet := ::oWeb:responseBody Catch; End Return cRet
  15. Olá, Evite o uso de macro SEMPRE. Tem outra forma de fazer isto. Pode ter certeza.
  16. Olá, Veja se funciona como informado aqui: CreateObject("ChromeTab.ChromeFrame")
  17. Olá, Como não tem como recorrer ao Russo, sugiro ver se tem como alterar a ação de algum botão do preview ou criar um novo, para executar uma rotina que gere o PDF diretamente.
  18. Olá, A query que mencionei só não funcionará se o campo estiver marcado com not null.
  19. Olá, A query sql funciona com certeza: UPDATE clie SET dat_clie=null WHERE sr_recno=43;
  20. Olá, A grande questão é: você vai migrar todo o sistema para comandos SQL, sem usar nada do DBF ( use arquivo, seek, etc.)? Em caso positivo, use as funções do FW ou do Harbour. Porém se o sistema é grande e não dá para migrar tudo, use a SqlLib que você migra para MySql em meio dia de serviço ( migrando as tabelas com o aplicativo que o Grande Kleyber desenvolveu ) e depois migre os pontos mais críticos até completar o processo. Aí fica mais fácil mudar para as funções nativas do FW ou Harbour.
  21. Olá, Com o OnAfterPrint não resolve?
  22. Olá, Utilize o comando REPLACE que faz exatamente o que você precisa.
  23. Olá, No xBrowse tem oBrw:ToExcel( , , oBrw:aCols )
  24. Olá, Apesar de Curvelo ser a melhor cidade do mundo, para o evento não tem como fugir de Rio/São Paulo. Como São Paulo concentra a grande maioria dos FiveWiners, só pode ser mesmo lá. São Paulo/Guarulhos.
×
×
  • Create New...