Jump to content
Fivewin Brasil

emotta

Membros
  • Posts

    1,609
  • Joined

  • Last visited

  • Days Won

    88

Posts posted by emotta

  1. Em 16/11/2022 at 14:02, edutraini disse:

    boa tarde Ale 

    engraçado mas se colocar 01/01/1000 da erro usando sqlrdd

     

    Edu, no meu sistema eu considero em campos datas ano menor do que 1900 ou maior do que 2100 inválidos. Realmente no SQL SERVER se mandar gravar anos muitos antigos ou muito no futuro dá erro.

  2. Isso é um hash e dps transformado em JSON

    esse codigo abaixo:

    aResultado := hb_JSonEncode( { "codigo"=>cCodigo, "nome"=>cNome, "sexo"=>cSexo }, .T. )

    é o mesmo que fazer isso:

    hDados := Hash()
     
    hDados[ "codigo"] := cCodigo
    hDados[ "nome"] := cNome
    hDados[ "sexo"] := cSexo
     
    aResultado := hb_JSonEncode( hDados,  .T. )

     

    em aResultado é uma string do tipo json

    {
        "codigo": "00001",
        "nome": "Marcio Augusto",
        "sexo": "M"
    }

     

  3. consegui fazer, se algum tb precisar de algo doido como isso segue o código...

     

    #DEFINE CRLF Chr(13) + Chr(10)
     
    Function TestProcess(nSecs)
    Local cFile := "services.txt"
    Local cCmd := 'tasklist /fi "imagename eq pontorpo.exe" /v /fo table > ' + cFile
    Local nPid
    Local cFile_Killed := "killeds.txt"
     
    If nSecs == nil
       nSecs := 30
    EndIf
     
    While Inkey(nSecs) # 27
       ? Time() + " Verificando... "
       __Run(cCmd)
     
       HB_FUSE(cFile)
       While !HB_FEOF()
          cLinha := HB_FREADLN()
          If Upper("Unrecoverable error 9006") in Upper(cLinha)
             nPid := Val(SubStr(cLinha, 27, 8))
             ? nPid
             KillPid(nPid)
             MemoWrit(cFile_Killed, Memoread(cFile_Killed) + Time() + " => " + cLinha + CRLF)
          EndIf
          HB_FSKIP()
       EndDo
       HB_FUSE()
    EndDo
     
    Return
     
    Static Function KillPid(nPid)
    Local cCmd := "taskkill /PID ? /F"
     
    cCmd := StrTran(cCmd, "?", AllTrim(Str(nPid,10)))
    ? cCmd
    __Run(cCmd)
     
    Return
  4. Pessoal estou precisando fechar outro aplicativo através de um programa.

    Eu tenho vários executáveis do sistema sendo executados em um servidor. Basicamente eles ficam checando uma tabela no SQL e quando caí algo nela, um desses serviços pega o registro pra processar. Este processo geralmente é um relatório do sistema.

    Ocorre que eventualmente o aplicativo que está processando o relatório da de memória, o famoso: 

    Unrecoverable error 9006: 
    ---------------------------
    hb_xgrab can't allocate memory
     

    Esse erro aparece dentro de uma telinha, tipo o msgstop do fivewin, e fica aguardando o OK para só então finalizar o executavel.

     

    É aí que entra minha necessidade: Eu preciso que um outro executavel que está rodando neste mesmo servidor, identifique que essa janela foi aberta e então obtenha o PID do executável. Tendo o PID eu já consigo fechar o executavel.

    Então meu problema não é o estouro de memória do HB_XGRAB e nem fechar o aplicativo através do PID, o que eu preciso é saber que aconteceu esse erro e aí tomar minhas providencias.

     

    Eu utilizo xHarbour no modo console, mas se a solução for em fivewin ou até em outra linguagem já vai ajudar muito.

     

    vlwwww

     

  5. 18 horas atrás, edutraini disse:

    Boa tarde, Pessoal 

    Meu cloud na localweb esta caindo toda hora, nao sei oque esta acontecendo nos serviços da localweb mas esta caindo todo dia

    ALguem tem alguma susgestao de outro cloud 

    Obrigado

     

    Existem três serviços que são o mesmo nivel, são: AWS / AZURE / GOOGLE CLOUD

    Qualquer outro está abaixo desses três.

    Tenho o sistema hospedado no Azure (VM e SQL como serviço) já a mais de 2 anos, milhares de usuários e nunca caiu.

    Então a minha dica é Azure, mas entendo que AWS e GOOGLE também seriam excelentes alternativas. Qualquer outra entendo que são inferiores a esses três. Isso é minha opinião.

     

     

  6. Consegui fazer o código abaixo rodar, porem na linha 73:

    oComunicacao:setOption( 3, "CURRENT_USER\MY\" + ::cCertificado )

    eu gostaria de saber o que colocar em cCertificado. É a chave publica ou privada do certificado digital a1? Eu coloco o caminho ou o conteudo da chave nele? alguem pode me ajudar?

    segue abaixo o codigo fonte completo: (ao executar eu estou recebendo a resposta do esocial porem obviamente recusando, mas pelo menos está batendo la)

     

    #include "hbclass.ch"
     
    #ifndef XML_UTF8
    #define XML_UTF8     '<?xml version="1.0" encoding="UTF-8"?>'
    #endif
     
    FUNCTION Main()
     
       LOCAL cChave := "1.2.201709.0000000000000226099"
       LOCAL oESocial := ESocialClass():New()
     
       oESocial:cCertificado := "xxxxxxxxxxxxxxxxxxxx"
     
       oESocial:ConsultaRetornoLote( cChave )
     
       ? oEsocial:cXmlRetorno
     
       RETURN( NIL )
     
    CREATE CLASS ESocialClass
     
       VAR cCertificado INIT ""
       VAR cUrl  INIT ""
       VAR cSoapAction INIT ""
       VAR cXmlDocumento INIT ""
       VAR cXmlEnvelope INIT ""
       VAR cXmlRetorno INIT ""
       METHOD ConsultaRetornoLote( cChave, cCertificado )
       METHOD MicrosoftXmlSoapPost()
     
    ENDCLASS
     
    METHOD ConsultaRetornoLote( cChave, cCertificado ) CLASS ESocialClass
     
       IF cCertificado != NIL
          ::cCertificado := cCertificado
       ENDIF
       ::cUrl  := "https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc"
       ::cSOAPAction := "http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos"
     
       ::cXmlDocumento := ;
          '<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/consulta/retornoProcessamento/v1_0_0">' + ;
          '<consultaLoteEventos>' + ;
          '<protocoloEnvio>' + cChave + '</protocoloEnvio>' + ;
          '</consultaLoteEventos>' + ;
          '</eSocial>'
     
       ::cXmlEnvelope := XML_UTF8 + ;
          '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ' + ;
          'xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0">' + ;
          '<soapenv:Header/>' + ;
          '<soapenv:Body>' + ;
          '<consultaLoteEventos>' + ;
          '<consulta>' + ;
          ::cXmlDocumento + ;
          '</consulta>' + ;
          '</consultaLoteEventos>' + ;
          '</soapenv:Body>' + ;
          '</soapenv:Envelope>'
     
       hb_MemoWrit( "consulta.xml", ::cXmlEnvelope )
     
       ::MicrosoftXmlSoapPost()
     
       RETURN ::cXmlRetorno
     
    METHOD MicrosoftXmlSoapPost() CLASS ESocialClass
     
       LOCAL oComunicacao
     
       oComunicacao = CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
     
       // oComunicacao:setOption( 3, "CURRENT_USER\MY\" + ::cCertificado )
       oComunicacao:open( "POST", ::cUrl, .F. )
       oComunicacao:SetRequestHeader( "SOAPAction", ::cSOAPAction )
       oComunicacao:SetRequestHeader( "Content-Type", "text/xml; charset=utf-8" )
     
       oComunicacao:send( ::cXmlEnvelope )
     
       DO WHILE oComunicacao:readyState <> 4
          Inkey( 0.5 )
       ENDDO
     
       ::cXmlRetorno := oComunicacao:responseText
     
       RETURN NIL

     

  7. Como eu já vi algumas pessoas postando duvidas de eSocial aqui imagino que tenham pessoas que possam me ajudar.

    Eu preciso fazer download, via aplicação, de eventos que estão no eSocial. Hoje é possivel fazer esse download pelo portal (https://www.gov.br/esocial/pt-br/noticias/esocial-download-para-facilitar-a-vida-do-empregador)

    Eu gostaria de fazer esse download via aplicação, tanto o pedido como o download do arquivo.

    Alguém aqui sabe como fazer? O exemplo pode ser em qualquer linguagem e eu já sei que com certeza vai precisar do certificado digital da empresa. 

    Fico agradecido se alguém puder me ajudar nisso

    abraços

     

  8. então é isso, mysql tem um comportamento diferente do sql server neste sentido.

    Se vc executar essa query com os mesmos dados em sql server vai dar erro.

    Em 07/07/2022 at 15:31, oliveiros disse:

    Oi emotta, boa tarde!

    Eu tenho um servidor linux na LocaWeb com mysql 8.0.

    Att.,

    Oliveiros Junior

     

     

  9. Oliveiros, em qual banco você está testando isso? Em SQL SERVER da erro um select como esse. Todas as colunas do select precisam estar no group senão da erro. No caso do seu exemplo se eu rodar em sql server eu tenho duas opções: ou retiro a observação do select ou coloca ela no group by junto as demais.

     

    8 minutos atrás, oliveiros disse:

    Só uma observação, como o conteúdo da obervação é diferente, como na seq, ele mostra a primeira ocorrência. Se o seq estiver na lista de campos a ser apresentado, ele apresentaria a seq 001.

     

     

  10. exatamente Edu, foi por isso que eu coloquei o select com o group by com todos as colunas do select

    3 horas atrás, edutraini disse:

    Bom dia Junior

    EU entendi oque vc me passou mas ai minha duvida é que se eu nao colocar o campo observacao no group by ele da essa mensagem no manager studio

    Mensagem 8120, Nível 16, Estado 1, Linha 1
    A coluna 'dpropro0.OBSERVACAO ' é inválida na lista de seleção porque não está contida em uma função de agregação nem na cláusula GROUP BY.


     

     

  11. Oliveiros eu não testei mas acho que é necessário colocar as outras colunas no group.

    Edu, se der erro a solução passada acima tente a seguinte:

    SELECT lote, seq, tipo, secao, SUM(estoqatual) as total  FROM teste WHERE tipo = "51200" GROUP BY lote, seq, tipo, secao

     

    e se quiser ordenar trabalhe com order by

    SELECT lote, seq, tipo, secao, SUM(estoqatual) as total  FROM teste WHERE tipo = "51200" GROUP BY lote, seq, tipo, secao ORDER BY LOTE, SEQ, TIPO, SECAO

  12. 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
  13. Em 16/05/2022 at 18:50, edutraini disse:

    Boa noite pessoal 

    Um cliente meu de sucatas comprou uma balanca da marca weightec modelo wt1000 

    Alguem poderia dar uma dica ou vender uma rotina para comunicar com essa balanca

    Att

    Eduardo Mazur

     

     

    a 20 anos atras integrei com uma balança e eles fornecerem DLL. Essa ai não forneceu nada? tem alguma sdk?

     

    ps: achei o link é esse e com exemplos e documentação: https://www.weightech.com.br/wtreadweight

×
×
  • Create New...