Jump to content
Fivewin Brasil

sistem

Membros
  • Posts

    561
  • Joined

  • Last visited

  • Days Won

    25

Posts posted by sistem

  1. oribeiro, não vejo erro no seu código

    veja assim:

     USE (cTabela) SHARED NEW ALIAS (cAlias) VIA "SQLRDD"

    cAlias->(DBSETORDER("NomeDoIndice")) ex:        Esti->(DBSETORDER("Esti1"))

    hoje a noite irei criar um exemplo com base no seu. com 3 tabelas e seus relacionamentos... dai vc ver
     

  2. Function SR_OrdkeyNo()
    Local nItem:= 0, nRecno:= Recno(), nKey:= 0
    
    DbGotop()
    DbEval({|| nItem++,Iif(Recno() == nRecno, nKey:= nItem,nil) },,{|| Empty(nKey) } )
    If(Empty(nKey),nKey:= nItem,nil)
    DbGoto(nRecno)
    
    Return nKey

    http://forums.fivetechsupport.com/viewtopic.php?f=3&t=18670&start=0

    precisei criar um coluna numerando os itens do pedido e pesquisando no forum internacional encontrei a função acima (pcordonet merece um prêmio).. irei ver o comportamento em tabelas grande numero de registro.

  3. Amigos essa informação abaixo procede? 

    Nos campos cEAN e cEANTrib devem ser preenchidos os códigos GTIN-8, GTIN-12, GTIN-13 ou GTIN-14 (antigos códigos EAN, UPC e DUN-14) de acordo com o produto. Para produtos que não possuem código de barras com GTIN, deve ser informado o literal “SEM GTIN”. Nos demais casos, deve-se preencher com GTIN contido na embalagem com código de barras.

    no caso tenho cliente que tem código de barra sem cadastro no GTIN, dai vou ter que pôr um checkbox no casdastro de produtos com a informaçao SEM GTIN, mas gostaria de saber se eh isso mesmo que consta no texto acima

     

    Resolvido 

  4.  

    Pessoal,

    Converti todo o meu sistema para MariaDB usando o SQLRDD.

    Hoje notei que alguns relatórios que utilizan SET RELATION TO não fazem mais a relação entre as tabelas como faziam usando DBFCDX.

    Alguém já passou por isso? Existe alguma forma de usar o mesmo SET RELATION TO no SQLRDD sem ter que user instrução SQL?

     

     

     

    Oscar, mostra o código de um relatório aqui (seu prg do relatório inteiro)

  5. order libs

       echo $(HBDIR)\lib\rtl.lib + >> b32.bc
       echo $(HBDIR)\lib\vm.lib + >> b32.bc
       echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
       echo $(HBDIR)\lib\lang.lib + >> b32.bc
       echo $(HBDIR)\lib\macro.lib + >> b32.bc
       echo $(HBDIR)\lib\rdd.lib + >> b32.bc
       echo $(HBDIR)\lib\dbfntx.lib + >> b32.bc
       echo $(HBDIR)\lib\dbfcdx.lib + >> b32.bc
       echo $(HBDIR)\lib\dbffpt.lib + >> b32.bc
       echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
       echo $(HBDIR)\lib\debug.lib + >> b32.bc
       echo $(HBDIR)\lib\common.lib + >> b32.bc
       echo $(HBDIR)\lib\pp.lib + >> b32.bc
       echo $(HBDIR)\lib\pcrepos.lib + >> b32.bc
       echo $(HBDIR)\lib\ct.lib + >> b32.bc
       echo $(HBDIR)\lib\zlib.lib + >> b32.bc
       echo $(HBDIR)\lib\hbzip.lib + >> b32.bc
       echo $(HBDIR)\lib\libmisc.lib + >> b32.bc
       echo $(HBDIR)\lib\tip.lib + >> b32.bc
       echo $(HBDIR)\lib\png.lib + >> b32.bc
       echo $(HBDIR)\lib\hbcomm.lib + >> b32.bc
       echo $(HBDIR)\lib\cw32.lib + >> b32.bc
       echo $(HBDIR)\lib\import32.lib + >> b32.bc
       echo $(HBDIR)\lib\codepage.lib + >> b32.bc
       echo $(SQLRDD)\lib\sql.lib + >> b32.bc
       echo $(SQLRDD)\lib\libmysql.lib + >> b32.bc
       echo $(SQLRDD)\lib\oci.lib + >> b32.bc
       echo $(FWDIR)\multisql\qscanner\lib\twain.lib + >> b32.bc
       echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
       echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
       echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
       echo $(BCDIR)\lib\psdk\shell32.lib + >> b32.bc
       echo $(BCDIR)\lib\psdk\iphlpapi.lib, >> b32.bc

    minha inicialização:

    #include "fivewin.ch"
    #include "Image.ch"
    #include "xbrowse.ch"
    #include "ord.ch"
    #include "sqlrdd.ch"
    #include "mysql.ch"
    #include "directry.ch"
    
    REQUEST SQLRDD
    REQUEST SR_MYSQL
    
    EXTERNAL OrdKeyCount, OrdKeyGoTo, OrdKeyNo
    EXTERNAL DBPACK, DBZAP
    
    #define HKEY_LOCAL_MACHINE      2147483650
    #define HKEY_CURRENT_USER       2147483649
    
    REQUEST HB_LANG_PT
    REQUEST HB_CODEPAGE_PT850
    REQUEST DBFCDX, DBFFPT, DTOS
    
    FUNCTION Main( lParStart )
    
       RDDSETDEFAULT( "DBFCDX" )
    
       SET SCORE OFF
       SET DATE brit
       SET CONFIRM ON
       SET DELETED ON
       SET EXCLUSIVE OFF
       SET CENTURY ON
       SET EPOCH TO 1950
       SET DATE FORMAT "dd/mm/yyyy"
       SET multiple ON
    
       HB_LANGSELECT( "PT" )
       HB_SETCODEPAGE( "PT850" )
       FWSetLanguage(4)
    
       SR_UseDeleteds( .F. )               // NÃO MANTER REGISTROS DELETADOS NAS TABELAS = .f.
       SR_SetBaseLang( 2 )                 // portugues
       SR_Msg( 2 )                         // portugues
       SR_SetGoTopOnScope( .F. )           // NÃO EXECUTA O DBGOTOP() AUTOMATICO NOS ORDSCOPE
       SR_SetFastOpen( .T. )               // ABRE AS TABELAS EM MODO COMPARTILHADO
    // SR_MaxRowCache( 10 )                // Quantidade máxima de linhas mantidas em cache em tabelas do SQLRDD. O Default é 1000.
    // SR_FetchSize( 10 )                  //
    // SR_AllInCache(.t.)                  // TRAZ TODOS OS REGISTRO NA ABERTURA DA TABELA
    // SR_SETSYNTHETICINDEX(.F.)           // vale o que for configurado pela função SR_SetSyntheticIndexMinimun().
    // SR_SETSYNTHETICINDEXMINIMUN(10)     // Quant.mínima de colunas na chave de índice para criá-lo como Sintético. Os valores aceitos são entre 0 e 10.
    
       SetHandleCount( 150 )
    ...
    ..
    .

    veja se ajuda 

  6.  

    Qual banco você usa? Estou com o MariaDB

    mysql na maioria dos clientes com windows e mariadb no linux debian em alguns clientes

    no exemplo abaixo com base no que o senhor disse, causaria problema em seu programa? 

      dbSelectAreaSql("Prod")
      Prod->(OrdSetFocus("Prod1"))
      Prod->(dbSetRelation( "Pres", {|| Prod->Fam_Prod+Prod->Cod_Prod} ))
    
      dbSelectAreaSql("Pedm")
      Pedm->(OrdSetFocus("Pedm2"))
      dbSetRelation( "Clie", {|| Pedm->Cli_Pedm} )
      dbSetRelation( "Agen", {|| Pedm->Age_Pedm} )
      dbSetRelation( "Tran", {|| Pedm->Tra_Pedm} )
      dbSetRelation( "Cond", {|| Pedm->Con_Pedm} )
      dbSetRelation( "Natu", {|| Pedm->Nat_Pedm} )
      dbSetRelation( "Vend", {|| Pedm->Ven_Pedm} )
      dbSetRelation( "Caxa", {|| Pedm->Cax_Pedm} )
      dbSetRelation( "Cent", {|| Pedm->Cen_Pedm} )
      dbSetRelation( "Ctcx", {|| Pedm->Cen_Pedm+Pedm->Ctc_Pedm} )
    

    aqui não ocorre ... estranho os erros que acontece ai no seu programa

    minha configuracaosqlrddversao.jpg?1530953508

    ? FWVERSION+" "+Version()+CRLF+hb_compiler()+CRLF+SR_GetConnectionInfo(, SQL_DBMS_NAME )+;
      Alltrim(SR_GetConnectionInfo(, SQL_DBMS_VER ))+" "+SR_Version()

     

  7. Amigo eu faço assim, confirme com os amigos do forum como eles fazem... faço  uma fatura para muitas duplicatas  ex:

    Function LoadDuplicatas( oNFe, TotalLiq, TotFinac, dData, nNotaUn )
    Local oItem, cString := "", nItem := 0, nfracao:=0, nValorTit:=0, x1, lEnt:=.t.
    
     For x1=1 to Val(Cond->Par_Cond)
         nfracao=TotFinac-(Int(TotFinac/Val(Cond->Par_Cond))*Val(Cond->Par_Cond))
         If Val(Cond->Par_Cond) > 1
            If x1=1
               nValorTit := Int(TotFinac/Val(Cond->Par_Cond))+nFracao
            Else
               nValorTit := Int(TotFinac/Val(Cond->Par_Cond))
            Endif
         ElseIf Val(Cond->Par_Cond) = 1
            nValorTit :=  TotFinac/Val(Cond->Par_Cond)
         Endif
    
        oItem := TVoNfeCobr()
        WITH OBJECT oItem
          If lEnt
             :nFat     := Strzero(nNotaUn,6)
             :vOrig    := TotFinac //TotalLiq
             :vLiq     := TotFinac //TotalLiq
             lEnt:=.f.
          Endif
          :nDup     := Strzero(nNotaUn,6)+Left(Pedm->Ser_Pedm,1)+StrZero(x1,2)+StrZero(Val(Cond->Par_Cond),2)  // No.Duplicata
          :dVenc    := dData+Val(Subs(Cond->Pra_Cond,(x1*5)-4,4))                                              // Dat.vencimento
          :vDup     := nValorTit                                                                               // Val.Duplicata
        END
        oNFe:AddItem( oItem )
    
     Next
    
    Return(nil)

    veja o código acima a variavel lEnt faz o controle da tag <fat> ser lida uma unica vez no loop

    o xml deferia ficar +ou- assim:

    1000, reais o valor da nota, com duas duplicata de 500,00 reais por exemplo

    <fat>  
    <nFat>422</nFat>    // aqui o numero da nota 
    <vOrig>1000.00</vOrig>
    <vLiq>1000.00</vLiq>
    </fat> 
    
    <dup>
    <nDup>422</nDup>    // aqui vc poderia fazer assim 4220102 = numero da nota 422 + primeira parcela 01 de duas parcelas 02 = 4220102
    <dVenc>2018-07-31</dVenc>
    <vDup>500.00</vDup>
    </dup>
    <dup>
    <nDup>422</nDup>    // 4220202 = no.nota segunda parcela de duas obs: isso eh soh um exemplo
    <dVenc>2018-08-07</dVenc>
    <vDup>500.00</vDup>
    </dup> 
    
    

     

  8.  

    As informações desse site receitaws são confiáveis? Quem mantém esse banco atualizado? 

    tem essas informações no site:

    FAQ

    Como funciona a API?

    Para entender como o sistema funciona, é necessario entender seus componentes. O sistema é composto pelos seguintes componentes:

    • um banco de dados;
    • uma fila;
    • processos que recuperam informações da Receita Federal.

    Ao realizar a consulta de um CNPJ através da API, é primeiro verificado se este existe no banco de dados. Em caso positivo, estes dados são retornados. Em caso negativo, a requisição é encaminhada para uma fila de onde alguns processos recuperam sua requisição e realizam a consulta no site da Receita Federal. Assim que a consulta é realizada com sucesso os dados são atualizados no banco de dados local e sua requisição é respondida.

    De onde os dados são obtidos?

    Os dados são obtidos diretamente da Receita Federal de acordo com as consultas realizadas através da API. Um banco de dados é mantido para responder as consultas rapidamente.

    Os dados da API são recentes?

    Para cada consulta é possível verificar há quanto tempo atrás os dados foram recuperados da Receita Federal através do campo "ultima_autualizacao". Mesmo sem nenhuma requisição para a API, os CNPJs que estão na base de dados são atualizados constantementes, dos mais antigos para os mais novos. Assim, a base de dados se mantem relativamente atualizada: atualmente os CNPJs mais antigos foram consultados até 60 dias atrás. Vale lembrar que dados de empresas não mudam constantemente.

    Ao consultar um CNPJ junto à Receita Federal cuja resposta indica que o cadastro é inexistente, esta informação também estará na base de dados. Para estes casos, o CNPJ ficará no banco de dados por até 90 dias e não será consultado novamente de acordo com o processo indicado anteriormente. Qualquer requisição para o estes CNPJs irá retornar que o CNPJ foi rejeitado pela Receita Federal.

    Se você tem a informação sobre alguma mudança nos dados de um CNPJ e gostaria que esta informação estivesse refletida nos dados de retorno da API, é preciso fazer uma requisição utilizando a API Comercial, informando a defasagem máxima dos dados. O mesmo vale para os CNPJs rejeitados pela Receita Federal citados acima.

  9.  

    Prezado colega zekasan

    Achei a ideia de buscar neste site (  "https://www.receitaws.com.br/v1/cnpj/"+PROC_CNPJ )    mas interessante que na receita, pois nao pede captcha

    Mas devido a minha falta de inteligencia não consegui fazer funcionar.

     

     

    teste isso:

    Function GetCNPJ(cCnpj)
        Local oServerWS, cUrl, aArray, x1, erro
    
        cUrl := "https://www.receitaws.com.br/v1/cnpj/"+cCnpj
    
        Try
            oServerWS := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' )
        Catch erro
            ? erro:Description
            return nil
        End
    
        oServerWS:open('GET', cUrl, .f.)
        oServerWS:setRequestHeader("Content-Type", "text/xml; charset=utf-8")
        oServerWS:send()
    
        If oServerWS:Status != 200
           MsgStop(Alltrim(STR(oServerWS:Status))+" - "+oServerWS:StatusText , "Erro")
           Return nil
        Endif
    
        While oServerWS:readyState != 4
           oServerWS:WaitForResponse(1000)
        End
    
        x1 := hb_jsondecode( oServerWS:responseText, @aArray )
    
        If aArray == nil
            MsgStop("Erro ao retornar os dados. Tente novamente.")
            Return nil
        Endif
    
        If aArray['status'] != 'OK'
           MsgStop(aArray['message'], "Erro")
           Return nil
        Endif
    
        MsgInfo("NOME:  "+Alltrim(aArray['nome'])+CRLF+;
                "FANTASIA:  "+Alltrim(aArray['fantasia'])+CRLF+;
                "ENDEREÇO:  "+Alltrim(aArray['logradouro'])+", "+Alltrim(aArray['numero'])+" "+Alltrim(aArray['complemento'])+CRLF+;
                "BAIRRO:  "+Alltrim(aArray['bairro'])+" CEP: "+Alltrim(aArray['cep'])+CRLF+;
                "CIDADE:  "+Alltrim(aArray['municipio'])+"-"+Alltrim(aArray['uf'])+CRLF+;
                "TELEFONE:  "+Alltrim(aArray['telefone'])+CRLF+CRLF+;
                "NATUREZA JURÍDICA:  "+Alltrim(aArray['natureza_juridica'])+CRLF+;
                "TIPO:  "+Alltrim(aArray['tipo'])+CRLF+;
                "SITUAÇÃO:  "+Alltrim(aArray['situacao'])+CRLF+;
                "DATA SITUAÇÃO:  "+Alltrim(aArray['data_situacao'])+CRLF+;
                "ULTIMA ATUALIZAÇÃO:  "+Alltrim(aArray['ultima_atualizacao']), "CNPJ CONSULTA")
    
    Return nil

     

×
×
  • Create New...