Luiz Fernando
-
Posts
3,368 -
Joined
-
Last visited
-
Days Won
40
Reputation Activity
-
Luiz Fernando reacted to emotta in Aposentadoria... Parar ou Não Parar ?
sensacional Luiz, passei por grande parte das situações que vc passou, as que não são iguais foram muito parecidas.
Eu conheci o Fivewin na Microsiga, por uma situação especifica eu tinha que simular uma situação que não funcionava em ADVPL mas para que o pessoal responsável pela linguagem fizesse a correção eu precisava simular a mesma situação em clipper/fivewin. Eles me forneceram os disquetes de instalação do clipper 5.3 e do fivewin e eu simulei o problema e eles então corrigiram a linguagem. Era coisa boba, mas foi necessário isso. Foi no ano 2000 que isso aconteceu.
Pesquisei mais sobre o assunto e cai na news do fivewin, basicamente vc usava o forum direto no outlook, lá conheci o Gilmer, Clemerson, Vagner e outros que agora não recordo os nomes. Essa foi a inspiração para que eu começasse a reescrever um software de ponto que eu fiz em clipper em 1998 para uma empresa, fiz como bico. Apenas pra passar o tempo comecei a reescrever a aplicação "for windows" que era como se falava na época e em 2002 quando pedi a conta da Microsiga e voltei para o interior foi esse novo software eu comecei a buscar clientes e montar um negócio. Aproveitei o tempo livre que ainda não tinha clientes e portei de clipper pra xHarbour.
Depois disso em 2006 comprei o xHarbour com SQLRDD e portei a aplicação para funcionar também em SQL, foi um grande avanço pra gente na época. Foi neste ano também que abandonei o Edit e comecei a editar os fontes no xDevStudio (obrigado Vailton). Segui assim até 2020 quando mudei para o VSCODE.
Bons tempos, boas lembranças mas o ponto que temos que observar é que de tempos em tempos precisamos rever as tecnologias que usavamos. Muitos começaram no DBASE e mudaram para clipper, depois passaram a usar fivewin, depois xHarbour, depois SQL, enfim, as coisas mudam e em alguns momentos as mudanças são maiores e exigem um pouco mais de esforço e sacrificio.
Muito grato a todos aqui e sigo frequentando e ajudando como posso, e sendo ajudado tb, mesmo já não compilando uma aplicação fivewin a 3 anos, porem muito agradecido pelo que já me proporcionou.
-
Luiz Fernando reacted to emotta in Aposentadoria... Parar ou Não Parar ?
Perfeito Luiz, é exatamente disso que estou falando. Passei por está mesmo situação a alguns anos atrás, foi dolorido voltar a ser um iniciante e estudar tudo novamente, mas a experiência torna a curva de aprendizado bem mais rápida.
Termos como git, vscode, docker e outras coisas relacionadas eram desconhecidas por mim, estudei, aprendi e tento aqui animar outros a fazer o mesmo e ter essa virada profissional que tanto foi benéfica pra mim.
Parabéns Luiz por seguir esse caminho e vamos em frente
Abraços
-
Luiz Fernando reacted to alex2002 in Comparar Estrutura tabela MYSQL
Bom dia Luiz.
Este código meu faz exatamente o que vc precisa. Eu rodo a verificação de tabelas todas as vezes que muda uma versão. Sendo assim, nunca mais precisei me preocupar com estrutura de banco de clientes. E quando mudo alguma coisa, basta eu colocar no array que define a estrutura da tabela. Só isso.
cTabela := cBanco+'.ase_log' // Tabela de logs de documentos assinados eletrônicamente
aCampos := {}
// Campo Tipo NULL? Default Comentário (isso vira um dicionário de dados depois)
aadd( aCampos, { 'CCO_CONTA', 'CHAR(9)', '', '', 'Código da Conta Corrente' } )
aadd( aCampos, { 'ASE_NDOC', 'CHAR(10)', '', '', 'Número do Contrato' } )
aadd( aCampos, { 'ASE_PARCEIRO', 'INT(1)', '', '0', 'Código do parceiro: 1-ClickSign' } )
aadd( aCampos, { 'ASE_ARQUIVO', 'VARCHAR(50)', '', '', 'Nome do arquivo' } )
aadd( aCampos, { 'ASE_TOKEN', 'MEDIUMBLOB', '', '', 'Token do arquivo devolvido pelo parceiro de assinatura eletrônica' } )
VerificaTabela( cTabela, aCampos )
////////////////////////////DADOS DA FUNCAO////////////////////////////////////////////
// NOME : VerificaTabela //
// SINTESE : Verificar a estrutura da tabela e atualiza //
// PARAMETROS : <1> cTabela = Nome da Tabela //
// <2> aCampos = Estrutura dos campos //
// [3] cChave Primária (Default SQL_ROWID) //
// [4] lAutoIncrement (Default .t. ) //
// RETORNO : lExecutou //
///////////////////////////////////////////////////////////////////////////////////////
function VerificaTabela( cTabela, aCampos, cChavePrimaria, lAutoIncrement )
local aSql
local cCmdSql
local cNomeA, cTipoA, cDefaultA, cComentA, cNullA
local cNomeB, cTipoB, cDefaultB, cComentB, cNullB
local nEncontrado
local i
local lRetorno := .t.
local lSetExact := set(_SET_EXACT, .t.)
default cChavePrimaria := 'SQL_ROWID'
defaulT lAutoIncrement := .t.
if !Table( cTabela )
CriaTabela( aCampos, cTabela, cChavePrimaria, lAutoIncrement )
// Verificando se criou
if !Table( cTabela )
lRetorno := .f.
endif
set(_SET_EXACT, lSetExact )
return lRetorno
endif
aEstrutura := SqlArray('show full columns from '+cTabela )
for i = 1 to len( aCampos )
cCampoA := rtrim( aCampos[i,1] )
cTIpoA := strtran( aCampos[i,2], ' ', '')
cNullA := aCampos[i,3]
cDefaultA := aCampos[i,4]
cCommentA := aCampos[i,5]
if len( aCampos ) >= 6 .and. aCampos[i,6]
cDefaultX := aCampos[i,4]
else
cDefaultX := '"'+aCampos[i,4]+'"'
endif
nEncontrado := ascan( aEstrutura, {| x | lower( cCampoA ) == lower( x[1] ) } )
if nEncontrado <> 0
cCampoB := rtrim( alltrim(aEstrutura[nEncontrado,1]) )
cTipoB := strtran( alltrim(aEstrutura[nEncontrado,2]), "'", '"' )
cNullB := alltrim(aEstrutura[nEncontrado,4])
if lower(cNullB) = 'yes'
cNullB := ''
endif
cDefaultB := alltrim(aEstrutura[nEncontrado,6])
cCommentB := alltrim(aEstrutura[nEncontrado,9])
// Verificando se houve mudança na estrutura
if lower(cCampoA) <> lower(cCampoB) .or. lower(cTipoA) <> lower(cTipoB) .or. lower(cNullA) <> lower(cNullB) .or. lower(cDefaultA) <> lower(cDefaultB) .or. lower(cCommentA) <> lower(cCommentB)
// Verificando se o campo é númerico e se realmente mudou
if lower(cCampoA) = lower(cCampoB) .and. lower(cTipoA) = lower(cTipoB) .and. lower(cNullA) = lower(cNullB) .and. lower(cCommentA) = lower(cCommentB) .and. ( len( sonumeros( cDefaultA ) ) <> 0 .or. len( sonumeros( cDefaultB ) ) <> 0 )
// Verificando o valor default
if strzero( val( cDefaultA ), 30, 10 ) = strzero( val( cDefaultB ), 30, 10 )
loop
endif
endif
if lower(cCampoA) = lower(cCampoB) .and. lower(cTipoA) = lower(cTipoB) .and. lower(cCommentA) = lower(cCommentB) .and. lower(cNullA) <> lower(cNullB)
// Verificando condição do NULL
if empty(cNullA) .and. lower(cNullB) = 'no'
loop
endif
endif
// Fim
// ? cTabela, 'campo', lower(cCampoA), lower(cCampoB), 'tipo', lower(cTipoA), lower(cTipoB), 'null', lower(cNullA), lower(cNullB), 'default', lower(cDefaultA) , lower(cDefaultB), 'comment', lower(cCommentA), lower(cCommentB)
if upper(cCampoA) = cChavePrimaria .and. lAutoIncrement
cCmdSql := 'ALTER TABLE '+cTabela+' DROP '+cCampoA
if !SqlExecute( cCmdSql )
lRetorno := .f.
endif
cCmdSql := 'ALTER TABLE '+cTabela+' '
cCmdSql += 'ADD '+cCampoA+' '+cTipoA+' '
cCmdSql += if(cNullA = 'NO','NOT NULL','')+' '
cCmdSql += if(!empty(cDefaultX) .and. cDefaultX <> '""','DEFAULT '+cDefaultX,'')+' '
cCmdSql += if(!empty(cCommentA),'COMMENT "'+cCommentA+'"','')+' '
if upper(cCampoA) = cChavePrimaria
cCmdSql += 'PRIMARY KEY '+if( lAutoIncrement, 'AUTO_INCREMENT','')+' '
endif
cCmdSql += if( i > 1, 'AFTER '+aCampos[i-1,1],'FIRST')
else
cCmdSql := 'ALTER TABLE '+cTabela+' '
cCmdSql += 'MODIFY COLUMN '+cCampoA+' '+cTipoA+' '
cCmdSql += if(cNullA = 'NO','NOT NULL','')+' '
cCmdSql += if(!empty(cDefaultX) .and. cDefaultX <> '""' ,'DEFAULT '+cDefaultX,'')+' '
cCmdSql += if(!empty(cCommentA),'COMMENT "'+cCommentA+'"','')+' '
if upper(cCampoA) = cChavePrimaria
cCmdSql += 'PRIMARY KEY '+if( lAutoIncrement, 'AUTO_INCREMENT','')
endif
endif
if !SqlExecute( cCmdSql )
lRetorno := .f.
endif
endif
else
cCmdSql := 'ALTER TABLE '+cTabela+' '
cCmdSql += 'ADD '+cCampoA+' '+cTipoA+' '
cCmdSql += if(cNullA = 'NO','NOT NULL','')+' '
cCmdSql += if(!empty(cDefaultX) .and. cDefaultX <> '""','DEFAULT '+cDefaultX,'')+' '
cCmdSql += if(!empty(cCommentA),'COMMENT "'+cCommentA+'"','')+' '
if upper(cCampoA) = cChavePrimaria
cCmdSql += 'PRIMARY KEY '+if( lAutoIncrement, 'AUTO_INCREMENT','')+' '
endif
cCmdSql += if( i > 1, 'AFTER '+aCampos[i-1,1],'FIRST')
if !SqlExecute( cCmdSql )
lRetorno := .f.
endif
endif
next
// Limpando campos que não existem na estrutura e que estão na tabela
for i = 1 to len( aEstrutura )
cCampoA := aEstrutura[i,1]
if upper(cCampoA) = 'SQL_ROWID' .or. upper(cCampoA) = 'SQL_DELETED'
loop
endif
nEncontrado := ascan( aCampos, {| x | lower( cCampoA ) == lower( x[1] ) } )
if nEncontrado = 0
cCmdSql := 'ALTER TABLE '+cTabela+' DROP '+cCampoA
if !SqlExecute( cCmdSql )
lRetorno := .f.
endif
endif
next
//
SysRefresh()
set(_SET_EXACT, lSetExact )
return lRetorno
-
Luiz Fernando reacted to vailtom in DICA: Exemplo de como fazer HTTP PUT usando cURL
Olá,
Recentemente integramos a API de loja virtual da Tray com nosso software e alguns aspectos foram bem nebulosos, por isto quero dividir com vocês uma dica super útil para casos como este, onde é necessário realizar um HTTP PUT usando lib cUrl.
Segue o exemplo de código que demonstra o trecho mais importante:
FUNCTION Tray_UpdateEstoque( sku_id, nEstoque, access_token ) LOCAL cEndPoint := 'https://666.commercesuite.com.br/web_api/products/'+alltrim(str(sku_id))+'?access_token='+access_token LOCAL cData := '{"Product": {"stock": '+ALLTRIM(STR(nEstoque))+'}}' LOCAL curl LOCAL nRet LOCAL Buff LOCAL Resp IF !empty( curl := curl_easy_init() ) curl_easy_setopt( curl, HB_CURLOPT_HTTPHEADER, {"Content-Type:application/json"} ) curl_easy_setopt( curl, HB_CURLOPT_CUSTOMREQUEST, 'PUT') curl_easy_setopt( curl, HB_CURLOPT_URL, cEndPoint ) curl_easy_setopt( curl, HB_CURLOPT_POSTFIELDS, cData ) curl_easy_setopt( curl, HB_CURLOPT_FOLLOWLOCATION, 1) curl_easy_setopt( curl, HB_CURLOPT_DL_BUFF_SETUP ) curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, 0 ) curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, 0 ) nRet := curl_easy_perform( curl ) Buff := curl_easy_dl_buff_get( curl ) curl_easy_cleanup( curl ) IF (nRet == HB_CURLE_OK) hb_jsonDecode( Buff, @Resp ) ENDIF ELSE RETURN .F. ENDIF IF !HB_ISHASH(Resp) ? Buff // Exibe na tela a mensagem de erro obtida RETURN .F. ENDIF * Retorno em caso de sucesso (status code 200 ou 201) nRet := Resp['code'] RETURN (nRet == 200 .OR. nRet == 201) Em nosso caso utilizamos o compilador Harbour, mas, isto deve servir como base para você caso use outros compiladores.
Espero ter ajudado.
-
Luiz Fernando reacted to Wellington Vieira in NFC-e para MG
Valeu!!
Em MG, o que se alterou em relação a NFC-e das demais UF's foram apenas algumas URL'S que foi a partir do dia 06/03/2023
A URL de consulta a NFCe via QRCode e a URL de consulta por chave (Portal) foram alteradas em homologação e produção.
A partir de 06/03/2023 só aceitaremos as url's abaixo:
PRODUÇÃO
Nova url de consulta via QRCode:
https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml
Nova url de consulta via Portal:
https://portalsped.fazenda.mg.gov.br/portalnfce
HOMOLOGAÇÃO
Nova url de consulta via Portal:
https://hportalsped.fazenda.mg.gov.br/portalnfce
Nova url de consulta via QRCode:
https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml
Importante lembrar que as novas urls deverão ser utilizadas tanto no processo de consulta quanto de autorização.
Caso sejam utilizadas as url's antigas o emitente poderá receber as rejeições: "878: Endereço do site da UF da Consulta por chave de acesso diverge do previsto" ou "395: Endereço do site da UF da Consulta via QR-Code diverge do previsto".
Abraço.
-
Luiz Fernando reacted to Wellington Vieira in NFC-e para MG
Boa tarde,
Você pode usar a DLL da UNIMAKE ( É free - gratuita )
Acesse.
https://wiki.unimake.com.br/index.php/Manuais:Unimake.DFe
https://github.com/Unimake/DFe
Neste na pasta EXEMPLOS - tem todos os exemples em xharbour.
No youtube, tem todas as LIVE ensinando como programar com a DLL no xharbour, consequentemente em fivewin + xharbour
https://www.youtube.com/results?search_query=dll+unimake+xharbour
É só procurar as LIVE, são muitas..
Para baixar a DLL
https://www.unimake.com.br/downloads
TEM TAMBÉM OS FONTES DO SR. JOSE QUINTAS ( CLASSE) em fivewin + xharbour
TOTALMENTE FUNCIONAL ( basta baixar zipado, todas os fontes estão lá, inclusive com exemplos)
https://github.com/JoseQuintas/sefazclass
Abraço.
-
-
Luiz Fernando reacted to giovanyvecchi in SENHA Acesso Sistema
Eu que tenho sistemas para cartórios a responsabilidade dos usuários é bem complicada.
Tenho 4 métodos para gerenciar senhas
1-O usuário loga com a senha no sistema e tudo fica registrado no seu login. Porem se ele deixar o programa aberto outro pode fazer qualquer coisa em nome dele.
2-Todos os procedimentos de lançamentos, inclusões, alterações etc pede a senha novamente. Isto serve para os computadores onde varios usuarios acessam.
3-Todos os procedimentos nescessitam que passe o cartão RFid registrado para cada usuário.
4-Logon e reconhecimento do serial de um pendrive pessoal do usuario. O programa funcionara somente se o PenDrive estiver conectado no micro. (Veja em \Samples protect.prg)
Na minha opnião o melhor método é o cartão RFid quando varias pessoas acessam o mesmo micro.
-
Luiz Fernando reacted to kapiaba in SENHA Acesso Sistema
Mira que simples:
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=42429&sid=4e043eeb6afc332310628e35560d3d7a
Se for a senha MASTER... Pimba!
Regards, saludos.
-
Luiz Fernando reacted to rochinha in qtd de semanas no mês
Amiguinhos,
Conheço um método bem complexo mas deve funcionar:
dData := CTOD("30/10/12")? "Esta data esta na semana: ", WEEK( dData ) O Padrão ISO 8601 define que uma semana começa no Domingo, portanto se o dia 1 do mês da consulta cair num sábado este mês possui 6 semanas. Em qualquer outro dia da semana define que o mês tem 5 semanas.
Então você podeusar a função BOM( StringDate ) Begining Of Month ou a função CDOW( CTOD( StringDate ) ) == "Saturday" poderá obter bom resultado.
-
Luiz Fernando reacted to kapiaba in qtd de semanas no mês
Dear friend, look this:
// http://forums.fivetechsupport.com/viewtopic.php?f=6&t=38029 DayOfWeek := STRTRAN( cdow( Date() ), "á", "a" DayOfWeek := STRTRAN( OemToAnsi( cdow(fe ) ), "á", "a" ) //** "Days in month..:", DaysInMonth( dDate ) //** "Day of year....:", DoY( dDate ) //** "Begin of month.:", BoM( dDate ) //** "End of month...:", EoM( dDate ) //** "Week of month..:", WoM( dDate ) //** "Week of year...:", WoY( dDate ) //** "Begin of year..:", BoY( dDate ) //** "End of year....:", EoY( dDate ) FUNCTION Fecha( dFecha ) LOCAL cLeyenda, aDias, aMeses DEFAULT dFecha := Date() aDias := { "Domingo, ", "Lunes, ", "Martes, ", "Miercoles, ", "Jueves, ", "Viernes, ", "Sabado, " } aMeses := { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" } cLeyenda := aDias[ DoW( dFecha ) ] + Str( Day( dFecha ), 2 ) + " de " + aMeses[ Month( dFecha ) ] + ; " de " + Str( Year( dFecha ), 4 ) RETURN cLeyenda FUNCTION FechaLet() LOCAL cMes := { 'Enero ', 'Febrero ', 'Marzo ', 'Abril ', ; 'Mayo ', 'Junio ', 'Julio ', 'Agosto ', ; 'Septiembre', 'Octubre ', 'Noviembre ', 'Diciembre ' } LOCAL cDia := { 'Domingo', 'Lunes', 'Martes', 'Miércoles', ; 'Jueves', 'Viernes', 'Sábado' } LOCAL FechaLet := cDia[ DoW(Date( ) ) ] + ', ' + ; Str( Day( Date( ) ) ) + ' de ' + ; AllTrim( cMes[ Month(Date( ) ) ] ) + ; IF( Year( Date() ) > 2000, ' del ', ' de ' ) + ; Str( Year( Date( ) ) ) RETURN FechaLet FUNCTION Dias( dDate ) RETURN cDow( dDate ) + ", " + str( day( dDate ) ) + " de " + cMonth( dDate ) + " del " + str( year( dDate ) )
Regards, saludos.
-
Luiz Fernando reacted to Ladinilson in qtd de semanas no mês
FUNCTION pSema(Dia,Tipo,Acento) **--------------------------------------** ** Retornar o dia da semana * ** Sintaxe : pSema(arg1,arg,arg3) ** Arg1 = Data/Variavel ** Arg2 = 1=dia simples, 0=dia completo (segunda.segunda-feira) ** Arg3 = 1 remover acentos ** Exemplo : @ 10,10 SAY pSema(date(),1,1) ** Retorno : Terca-Feira **--------------------------------------** a=DOW(dia) dia="" DO CASE CASE a = 1 dia="Domingo" CASE a = 2 dia=IF(Tipo==1,"Segunda","Segunda-Feira") CASE a = 3 dia=IF(Tipo==1,"Terça","Terça-Feira") CASE a = 4 dia=IF(Tipo==1,"Quarta","Quarta-Feira") CASE a = 5 dia=IF(Tipo==1,"Quinta","Quinta-Feira") CASE a = 6 dia=IF(Tipo==1,"Sexta","Sexta-Feira") CASE a = 7 dia="Sabado" ENDCASE IF(Acento==1) dia:=TiraAcento(dia) ENDIF RETURN(dia) Tente por aqui, faça um loop de 1 a 31 para ver as sextas do mês.
Abraços
-
Luiz Fernando reacted to emotta in CEP - Resolvido
Ariston, muito legal, mas ler XML quando tem a possibilidade de ler JSON é furada, deixa o código mais complexo... Veja como fica mais simples ler o Json
Static function ConsultaCep() Local cCep := "13380003" Local cLink := "https://viacep.com.br/ws/" + cCep + "/json" Local hCep := Hash() cJson_Cep := Emt_GetHtml(cLink) cJson_Cep := SemAcento(cJson_Cep) hb_jsondecode(cJson_Cep,@hCep) Try ? hCep['bairro'] ? hCep['logradouro'] ? hCep['localidade'] ? hCep['uf'] Catch ? 'erro ao buscar cep' End Return Static Function Emt_GetHtml(cLink) Local oOle Local cHtml := "" Try oOle := CreateObject( "Microsoft.XMLHTTP" ) oOle:Open( "GET", cLink, .f. ) oOle:Send() cHtml := oOle:ResponseBody oOle := nil Catch End Return cHtml -
Luiz Fernando reacted to kapiaba in Fonte e Cor no Cabeçalho do xBrowse
http://forums.fivetechsupport.com/viewtopic.php?f=3&t=39772&p=237203&hilit=color+en+header+xbrowse&sid=eadcb552505be4b58e93fb6bd4047e75#p237203
http://forums.fivetechsupport.com/viewtopic.php?f=3&t=32593&p=197620&hilit=color+en+header+xbrowse&sid=eadcb552505be4b58e93fb6bd4047e75#p197620
Regards, saludos.
-
Luiz Fernando reacted to alex2002 in Uso do Aplicativo pelo navegador
Olá pessoal,
Sempre tem gente perguntando como colocar o aplicativo pra rodar no navegador. Pois bem, estávamos estudando uma solução mais barata para os nossos clientes ao utilizar o Terminal Server (não tem nada a ver com aplicativo por navegador), e nos deparamos com a ferramenta TSPLUS. Além de ter os clients infinitamente mais barato que o Terminal Server da Micro$oft, ele tem também a opção de acessar e rodar o ERP pelo navegador. Montamos dois servidores através do Hyper V e disponibilizamos para rodar em dois clientes diferentes. Estamos simplesmente fascinados com o resultado, até os clientes estão preferido utilizar ao invés de usar o TS da Micro$oft.
Fica a dica aí, ferramente extremamente eficiente e creio que vai resolver o problema de muita gente. A configuração é extremamente simples e você coloca a saída da forma que quiser, se quiser colocar a área de trabalho é possível, se quiser colocar apenas um app é possível, enfim são muitas possibilidades e muito simples de configurar. Além de ter as ferramentas de defesas que tbm são muito bacana.
Fica a dica.
Um abraço,
Alexandre Pereira
-
-
Luiz Fernando reacted to emotta in Copiar tabela de um servidor pra outro servidor
Eu resolveria da seguinte maneira:
- crie um bucket no aws S3
- na matriz tenha uma opção para enviar o cadastro para web. Essa opção gera um arquivo texto no formato json com todos os campos do seu cadastro de produtos.
- nas filiais basta vc ler o arquivo que estará disponível na web no bucket S3
Aqui nesse vídeo tem tudo que vc precisa pra aprender a subir arquivo no seu bucket S3.
Obs: se este seu cliente, que é uma rede de lanchonetes, precisar de uma solução de ponto eletrônico me procure.
Abraços e boa sorte
-
Luiz Fernando got a reaction from aferra in API consulta CNPJ FREE
Para quem interessar, é gratuito com uma limitação de até 3 consultas por minuto
https://www.cnpj.ws/docs/api-publica/consultando-cnpj
Obs: esse diferente dos demais free como a consulta direto da receita federal, é que aqui tem a inscrição estudual
-
Luiz Fernando reacted to rochinha in Mysql Localweb
Amiguinhos,
Luiz Fernando, a SQLLib não gerencia o database, ela apenas é a ponte CRUD para manutenção dos dados. O que causa o problema é a critica embutida no motor remoto que dependendo da sua comfiguração irá ou não permitir o aceite ou não de um dado em formato diferenciado ou nulo.
A configuração dos campos no momento da criação da tabela também tem influencia nestas criticas. O motor verifica a estrutura e analisa tais configurações e decide a partir delas se a manutenção acontecerá no registro ou não.
-
Luiz Fernando reacted to informax in Kapiaba
Grande Amigo que sempre ajudou a todos, quando possível, e me ajudou DEMAIS e estou postando esse pequeno texto em Orgulho e Retribuição por um Excelente Profissional, Muito Humano e Consciente. VALEW e Vai Corinthians. DEUS TE ABENÇOE Assim como a Todos NÓS !!!
-
Luiz Fernando got a reaction from JUDSON ROSA in mudar cor de fundo e letra no say de folder?
Ola de uma olhada no codigo abaixo...
ACTIVATE DIALOG oDlg centered ;
ON PAINT( GradientFill( hDC, 0, 0, oDlg:nHeight, oDlg:nWidth, ;
{ { 0.0, nRGB( 255, 233, 162 ), nRGB( 255, 215, 84 ) }, ;
{ 0.0, nRGB( 255, 233, 162 ), nRGB( 255, 215, 84 ) } }, .T. ), ;
SetFoldGrad( oFld ) )
static function setfoldGrad( oFolder )
local n, oDlg
for n = 1 to len(oFolder:aDialogs)
oDlg = oFolder:aDialogs[n]
oDlg:bPainted = { | hDC | GradientFill( hDC, 0, 0, oDlg:nHeight, ;
oDlg:nWidth, { { 0.0, LIGHTCYAN, DARKCYAN } } , .T. ) }
next
return nil
id=code>id=code>Abraços
Luiz Fernando
msn: empresoft@globo.com
skype:empresoft
empresoft@globo.com
FWH 9.12,XHARBOUR 1.2,ADS 9.0
FWH1104,XHARBOUR 1.2 Rev.6406, MYSQL c\ SQLLIB FREE
-
Luiz Fernando reacted to emotta in Conversao p/ Dolar
Function u_Teste() Local cLink := "https://economia.awesomeapi.com.br/json/daily/USD-BRL/?start_date=20180901&end_date=20180930" cResult := Emt_GetHtml(cLink) MsgStop(cResult) Return Static Function Emt_GetHtml(cLink) Local oOle Local cHtml := "" Try oOle := CreateObject( "Microsoft.XMLHTTP" ) oOle:Open( "GET", cLink, .f. ) oOle:Send() cHtml := oOle:ResponseBody oOle := nil Catch End Return cHtml -
Luiz Fernando reacted to kapiaba in Fastreport co MySQL
Boa tarde, nunca vi nada sobre isto, veja aqui, se tem alguma coisa a respeito:
https://github.com/FastReports/FastReport
Feliz ano novo. abs.
-
Luiz Fernando reacted to emotta in Desenvolvimento de sistemas Web
É importante entender o conceito da WEB onde não se guarda o estado da aplicação, ou seja, em cada request se faz a validação do usuário, prepara o ambiente e executa a operação.
Em aplicação desktop nós criamos uma tela de login e uma vez o usuário logado ele vai usando o sistema e vamos guardando o estado de tudo que ele vai fazendo, ou seja, ele se logou e e selecionou os dados da empresa 0001, fez um filtro no browse e acessou o cadastro do cliente e alterou o endereço... é como se tudo fosse sendo colocado em uma pilha de operações.
Em WEB o conceito é completamente diferente, não se guarda o estado da sessão, na verdade até é possivel mas ai o seu sistema vai consumir muito recurso do servidor e ficará muito caro. A idéia da web é que cada request seja independente de um request anterior, fazendo dessa forma o servidor vai aguentar muito mais usuários simultâneos.
Então aproveitar código até se consegue mas mesmo assim boa parte dele será alterado, isso se partir pra confiar no mod_harbour que ainda é muito recente e até hoje não vi nenhuma aplicação dele em produção, com certeza existe mas eu não vi. Eu resolvi não esperar e escolhi Ruby on Rails no backend e no front o React.js e tenho algumas rotinas escritas em xharbour processando em background algumas regras de negócio e relatorios gerando pdf.
Estou com mais de 3mil usuários utilizando o sistema e com máquinas não muito potentes segurando tudo no Azure e por enquanto esta tranquilo.
Infelizmente tive que deixar o fivewin mas confesso que é muito bom não ter mais cliente ligando para o suporte relatando problemas que não conseguem acessar pq falta alguma dll (que o estagiário ou o antivirus apagou) ou pq está dando algum conflito com aplicativo do banco instalado na maquina. O bom das aplicações WEB é que estes problemas não existem porem surgem outros que temos que aprender a lidar.
-
Luiz Fernando reacted to emotta in Sistema nas Nuvens
aqui tem como configurar subindo qualquer arquivo para o S3 pelo prompt do windows