Jump to content
Fivewin Brasil

Frazato

Membros
  • Posts

    38
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Frazato

  1. na verdade o comando que corta o papel ( aciona guilhotina ) e esse: Chr(27)+Chr(119) Acho q simplesmente vc colocar isso no final do relatorio a ser impresso, deve funcionar, pois uso na paralela e na serial o mesmo comando. Frazato Frazato
  2. Use desta forma. ------------------------------------------------ Static Function CupomPromocional() Local cPorta Local nCupons //:= Iif(Lista->pagoDm==.t.,2,1) cPorta := mSerial //nCupons := Int(Lista->valor/50.00)*Iif(Lista->pagoDm==.t.,2,1) nCupons := &(mRegras) For i:= 1 to nCupons wLinhaPrn := {} Aadd(wLinhaPrn,Repli('-',40) ) Aadd(wLinhaPrn,Chr(14)+mTitulo) Aadd(wLinhaPrn,mLinha1) Aadd(wLinhaPrn,Lista->Nome) Aadd(wLinhaPrn,'Cupom:'+Lista->IdCupom+' Telefone:'+Lista->Celular) Aadd(wLinhaPrn,Chr(27)+"E"+mLinha2+Chr(27)+'F') If !Empty(mLinha3) Aadd(wLinhaPrn,Chr(27)+"E"+mLinha3+Chr(27)+'F') Endif Aadd(wLinhaPrn,Repli('-',40)) cFaca := Chr(27)+Chr(119) Aadd(wLinhaPrn,cFaca) GravaSaidaSerial(wLinhaPrn,cPorta) Next Frazato
  3. Uso em conjunto com o pedido feito caso nao tenho deixo o usuario escolher o produto e faço a associação do produto em uma tabela ( Fornecedor + codigo item da nota) Obs. Tem varias notas que nao veem o codigo ean13 e tem fornecedores que nao envia o XML tambem. Frazato * STATIC wLojaEstq := '01' /* Desenvolvido por : ANALISTA/PROGRAMADOR : JOAO APARECIDO FRAZATO CONTATO : 14 33268464 9714-0865 frazato@ibest.com.br sistema_jaf@hotmail.com OBJETIVO : LER ARQUIVO DANFE FORMATO XML E FAZER O LANCEMENTO DE NOTA FISCAL OBSERVACAO : MODULO FAZ PARTE DO SISTEMA JAF USANDO GTWVW */ //------------------------------------------------------------ Function LerDanfe() Local Estru := { {'Id' ,'C', 44,0},; {'ErroJAF' ,'l', 01,0},; // {'Ocorrenc' ,'C', 20,0},; // {'CNPJ' ,'C', 14,0},; // {'cProd' ,'C', 16,0},; {'xProd' ,'C', 60,0},; // Codigo Interno {'cEAN' ,'C', 16,0},; {'qCom' ,'N', 13,3},; {'vProd' ,'N', 13,2},; {'vUnCom' ,'N', 11,3},; {'vIcms' ,'N', 11,3},; {'vPis' ,'N', 11,3},; {'vCofins' ,'N', 11,3},; {'vIpi' ,'N', 11,3} } Parameters cFileDanfe // Pegando Arquivo na Pasta mDiretorio := 'C:\DANFE\' mArquivo := '*.XML' mListaArq := Directory(mDiretorio+mArquivo,"D") cLista := {} For i := 1 to Len(mListaArq) cNomeForne := PegaNomeArquivo(mDiretorio+mListaArq[i,1]) Aadd(cLista,Substr(mListaArq[i,1]+space(30),1,30)+' '+cNomeForne) Next CAIXATEXTO(07,08,8+Len(cLista),85,"ESCOLHA O ARQUIVO COM O DANFE ","BG+/NB+","NN/NN","N") nOpcao := Achoice(08,09,9+Len(cLista),84,cLista,.t.) FechaJanela() If nOpcao== 0 Return Nil Endif *cFileDanfe := mDiretorio+cLista[nOpcao] cFileDanfe := mDiretorio+mListaArq[nOpcao,1] Dbcreate('c:\temp\Danfe.dbf',Estru) If cFileDanfe==Nil Alerta('Informe o nome do Danfe em xml') Return nil Endif If ! file(cFileDanfe) Alerta('Arquivo nao Localizado'+cFileDanfe) Return nil Endif CORES() CAIXATEXTO(11,03,14,80,"IMPORTAR DANFE (Xml) ","G/GR+","BG+/NB+","NN/NN","N") cPegaChave := Space(47) @ 12,05 say 'Chave Danfe ' Get cPegaChave Pict "@!" Color('WW+/RR+') Read If LastKey()==27 FechaJanela() Return nil Endif FechaJanela() Linha := Memoread(cFileDanfe) nLinhalidas := 0 Linhatotal := Len(Linha) cLinhaTxt := Linha //-- Pega Id da Nota Fiscal nPos1 := At('Id="',Linha) If nPos1==0 Alerta('Erro no Arquivo '+cFileDanfe+Chr(10)+; 'Id=') Return nil Endif nPos1 := nPos1+Len('Id="') cChave:= Substr(Linha,nPos1,47) //-- Pegando Cgc para Pesquisa do Item na base de SKus nPos1 := At('',Linha) If nPos1==0 Alerta('Erro no Arquivo '+cFileDanfe) Return nil Endif nPos1 := nPos1+Len('') cCGCEmit:= Substr(Linha,nPos1,14) //---Pegando Dados para Lancamento da Capa da Nf If cPegaChave#Substr(cChave,4,47) ALerta('Arquivo Lido nao corresponde ao Desejado!') Endif m_vNf := PegaDados('nNF' ,Alltrim(Linha) ,.f.) m_cNF := PegaDados('nNF' ,Alltrim(Linha) ,.f.) m_serie := PegaDados('serie' ,Alltrim(Linha),.f. ) m_dEmi := PegaDados('dEmi' ,Alltrim(Linha),.f. ) m_Razao := PegaDados('xNome',Alltrim(Linha),.f. ) cMsg := '###### IMPORTA DANFE ######'+CHR(10)+; 'Razao Social:'+m_Razao +CHR(10)+; ' Nr Nota :'+m_cnf + 'Serie Nota :'+m_serie +CHR(10)+; 'Data Emissao:'+m_Demi +CHR(10)+; 'Valor Nota :'+transf(Val(m_vnf),'@EZ 999,999.99')+Chr(10)+; 'Nr.Chave :'+Substr(cChave,4,47) +Chr(10)+; 'CGC Emit :'+cCGcEmit IF MsgConf(cMsg,"1") == .F. Return nil Endif // Uso no Rauxilio cIdNota := StrZero(val(m_cnf),6) Close All /* Abrindo Base de dados */ Sele 1 Use Produto Set index to Produto Sele 2 Use CadSkus Alias Skus Set index to CadSkus Sele 3 use Arqnotas Set index to Arqnotas Sele 4 Use Forneced Set index to Forneced Sele 5 use c:\temp\Rauxilio Alias Rauxilio Set index to c:\temp\rauxilio Sele 6 Centra(24,"Arquivo de Capa de Pedido") Use Compra02 Alias CapaPed Set index to Compra02 Sele 7 Centra(24,"Arquivo de Item de Pedido") Use Compra03 Alias DPedido Set index to Compra03 Sele 8 Use c:\temp\Danfe Alias Danfe Exclusive If Neterr()==.t. Alerta('Terminal ja esta em uso ( Recebimento)') Close All Return nil Endif Index on Id+cProd to c:\temp\danfe Set index to c:\temp\danfe Centra(24,'Lendo DANFE'+cChave) LancCapaNota() Centra(24,'Lendo DANFE (Produtos)'+cChave) Do While .t. *cLidos := PegaDados('prod',Alltrim(cLinhaTxt),.t. ) cLidos := PegaDados('det nItem',Alltrim(cLinhaTxt),.t.,'det' ) Linha := cLidos If Linha=='0' Exit Endif mxProd := PegaDados('xProd',Alltrim(Linha) ,.f.) mcprod := Alltrim(Str(val(PegaDados('cProd',Alltrim(Linha) ,.f.) ),16)) mqcom := Val(PegaDados('qCom' ,Alltrim(Linha) ,.f.) ) mvprod := Val(PegaDados('vProd',Alltrim(Linha) ,.f.) ) mcean := PegaDados('cEan' ,Alltrim(Linha) ,.f.) mvuncom := val(PegaDados('vuncom' ,Alltrim(Linha) ,.f.) ) mvIcms := val(PegaDados('pICMS' ,Alltrim(Linha) ,.f.) ) mVpis := val(PegaDados('vPIS' ,Alltrim(Linha) ,.f.) ) mVCofins:= val(PegaDados('vCOFINS' ,Alltrim(Linha) ,.f.) ) cPesq := Substr(cChave,4,47)+mcprod Sele Danfe Go top Seek cPesq If ! found() Append Blank Endif Repla Danfe->Id With Substr(cChave,4,47) Repla Danfe->cnpj With cCGcEmit Repla Danfe->xprod With mxProd Repla Danfe->cean With mcean Repla Danfe->cprod With mcprod Repla Danfe->qcom With mqcom Repla Danfe->vprod With mvprod Repla Danfe->vuncom With mvuncom Repla Danfe->vIcms With mvIcms Repla Danfe->vPis With mVpis Repla Danfe->vCofins With mVCofins nSize := Linhatotal-nLinhaLidas cLinha := Right(cLinhaTxt,nSize) cLinhaTxt := cLinha If nLinhaLidas >= Linhatotal Exit Endif Enddo Go top /* Solicitando Nr de pedido para Anexar aos itens */ nNumerPedido := PegaPedido( ARQNOTAS->CLI_CODI) IF MsgConf("Importar Pedido ?"+chr(10)+; 'Nr :'+nNumerPedido,"1") == .T. /* Gravando os dados dos produtos no Rauxilio.dbf */ ProcessaDanfe(nNumerPedido) Endif Return nil //------------------------------------------------------ Function PegaDados(cProc,cLinha,lItem,cTexto2) Local InicioDoDado :=Iif(cTexto2==Nil,"<"+cProc+">" , "<"+cProc ) Local FinalDoDado := Iif(cTexto2==Nil,""+cProc+">",''+cTexto2+'>') Local nPosIni := At(InicioDoDado,cLinha) Local nPosFim := At(FinalDoDado,cLinha) Local cRet := '0' If nPosIni==0 .or. nPosFim==0 Return cRet Endif cRet := Substr(cLinha,nPosIni+Len(IniciodoDado),nPosFim-nPosIni-Len(FinalDoDado)+1) If lItem ==.t. nLinhalidas += nPosFim Endif Return ( cRet) //------------------------------------------------------------ Static Function ProcessaDanfe(cIdPedido) Local cIdForne:= '' Sele Danfe nSeq := 0 Go top Do While ! Eof() Centra(24,'Lancando Item via DANFE.....'+Str(nSeq++,5)) cidforne := '' Sele Forneced OrdsetFocus('fornece1') Go top Seek StrZero(Val(cCGCEmit),15) If Found() cidForne := Forneced->Codigo If ! Empty(Forneced->Empr_Princ) cidForne := Forneced->Empr_Princ Endif Endif mCodigo := '' // Codigo Item mAlterar:= .F. // Faz a inclusao cIdItem := Substr(Danfe->cProd+Space(16),1,16) Sele Skus OrdSetfocus('Skus03') Go Top Seek ( cIdforne + cIdItem) If ! Found() // Grava Erro Sele Danfe Repla Danfe->Ocorrenc With '1-Codigo Invalido JAF' Repla Danfe->ErroJAF With .t. Skip+1 Loop Endif mCodigo := Skus->Cod_Prod Sele Produto OrdsetFocus('Prod01') Go top Seek mCodigo If ! Found() // Erro Sele Danfe Repla Danfe->Ocorrenc With '2-Skus Desativado' Skip+1 Loop Endif lPed := .t. cMsg := '' Sele DPedido OrdSetFocus('DCmp01') Go top Seek mCodigo+cIdPedido If ! Found() cMsg := '## Sem Pedido ##' lPed := .f. Endif If (Dpedido->QPedido - Dpedido->Qtd_Receb) <= 0 cMsg := '## Sem Pedido ##' Endif vQtdPedido := Dpedido->QPedido - Dpedido->Qtd_Receb If vQtdPedido < Danfe->qCom cMsg := 'Bola :'+Str(vQtdPedido - Danfe->qCom,7,3) Endif Sele Rauxilio Set Filter to // OrdSetFocus("Raux1") Go top SEEK ( MCODIGO + CIDNOTA ) If Found() mAlterar := .t. Endif mPQuanti := Danfe->qCom // Danfe->vUnCom mPQuanti1 := 0 mPCusto := Danfe->vProd / Danfe->qCom mPDescon := 0 mPTribut := space(1) mPVenda := 0 mTit_Emb := Produto->Tit_Emb mQtd_Emb := Produto->Embalcompr mTxa_Fre := Produto->Frete mPAcresc := 0 nValorSubst:= 0 mTit_Emb := "UND" cCst := '???' mPcusto := ( (mPcusto - ( ( mPcusto * mPDescon ) /100 )) + ( ( mPcusto * mPAcresc ) /100 ) ) mCustoNovo := mPcusto / mQtd_Emb xTxaRateio := ( ( mPcusto ) * (mPQuanti + mPQuanti1) ) * mQtd_Emb xTxaRateio := ( (xTxaRateio / ArqNotas->ValorFrete) * 100 ) // 100 Colocado mTxa_Fre := 0 // Iif(ArqNotas->ValorFrete <= 0,0,xTxaRateio) mQtd_Emb := 1 Sele Rauxilio If mAlterar == .F. // Faz a Inclusao no Rauxilio Append blank Endif Trav_reg() repla RAUXILIO->Qentrada with mPQuanti repla RAUXILIO->Qentrad1 with mPQuanti1 repla RAUXILIO->CUSTO_ATUA with mPcusto repla RAUXILIO->Dentrada with date() repla RAUXILIO->Tit_Embal with mTit_Emb repla RAUXILIO->Qtd_Embal With mQtd_Emb Repla Rauxilio->cst_nf With cCst Repla Rauxilio->ValorSubst With nValorSubst repla RAUXILIO->tp_mvto with "C" repla RAUXILIO->codigo with produto->codigo repla RAUXILIO->descricao with produto->descricao repla RAUXILIO->Venda_atua with Produto->Venda repla RAUXILIO->CUSTO_ANTI with PRODUTO->CUSTO repla RAUXILIO->DentradaA with PRODUTO->DT_CUSTO repla RAUXILIO->icmsc with produto->icmsc repla RAUXILIO->icmsv with produto->icmsv repla RAUXILIO->depto with produto->depto repla RAUXILIO->MARG_NV1 with produto->MARGEM repla RAUXILIO->MARG_NV2 with produto->MG2 repla RAUXILIO->MARG_NV3 with produto->MG3 repla RAUXILIO->TpoTrbto with Produto->TpTributad repla RAUXILIO->Red_Calc With Produto->PmargReduc Repla RAUXILIO->TxaFrete With Produto->Frete Repla RAUXILIO->TxaIpi With Produto->Ipi repla RAUXILIO->nf_cfo With ArqNotas->CodContab // CFop Notas repla RAUXILIO->nf_num with ARQNOTAS->NUMERO_NF repla RAUXILIO->nf_serie with ARQNOTAS->SERIE_NF repla RAUXILIO->nf_dest with ARQNOTAS->CLI_CODI repla Rauxilio->VencNota With Arqnotas->vencto_1 If RAUXILIO->ValorIpi==0 If RAUXILIO->TxaIpi > 0 Repla RAUXILIO->ValorIpi With ( ( mCustoNovo * RAUXILIO->TxaIpi / 100 ) *mQtd_Emb ) * (mPQuanti +mPQuanti1 ) Endif Endif Repla Rauxilio->SeqNota With nSeq Repla RAUXILIO->Dentrada with date() Repla RAUXILIO->CUSTO_ANTI with PRODUTO->CUSTO If lPed==.t. Repla Rauxilio->Qtd_EmbaR With DPedido->EmbalCompr Repla Rauxilio->Ofertar With DPedido->Ofertar repla RAUXILIO->icmsc with DPedido->icmsc Repla Rauxilio->ValorSubst With Dpedido->St If Dpedido->Ipi#0 Repla Rauxilio->ValorIpi With Dpedido->Ipi Endif Repla RAUXILIO->Pedi_Nume With cIdPedido Repla Rauxilio->CustoIdeal With DPedido->CustoFinal Repla Rauxilio->Desc_finan With DPedido->Desc_finan Repla Rauxilio->AbatFinan With DPedido->AbatFinan Repla Rauxilio->Pedi_vUni with Dpedido->Preco / Dpedido->EmbalCompr Repla RAUXILIO->CUSTO_ATUA with Dpedido->Preco / Dpedido->EmbalCompr Repla Rauxilio->Pedi_Qtd with ( Dpedido->QPedido - Dpedido->Qtd_Receb ) * Dpedido->EmbalCompr Endif Destrava() Sele Danfe Repla Danfe->Ocorrenc With cMsg Repla Danfe->ErroJAF With .t. Skip+1 Enddo // Mostra Erros Set filter to Danfe->ErroJAF==.t. Set device to Printer Set printer to c:\temp\danfe.txt Go top SetPrc(0,0) Lin := 0 @ Lin++,00 say Repli('-',80) @ Lin++,00 say padc('JAF DESENV. LTDA - IMPORTACAO ARQUIVOS',80) @ Lin++,00 say padc('CRITICA IMPORTACAO DANFE',80) @ Lin++,00 say Repli('-',80) @ Lin++,00 say 'FORNECEDOR :'+m_Razao @ Lin++,00 say 'Nr.Nota :'+m_cNF +' Serie :'+m_serie @ Lin++,00 say 'Nr.Chave :'+Substr(cChave,4,47) @ Lin++,00 say Repli('-',80) @ Lin++,00 say 'Seq. Codigo ### Produto ### Quantidade ### Erro Reportado ###' @ Lin++,00 say Repli('-',80) Lin++ Do while ! Eof() cString := Str(Recno(),3)+' '+; Substr(Danfe->cProd,1,6)+'-'+Substr(danfe->xProd,1,30)+' '+; Str(Danfe->qCom,11,3)+' '+; Danfe->Ocorrenc @ Lin++,00 say cString Skip+1 Enddo @ Lin++,00 say Repli('-',80) Set device to Screen Set printer off preview("danfe") Return Nil //------------------------------------------------ Static Function LancCapaNota() Local Ok := .t. Local cChaveNota Local InicioDoDado := '' Local FinalDoDado := '' Local nPosIni := At(InicioDoDado,Linha) Local nPosFim := At(FinalDoDado,Linha) Local cRet := '0' If nPosIni==0 .or. nPosFim==0 Return cRet Endif cRet := Substr(Linha,nPosIni+Len(IniciodoDado),nPosFim-nPosIni-Len(FinalDoDado)+1) Linha := cRet mDataLanca := Date() mEmissao := Char2Data( PegaDados('dEmi' ,Alltrim(Linha) ,.f.) ) mDataLanca := Date() mAgenda := '003' mContabil := Val(PegaDados('vNF' ,Alltrim(Linha) ,.f.)) mNotaNumero := StrZero( Val(PegaDados('nNF' ,Alltrim(Linha) ,.f.)),6) mNotaSerie := PegaDados('serie' ,Alltrim(Linha) ,.f.) mCodigo := Forneced->Codigo mVencto_1 := Ctod('//') mVlrVenc1 := Val(PegaDados('vNF' ,Alltrim(Linha) ,.f.)) mTotalProd := Val(PegaDados('vProd' ,Alltrim(Linha) ,.f.)) mTotalIcms := Val(PegaDados('vICMS' ,Alltrim(Linha) ,.f.)) mFreteNf := 0 mTotalIpi := 0 mEspecie := 'NFe' xEstadoForn := PegaDados('UF' ,Alltrim(Linha) ,.f.) mBaseSubs := 0 mValorSubs := 0 mCodFisc := '???' mValorOutro := 0 xPediUsar := '' mCodigo := '' Sele Forneced OrdsetFocus('fornece1') Go top Seek StrZero(Val(cCGCEmit),15) If ! Found() Return .f. Endif mCodigo := Forneced->Codigo MNOTASERIE := Substr(MNOTASERIE+Space(4),1,4) cChaveNota := MNOTANUMERO+MNOTASERIE+mCodigo // Quando o vencimento vir embranco pegar o do cadastro! If Empty(mVencto_1) mVencto_1 := mEmissao + val(Forneced->Pagto) Endif Sele ArqNotas ORDSETFOCUS("ArqNf8") Go Top Seek (cChaveNota) IF ! FOUND() Append Blank ENDIF Trav_reg() repla ArqNotas->data_lc with mDataLanca repla ArqNotas->data_nf with mEmissao Repla ArqNotas->Lanc_Livro with mDataLanca repla ArqNotas->agenda with mAgenda repla ArqNotas->movto with "C" repla ArqNotas->Status with "I" repla ArqNotas->valor_nf with mContabil repla ArqNotas->numero_nf with mNotaNumero repla ArqNotas->serie_nf with mNotaSerie repla ArqNotas->cli_codi with mCodigo repla ArqNotas->cli_nome with Forneced->Razao repla ArqNotas->vencto_1 with mVencto_1 *repla ArqNotas->vencto_2 with mVencto_2 *repla ArqNotas->vencto_3 with mVencto_3 *repla ArqNotas->vencto_4 with mVencto_4 repla ArqNotas->ctrl_int with "I" Repla ArqNotas->VlrVenc1 With mVlrVenc1 *Repla ArqNotas->VlrVenc2 With mVlrVenc2 *Repla ArqNotas->VlrVenc3 With mVlrVenc3 *Repla ArqNotas->VlrVenc4 With mVlrVenc4 Repla ArqNotas->ValorProd With mTotalProd Repla ArqNotas->ValorIcms With mTotalIcms Repla ArqNotas->ValorFrete With mFreteNf Repla ArqNotas->ValorIpi With mTotalIpi Repla ArqNotas->Especie_Nf With mEspecie Repla ArqNotas->RotaEntrg With xEstadoForn Repla ArqNotas->Uf_Nota With Forneced->UF Repla ArqNotas->BaseSubstr With mBaseSubs Repla ArqNotas->ValorSubst With mValorSubs Repla ArqNotas->CodContab With mCodFisc Repla ArqNotas->ValorOutro With mValorOutro Repla Arqnotas->PEDNUMERO With StrZero(Val(xPediUsar),7) Repla Arqnotas->Loja With StrZero(val(wLojaEstq),2) Repla Arqnotas->MsgAdicio With Substr(cChave,4,47) Destrava() Return Ok //--------------------------------------- Static Function Char2Data(cString) Local i Local lRet := '' Local cAno := Substr(cString,1,4) Local cMes := Substr(cString,6,2) Local cDia := Substr(cString,9,2) lRet := cDia+'/'+cMes+'/'+cAno Return Ctod(lRet) //------------------------------------------------------------ Static Function PegaPedido(mcodiForne) Sele Forneced OrdSetFocus("Forneced") Go Top Seek mCodiForne If Found() .And. ! Empty(Forneced->Empr_Princ) mCodiForne := Forneced->Empr_Princ Endif Cores() CAIXATEXTO(03,00,24,79,"Pedido colocado pra este fornecedor ","BG+/B+","NN/NN","N","GR+/NN") @ 04,05 say "Fornecedor :" @ 05,01 say Repli("Ä",78) @ 20,01 say Repli("Ä",78) Sele CapaPed OrdSetFocus("CCmp02") Seek mCodiForne If ! Found() Alerta("Fornecedor sem pedido colocado !!") Fechajanela() Select(DbaOld) RestScreen(00,00,24,79,Tela01) Return nil Endif Index On CapaPed->DtaEntreg + CapaPed->DtaEmissa To c:\temp\xPedido ; While ( CapaPed->CodiForne== mCodiForne ) Declare Dados ; Declare Cabeca Dados[1]="CapaPed->Situacao+Iif(empty(CapaPed->Anotacoes),' ','*')" Dados[2]="CapaPed->NumPedido" Dados[3]="Dtoc(CapaPed->DtaEmissa)" Dados[4]="Dtoc(CapaPed->DtaEntreg)" Dados[5]="Transf(CapaPed->ValorTota - CapaPed->ValorDesc + CapaPed->ValorAcre,'@E 9999,999.99')" Dados[6]="Transf(CapaPed->ValorBoni, '@E 9999,999.99')" Dados[7]="Transf(CapaPed->Valor_rec, '@E 9999,999.99')" Dados="Transf(CapaPed->DiasVenct, '@E 99')" Cabeca[1]:= "Sit." Cabeca[2]:= "N£mero" Cabeca[3]:= "Emiss„o" Cabeca[4]:= "Entrega" Cabeca[5]:= "Total" Cabeca[6]:= "Bonif." Cabeca[7]:= "Baixado" Cabeca:= "Prazo" Go Bott Dbedit(06,01,20,78,Dados,"Tlc_Danfe","",Cabeca,"ß","³","Ü", NIL ) Fechajanela() RESTSCREEN(00,00,24,79, TELA01 ) RETURN (CapaPed->NumPedido) //------------------------------------------------------------ Function Tlc_Danfe(Reg) DO CASE Case Reg == 3 Alerta("Sem pedido Colocado!!!") VoltaFoco() Return 0 Case Reg == 4 Do Case Case Lastkey()=27 Return 0 Case LastKey()= -1 *Rece_Item_Pedido(CapaPed->NumPedido) VoltaFoco() Case LastKey()= -2 If MSGCONF("Digita Automatico ?","1") == .T. lCota := .f. If ! Empty(CapaPed->NumCotacao) .or. Capaped->NumCotacao#'00000' lCota := .t. Endif *Rece_Intg_Pedido(ArqNotas->Numero_nf,CapaPed->NumPedido,lCota) Sele ArqNotas Trav_Reg() Repla ArqNotas->PedNumero With CapaPed->NumPedido Destrava() Endif Return 0 Case LastKey()= -3 DbaOld := Select() *Rela_Mensag(CapaPed->NumPedido) Select(DbaOld) Set index to c:\temp\xPedido VoltaFoco() Return 1 EndCase EndCase Return //-------------------------------------------- Static Function PegaNomeArquivo(cArq) Local cFileDanfe := cArq Local Linha := Memoread(cFileDanfe) Local nLinhalidas := 0 Local Linhatotal := Len(Linha) Local cLinhaTxt := Linha Local m_cNF := PegaDados('nNF' ,Alltrim(Linha) ,.f.) Local m_serie := PegaDados('serie' ,Alltrim(Linha),.f. ) Local m_dEmi := PegaDados('dEmi' ,Alltrim(Linha),.f. ) Local m_Razao := PegaDados('xNome',Alltrim(Linha),.f. ) cString := "NF:"+m_cNF+' / '+m_serie+" - "+m_Razao+; ' Emissao '+m_dEmi Return cString Frazato
  4. Boa tarde! Faço da seguinte forma, uso um pendrive como hardlock. 1 - Tenho um programa q valida o Pendrive e libera o uso aos terminais chamo-o de "servidor de terminal". 2 - Todos os terminais solicitam acesso a "servidor de terminais" que por sua vez libera ou bloqueia. Desta maneira nao presciso me preocupar se o cliente ira mudar de maquina, visto que a trava esta junto ao pendrive e todos os controle de vencimento libero apenas neste "servidor de terminal" que libera. Frazato Frazato
  5. Uso em um Restaurante dentro de um supermercado. http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=7934&p=44274&hilit=gradual#p44274 Frazato
  6. Usei a um tempo atraz desta maneira, essa rotina faz parte de uma pacote que veio com o FWPPC e com a ajuda do Gilmer. #define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers #define INTERNET_SERVICE_FTP 1 #define INTERNET_SERVICE_GOPHER 2 #define INTERNET_SERVICE_HTTP 3 cPastaFTP:= Lerparam('FTP') cUserFtp := Lerparam('FTP_USER') cPwdFtp := Lerparam('FTP_PWD') //--------------------------------------------------------------------------- Static FUNCTION _ConectaFtp() *MsgRun_( 'Preparando FTP..',"JAF Desenv.",; * {|| PreparaFTP() } ) *PreparaFTP() SysRefresh() MsgRun_( 'Enviando..',"JAF Desenv.",; {|| ConectaFtp() } ) *ConectaFtp() Return Nil //------------------------------------------------------------------ Static FUNCTION ConectaFtp() LOCAL hInternet, hCon hInternet := InternetOpen( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 ) IF hINTERNET = 0 MSGINFO("Erro na conexão com a internet!") RETURN NIL ENDIF *hCon = INTERNETCONNECT( hInternet, "67.18.22.100",0, "fivewin.com.br","c7tSEa", INTERNET_SERVICE_FTP, 0,0 ) *hCon = INTERNETCONNECT( hInternet, "ftp.discovirtual.terra.com.br",0, "frazato.ourinhos","senha122", INTERNET_SERVICE_FTP, 0,0 ) hCon = INTERNETCONNECT( hInternet, cPastaFTP,0,cUserFtp,cPwdFtp, INTERNET_SERVICE_FTP, 0,0 ) IF HCON = 0 MSGSTOP("Erro na conexão FTP !") RETURN NIL ENDIF cArquivo := "" cNumero := "\Temp\*.PED" * cDBFVend := "VEND_"+Strzero(Val( Lerparam('NUMERO_POCKET') ),3) mListaArq := Directory(cNumero,"D") nTotLinh := Len(mListaArq) For nPosic:= 1 to nTotLinh cArqTxt := mListaArq[nPosic,1] *If !FTPPUTFILE( hCon,"\Temp\"+cArqTxt, "/fivewin.com.br/wwwroot/download/lixo/"+cArqTxt, 0, 0 ) If !FTPPUTFILE( hCon,"\Temp\"+cArqTxt, "/pocket/"+cArqTxt, 0, 0 ) MsgInfo("Arquivo não foi enviado!"+cArqTxt) Endif Next *If !FTPGETFILE( hCon, "/fivewin.com.br/wwwroot/download/lixo/Carga.dbf","\TEMP\CARGA.dbf", 0, 0 ) * Msginfo("Nenhum arquivo foi recebido!") *Endif INTERNETCLOSEHANDLE( hCon ) INTERNETCLOSEHANDLE( hInternet ) SysRefresh() *MsgRun_( 'Recebendo..',"JAF Desenv.",; * {|| PegaCargaFPT() } ) * *PegaCargaFPT() *SysRefresh() *MsgRun_( 'Sincronizando..',"JAF Desenv.",; * {|| Sincro_FTP() } ) *Sincro_FTP() SysRefresh() RETURN NIL
  7. Tenho um Dbf com 16.952.340 registro e 1.5Gb, usando Cdx ate hj nao tive problema usando o xharbour com Cdx ja o clipper eu nao consigo recriar os indice. Obs: Guarda toda a venda detalhada de produtos de um supermercado com 16 Pdvs, acho que deve ser registro de uns 4anos. Frazato
  8. ja postei no www.pctoledo.com.br Boa tarde! Trabalho com sistemas especifico para supermercado onde se lança muita notas fiscais de entradas diariamente, com a obrigatoriedade de muitas empresas terem que fazer o faturamento eletrônico e aproveitando este recurso, desenvolvi uma rotina de leitura e importação de arquivo Xml ( Danfe) para digitação automática de nota de entrada, facilitando e muito a vida dos usuários, visto que e tudo automático, deste de o lançamento da capa até a digitação dos itens. Ainda o projeto não esta pronto, mais caso alguém faça alguma modificação favor postar para todos. O processo e bem simples, o usuário pega o Danfe ( Xlm) coloca em uma pasta e executa esta rotina ele ira criar um arquivo danfe.dbf contendo os dados de produtos e fará o lançamento da nota, neste caso existem mais coisa que faz parte de meu sistema de ERP, mais serve como base para leitura. Segue o fonte para observação. Frazato sistema_jaf@hotmail.com * STATIC wLojaEstq := '01' //------------------------------------------------------------ Function LerDanfe() Local Estru := { {'Id' ,'C', 44,0},; {'ErroJAF' ,'l', 01,0},; // {'Ocorrenc' ,'C', 20,0},; // {'CNPJ' ,'C', 14,0},; // {'uCom' ,'C', 02,0},; {'cProd' ,'C', 16,0},; {'xProd' ,'C', 60,0},; // Codigo Interno {'cEAN' ,'C', 16,0},; {'qCom' ,'N', 13,3},; {'vProd' ,'N', 13,2},; {'vUnCom' ,'N', 11,3},; {'vIcms' ,'N', 11,3},; {'vPis' ,'N', 11,3},; {'vCofins' ,'N', 11,3},; {'CFOP' ,'C', 04,0},; {'Cst' ,'C', 03,0},; {'vIpi' ,'N', 11,3} } Parameters cFileDanfe // Pegando Arquivo na Pasta mDiretorio := 'C:\DANFE\' mArquivo := '*.XML' mListaArq := Directory(mDiretorio+mArquivo,"D") cLista := {} For i := 1 to Len(mListaArq) cNomeForne := PegaNomeArquivo(mDiretorio+mListaArq[i,1]) Aadd(cLista,Substr(mListaArq[i,1]+space(30),1,30)+' '+cNomeForne) Next CAIXATEXTO(07,08,8+Len(cLista),85,"ESCOLHA O ARQUIVO COM O DANFE ","BG+/NB+","NN/NN","N") nOpcao := Achoice(08,09,9+Len(cLista),84,cLista,.t.) FechaJanela() If nOpcao== 0 Return Nil Endif *cFileDanfe := mDiretorio+cLista[nOpcao] cFileDanfe := mDiretorio+mListaArq[nOpcao,1] Dbcreate('c:\temp\Danfe.dbf',Estru) If cFileDanfe==Nil Alerta('Informe o nome do Danfe em xml') Return nil Endif If ! file(cFileDanfe) Alerta('Arquivo nao Localizado'+cFileDanfe) Return nil Endif CORES() CAIXATEXTO(11,03,14,80,"IMPORTAR DANFE (Xml) ","G/GR+","BG+/NB+","NN/NN","N") cPegaChave := Space(47) @ 12,05 say 'Chave Danfe ' Get cPegaChave Pict "@!" Color('WW+/RR+') Read If LastKey()==27 FechaJanela() Return nil Endif FechaJanela() Linha := Memoread(cFileDanfe) nLinhalidas := 0 Linhatotal := Len(Linha) cLinhaTxt := Linha //-- Pega Id da Nota Fiscal nPos1 := At('Id="',Linha) If nPos1==0 Alerta('Erro no Arquivo '+cFileDanfe+Chr(10)+; 'Id=') Return nil Endif nPos1 := nPos1+Len('Id="') cChave:= Substr(Linha,nPos1,47) //-- Pegando Cgc para Pesquisa do Item na base de SKus nPos1 := At('',Linha) If nPos1==0 Alerta('Erro no Arquivo '+cFileDanfe) Return nil Endif nPos1 := nPos1+Len('') cCGCEmit:= Substr(Linha,nPos1,14) //---Pegando Dados para Lancamento da Capa da Nf If cPegaChave#Substr(cChave,4,47) ALerta('Arquivo Lido nao corresponde ao Desejado!') Endif m_vNf := PegaDados('nNF' ,Alltrim(Linha) ,.f.) m_cNF := PegaDados('nNF' ,Alltrim(Linha) ,.f.) m_serie := PegaDados('serie' ,Alltrim(Linha),.f. ) m_dEmi := PegaDados('dEmi' ,Alltrim(Linha),.f. ) m_Razao := PegaDados('xNome',Alltrim(Linha),.f. ) cMsg := '###### IMPORTA DANFE ######'+CHR(10)+; 'Razao Social:'+m_Razao +CHR(10)+; ' Nr Nota :'+m_cnf + 'Serie Nota :'+m_serie +CHR(10)+; 'Data Emissao:'+m_Demi +CHR(10)+; 'Valor Nota :'+transf(Val(m_vnf),'@EZ 999,999.99')+Chr(10)+; 'Nr.Chave :'+Substr(cChave,4,47) +Chr(10)+; 'CGC Emit :'+cCGcEmit IF MsgConf(cMsg,"1") == .F. Return nil Endif // Uso no Rauxilio cIdNota := StrZero(val(m_cnf),6) Close All /* Abrindo Base de dados */ Sele 1 Use Produto Set index to Produto Sele 2 Use CadSkus Alias Skus Set index to CadSkus Sele 3 use Arqnotas Set index to Arqnotas Sele 4 Use Forneced Set index to Forneced Sele 5 use c:\temp\Rauxilio Alias Rauxilio Set index to c:\temp\rauxilio Sele 6 Centra(24,"Arquivo de Capa de Pedido") Use Compra02 Alias CapaPed Set index to Compra02 Sele 7 Centra(24,"Arquivo de Item de Pedido") Use Compra03 Alias DPedido Set index to Compra03 Sele 8 Use c:\temp\Danfe Alias Danfe Exclusive If Neterr()==.t. Alerta('Terminal ja esta em uso ( Recebimento)') Close All Return nil Endif Index on Id+cProd to c:\temp\danfe Set index to c:\temp\danfe Centra(24,'Lendo DANFE'+cChave) LancCapaNota() Centra(24,'Lendo DANFE (Produtos)'+cChave) Do While .t. *cLidos := PegaDados('prod',Alltrim(cLinhaTxt),.t. ) cLidos := PegaDados('det nItem',Alltrim(cLinhaTxt),.t.,'det' ) Linha := cLidos If Linha=='0' Exit Endif *Alerta(Linha) mcean := PegaDados('cEAN' ,Alltrim(Linha) ,.f.) mxProd := PegaDados('xProd',Alltrim(Linha) ,.f.) mcprod := Alltrim(Str(val(PegaDados('cProd',Alltrim(Linha) ,.f.) ),16)) mqcom := Val(PegaDados('qCom' ,Alltrim(Linha) ,.f.) ) mvprod := Val(PegaDados('vProd',Alltrim(Linha) ,.f.) ) mvuncom := val(PegaDados('vuncom' ,Alltrim(Linha) ,.f.) ) mvIcms := val(PegaDados('pICMS' ,Alltrim(Linha) ,.f.) ) mVpis := val(PegaDados('vPIS' ,Alltrim(Linha) ,.f.) ) mVCofins:= val(PegaDados('vCOFINS' ,Alltrim(Linha) ,.f.) ) mCFOP := PegaDados('CFOP' ,Alltrim(Linha) ,.f.) m_uCom := PegaDados('uCom' ,Alltrim(Linha) ,.f.) m_org := PegaDados('orig' ,Alltrim(Linha) ,.f.) m_cst := PegaDados('CST' ,Alltrim(Linha) ,.f.) cPesq := Substr(cChave,4,47)+mcprod Sele Danfe Go top Seek cPesq If ! found() Append Blank Endif Repla Danfe->Id With Substr(cChave,4,47) Repla Danfe->cnpj With cCGcEmit Repla Danfe->xprod With mxProd Repla Danfe->cean With mcean Repla Danfe->cprod With mcprod Repla Danfe->qcom With mqcom Repla Danfe->vprod With mvprod Repla Danfe->vuncom With mvuncom Repla Danfe->vIcms With mvIcms Repla Danfe->vPis With mVpis Repla Danfe->vCofins With mVCofins Repla Danfe->CFOP With mCfop Repla Danfe->uCom With m_uCom Repla Danfe->Cst With m_org+m_cst nSize := Linhatotal-nLinhaLidas cLinha := Right(cLinhaTxt,nSize) cLinhaTxt := cLinha If nLinhaLidas >= Linhatotal Exit Endif Enddo Go top /* Solicitando Nr de pedido para Anexar aos itens */ nNumerPedido := PegaPedido( ARQNOTAS->CLI_CODI) IF MsgConf("Importar Pedido ?"+chr(10)+; 'Nr :'+nNumerPedido,"1") == .T. /* Gravando os dados dos produtos no Rauxilio.dbf */ Sele ArqNotas Trav_reg() Repla Arqnotas->PEDNUMERO With StrZero(Val(nNumerPedido),7) Destrava() /* Processando C:\temp\Rauxilio.dbf */ ProcessaDanfe(nNumerPedido) Endif Return nil //------------------------------------------------------ Function PegaDados(cProc,cLinha,lItem,cTexto2) Local InicioDoDado :=Iif(cTexto2==Nil,"<"+cProc+">" , "<"+cProc ) Local FinalDoDado := Iif(cTexto2==Nil,""+cProc+">",''+cTexto2+'>') Local nPosIni := At(InicioDoDado,cLinha) Local nPosFim := At(FinalDoDado,cLinha) Local cRet := '0' If nPosIni==0 .or. nPosFim==0 Return cRet Endif cRet := Substr(cLinha,nPosIni+Len(IniciodoDado),nPosFim-nPosIni-Len(FinalDoDado)+1) If lItem ==.t. nLinhalidas += nPosFim Endif Return ( cRet) //------------------------------------------------------------ Static Function ProcessaDanfe(cIdPedido) Local cIdForne:= '' Sele Danfe nSeq := 0 Go top Do While ! Eof() Centra(24,'Lancando Item via DANFE.....'+Str(nSeq++,5)) cidforne := '' Sele Forneced OrdsetFocus('fornece1') Go top Seek StrZero(Val(cCGCEmit),15) If Found() cidForne := Forneced->Codigo If ! Empty(Forneced->Empr_Princ) cidForne := Forneced->Empr_Princ Endif Endif mCodigo := '' // Codigo Item mAlterar:= .F. // Faz a inclusao cIdItem := Substr(Danfe->cProd+Space(16),1,16) Sele Skus OrdSetfocus('Skus03') Go Top Seek ( cIdforne + cIdItem) If ! Found() // Grava Erro Sele Danfe Repla Danfe->Ocorrenc With '1-Codigo Invalido JAF' Repla Danfe->ErroJAF With .t. Skip+1 Loop Endif mCodigo := Skus->Cod_Prod //---Validando Codigo de Barras para Venda If !Empty(Danfe->cEan) OrdSetfocus('Skus01') Go top Seek StrZero(Val(Danfe->cEan),16) If ! Found() Sele Danfe Repla Danfe->ErroJAF With .t. Repla Danfe->Ocorrenc With '3-Ean Indisponivel para Venda' Endif Endif Sele Produto OrdsetFocus('Prod01') Go top Seek mCodigo If ! Found() // Erro Sele Danfe Repla Danfe->ErroJAF With .t. Repla Danfe->Ocorrenc With '2-Skus Desativado' Skip+1 Loop Endif If Produto->Foralinha$"SE" Sele Danfe Repla Danfe->ErroJAF With .t. Repla Danfe->Ocorrenc With '4-Fora Linha' Endif mTit_Emb := Produto->Tit_Emb mQtd_Emb := Produto->Embalcompr lPed := .t. cMsg := '' Sele DPedido OrdSetFocus('DCmp01') Go top Seek mCodigo+cIdPedido If ! Found() cMsg := '## Sem Pedido (Localizado)##' lPed := .f. Else mQtd_Emb := DPedido->EmbalCompr mTit_emb := DPedido->EMBALTITUL If (Dpedido->QPedido - Dpedido->Qtd_Receb) <= 0 cMsg := '## Sem Ped.(Saldo) ##' lPed := .f. Endif vQtdPedido := Dpedido->QPedido - Dpedido->Qtd_Receb If vQtdPedido < Danfe->qCom cMsg := 'Bola :'+Str(vQtdPedido - Danfe->qCom,7,3) Endif Endif Sele Rauxilio Set Filter to // OrdSetFocus("Raux1") Go top SEEK ( MCODIGO + CIDNOTA ) If Found() mAlterar := .t. Endif mPQuanti1 := 0 mPCusto := Danfe->vProd / Danfe->qCom mPDescon := 0 mPTribut := space(1) mPVenda := 0 *mTit_Emb := Produto->Tit_Emb *mQtd_Emb := Produto->Embalcompr mTxa_Fre := Produto->Frete mPQuanti := Danfe->qCom // Danfe->vUnCom mPAcresc := 0 nValorSubst:= 0 *mTit_Emb := "UND" cCst := Danfe->CST mPcusto := ( (mPcusto - ( ( mPcusto * mPDescon ) /100 )) + ( ( mPcusto * mPAcresc ) /100 ) ) mCustoNovo := mPcusto / mQtd_Emb xTxaRateio := ( ( mPcusto ) * (mPQuanti + mPQuanti1) ) * mQtd_Emb xTxaRateio := ( (xTxaRateio / ArqNotas->ValorFrete) * 100 ) // 100 Colocado mTxa_Fre := 0 // Iif(ArqNotas->ValorFrete <= 0,0,xTxaRateio) *mQtd_Emb := 1 Sele Rauxilio If mAlterar == .F. // Faz a Inclusao no Rauxilio Append blank Endif If Danfe->uCom=="UN" .or. Danfe->uCom=="KG" mQtd_Emb := 1 Endif Trav_reg() repla RAUXILIO->Qentrada with mPQuanti * mQtd_Emb repla RAUXILIO->Qentrad1 with mPQuanti1 repla RAUXILIO->CUSTO_ATUA with mPcusto repla RAUXILIO->Dentrada with date() repla RAUXILIO->Tit_Embal with 'UND' // mTit_Emb repla RAUXILIO->Qtd_Embal With 1//mQtd_Emb Repla Rauxilio->cst_nf With cCst Repla Rauxilio->ValorSubst With nValorSubst repla RAUXILIO->tp_mvto with "C" repla RAUXILIO->nf_cfo With Danfe->CFOP repla RAUXILIO->codigo with produto->codigo repla RAUXILIO->descricao with produto->descricao repla RAUXILIO->Venda_atua with Produto->Venda repla RAUXILIO->CUSTO_ANTI with PRODUTO->CUSTO repla RAUXILIO->DentradaA with PRODUTO->DT_CUSTO repla RAUXILIO->icmsc with produto->icmsc repla RAUXILIO->icmsv with produto->icmsv repla RAUXILIO->depto with produto->depto repla RAUXILIO->MARG_NV1 with produto->MARGEM repla RAUXILIO->MARG_NV2 with produto->MG2 repla RAUXILIO->MARG_NV3 with produto->MG3 repla RAUXILIO->TpoTrbto with Produto->TpTributad repla RAUXILIO->Red_Calc With Produto->PmargReduc Repla RAUXILIO->TxaFrete With Produto->Frete Repla RAUXILIO->TxaIpi With Produto->Ipi repla RAUXILIO->nf_num with ARQNOTAS->NUMERO_NF repla RAUXILIO->nf_serie with ARQNOTAS->SERIE_NF repla RAUXILIO->nf_dest with ARQNOTAS->CLI_CODI repla Rauxilio->VencNota With Arqnotas->vencto_1 If RAUXILIO->ValorIpi==0 If RAUXILIO->TxaIpi > 0 Repla RAUXILIO->ValorIpi With ( ( mCustoNovo * RAUXILIO->TxaIpi / 100 ) *mQtd_Emb ) * (mPQuanti +mPQuanti1 ) Endif Endif Repla Rauxilio->SeqNota With nSeq Repla RAUXILIO->Dentrada with date() Repla RAUXILIO->CUSTO_ANTI with PRODUTO->CUSTO If lPed==.t. Repla Rauxilio->Qtd_EmbaR With DPedido->EmbalCompr Repla Rauxilio->Ofertar With DPedido->Ofertar repla RAUXILIO->icmsc with DPedido->icmsc Repla Rauxilio->ValorSubst With Dpedido->St If Dpedido->Ipi#0 Repla Rauxilio->ValorIpi With Dpedido->Ipi Endif Repla RAUXILIO->Pedi_Nume With cIdPedido Repla Rauxilio->CustoIdeal With DPedido->CustoFinal Repla Rauxilio->Desc_finan With DPedido->Desc_finan Repla Rauxilio->AbatFinan With DPedido->AbatFinan Repla Rauxilio->Pedi_vUni with Dpedido->Preco / Dpedido->EmbalCompr Repla RAUXILIO->CUSTO_ATUA with Dpedido->Preco / Dpedido->EmbalCompr nSaldoPedido := (Dpedido->QPedido * Dpedido->EmbalCompr ) - Dpedido->Qtd_Receb If nSaldoPedido <= 0 Repla Rauxilio->Pedi_Qtd with 0 Else Repla Rauxilio->Pedi_Qtd with nSaldoPedido Endif Endif Destrava() Sele Danfe *Repla Danfe->Ocorrenc With cMsg *Repla Danfe->ErroJAF With .t. Skip+1 Enddo // Mostra Erros Set filter to Danfe->ErroJAF==.t. Index on cProd to c:\temp\ErroDanfe Set device to Printer Set printer to c:\temp\danfe.txt Go top SetPrc(0,0) Lin := 0 @ Lin++,00 say Repli('-',80) @ Lin++,00 say padc('JAF DESENV. LTDA - IMPORTACAO ARQUIVOS',80) @ Lin++,00 say padc('CRITICA IMPORTACAO DANFE',80) @ Lin++,00 say Repli('-',80) @ Lin++,00 say 'FORNECEDOR :'+m_Razao @ Lin++,00 say 'Nr.Nota :'+m_cNF +' Serie :'+m_serie @ Lin++,00 say 'Nr.Chave :'+Substr(cChave,4,47) @ Lin++,00 say Repli('-',80) @ Lin++,00 say 'Seq. Codigo ### Produto ### Quantidade ### Erro Reportado ###' @ Lin++,00 say Repli('-',80) Lin++ ntotalNaoImportado := 0 Do while ! Eof() cString := Str(Recno(),3)+' '+; Substr(Danfe->cProd,1,6)+'-'+Substr(danfe->xProd,1,30)+' '+; Str(Danfe->qCom,11,3)+' '+; Danfe->Ocorrenc @ Lin++,00 say cString ntotalNaoImportado += Danfe->vProd Skip+1 Enddo @ Lin++,00 say Repli('-',80) @ lin++,40 say 'TOTAL NAO IMPORTADO :'+transf(ntotalNaoImportado,"@EZ 999,999.99") Set device to Screen Set printer off preview("danfe") Return Nil //------------------------------------------------ Static Function LancCapaNota() Local Ok := .t. Local cChaveNota Local InicioDoDado := '' Local FinalDoDado := '' Local nPosIni := At(InicioDoDado,Linha) Local nPosFim := At(FinalDoDado,Linha) Local cRet := '0' If nPosIni==0 .or. nPosFim==0 Return cRet Endif mNotaNumero := StrZero( Val(PegaDados('nNF' ,Alltrim(Linha) ,.f.)),6) mNotaSerie := PegaDados('serie' ,Alltrim(Linha) ,.f.) mDataLanca := Date() mEmissao := Char2Data( PegaDados('dEmi' ,Alltrim(Linha) ,.f.) ) mDataLanca := Date() mAgenda := '003' xEstadoForn := PegaDados('UF' ,Alltrim(Linha) ,.f.) mCodigo := Forneced->Codigo mVencto_1 := Char2Data( PegaDados('dVenc' ,Alltrim(Linha) ,.f.) ) //-- Apenas Valores de Totais cRet := Substr(Linha,nPosIni+Len(IniciodoDado),nPosFim-nPosIni-Len(FinalDoDado)+1) Linha := cRet mContabil := Val(PegaDados('vNF' ,Alltrim(Linha) ,.f.)) mVlrVenc1 := Val(PegaDados('vNF' ,Alltrim(Linha) ,.f.)) mTotalProd := Val(PegaDados('vProd' ,Alltrim(Linha) ,.f.)) mTotalIcms := Val(PegaDados('vICMS' ,Alltrim(Linha) ,.f.)) mBaseIcms := Val(PegaDados('vBC' ,Alltrim(Linha) ,.f.)) mFreteNf := 0 mTotalIpi := 0 mEspecie := 'NFe' mBaseSubs := 0 mValorSubs := 0 mCodFisc := '???' mValorOutro := 0 xPediUsar := '' // nNumerPedido mCodigo := '' Sele Forneced OrdsetFocus('fornece1') Go top Seek StrZero(Val(cCGCEmit),15) If ! Found() Return .f. Endif mCodigo := Forneced->Codigo MNOTASERIE := Substr(MNOTASERIE+Space(4),1,4) cChaveNota := MNOTANUMERO+MNOTASERIE+mCodigo // Quando o vencimento vir embranco pegar o do cadastro! If Empty(mVencto_1) mVencto_1 := mEmissao + val(Forneced->Pagto) Endif Sele ArqNotas ORDSETFOCUS("ArqNf8") Go Top Seek (cChaveNota) IF ! FOUND() Append Blank ENDIF Trav_reg() repla ArqNotas->data_lc with mDataLanca repla ArqNotas->data_nf with mEmissao Repla ArqNotas->Lanc_Livro with mDataLanca repla ArqNotas->agenda with mAgenda repla ArqNotas->movto with "C" repla ArqNotas->Status with "I" repla ArqNotas->valor_nf with mContabil repla ArqNotas->numero_nf with mNotaNumero repla ArqNotas->serie_nf with mNotaSerie repla ArqNotas->cli_codi with mCodigo repla ArqNotas->cli_nome with Forneced->Razao repla ArqNotas->vencto_1 with mVencto_1 *repla ArqNotas->vencto_2 with mVencto_2 *repla ArqNotas->vencto_3 with mVencto_3 *repla ArqNotas->vencto_4 with mVencto_4 repla ArqNotas->ctrl_int with "I" Repla ArqNotas->VlrVenc1 With mVlrVenc1 *Repla ArqNotas->VlrVenc2 With mVlrVenc2 *Repla ArqNotas->VlrVenc3 With mVlrVenc3 *Repla ArqNotas->VlrVenc4 With mVlrVenc4 Repla ArqNotas->ValorProd With mTotalProd Repla ArqNotas->ValorIcms With mTotalIcms Repla ArqNotas->BaseIcms With mBaseIcms Repla ArqNotas->ValorFrete With mFreteNf Repla ArqNotas->ValorIpi With mTotalIpi Repla ArqNotas->Especie_Nf With mEspecie Repla ArqNotas->RotaEntrg With xEstadoForn Repla ArqNotas->Uf_Nota With Forneced->UF Repla ArqNotas->BaseSubstr With mBaseSubs Repla ArqNotas->ValorSubst With mValorSubs Repla ArqNotas->CodContab With mCodFisc Repla ArqNotas->ValorOutro With mValorOutro *Repla Arqnotas->PEDNUMERO With StrZero(Val(xPediUsar),7) Repla Arqnotas->Loja With StrZero(val(wLojaEstq),2) Repla Arqnotas->MsgAdicio With Substr(cChave,4,47) Destrava() Return Ok //--------------------------------------- Static Function Char2Data(cString) Local i Local lRet := '' Local cAno := Substr(cString,1,4) Local cMes := Substr(cString,6,2) Local cDia := Substr(cString,9,2) lRet := cDia+'/'+cMes+'/'+cAno Return Ctod(lRet) //------------------------------------------------------------ Static Function PegaPedido(mcodiForne) Sele Forneced OrdSetFocus("Forneced") Go Top Seek mCodiForne If Found() .And. ! Empty(Forneced->Empr_Princ) mCodiForne := Forneced->Empr_Princ Endif Cores() CAIXATEXTO(03,00,24,79,"Pedido colocado pra este fornecedor ","BG+/B+","NN/NN","N","GR+/NN") @ 04,05 say "Fornecedor :" @ 05,01 say Repli("Ä",78) @ 20,01 say Repli("Ä",78) Sele CapaPed OrdSetFocus("CCmp02") Seek mCodiForne If ! Found() Alerta("Fornecedor sem pedido colocado !!") Fechajanela() Select(DbaOld) RestScreen(00,00,24,79,Tela01) Return nil Endif Index On CapaPed->DtaEntreg + CapaPed->DtaEmissa To c:\temp\xPedido ; While ( CapaPed->CodiForne== mCodiForne ) Declare Dados ; Declare Cabeca Dados[1]="CapaPed->Situacao+Iif(empty(CapaPed->Anotacoes),' ','*')" Dados[2]="CapaPed->NumPedido" Dados[3]="Dtoc(CapaPed->DtaEmissa)" Dados[4]="Dtoc(CapaPed->DtaEntreg)" Dados[5]="Transf(CapaPed->ValorTota - CapaPed->ValorDesc + CapaPed->ValorAcre,'@E 9999,999.99')" Dados[6]="Transf(CapaPed->ValorBoni, '@E 9999,999.99')" Dados[7]="Transf(CapaPed->Valor_rec, '@E 9999,999.99')" Dados="Transf(CapaPed->DiasVenct, '@E 99')" Cabeca[1]:= "Sit." Cabeca[2]:= "N£mero" Cabeca[3]:= "Emiss„o" Cabeca[4]:= "Entrega" Cabeca[5]:= "Total" Cabeca[6]:= "Bonif." Cabeca[7]:= "Baixado" Cabeca:= "Prazo" Go Bott Dbedit(06,01,20,78,Dados,"Tlc_Danfe","",Cabeca,"ß","³","Ü", NIL ) Fechajanela() RESTSCREEN(00,00,24,79, TELA01 ) RETURN (CapaPed->NumPedido) //------------------------------------------------------------ Function Tlc_Danfe(Reg) DO CASE Case Reg == 3 Alerta("Sem pedido Colocado!!!") VoltaFoco() Return 0 Case Reg == 4 Do Case Case Lastkey()=27 Return 0 Case LastKey()= -1 *Rece_Item_Pedido(CapaPed->NumPedido) VoltaFoco() Case LastKey()= -2 If MSGCONF("Digita Automatico ?","1") == .T. lCota := .f. If ! Empty(CapaPed->NumCotacao) .or. Capaped->NumCotacao#'00000' lCota := .t. Endif *Rece_Intg_Pedido(ArqNotas->Numero_nf,CapaPed->NumPedido,lCota) Sele ArqNotas Trav_Reg() Repla ArqNotas->PedNumero With CapaPed->NumPedido Destrava() Endif Return 0 Case LastKey()= -3 DbaOld := Select() *Rela_Mensag(CapaPed->NumPedido) Select(DbaOld) Set index to c:\temp\xPedido VoltaFoco() Return 1 EndCase EndCase Return //-------------------------------------------- Static Function PegaNomeArquivo(cArq) Local cFileDanfe := cArq Local Linha := Memoread(cFileDanfe) Local nLinhalidas := 0 Local Linhatotal := Len(Linha) Local cLinhaTxt := Linha Local m_cNF := PegaDados('nNF' ,Alltrim(Linha) ,.f.) Local m_serie := PegaDados('serie' ,Alltrim(Linha),.f. ) Local m_dEmi := PegaDados('dEmi' ,Alltrim(Linha),.f. ) Local m_Razao := PegaDados('xNome',Alltrim(Linha),.f. ) cString := "NF:"+m_cNF+' / '+m_serie+" - "+m_Razao+; ' Emissao '+m_dEmi Return cString
  9. Utilizo neste formato e nunca tive problemas, neste caro estou copiando o arquivo direto para porta com ou Lpt, mais tambem pode ser enviado linha a linha pela serial, tenho isso usando hbcomm. Frazato O0220 M3500 e c0000 f000 L C0020 H12 D11 SC PC R0000 z W ^01 191200300940010CR DENTAL ICE-FRESH MENTA 90G 191200300500005DE 192200500200005 1,05 192200200500120POR 192400700000152 0,89 Q0001 E
  10. Esta rotina faz a geracao do arquivo txt para a balanca e essa variavel faz o controle se o produto sera peso variavel ou uma etiqueta com peso fixo. mPeso := Iif(PRODUTO->PESO_VARIA==.T.,"0","1") So de uma ajustada as suas necessidades, o lance de enviar o descritivo( receitas ) pode retirar. Frazato sistema_jaf@hotmail.com //---------------------------------------- Function G_Toledo_Txt() Local LocaArq := Lerparam("DIRETORIO_EXPORTACAO") Local NomeArq := "TxItens.Txt" Local mSizeStr:= Val(Lerparam("TAMANHO_LINHA_RECEITA_TOLEDO")) Centra(24,"Gerando Arquivo Toledo:"+NomeArq) Close all Cria_Texto() Close All Sele 1 Use CadRcBal Alias Texto Set Index to CadRcBal Sele 2 Use Produto Set index to Produto OrdSetFocus("Prod03") Go top nTotReg := reccount() Set Device to Printer Set Printer to (LocaArq+NomeArq) SetPrc(0,0) Lin := 0 nReg := 0 Do While ! Eof() Set device to Screen Centra(24,"Aguarde termino :"+ Str((nreg++)/nTotReg*100,7,2)+"%") Set device to Printer If Produto->ProdPesado == "N" Skip + 1 Loop Endif If Produto->Venda <= 0 Skip + 1 Loop Endif * If Produto->ForaLinha == "S" * Skip + 1 * Loop * Endif If Val(Produto->Ean) <= 0 Skip + 1 Loop Endif If Val(Produto->Ean) > 9999 Skip + 1 Loop Endif mCodigo := StrZero(Val(Produto->Ean),6) mDescri := Substr(Produto->Referencia,1,22) If ( Date() >= Produto->Ofer_Inici .And. Date() <= Produto->Ofer_Termi .And.; Produto->Ofer_Valor > 0) mVenda:= strzero(Produto->Ofer_Valor * 100, 6) Else mVenda:= strzero(Produto->Venda * 100, 6) Endif mValid := StrZero(Val(Produto->Validade),3) Sele Texto Go top Seek Produto->Codigo If Found() mDescrit := Substr(Texto->Descri1,1,mSizeStr)+; Substr(Texto->Descri2,1,mSizeStr)+; Substr(Texto->Descri3,1,mSizeStr)+; Substr(Texto->Descri4,1,mSizeStr)+; Substr(Texto->Descri5,1,mSizeStr) Else mDescrit := "" Endif mPeso := Iif(PRODUTO->PESO_VARIA==.T.,"0","1") @ Lin,00 say "0101"+mPeso+; mCodigo+; mVenda +; mValid +; mDescri+; Space(30)+; //28 mDescrit Lin++ Sele Produto Skip + 1 Enddo Close All Set printer off Set device to Screen Return nil
  11. Caso esteja gerando arquivo txt para balancao toledo prix e queira fazer a venda por unidade na balança( Simplesmente gerar um etiqueta com peso fixo), basta vc informar a balanca que o produto nao e peso variavel, ai muda o processo de pesagem na balanca, vc tem que utilizar uma funcao que muda de balanca pra balanca mais e simples uso muito isso aqui no mercado, caso queira posso lhe enviar o arquivo txt que utilizom ( txitens.txt) Frazato
×
×
  • Create New...