Jump to content
Fivewin Brasil

Ariston Santos

Membros
  • Posts

    500
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by Ariston Santos

  1. Oi, amigo. Você pode gerar as tela no RESOURCE WORKSHOP e salvar como RC, como o mesmo nome do PRG principal. Compile o RC junto com seu projeto que funciona. O código abaixo (compila.bat) mostra como eu faço para compilar o meu projeto usando esta técnica. Você pode adaptá-lo: @ECHO OFF CLS ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ECHO ³ FiveWin for Pocket PC - February 2010 Harbour development power ³Ü ECHO ³ © FiveTech Software, 1993-2010 for Microsoft Windows Pocket PC ³Û ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß if A%1 == A GOTO :SINTAX if NOT EXIST %1.prg GOTO :NOEXIST ECHO Compiling... IF "%FWDIR%" == "" set FWDIR="c:\fwppc" set hdir=c:\harbour_ce set hdirc=%hdir%\bin set hdirl=%hdir%\lib set fwppc="c:\fwppc" set vcdir=c:\vce set include=%vcdir%\include\arm;%hdir%\include set lib=%vcdir%\lib;%hdir%\lib set emulator_shared_folder=c:\pocketpc %hdirc%\harbour %1 /n /i%fwppc%\include;%hdir%\include /p %2 %3 > clip.log %hdirc%\harbour clientes /n /i%fwppc%\include;%hdir%\include /p %2 %3 >> clip.log %hdirc%\harbour pedidos /n /i%fwppc%\include;%hdir%\include /p %2 %3 >> clip.log %hdirc%\harbour produtos /n /i%fwppc%\include;%hdir%\include /p %2 %3 >> clip.log %hdirc%\harbour criadbf /n /i%fwppc%\include;%hdir%\include /p %2 %3 >> clip.log %hdirc%\harbour funcoes /n /i%fwppc%\include;%hdir%\include /p %2 %3 >> clip.log IF ERRORLEVEL 1 GOTO COMPILEERROR @type clip.log %vcdir%\bin\clarm -W3 -c /DARM /DUNICODE /I%hdir%\include /I%fwppc%\include clientes.c %vcdir%\bin\clarm -W3 -c /DARM /DUNICODE /I%hdir%\include /I%fwppc%\include pedidos.c %vcdir%\bin\clarm -W3 -c /DARM /DUNICODE /I%hdir%\include /I%fwppc%\include produtos.c %vcdir%\bin\clarm -W3 -c /DARM /DUNICODE /I%hdir%\include /I%fwppc%\include criadbf.c %vcdir%\bin\clarm -W3 -c /DARM /DUNICODE /I%hdir%\include /I%fwppc%\include funcoes.c %vcdir%\bin\clarm -W3 -c /DARM /DUNICODE /I%hdir%\include /I%fwppc%\include %1.c :ENDCOMPILE IF EXIST %1.rc %vcdir%\bin\rc -r -d_CE %1 echo %1.obj > msvc.tmp echo criadbf.obj >> msvc.tmp echo produtos.obj >> msvc.tmp echo pedidos.obj >> msvc.tmp echo clientes.obj >> msvc.tmp echo funcoes.obj >> msvc.tmp echo %fwppc%\lib\FiveCE.lib %fwppc%\lib\FiveCEC.lib >> msvc.tmp echo %hdirl%\hbrtl.lib >> msvc.tmp echo %hdirl%\hbvm.lib >> msvc.tmp echo %hdirl%\gtgui.lib >> msvc.tmp echo %hdirl%\hblang.lib >> msvc.tmp echo %hdirl%\hbmacro.lib >> msvc.tmp echo %hdirl%\hbrdd.lib >> msvc.tmp echo %hdirl%\rddntx.lib >> msvc.tmp echo %hdirl%\rddcdx.lib >> msvc.tmp echo %hdirl%\rddfpt.lib >> msvc.tmp echo %hdirl%\hbsix.lib >> msvc.tmp echo %hdirl%\hbdebug.lib >> msvc.tmp echo %hdirl%\hbcommon.lib >> msvc.tmp echo %hdirl%\hbpp.lib >> msvc.tmp echo %hdirl%\hbcpage.lib >> msvc.tmp echo %hdirl%\hbwin.lib >> msvc.tmp rem echo %hdirl%\tip.lib >> msvc.tmp echo %hdirl%\gtwvt.lib >> msvc.tmp echo %hdirl%\hbpcre.lib >> msvc.tmp echo %vcdir%\lib\arm\coredll.lib >> msvc.tmp echo %vcdir%\lib\arm\corelibc.lib >> msvc.tmp echo %vcdir%\lib\arm\aygshell.lib >> msvc.tmp echo %vcdir%\lib\arm\ws2.lib >> msvc.tmp echo %vcdir%\lib\arm\mfcce400.lib >> msvc.tmp echo %vcdir%\lib\arm\ole32.lib >> msvc.tmp echo %vcdir%\lib\arm\oleaut32.lib >> msvc.tmp echo %vcdir%\lib\arm\olece400.lib >> msvc.tmp echo %vcdir%\lib\arm\uuid.lib >> msvc.tmp echo %vcdir%\lib\arm\ceshell.lib >> msvc.tmp echo %vcdir%\lib\arm\commctrl.lib >> msvc.tmp echo %vcdir%\lib\arm\wininet.lib >> msvc.tmp echo %vcdir%\lib\arm\CellCore.lib >> msvc.tmp echo %vcdir%\lib\arm\winsock.lib >> msvc.tmp echo %vcdir%\lib\arm\icmplib.lib >> msvc.tmp IF EXIST %1.res echo %1.res >> msvc.tmp %vcdir%\bin\link @msvc.tmp /nologo /SUBSYSTEM:WINDOWSCE,4.20 /MACHINE:ARM /ARMPADCODE:NO IF ERRORLEVEL 1 GOTO LINKERROR ECHO * Aplicativo construido com sucesso * rem copy /y %1.exe %emulator_shared_folder% GOTO EXIT ECHO :COMPILEERROR @type clip.log ECHO * Compile errors * GOTO EXIT :LINKERROR ECHO * Linking errors * GOTO EXIT :SINTAX ECHO SYNTAXE: c [programa] {-- Nao especifique a extensao .PRG ECHO {-- Don't specify .PRG extension GOTO EXIT :NOEXIST ECHO The specified PRG %1 does not exist :EXIT rem delete temporary files IF EXIST *.c @del *.c IF EXIST *.obj @del *.obj IF EXIST *.ppo @del *.ppo IF EXIST *.res @del *.res IF EXIST *.rws @del *.rws IF EXIST *.~rc @del *.~rc IF EXIST msvc.tmp @del msvc.tmp id=code>id=code>* -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  2. Oi a todos. Uso tanto o Emissor Gratuito como o ACBrNFeMonitor. A versão atual do Emissor gratuito (a partir da 2.0.4 para NFe 2.0) não aceita mais importação do TXT quando a NFE ja consta como Autorizada. Inclusive, ao exportar para XML já é possível alterar no nome do arquivo, o que não era possível nas versões anteriores. O ACBrNFeMonitor faz tudo o que promete. Não tem bugs e também é grátis, mas é possível fazer donativos para que a equipe de desenvolvedores sinta ânimo para continuar nos ajudando. Vale ressaltar que nada substitui soluções pagas, que nos dão a possibilidade de receber todo o suporte necessário. Aos que desejarem receber ajuda sobre ACBrNFeMonitor, visto que já tenho experência no uso dessa ferramenta, me coloco a disposição para colaborar. Favor entrar em contato polo e-mail ariston.ap@hotmail.com.br Não vou fornecer ajudar sobre ACBrNFeMonitor por meio deste forum (apesar de ter feito isso uma vez), pois acho que seria uma injustiça para com o Sr. Gilmer, cuja solução é usada por muitos e, pelo que notei, estão todos satisfeitos. * -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  3. Tente assim: FUNCTION PegaItens() local oLbx, oSay local cItem := "Two" aItms := { "Um", "Dois", "Tres", "Quatro", "Cinco" } DEFINE DIALOG oTeste FROM 1, 1 TO 35, 100 ; TITLE "Testando ListBox, Como Pegar os Items?" @ 2, 2 LISTBOX oLbx VAR cItem ; ITEMS aItms ; OF oTeste SIZE 200, 150 ; COLOR "W+/BG" ; ON CHANGE oSay:Refresh() ; MESSAGE "Como Pego Todos os Items da ListBox?" @ 2, 40 SAY oSay VAR cItem SIZE 80, 20 OF oTeste @ 8, 42 BUTTON "&Adicionar " SIZE 80, 20 OF oTeste ; MESSAGE "Add a new item to the listbox" ; ACTION ( oLbx:Add( Time() ), MsgInfo( Len( oLbx:aItems ), "Como Pegar?" ) ) @ 11, 42 BUTTON "&Saida " SIZE 80, 20 OF oTeste ; ACTION oTeste:End() ; MESSAGE "Saida " ACTIVATE DIALOG oTeste CENTERED IF LEN(aItms) > 0 cItem := "" FOR N := 1 TO LEN(aItms) cItem += aItms[N] + CRLF NEXT MsgInfo(cItem, "Itens") ENDIF RETURN NIL id=code>id=code>* -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  4. Ok. Note que o exemplo que postei minimiza todos os aplicativos abertos, exceto o seu. Vc precisa modificar a função para que todos, inclusive o seu aplicativo, sejam minimizados. Para isso, basta deletar esta parte do código: ".And. hWnd != hMWnd " * -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  5. Se a intenção é apenas ter acesso à área de trabalho, sem precisar ser via código, tecla Windows + D (Janela+D). Se for via código, tente este código: #include "FiveWin.ch" #Define SW_NORMAL 1 //\ #Define SW_MAXIMIZE 3 // | Para WinExec #Define SW_MINIMIZE 6 // | e ShowWindow #Define SW_RESTORE 9 /// #define GW_HWNDFIRST 0 #define GW_HWNDLAST 1 #define GW_HWNDNEXT 2 #define GW_HWNDPREV 3 #define GW_OWNER 4 #define GW_CHILD 5 **+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+** FUNCTION MinimizeAll(hMWnd) LOCAL ahWnd := {} LOCAL hWnd := GETWINDOW( hMWnd, GW_HWNDFIRST ) SYSREFRESH() While hWnd != 0 If GETWINDOW( hWnd, GW_OWNER )=0 .And. ISWINDOWVISIBLE( hWnd ) .And. hWnd != hMWnd .AND.; !EMPTY( GETWINDOWTEXT( hWnd ) ) .And. !( GETWINDOWTEXT( hWnd ) == "Program Manager" ) AADD( ahWnd, hWnd ) EndIf hWnd = GETWINDOW( hWnd, GW_HWNDNEXT ) End // Fecha as janelas diferentes * Aeval(ahWnd,{|hWnd| PostMessage(hWnd,WM_CLOSE,0,0)}) // Minimiza as janelas diferentes Aeval(ahWnd,{|hWnd| ShowWindow( hWnd, SW_MINIMIZE )}) // Trás a janela atual para frente * BringWindowToTop(hMWnd) SysRefresh() Return(nil) id=code>id=code>* -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  6. Olá, amigo. Use o SDK do leitor. Geralmente vem um manual ensinando a fazer a comunicação com o Leitor via SDK. Pelo menos o Hamster da Nitgen é muito fácil de obter a digital dessa forma. Informe aqui: • A marca e Fabricante do leitor • Site para a gente procurar documentação e exemplos. Com estas informações fica mais fácil de tentar ajudar. * -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  7. Olá, amigo. Tente assim: T_ENTRADA := '00:00:00' T_SAIDA_ALMOCO:= '00:00:00' T_RETORNO_ALMOCO:= '00:00:00' T_SAIDA:= '00:00:00' // Inicio do calculo T_PRIMEIRO := SECS( ELAPTIME( T_ENTRADA, T_SAIDA_ALMOCO ) ) T_SEGUNDO := SECS( ELAPTIME( T_RETORNO_ALMOCO, T_SAIDA ) ) T_TOTAL := MUNU(T_PRIMEIRO + T_SEGUNDO) //----------------------------------------------------------------------------// FUNCTION MINU(wsegu) LOCAL hora:="00:00:00",wh, wm, ws, hm store 0 to wh, wm, ws, hm if wsegu > 0 wh := int(wsegu/3600) wm := int(mod(wsegu,3600)/60) endif hora:=IIF(wh < 100 ,strzero(wh,2), ALLTRIM(str(wh)))+":"+strzero(wm,2)+":"+strzero(ws,2) RETURN hora id=code>id=code>* -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  8. Tente este exemplo aDesc := {"Fornecedor um","Fornecedor dois","Fornecedor três","Fornecedor quatro"} cSel := MsgSelect( aDesc , nil , "Pesquisa de fornecedores") //-------------------------------------------------------------------------// function MsgSelect( aItems, cValue, cTitle, cTitBt1, cTitBt2 ) LOCAL oDlg, lOk, cDescr, nScan DEFAULT cTitle := "Selecione" DEFAULT cTitBt1 := "&Ok" DEFAULT cTitBt2 := "Ca&ncelar" DEFAULT cValue := aItems[1] nScan := 1 cDescr := SPACE(40) lOk := .F. aItems := ASORT(aItems) DEFINE DIALOG oDlg FROM 5,10 TO 27, 54 TITLE cTitle @ 01,02 GET cDescr SIZE 145,10 OF oDlg ; ON CHANGE ( ::Assign() ,; cGet := SubStr( cDescr, 1, ::nPos - 1 ) + Chr( nKey ) ,; AEVAL(aItems ,{|cData,nItem| IIF( LEFT(cData,LEN(cGet)) = cGet, nScan:=nItem, nScan:=nScan)}),; oList:Select(nScan) ) @ 02,02 LISTBOX oList VAR cValue ITEMS aItems SIZE 145, 100 OF oDlg @ 08,07 BUTTON cTitBt1 OF oDlg SIZE 40, 12 ACTION (lOk := .T., oDlg:End()) DEFAULT @ 08,16 BUTTON cTitBt2 OF oDlg SIZE 40, 12 ACTION (lOk := .F., oDlg:End()) CANCEL ACTIVATE DIALOG oDlg CENTERED RETURN cValue //-------------------------------------------------------------------------// id=code>id=code>* -------------------- * Ariston Santos FWPPC / Fwh 6.12 Free / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  9. Simplifiquei a codificação. Passe como parâmetro da função TestaImpr() o nome do arquivo.txt. Se o txt estiver numa pasta diferente da do executável, informe o caminho completo. Ex: TestaImpr(cGetFile( "Arquivo de texto|*.txt", "Selecione o arquivo" )) FUNCTION TestaImpr(cFileTxt) DEFAULT cFileTxt := ".\EDVADO.TXT" cTxt := RTRIM(MEMOREAD(cFileTxt)) nLen := LEN(RTRIM(MEMOLINE(cTxt,130,1))) mTtL1:= MLCOUNT(cTxt,nLen) PRINTER oPrn NAME "Cupom do movimento" DEFINE FONT oFont NAME "Courier New" SIZE 0, -8 OF oPrn DEFINE FONT oFnt2 NAME "Courier New" SIZE 0, -8 BOLD OF oPrn mLarg := (oFnt2:nHeight*1.2) oPrn:SetPage( 256 ) oPrn:SetSize( 1000, mLarg * 1.5) FOR Y := 1 TO mTtL1 IF Y > 1 oPrn:StartPage() oPrn:Say(3, 0, MEMOLINE(cTxt,nLen,Y), oFnt2 ) oPrn:EndPage() ENDIF NEXT oPrn:Preview() RELEASE FONT oFont, oFnt2 RETURN NIL id=code>id=code>Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  10. Tente assim: cTxt := RTRIM(MEMOREAD(cFileTxt)) nLen := LEN(RTRIM(MEMOLINE(cTxt,130,1))) mTtL1:= MLCOUNT(cTxt,nLen) PRINTER oPrn TO ALLTRIM(cVndImp) NAME "Cupom do movimento" // PREVIEW DEFINE FONT oFont NAME "Courier New" SIZE 0, -8 OF oPrn DEFINE FONT oFnt2 NAME "Courier New" SIZE 0, -8 BOLD OF oPrn mLarg := (oFnt2:nHeight*1.2) oPrn:SetPage( 256 ) oPrn:SetSize( 1000, mLarg * 1.5) mLine:="" FOR Y := 1 TO mTtL1 IF Y > 1 oPrn:StartPage() oPrn:Say(3, 0, MEMOLINE(cTxt,nLen,Y), oFnt2 ) oPrn:EndPage() ENDIF NEXT oPrn:Preview() RELEASE FONT oFont, oFnt2 id=code>id=code>Onde cFileTxt = caminho e nome nome do arquivo texto que você pode gerar pelo seu programa com os dados do cupom. Pode usar a tdosprn só para gerar o TXT, se quiser. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  11. Da forma abaixo eu consegui mas tem que clicar duas vezes no botão. Não sei porquê. E pelo menu não funciona. #include "fivewin.ch" STATIC wEdita, oGcod function plano() local oDlg wEdita := .f. aDados := space(3) DEFINE DIALOG oDlg FROM 0, 0 TO 200, 400 PIXEL TITLE "Dialog com Menu" oDlg:lHelpIcon := .f. @ 30, 005 SAY oScod PROMPT "Códgo" OF oDlg SIZE 35, 10 PIXEL @ 40, 005 GET oGcod VAR aDados PICTURE "9999999999" OF oDlg SIZE 35, 10 PIXEL RIGHT UPDATE WHEN wEdita ACTIVATE DIALOG oDlg CENTERED on init (cri_menu(oDlg,oGcod), oDlg:Resize(), AjustaEdit(oGcod, oDlg)) return NIL static function cri_menu(oDlg, oGcod) DEFINE BUTTONBAR oBarBank size 55,55 OF oDlg 2007 DEFINE BUTTON OF oBarBank PROMPT "Novo" TOOLTIP "Incluir Novo Resgistro" ; ACTION (wEdita := .t., AjustaEdit(oGcod, oDlg)) DEFINE BUTTON OF oBarBank PROMPT "Salvar" TOOLTIP "Salvar o Resgistro" ; ACTION (wEdita := .f., AjustaEdit(oGcod, oDlg)) MENU oMenu 2007 MENUITEM "&Arquivo" MENU MENUITEM "&Novo" action (wEdita := .t., AjustaEdit(oGcod, oDlg)) ENDMENU ENDMENU oDlg:setmenu(oMenu) RETURN NIL STATIC FUNCTION AjustaEdit(oGcod, oDlg) Aeval( oDlg:aControls, {| o | (o:SetFocus(.T.), o:Refresh()) } ) oDlg:Update() IF wEdita XSetFocus(oGcod) oGcod:Refresh() ENDIF RETURN NIL Function XSetFocus(oObj) Local oTempo := "" Define Timer oTempo Interval 10 Of oObj:oWnd ; Action (oObj:SetFocus(),oObj:SetPos(0),oTempo:Deactivate()) Activate Timer oTempo Retu("") id=code>id=code>Eu faço assim em outro programa meu e não dá erro. Essa eu não entendi. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  12. Não vou participar desse encontro, mas lendo este tópico, que por sinal já está resolvido, achei por bem citar uma situação parecida, que é comum, mas ninguém reclama. Semana passado, pesquisando preço de passagens aéreas para um determinado trajeto, percebi que os que compram com bastante antecedência pagam bem mais barato que os que deixam para comprar mais próximo ou no dia que deseja viajar. Me informaram que tem haver com lotação, etc. E se alguém adiar a viagem paga uma taxa. Se cancelar, paga uma multa. Pelo que notei, isso parece ser procedimento padrão e tem justificativos. É o que foi aplicado neste caso. Portanto, fico a favor dos organizadores. Torço para que um dia eu possa participar de um dos congressos. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  13. Na pasta SAMPLES do fivewin (6.12) tem arquivos de lotes para este fim. Eles são elaborados para compilar os exemplos mas vc pode adaptá-los para compilar seus programas. Sugiro usar o xharbour 09971 que você pode baixar deste link: http://www.fivetechsoft.com/files/6.12/xharbour.exe Instale também o Bcc55, que pode ser baixado deste link: http://www.arsoft-ap.com.br/download/xpacote/bcc55_instalar.exe Quando testei, tive que fazer algumas adaptações no buildx.bat. Faltou também o arquivo ace32.lib na pasta LIB do xHarbour. Peguei ele da versão 0.99.30 e fucionou. Se ocorrer o mesmo problema com você mande um e-mail pra mim que eu respondo mandando ele em anexo para você. Meu buildx.bat ficou assim: ECHO OFF CLS ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ECHO ³ FiveWin for xHarbour 6.12 - December 2006 xHarbour development power ³Ü ECHO ³ © FiveTech, 1993-2006 for Microsoft Windows 95/98/NT/2000/ME and XP ³Û ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß if A%1 == A GOTO :SINTAX if NOT EXIST %1.prg GOTO :NOEXIST ECHO Compiling... set hdir=c:\xhb612 set bcdir=c:\bcc55 %hdir%\bin\harbour %1 /n /i..\include;%hdir%\include /w /p %2 %3 > clip.log @type clip.log IF ERRORLEVEL 1 PAUSE IF ERRORLEVEL 1 GOTO EXIT echo -O2 -e%1.exe -I%hdir%\include %1.c > b32.bc %bcdir%\bin\bcc32 -M -c -v @b32.bc :ENDCOMPILE IF EXIST %1.rc %bcdir%\bin\brc32 -r %1 echo c0w32.obj + > b32.bc echo %1.obj, + >> b32.bc echo %1.exe, + >> b32.bc echo %1.map, + >> b32.bc echo ..\lib\Fivehx.lib ..\lib\FiveHC.lib + >> b32.bc echo %hdir%\lib\rtl.lib + >> b32.bc echo %hdir%\lib\vm.lib + >> b32.bc echo %hdir%\lib\gtgui.lib + >> b32.bc echo %hdir%\lib\lang.lib + >> b32.bc echo %hdir%\lib\macro.lib + >> b32.bc echo %hdir%\lib\rdd.lib + >> b32.bc echo %hdir%\lib\dbfntx.lib + >> b32.bc echo %hdir%\lib\dbfcdx.lib + >> b32.bc echo %hdir%\lib\dbffpt.lib + >> b32.bc echo %hdir%\lib\hbsix.lib + >> b32.bc echo %hdir%\lib\debug.lib + >> b32.bc echo %hdir%\lib\common.lib + >> b32.bc echo %hdir%\lib\pp.lib + >> b32.bc rem Uncomment these two lines to use Advantage RDD echo %hdir%\lib\rddads.lib + >> b32.bc echo %hdir%\lib\Ace32.lib + >> b32.bc echo %bcdir%\lib\cw32.lib + >> b32.bc echo %bcdir%\lib\import32.lib + >> b32.bc echo %bcdir%\lib\psdk\odbc32.lib + >> b32.bc echo %bcdir%\lib\psdk\rasapi32.lib + >> b32.bc echo %bcdir%\lib\psdk\nddeapi.lib + >> b32.bc echo %bcdir%\lib\psdk\iphlpapi.lib, >> b32.bc IF EXIST %1.res echo %1.res >> b32.bc rem uncomment this line to use the debugger and comment the following one rem %bcdir%\bin\ilink32 -Gn -Tpe -s -v @b32.bc %bcdir%\bin\ilink32 -Gn -aa -Tpe -s -v @b32.bc IF ERRORLEVEL 1 GOTO LINKERROR ECHO * Application successfully built %1 GOTO EXIT ECHO rem delete temporary files @del %1.c :LINKERROR ECHO * There are errors GOTO EXIT :SINTAX ECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRG ECHO {-- Don't specify .PRG extension GOTO EXIT :NOEXIST ECHO The specified PRG %1 does not exist :EXIT id=code>id=code>Note que eu mudei a pasta de instalação do xHarbour (C:\XHB612). Também instalei o FIVEWIN na pasta C:\FWH612 para não misturar as coisas. Como compilar: Após adaptar seu buidx.bat (vc pode copiar e colar o conteúdo acima dentro dele, substituindo o que tá lá. Crie backup do original), faça assim: 1. Entre no prompt de comando; 2. Entre na pasta SAMPLES (CD\FWH612\SAMPLES) 3. Digite: buildx game O GEME.PRG será compilado e executado. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  14. Pode ser que eu não tenha entendido direito o problema. Mas vou dar uma "palinha": 1. Salve sua DLL como RC 2. Compile seu .RC para DLL 32 bits e passe a usar a DLL compilada eu seu programa. Para compilar para 32 bits salve o conteúdo abaixo em um arquivo de lotes com o nome "rc2dll32.bat", mude o "nome_arquivo" para o nome de sua DLL. @echo off c:\bcc55\bin\bcc32 -c c:\fwh\dll\screen32.c c:\bcc55\bin\brc32 -r nome_arquivo.rc c:\bcc55\bin\ilink32 /Tpd c:\bcc55\lib\c0d32.obj screen32.obj, nome_arquivo.dll,,c:\bcc55\lib\cw32.lib c:\bcc55\lib\import32.lib,, nome_arquivo.res IF ERRORLEVEL 1 PAUSE IF EXIST *.i* del *.i* IF EXIST *.map del *.map IF EXIST *.obj del *.obj IF EXIST *.res del *.res IF EXIST *.tds del *.tds IF EXIST *.~rc del *.~rc IF EXIST *.rws del *.rws IF EXIST *.~DL DEL *.~DL EXIT id=code>id=code>Em seu programa, chame a DLL assim: hBorland:= LoadLibrary('BWCC32.DLL') BWCCRegister( GetResources( ) ) SET RESOURCES TO "nome_arquivo.DLL", "PREV32.DLL" id=code>id=code>Você precisa também criar uma chamada à função BWCCRegister(). Assim: // Função de registro da BWCC.DLL DLL32 FUNCTION BWCCRegister( hInst AS LONG ) AS WORD PASCAL LIB "BWCC32.DLL" id=code>id=code>O Resource WorkShop você pode baixar de: http://www.arsoft-ap.com.br/download/xpacote/workshop.rar Atenção: Em DLLs 32 bits alguns controles não funcionam, gerando o erro "CANNOT CREATE DIALOG BOX". A redefinição de SAYs com ID negativo (Ex: -1) também dá esse erro. Porém, controles comuns como GETs, COMBOBOXes, CHECKBOXes, RADIOs, GROUPBOXes, LISTBOXes... funcionam sem problemas. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente" Editado por - j_arist on 15/10/2010 20:21:16
  15. É porque eu pensei que ainda não tinha resolvido. Valeu! Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  16. Meu amigo! Pelo visto vc nem testou o exemplo que postei. Por isso, fiz um exemplo mais completo. É só compilar e veja como funciona mesmo. #include "FiveWin.ch" static oWnd //----------------------------------------------------------------------------// function Main() DEFINE WINDOW oWnd FROM 1, 5 TO 20, 70 TITLE "Abrir pastas" ; MENU BuildMenu() SET MESSAGE OF oWnd TO "Abrir pastas" ACTIVATE WINDOW oWnd return nil //----------------------------------------------------------------------------// function BuildMenu() local oMenu MENU oMenu MENUITEM "Abrir" MENU MENUITEM "Pasta do Windows"; ACTION AbrePasta( GetWinDir() ) ; MESSAGE "Abrir a pasta do Windows" MENUITEM "Pasta de Sistema"; ACTION AbrePasta( GetSysDir() ) ; MESSAGE "Abrir a pasta do sistema" MENUITEM "Pasta selecionada"; ACTION AbrePasta( cGetDir() ) ; MESSAGE "Abrir a pasta uma pasta qualquer" MENUITEM "Unidade C:\ (Raiz)"; ACTION AbrePasta("c:\") ; MESSAGE "Abrir a pasta c:\" SEPARATOR MENUITEM "Sair"; ACTION oWnd:End() ; MESSAGE "Finaliza a aplicação" ENDMENU ENDMENU return oMenu //----------------------------------------------------------------------------// FUNCTION AbrePasta( cPath ) LOCAL cCmd := "start "+cPath,; cBat := ".\abrir.bat" IF (hFile := fcreate(cBat)) != -1 fwrite(hFile, cCmd) fclose(hFile) MsgRun("Executando...","Executando...",{||winexec(cBat,0)}) ENDIF RETURN NIL //----------------------------------------------------------------------------// id=code>id=code>Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  17. Vê se funciona assim: cPath := "c:\" cCmd := "start "+cPath cBat := ".\abrir.bat" IF (hFile := fcreate(cBat)) != -1 fwrite(hFile, cCmd) fclose(hFile) MsgRun("Executando...","Executando...",{||winexec(cBat,0)}) ENDIF id=code>id=code>Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  18. Outra solução, lenta, mas que ajuda, é salvar em banco de dados as informações referente ao retorno da NF-e, como: Data da venda, data da emissão, chave de acesso, nº do protocole, nome do clientete e pasta + nome do xml. Crie uma tela com um browse onde você possa fazer uma pesquisa desses dados. Atualmente estou usando o ACBrNFeMonitor. Ficou mais fácil e rápido pegar os dados do retorno (citados acima) que agora faço automaticamente (sem ter que digitar ou passar leito no código de barras da chave de acesso com eu fazia antes). Com ACBrNFeMonitor também dá pra gerar TXT e exportar, validar, assinar, transmitir, obter retorno, imprimir, cancelar e inutilizar faixa de numeração. Ele é gratis e tem muitos exemplos de uso na net. Veja abaixo como eu faço: FUNCTION GeraACBrNFe(mCdVenda, oEspere) LOCAL cEntFile := 'C:\ACBrNFeMonitor\ENTNFE.TXT' ,; cSaiFile := 'C:\ACBrNFeMonitor\SAINFE.TXT' ,; cTmpFile := 'C:\ACBrNFeMonitor\SAINFE.TMP' ,; c_Bufr := SPACE(120) if !file("c:\ACBrNFeMonitor\ACBrNFeMonitor.exe") MsgStop( "Monitor da ACBRNFe (ACBrNFeMonitor.exe) nao encontrado em c:\ACBrNFeMonitor") return .t. endif NFE_INFO->(DBSETORDER(1)) IF ! NFE_INFO->(DBSEEK(mCdVenda)) MsgAlert("Código não encontrado.","Atenção") CLOSE NFE_INFO RETURN NIL ENDIF n_InfArea := SELECT() USE NFE_ITEM SHARED NEW OrdListClear() OrdListAdd("NFE_ITEM", "NFE_IVND") n_ItmArea := SELECT() NFE_ITEM->(DBSETORDER(1)) IF ! NFE_ITEM->(DBSEEK(mCdVenda)) MsgAlert("Nenhum item foi encontrado para nota fiscal.","Atenção") SELECT(n_InfArea) CLOSE NFE_INFO SELECT(n_ItmArea) CLOSE NFE_ITEM RETURN NIL ENDIF nPos := 1 oImg[nPos]:LoadBMP(".\bitmaps\pgdn.bmp") oImg[nPos]:Refresh() SysRefresh() SELECT(n_InfArea) cTpAmb := GetPvProfString( "CONFIGURACAO", "TIPAMBIENTE", " ", ".\sisnfe.Ini") // 1-Produção; 2-homologação IF EMPTY(cTpAmb) nOption := ALERT("Escolha o tipo de ambiente",{"&1=Produção", "&2=Homologação"},"Ambiente",2,32515) IF nOption > 0 WritePProString( "CONFIGURACAO", "TIPAMBIENTE", ALLTRIM(STR(nOption)), ".\sisnfe.Ini" ) ENDIF ENDIF c_Txt := 'NFE.CriarNFe("[identificacao]'+CRLF c_Txt += "Codigo="+STRZERO(NFE_INFO->NFENUM,9)+CRLF c_Txt += "NaturezaOperacao="+ALLTRIM(NFE_INFO->NATOP)+CRLF c_Txt += "Modelo=55"+CRLF c_Txt += "Serie="+ALLTRIM(NFE_INFO->SERIE)+CRLF // Para ambiente SCAN c_Txt += "Numero="+STRZERO(NFE_INFO->NFENUM,9)+CRLF c_Txt += "Emissao="+DTOC(NFE_INFO->NFEEMI)+CRLF c_Txt += "Saida="+DTOC(NFE_INFO->NFEEMI)+CRLF c_Txt += "Tipo=1"+CRLF // 0 -Entrada, 1 -Saida c_Txt += "Finalidade=1"+CRLF c_Txt += "FormaPag="+ALLTRIM(NFE_INFO->FORMPG)+CRLF c_Txt += "cUF="+ALLTRIM(NFE_INFO->MUNICI)+CRLF c_Txt += "CidadeCod="+STRZERO(VAL(RetCodMunIBGE(NFE_INFO->MUNICI, NFE_INFO->NFE_UF)),7)+CRLF c_Txt += " "+CRLF // Se for Devolução de Mercadorias, Substituição de NF cancelada, // Complementação de NF, etc., informar a chave de acesso IF !EMPTY(NFE_INFO->REFNFE) c_Txt += "[NFRef001]"+CRLF c_Txt += "nNF="+ALLTRIM(NFE_INFO->REFNFE)+CRLF // Chave de Acesso da NF-e referenciada c_Txt += " "+CRLF ENDIF // Se for referenciar um NF normal, informar os dados da NF IF !EMPTY(NFE_INFO->NF1NRO) c_Txt += "[NFRef001]"+CRLF c_Txt += "cUF="+ALLTRIM(NFE_INFO->NF1_UF)+CRLF c_Txt += "AAMM="+RIGHT(STR(YEAR(NFE_INFO->NFEEMI),4),2)+STRZERO(MONTH(NFE_INFO->NFEEMI),2)+CRLF c_Txt += "CNPJ="+R_CnpjLienar(NFE_INFO->NF1CGC)+CRLF c_Txt += "Modelo=01"+CRLF c_Txt += "Serie="+ALLTRIM(NFE_INFO->NF1SER)+CRLF c_Txt += "nNF="+ALLTRIM(STR(VAL(NFE_INFO->NF1NRO)))+CRLF c_Txt += " "+CRLF ENDIF // Emitente c_Txt += "[Emitente]"+CRLF // Seleção entre CNPJ e CPF do emitente IF LEN(ALLTRIM(ClearChar(NFE_INFO->E_CNPJ, {".","-","/",","}))) < 14 c_Txt += "CNPJ="+R_cpfLienar(NFE_INFO->E_CNPJ)+CRLF // CPF ELSE c_Txt += "CNPJ="+R_CnpjLienar(NFE_INFO->E_CNPJ)+CRLF // CNPJ ENDIF c_Txt += "IE="+ALLTRIM(ClearChar(NFE_INFO->E_IEST ,{".","-"}))+CRLF c_Txt += "Razao="+TiraAcentos(ALLTRIM(NFE_INFO->E_NOME))+CRLF c_Txt += "Fantasia="+TiraAcentos(ALLTRIM(NFE_INFO->E_FANT))+CRLF c_Txt += "Fone="+LEFT(ClearChar(ALLTRIM(NFE_INFO->E_FONE),{"(",")","-", " "}),10)+CRLF c_Txt += "CEP="+ClearChar(NFE_INFO->E_CEP,{".","-"})+CRLF c_Txt += "Logradouro="+TiraAcentos(ALLTRIM(NFE_INFO->E_LOGR))+CRLF c_Txt += "Numero="+ALLTRIM(NFE_INFO->E_NUME)+CRLF c_Txt += "Complemento="+TiraAcentos(ALLTRIM(NFE_INFO->E_CMPL))+CRLF c_Txt += "Bairro="+TiraAcentos(ALLTRIM(NFE_INFO->E_BAIR))+CRLF c_Txt += "CidadeCod="+STRZERO(VAL(RetCodMunIBGE(NFE_INFO->MUNICI, NFE_INFO->NFE_UF)),7)+CRLF c_Txt += "Cidade="+TiraAcentos(ALLTRIM(NFE_INFO->MUNICI))+CRLF c_Txt += "UF="+ALLTRIM(NFE_INFO->NFE_UF)+CRLF c_Txt += "PaisCod="+RetCodPaisIBGE()+CRLF c_Txt += "Pais=Brasil"+CRLF c_Txt += "IEST="+ClearChar(NFE_INFO->E_IEST,{".","-"})+CRLF c_Txt += " "+CRLF // Destinatário c_Txt += "[Destinatario]"+CRLF IF LEN(ALLTRIM(ClearChar(NFE_INFO->D_CNPJ, {".","-","/",","}))) < 14 c_Txt += "CNPJ="+R_cpfLienar(NFE_INFO->D_CNPJ)+CRLF ELSE c_Txt += "CNPJ="+R_CnpjLienar(NFE_INFO->D_CNPJ)+CRLF ENDIF d_IE := "" if LEN(ALLTRIM(ClearChar(NFE_INFO->D_CNPJ,{".","-","/",","}))) = 14 if EMPTY(NFE_INFO->D_IEST) .or. AllTrim(NFE_INFO->D_IEST) = "ISENTO" d_IE := "ISENTO" else d_IE := ClearChar(NFE_INFO->D_IEST ,{".","-"}) endif else d_IE := "ISENTO" Endif c_Txt += "IE="+d_IE+CRLF c_Txt += "ISUF="+ALLTRIM(NFE_INFO->D_SUFR)+CRLF c_Txt += "NomeRazao="+TiraAcentos(ALLTRIM(NFE_INFO->D_NOME))+CRLF c_Txt += "Fone="+LEFT(ClearChar(ALLTRIM(NFE_INFO->D_FONE),{"(",")","-", " "}),10)+CRLF c_Txt += "CEP="+ALLTRIM(ClearChar(NFE_INFO->D_CEP,{".","-"}))+CRLF c_Txt += "Logradouro="+TiraAcentos(ALLTRIM(NFE_INFO->D_LOGR))+CRLF c_Txt += "Numero="+ALLTRIM(NFE_INFO->D_NUME)+CRLF c_Txt += "Complemento="+TiraAcentos(ALLTRIM(NFE_INFO->D_CMPL))+CRLF c_Txt += "Bairro="+TiraAcentos(ALLTRIM(NFE_INFO->D_BAIR))+CRLF c_Txt += "CidadeCod="+STRZERO(VAL(RetCodMunIBGE(NFE_INFO->D_CIDA, NFE_INFO->D_UF)),7)+CRLF c_Txt += "Cidade="+TiraAcentos(ALLTRIM(NFE_INFO->D_CIDA))+CRLF c_Txt += "UF="+ALLTRIM(NFE_INFO->D_UF)+CRLF c_Txt += "PaisCod="+RetCodPaisIBGE()+CRLF c_Txt += "Pais=Brasil"+CRLF c_Txt += " "+CRLF // Incluir os itens na nfe SELECT(n_ItmArea) nItem := 1 c_Err := "" WHILE .T. IF NFE_ITEM->CODVND = mCdVenda IF VAL(NFE_ITEM->CFOP) = 0 ; c_Err += "CFOP INVÃLIDO: "+NFE_ITEM->CFOP+" -> "+ALLTRIM(NFE_ITEM->DESCRI)+CRLF ; ENDIF IF EMPTY(NFE_ITEM->UNIDAD) ; c_Err += "PRODUTO SEM UND: "+ALLTRIM(NFE_ITEM->DESCRI)+CRLF ; ENDIF lEan13 := ChecarEAN13(NFE_ITEM->EAN_13) nValor := NFE_ITEM->PRUNIT * NFE_ITEM->QUANTI c_Txt += "[Produto"+STRZERO(nItem,3)+"]"+CRLF c_Txt += "CFOP="+ALLTRIM(ClearChar(NFE_ITEM->CFOP, {"."} ))+CRLF c_Txt += "Codigo="+STRZERO(VAL(NFE_ITEM->EAN_13),13)+CRLF c_Txt += "Descricao="+TiraAcentos(ALLTRIM(STRTRAN(NFE_ITEM->DESCRI,"Â¥","L:")))+CRLF c_Txt += "NCM="+ALLTRIM(ClearChar(NFE_ITEM->CFISCA,{"."} ))+CRLF c_Txt += "Unidade="+ALLTRIM(NFE_ITEM->UNIDAD)+CRLF c_Txt += "Quantidade="+ALLTRIM(TRANS(NFE_ITEM->QUANTI,"@E 9999999.99"))+CRLF c_Txt += "ValorUnitario="+ALLTRIM(TRANS(NFE_ITEM->PRUNIT,"@E 9999999.99"))+CRLF c_Txt += "ValorTotal="+ALLTRIM(TRANS(NFE_ITEM->QUANTI*NFE_ITEM->PRUNIT,"@E 9999999.99"))+CRLF c_Txt += "ValorDesconto=0,00"+CRLF c_Txt += " "+CRLF // Grupo de tributos incidentes no produto ou serviço DO CASE CASE NFE_ITEM->RDICMS = 0 .AND. NFE_ITEM->B_ICMS > 0 // Tributada integralmente c_Txt += "[iCMS"+STRZERO(nItem,3)+"]"+CRLF c_Txt += "CST=00"+CRLF c_Txt += "Origem=0"+CRLF c_Txt += "ValorBase="+ALLTRIM(TRANS(nValor ,"@E 9999999.99"))+CRLF c_Txt += "Aliquota="+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+CRLF c_Txt += "Valor="+ALLTRIM(TRANS(nValor, "@E 9999999.99"))+CRLF c_Txt += "ValorBaseST="+CRLF c_Txt += " "+CRLF CASE NFE_ITEM->RDICMS > 0 .AND. NFE_ITEM->B_ICMS > 0 // Com redução de base de cálculo c_Txt += "[iCMS"+STRZERO(nItem,3)+"]"+CRLF c_Txt += "CST=20"+CRLF c_Txt += "Origem=0"+CRLF c_Txt += "ValorBase="+ALLTRIM(TRANS(nValor - ((nValor / 100) * NFE_ITEM->RDICMS),"@E 9999999.99"))+CRLF c_Txt += "Aliquota="+ALLTRIM(STR(NFE_ITEM->B_ICMS,5,2))+CRLF c_Txt += "Valor="+ALLTRIM(TRANS(((nValor - ((nValor / 100) * NFE_ITEM->RDICMS))/100)*NFE_ITEM->B_ICMS,"@E 9999999.99"))+CRLF c_Txt += "ValorBaseST="+CRLF c_Txt += " "+CRLF CASE NFE_ITEM->RDICMS = 0 .AND. NFE_ITEM->B_ICMS = 0 // 40=Isenta, 41=Não tributada e 50=Suspensão c_Txt += "[iCMS"+STRZERO(nItem,3)+"]"+CRLF c_Txt += "CST=40"+CRLF // 40=Isenta, 41=Não tributada e 50=Suspensão c_Txt += "Origem=0"+CRLF c_Txt += "ValorBase="+CRLF c_Txt += "Aliquota=0.00"+CRLF c_Txt += "Valor="+CRLF c_Txt += "ValorBaseST="+CRLF c_Txt += " "+CRLF ENDCASE c_Txt += "[PIS"+STRZERO(nItem,3)+"]"+CRLF c_Txt += "CST=99"+CRLF c_Txt += "ValorBase=0.0000"+CRLF c_Txt += "Aliquota=0.0000"+CRLF c_Txt += "Valor=0.0000"+CRLF c_Txt += " "+CRLF c_Txt += "[COFINS"+STRZERO(nItem,3)+"]"+CRLF c_Txt += "CST=99"+CRLF c_Txt += "ValorBase=0.0000"+CRLF c_Txt += "Aliquota=0.0000"+CRLF c_Txt += "Valor=0.0000"+CRLF c_Txt += " "+CRLF nItem ++ ELSE EXIT ENDIF NFE_ITEM->(DBSKIP(1)) END SELECT(n_InfArea) IF ! EMPTY(c_Err) cRetorno := "Erros encontrados na geração da NF-e:"+CRLF+CRLF+c_Err oEspere:Update() oImg[nPos]:LoadBMP(".\bitmaps\ok.bmp") oImg[nPos]:Refresh() SysRefresh() MsgAlert(cRetorno,"Erro") SELECT(n_ItmArea) CLOSE NFE_ITEM SELECT(n_InfArea) RETURN NIL ENDIF // Totais c_Txt += "[Total]"+CRLF c_Txt += "BaseICMS="+ALLTRIM(STR(NFE_INFO->T_BCAL,15,2))+CRLF c_Txt += "ValorICMS="+ALLTRIM(STR(NFE_INFO->T_ICMS,15,2))+CRLF c_Txt += "ValorProduto="+ALLTRIM(STR(NFE_INFO->T_PROD,15,2))+CRLF c_Txt += "ValorFrete="+ALLTRIM(STR(NFE_INFO->T_FRET,15,2))+CRLF c_Txt += "ValorSeguro="+ALLTRIM(STR(NFE_INFO->T_SEGU,15,2))+CRLF c_Txt += "ValorDesconto="+ALLTRIM(STR(NFE_INFO->T_DESC,15,2))+CRLF c_Txt += "ValorPIS="+ALLTRIM(STR(NFE_INFO->T_PIS,15,2))+CRLF c_Txt += "ValorCOFINS="+ALLTRIM(STR(NFE_INFO->T_COFI,15,2))+CRLF c_Txt += "ValorOutrasDespesas="+ALLTRIM(STR(NFE_INFO->T_DESP,15,2))+CRLF c_Txt += "ValorNota="+ALLTRIM(STR(NFE_INFO->T_TOTA,15,2))+CRLF c_Txt += " "+CRLF // Transporte IF ! EMPTY(NFE_INFO->T_RAZA) c_Txt += "[Transportador]"+CRLF c_Txt += "FretePorConta="+STR(NFE_INFO->T_MFRT,1)+CRLF IF ! EMPTY(NFE_INFO->T_CNPJ) IF LEN(ALLTRIM(ClearChar(NFE_INFO->T_CNPJ, {".","-","/",","}))) < 14 c_Txt += "CnpjCpf="+R_cpfLienar(NFE_INFO->T_CNPJ)+CRLF ELSE c_Txt += "CnpjCpf="+R_CnpjLienar(NFE_INFO->T_CNPJ)+CRLF ENDIF ENDIF c_Txt += "NomeRazao="+TiraAcentos(ALLTRIM(NFE_INFO->T_RAZA))+CRLF c_Txt += "IE="+ALLTRIM(clearChar(NFE_INFO->T_IEST,{".","-"}))+CRLF c_Txt += "Endereco="+TiraAcentos(ALLTRIM(NFE_INFO->T_ENDE))+CRLF c_Txt += "Cidade="+TiraAcentos(ALLTRIM(NFE_INFO->T_CIDA))+CRLF c_Txt += "CidadeCod="+STRZERO(VAL(RetCodMunIBGE(NFE_INFO->T_CIDA, NFE_INFO->T_ESTA)),7)+CRLF c_Txt += "Placa="+ALLTRIM(NFE_INFO->T_PLAC)+CRLF c_Txt += "UFPlaca="+TiraAcentos(ALLTRIM(NFE_INFO->T_ESTA))+CRLF c_Txt += " "+CRLF ENDIF SELECT(n_ItmArea) CLOSE NFE_ITEM USE NFE_DUPL SHARED NEW OrdListClear() OrdListAdd("NFE_DUPL", "NFE_CODV") NFE_DUPL->(DBSETORDER(1)) IF NFE_DUPL->(DBSEEK(mCdVenda)) n_Dpl := 1 WHILE .T. IF NFE_DUPL->CODVND = mCdVenda c_Txt += "[Duplicata"+STRZERO(n_Dpl,3)+"]"+CRLF c_Txt += "Numero="+ALLTRIM(STR(NFE_DUPL->NDUPLI))+CRLF c_Txt += "DataVencimento="+DTOC(NFE_DUPL->DVENCI)+CRLF c_Txt += "Valor="+ALLTRIM(STR(NFE_DUPL->NVALOR,15,2))+CRLF c_Txt += " "+CRLF ELSE EXIT ENDIF n_Dpl ++ NFE_DUPL->( dbSkip() ) END ENDIF CLOSE NFE_DUPL SELECT(n_InfArea) // Informações adicionais c_Txt += "[DadosAdicionais]"+CRLF c_Txt += "Complemento="+ALLTRIM(NFE_INFO->T_INFO)+CRLF c_Txt += '",1)' nHandle := FCreate(cTmpFile, FC_NORMAL) FWrite(nHandle, c_Txt, len(c_Txt) ) FClose(nHandle) IF FILE(cSaiFile) ; FERASE(cSaiFile) ; ENDIF // Delete SAINFE.TXT COPY FILE &(cTmpFile) TO &(cEntFile) // Cria ENTNFE.TXT IF ! ACBrNFeRet(cSaiFile, @c_Bufr, 5, .T.) ; RETURN NIL ; ENDIF // Ler SAINFE.TXT cXmlFile := ALLTRIM(SUBSTR(MEMOLINE(c_Bufr,254,1), 4, 254)) cRetorno := MEMOREAD(cSaiFile) oEspere:Update() IF "OK:" $ cRetorno oImg[nPos]:LoadBMP(".\bitmaps\ok.bmp") oImg[nPos]:Refresh() ELSE oImg[nPos]:LoadBMP(".\bitmaps\delete.bmp") oImg[nPos]:Refresh() IF ! ("ERRO:" $ cRetorno) MsgAlert(cRetorno,"Retorno") ENDIF RETURN NIL ENDIF SysRefresh() // Validar nPos := 2 oImg[nPos]:LoadBMP(".\bitmaps\pgdn.bmp") oImg[nPos]:Refresh() SysRefresh() c_Txt := 'NFE.ValidarNFe("'+cXmlFile+'")' nHandle := FCreate(cTmpFile, FC_NORMAL) FWrite(nHandle, c_Txt, len(c_Txt) ) FClose(nHandle) IF FILE(cSaiFile) ; FERASE(cSaiFile) ; ENDIF // Delete SAINFE.TXT COPY FILE &(cTmpFile) TO &(cEntFile) // Cria ENTNFE.TXT IF ! ACBrNFeRet(cSaiFile, @c_Bufr, 5, .T.) ; RETURN NIL ; ENDIF // Ler SAINFE.TXT cRetorno := MEMOREAD(cSaiFile) oEspere:Update() IF "OK:" $ c_Bufr oImg[nPos]:LoadBMP(".\bitmaps\ok.bmp") oImg[nPos]:Refresh() ELSE oImg[nPos]:LoadBMP(".\bitmaps\delete.bmp") oImg[nPos]:Refresh() IF ! ("ERRO:" $ cRetorno) MsgAlert(cRetorno,"Retorno") ENDIF RETURN NIL ENDIF SysRefresh() // Assinar nPos := 3 oImg[nPos]:LoadBMP(".\bitmaps\pgdn.bmp") oImg[nPos]:Refresh() SysRefresh() c_Txt := 'NFE.AssinarNFe("'+cXmlFile+'")' nHandle := FCreate(cTmpFile, FC_NORMAL) FWrite(nHandle, c_Txt, len(c_Txt) ) FClose(nHandle) IF FILE(cSaiFile) ; FERASE(cSaiFile) ; ENDIF // Delete SAINFE.TXT COPY FILE &(cTmpFile) TO &(cEntFile) // Cria ENTNFE.TXT IF ! ACBrNFeRet(cSaiFile, @c_Bufr, 5, .T.) ; RETURN NIL ; ENDIF // Ler SAINFE.TXT cRetorno := MEMOREAD(cSaiFile) oEspere:Update() IF "OK:" $ c_Bufr oImg[nPos]:LoadBMP(".\bitmaps\ok.bmp") oImg[nPos]:Refresh() ELSE oImg[nPos]:LoadBMP(".\bitmaps\delete.bmp") oImg[nPos]:Refresh() IF ! ("ERRO:" $ cRetorno) MsgAlert(cRetorno,"Retorno") ENDIF RETURN NIL ENDIF SysRefresh() c_Chave := RIGHT(cXmlFile, 52) c_Chave := STRTRAN(c_Chave, "-nfe.xml","") c_Saved := cFlXml+"\"+RIGHT(cXmlFile, 52) COPY FILE &(cXmlFile) TO &(c_Saved) // Salva backup do xml IF NFE_INFO->(RLOCK()) REPLACE NFE_INFO->CCHAVE WITH c_Chave REPLACE NFE_INFO->SAVEAT WITH c_Saved NFE_INFO->(DBUNLOCK()) ENDIF // Transmitir cRetorno := "Transmitindo a NF-e para SEFAZ. Aguarde..." oEspere:Update() nPos := 4 oImg[nPos]:LoadBMP(".\bitmaps\pgdn.bmp") oImg[nPos]:Refresh() SysRefresh() nLote := 1 // Número do lote nAssi := 1 // 0 = Não assinar, 1 = Assinar nImpr := 0 // 0 = Não imprimir. 1 = Imprimir c_Txt := 'NFE.EnviarNFe("'+cXmlFile+'",'+STR(nLote,1)+','+STR(nAssi,1)+','+STR(nImpr,1)+')' nHandle := FCreate(cTmpFile, FC_NORMAL) FWrite(nHandle, c_Txt, len(c_Txt) ) FClose(nHandle) IF FILE(cSaiFile) ; FERASE(cSaiFile) ; ENDIF // Delete SAINFE.TXT COPY FILE &(cTmpFile) TO &(cEntFile) // Cria ENTNFE.TXT IF ! ACBrNFeRet(cSaiFile, @c_Bufr, 0, .T.) ; RETURN NIL ; ENDIF // Ler SAINFE.TXT INKEY(2) cRetorno := MEMOREAD(cSaiFile) oEspere:Update() x_Motivo := "" IF "OK: Lote recebido com sucesso" $ cRetorno x_Motivo := GetPvProfString( "RETORNO", "XMotivo", " ", cSaiFile) IF x_Motivo = "Autorizado o uso da NF-e" oImg[nPos]:LoadBMP(".\bitmaps\ok.bmp") oImg[nPos]:Refresh() ELSE cRetorno := x_Motivo oImg[nPos]:LoadBMP(".\bitmaps\delete.bmp") oImg[nPos]:Refresh() MsgStop(x_Motivo, "Erro!") RETURN NIL ENDIF ELSE IF ! ("ERRO:" $ cRetorno) MsgAlert(cRetorno,"Retorno") RETURN NIL ENDIF ENDIF SysRefresh() // Imprimir IF x_Motivo = "Autorizado o uso da NF-e" IF NFE_INFO->(RLOCK()) REPLACE NFE_INFO->STATUS WITH "OK: Autorizado o uso da NF-e" NFE_INFO->(DBUNLOCK()) ENDIF cRetorno := "Pronto para imprimir..." oEspere:Update() nPos := 5 oImg[nPos]:LoadBMP(".\bitmaps\pgdn.bmp") oImg[nPos]:Refresh() SysRefresh() MsgRun("Imprimindo. Aguarde...","Imprimindo. Aguarde...",{||ImpDanfe(cXmlFile)}) cRetorno := "Impressão do DANFE autorizada." oEspere:Update() oImg[nPos]:LoadBMP(".\bitmaps\ok.bmp") oImg[nPos]:Refresh() SysRefresh() ENDIF NfeAltStatus(NIL, cSaiFile) RETURN NIL STATIC FUNCTION ImpDanfe(cXmlFile) LOCAL cEntFile := 'C:\ACBrNFeMonitor\ENTNFE.TXT' ,; cSaiFile := 'C:\ACBrNFeMonitor\SAINFE.TXT' ,; cTmpFile := 'C:\ACBrNFeMonitor\SAINFE.TMP' ,; c_Bufr := SPACE(120), cProgImp cProgImp := GetPvProfString( "CONFIGURACAO", "ImprDANFeEm", " ", ".\sisnfe.Ini") IF EMPTY(cProgImp) nOption := Alert("Imprimir DANFe com:",{"ACBrNFeMonitor","UniDANFe"},"Imprimir DANFe com:") IF nOption = 1 cProgImp := "ACBrNFeMonitor" ELSE cProgImp := "UniDANFe" ENDIF WritePProString( "CONFIGURACAO", "ImprDANFeEm", cProgImp, ".\sisnfe.Ini" ) ENDIF IF ! FILE(cXmlFile) cXmlFile := cGetFile( "NF-e|*.xml", "Obter a NF-e" ) ENDIF IF ! FILE(cXmlFile) RETURN NIL ENDIF IF cProgImp = "UniDANFe" // Imprimir DANFE - Usando UNIDANFe IF FILE("C:\unimake\uninfe\unidanfe.exe") WAITRUN( GetEnv( "ComSpec" )+" /C START C:\unimake\uninfe\unidanfe.exe arquivo="+cXmlFile+" versao=free", 0) ELSE MsgAlert("O programa não foi encontrado: C:\unimake\uninfe\unidanfe.exe","Falta aplicativo") ENDIF ELSEIF cProgImp = "ACBrNFeMonitor" // Imprimir DANFE - Usando ACBrNFeMonitor c_Txt := 'NFE.ImprimirDANFe("'+cXmlFile+'",1,1,1)' nHandle := FCreate(cTmpFile, FC_NORMAL) FWrite(nHandle, c_Txt, len(c_Txt) ) FClose(nHandle) IF FILE(cSaiFile) ; FERASE(cSaiFile) ; ENDIF // Delete SAINFE.TXT COPY FILE &(cTmpFile) TO &(cEntFile) // Cria ENTNFE.TXT IF ! ACBrNFeRet(cSaiFile, @c_Bufr, 0, .T.) ; RETURN NIL ; ENDIF // Ler SAINFE.TXT ENDIF c_Chave := RIGHT(cXmlFile, 52) c_Chave := STRTRAN(c_Chave, "-nfe.xml","") c_Saved := cFlXml+"\"+RIGHT(cXmlFile, 52) IF c_Chave = ALLTRIM(NFE_INFO->CCHAVE) IF ! FILE(c_Saved) COPY FILE &(cXmlFile) TO &(c_Saved) // Salva backup do xml IF NFE_INFO->(RLOCK()) REPLACE NFE_INFO->SAVEAT WITH c_Saved NFE_INFO->(DBUNLOCK()) ENDIF ENDIF ENDIF RETURN NIL STATIC FUNCTION ACBrNFeRet(cSaiFile, c_Bufr, nSecs, lShowErr) LOCAL lOk := .T. hIni := LEFT(TIME(),8) WHILE ! FILE(cSaiFile) INKEY(0.5) hFim := LEFT(TIME(),8) IF nSecs > 0 IF SECS(ELAPTIME(hIni, hFim)) > nSecs lOk := .F. EXIT ENDIF ELSE IF SECS(ELAPTIME(hIni, hFim)) > 59 nPass := SECS(ELAPTIME(hIni, hFim)) IF ! MsgYesNo("Já passou "+ALLTRIM(STR(nPass))+" segundos. Continuar esperando?","Esperar?") lOk := .F. EXIT ENDIF hIni := LEFT(TIME(),8) ENDIF ENDIF LOOP END IF ! lOk MsgAlert("ACBrNFeMonitor não está respondendo.","Sem resposta") RETURN .F. ENDIF c_Bufr := memoread(cSaiFile) if "ERRO" $ c_Bufr IF lShowErr MsgStop(c_Bufr, 'Mensagem de erro do ACBrMonitor') ENDIF RETURN .F. endif RETURN .T. STATIC FUNCTION TESTECHAVE() cXmlFile := cGetFile( "NF-e|*.xml", "Obter a NF-e" ) IF FILE(cXmlFile) c_Chave := RIGHT(cXmlFile, 52) c_Chave := STRTRAN(c_Chave, "-nfe.xml","") MsgInfo(c_Chave, "Chave") ENDIF RETURN NIL Function RetornaConteudoXml(cFileName) LOCAL hFile, cXml LOCAL xmlDoc, xmlIter , xmlNode, cNode, cAttrib, cValue, oCampo, oConteudo if !file(cFileName) cFileName := cGetFile( "XML File (*.Xml)|*.Xml|","Selecione arquivo XML da NFe ",curdir()) If !file(cFileName) Return nil End end cNode := NIL cAttrib := NIL cValue := NIL hFile := FOpen( cFileName ) xmlDoc := TXmlDocument():New( hFile ) IF xmlDoc:nStatus != HBXML_STATUS_OK Msginfo("erro ao ler XML ") RETURN ENDIF xmlIter := TXmlIterator():New( xmlDoc:oRoot ) xmlNode := xmlIter:Find() DO WHILE xmlNode != NIL if !empty(xmlNode:cData) if subs(xmlNode:cData,1,1) # "<" oCampo :=xmlNode:cName oConteudo:=xmlNode:cData end else oCampo :=xmlNode:cName end msginfo(oConteudo, oCampo) xmlNode := xmlIter:Next() // joga pro proximo campo ENDDO return nil id=code>id=code>Es estrutura dos bancos de dados usados acima é: // Criação do banco de dados da NFE aStr := {} // Dados gerais AADD(aStr,{"CODVND", "N", 10, 0}) // Codigo da venda AADD(aStr,{"NFENUM", "N", 10, 0}) // Número sequencial da NFE AADD(aStr,{"SAVEAT", "C",254, 0}) // Pasta e nome do xml AADD(aStr,{"NFEEMI", "D", 08, 0}) // Data de emissão \ AADD(aStr,{"CCHAVE", "C", 50, 0}) // Chave de acesso | AADD(aStr,{"CRECIB", "C", 30, 0}) // Nro. recibo | AADD(aStr,{"PROTOC", "C", 30, 0}) // Nro. protocolo | AADD(aStr,{"RECEBI", "C", 10, 0}) // Data Recebimento | Retorno da CEFAZ AADD(aStr,{"NFECAN", "L", 01, 0}) // Cancelado | AADD(aStr,{"NFEINU", "L", 01, 0}) // Inutilizada | AADD(aStr,{"STATUS", "C", 50, 0}) // Status da nfe | AADD(aStr,{"DTCANC", "C", 10, 0}) // Data cancelamento/ AADD(aStr,{"FORMPG", "C", 01, 0}) // 0-pagto à vista;1-pagto a prazo;2-outros AADD(aStr,{"NFETIP", "C", 01, 0}) // 0-Entrada;1-Saida AADD(aStr,{"TIPIMP", "C", 01, 0}) // 1-retrato;2-paisagem AADD(aStr,{"TPEMIS", "C", 01, 0}) // 1-Normal;2-Contigência;3=SCAN AADD(aStr,{"FINALI", "C", 01, 0}) // 1-Normal;2-Complementar;3-Ajustes AADD(aStr,{"MUNICI", "C", 30, 0}) // Múnicípio emitente AADD(aStr,{"NFE_UF", "C", 02, 0}) // UF emitente AADD(aStr,{"SERIE", "C", 03, 0}) // Série AADD(aStr,{"CFOP", "N", 04, 0}) // CFOP AADD(aStr,{"NATOP", "C", 30, 0}) // Natureza da operação // Dados do emitente AADD(aStr,{"E_CNPJ", "C", 20, 0}) // Emitente - CNPJ AADD(aStr,{"E_NOME", "C", 40, 0}) // Emitente - Razão social AADD(aStr,{"E_FANT", "C", 40, 0}) // Emitente - Fantasia AADD(aStr,{"E_LOGR", "C", 40, 0}) // Emitente - Endereço AADD(aStr,{"E_NUME", "C", 05, 0}) // Emitente - Número AADD(aStr,{"E_CMPL", "C", 50, 0}) // Emitente - Complemento AADD(aStr,{"E_BAIR", "C", 30, 0}) // Emitente - Bairro AADD(aStr,{"E_CEP", "C", 10, 0}) // Emitente - CEP AADD(aStr,{"E_FONE", "C", 30, 0}) // Emitente - Fone AADD(aStr,{"E_IEST", "C", 15, 0}) // Emitente - Insc. Est. AADD(aStr,{"E_CONT", "C", 28, 0}) // Emitente - Nome para contato // Dados do destinatário AADD(aStr,{"D_CNPJ", "C", 20, 0}) // Destinatário - CNPJ AADD(aStr,{"D_NOME", "C", 40, 0}) // Destinatário - Razão social AADD(aStr,{"D_FANT", "C", 40, 0}) // Destinatário - Fantasia AADD(aStr,{"D_LOGR", "C", 40, 0}) // Destinatário - Endereço AADD(aStr,{"D_NUME", "C", 05, 0}) // Destinatário - Número AADD(aStr,{"D_CMPL", "C", 50, 0}) // Destinatário - Complemento AADD(aStr,{"D_BAIR", "C", 30, 0}) // Destinatário - Bairro AADD(aStr,{"D_CIDA", "C", 30, 0}) // Destinatário - Município AADD(aStr,{"D_UF", "C", 02, 0}) // Destinatário - UF AADD(aStr,{"D_CEP", "C", 10, 0}) // Destinatário - CEP AADD(aStr,{"D_FONE", "C", 30, 0}) // Destinatário - Fone AADD(aStr,{"D_IEST", "C", 15, 0}) // Destinatário - Insc. Est. AADD(aStr,{"D_SUFR", "C", 15, 0}) // Destinatário - Suframa // Totais da NFE AADD(aStr,{"T_BCAL", "N", 11, 3}) // Base de cálculo do ICMS AADD(aStr,{"T_ICMS", "N", 11, 3}) // Valor do ICMS AADD(aStr,{"T_BSUB", "N", 11, 3}) // Base de cálculo do ICMS Substituição AADD(aStr,{"T_ISUB", "N", 11, 3}) // Valor do ICMS Substituição AADD(aStr,{"T_PROD", "N", 11, 3}) // Valor total dos produots AADD(aStr,{"T_FRET", "N", 11, 3}) // Valor do frete AADD(aStr,{"T_SEGU", "N", 11, 3}) // Valor do seguro AADD(aStr,{"T_DESC", "N", 11, 3}) // Valor do desconto AADD(aStr,{"T_ISEN", "N", 11, 3}) // Valor Isento AADD(aStr,{"T_IPI", "N", 11, 3}) // Valor do IPI AADD(aStr,{"T_PIS", "N", 11, 3}) // Valor do PIS AADD(aStr,{"T_COFI", "N", 11, 3}) // Valor do COFINS AADD(aStr,{"T_DESP", "N", 11, 3}) // Outras despesas AADD(aStr,{"T_TOTA", "N", 11, 3}) // Total da Nota // Totais da NF - Transportadora AADD(aStr,{"T_MFRT", "N", 01, 0}) // Frete pago: 0-Emitente; 1=Destinatario AADD(aStr,{"T_CNPJ", "C", 20, 0}) // CNPJ ou CPF da Transportadora AADD(aStr,{"T_RAZA", "C", 20, 0}) // Razão Social da Transportadora AADD(aStr,{"T_IEST", "C", 15, 0}) // I.Est. da Transportadora AADD(aStr,{"T_ENDE", "C", 50, 0}) // Endereço da Transportadora AADD(aStr,{"T_CIDA", "C", 30, 0}) // Município da Transportadora AADD(aStr,{"T_ESTA", "C", 02, 0}) // UF da Transportadora AADD(aStr,{"T_VOLS", "N", 03, 0}) // Volumes AADD(aStr,{"T_ESPE", "C", 15, 0}) // Espécia AADD(aStr,{"T_MARC", "C", 15, 0}) // Marca AADD(aStr,{"T_NVOL", "N", 10, 0}) // Numeração AADD(aStr,{"T_PESB", "N", 11, 3}) // Peso bruto AADD(aStr,{"T_PESL", "N", 11, 3}) // Peso liquido AADD(aStr,{"T_PLAC", "C", 10, 0}) // Placa do veículo AADD(aStr,{"T_UFVE", "C", 02, 0}) // UF do veículo AADD(aStr,{"T_INFO", "C",300, 0}) // Informações adicionais (1 a 5000 chr) // Dados da NOTA FISCAL referenciada: Ex.: Devolução de Mercadorias, Substituição de NF cancelada, Complementação de NF, etc AADD(aStr,{"REFNFE", "C", 44, 0}) // Chave de acesso da NF-e AADD(aStr,{"NF1_UF", "C", 02, 0}) // UF do emitente (NF normal) AADD(aStr,{"NF1CGC", "C", 14, 0}) // Cnpj do emitente da NF (NF normal) AADD(aStr,{"NF1MOD", "C", 02, 0}) // Modelo do documento fiscal - 01 (NF normal) AADD(aStr,{"NF1SER", "C", 03, 0}) // Série do documento fiscal (NF normal) AADD(aStr,{"NF1NRO", "C", 09, 0}) // Número do documento fiscal (NF normal) cDbfInfo += CheckDbf(aStr, "NFE_INFO.DBF") IF ! FILE("NFE_INFO.DBF") DBCREATE("NFE_INFO.DBF",aStr) ENDIF IF ! FILE("NFE_INFO.CDX") USE NFE_INFO NEW PACK MsgMeter( { | oMeter, oText, oDlg, lEnd | ; BuildIndex( oMeter, oText, oDlg, @lEnd, "NFE_INFO->CODVND", "NFE_CODV" ) },; "Criando arquivo de indece NFE_CODV", "Espere um momento!" ) MsgMeter( { | oMeter, oText, oDlg, lEnd | ; BuildIndex( oMeter, oText, oDlg, @lEnd, "NFE_INFO->NFENUM", "NFE_NUME" ) },; "Criando arquivo de indece NFE_NUME", "Espere um momento!" ) MsgMeter( { | oMeter, oText, oDlg, lEnd | ; BuildIndex( oMeter, oText, oDlg, @lEnd, "NFE_INFO->D_NOME", "NFE_DEST" ) },; "Criando arquivo de indece NFE_DEST", "Espere um momento!" ) MsgMeter( { | oMeter, oText, oDlg, lEnd | ; BuildIndex( oMeter, oText, oDlg, @lEnd, "NFE_INFO->NFEEMI", "NFE_DTPE" ) },; "Criando arquivo de indece NFE_DTPE", "Espere um momento!" ) CLOSE NFE_INFO ENDIF nReg ++ oMeter:Set(nReg) // Criação do banco de dados de itens da NFE aStr := {} AADD(aStr,{"CODVND", "N", 10, 0}) // Codigo da venda AADD(aStr,{"CFISCA", "C", 10, 0}) // NCM - Classificação Fiscal AADD(aStr,{"EX_IPI", "C", 03, 0}) // Código da EX da TIPI AADD(aStr,{"CFOP", "C", 05, 0}) // CFOP AADD(aStr,{"EAN_13", "C", 13, 0}) // Código 13 digitos (barras) AADD(aStr,{"PRODUT", "C", 30, 0}) // Categoria do produto AADD(aStr,{"DESCRI", "C", 40, 0}) // Descrição do produto AADD(aStr,{"UNIDAD", "C", 03, 0}) // Unidade AADD(aStr,{"QUANTI", "N", 11, 3}) // Quantidade AADD(aStr,{"PRUNIT", "N", 11, 3}) // Preço unitário AADD(aStr,{"MBICMS", "C", 01, 0}) // Modalidade de determinação da BC do ICMS ( 0 - Margem Valor Agregado 1-Pauta (Valor) 2 = Preço Tabelado Máx. (valor) 3 -Valor da Operação ) AADD(aStr,{"MBISIT", "C", 01, 0}) // Modalidade de determinação da BC do ICMS ST ( 0 - Preço tabelado ou máximo sugerido 1-Lista negativa(valor) 2- Lista Positiva(valor) 3-Lista Neutra(Valor), 4-Margem Valor Agregado(%) 5-Pauta(Valor)) AADD(aStr,{"ST_PIS", "C", 02, 0}) // Código de situação tributária do PIS ( 01 - Operação Tributavel (Base de Cálculo = Valor da operação. Aliquota normal (cumulativo/não cumulativo)) 02 - Operação tributável (base de cálculo=valor da operação(alíquota diferenciada)) AADD(aStr,{"VBSPIS", "N", 09, 2}) // Valor da base de calculo do PIS AADD(aStr,{"ALIPIS", "N", 05, 2}) // Valor da base de calculo do PIS AADD(aStr,{"VLRPIS", "N", 09, 2}) // Valor do PIS AADD(aStr,{"STCOFI", "C", 02, 0}) // Código de Situação tributária do COFINS ( 99 - Outras Operações ) AADD(aStr,{"B_ICMS", "N", 05, 2}) // Aliquota do ICMS AADD(aStr,{"RDICMS", "N", 05, 2}) // Taxa de redução do ICMS AADD(aStr,{"B_IPI", "N", 05, 2}) // Aliquota do IPI AADD(aStr,{"B_ICST", "N", 05, 2}) // Aliquota do ICMS ST AADD(aStr,{"V_ICST", "N", 13, 2}) // Valor do ICMS ST AADD(aStr,{"B_IVA", "N", 05, 2}) // Percentual do IVA AADD(aStr,{"B_PIS", "N", 09, 2}) // BC do PIS AADD(aStr,{"A_PIS", "N", 05, 2}) // Aliquota do PIS AADD(aStr,{"V_PIS", "N", 09, 2}) // Valor do PIS AADD(aStr,{"B_COFI", "N", 09, 2}) // BC da COFINS AADD(aStr,{"A_COFI", "N", 05, 2}) // Aliquota da COFINS AADD(aStr,{"V_COFI", "N", 09, 2}) // Valor da COFINS AADD(aStr,{"ICMIPI", "N", 02, 0}) // Se deve somar IPI Base de ICMS AADD(aStr,{"S_TRIB", "C", 03, 0}) // left(S_TRIB,1) -> Origem do produto (0 - Nacional 1 - Estrangeira Importação direta 2-Estrangeira Adquirida no Mercado interno) // right(S_TRIB,2) -> Código da Situação Tributária cDbfInfo += CheckDbf(aStr, "NFE_ITEM.DBF") IF ! FILE("NFE_ITEM.DBF") DBCREATE("NFE_ITEM.DBF",aStr) ENDIF IF ! FILE("NFE_ITEM.CDX") USE NFE_ITEM NEW PACK MsgMeter( { | oMeter, oText, oDlg, lEnd | ; BuildIndex( oMeter, oText, oDlg, @lEnd, "NFE_ITEM->CODVND", "NFE_IVND" ) },; "Criando arquivo de indece NFE_IVND", "Espere um momento!" ) CLOSE NFE_ITEM ENDIF nReg ++ oMeter:Set(nReg) // Criação do banco de dados de parcelas da NFE aStr := {} AADD(aStr,{"CODVND", "N", 10, 0}) // Codigo da venda AADD(aStr,{"NDUPLI", "N", 07, 0}) // Número da duplicata AADD(aStr,{"DVENCI", "D", 08, 0}) // Vencimento AADD(aStr,{"NVALOR", "N", 10, 2}) // Valor cDbfInfo += CheckDbf(aStr, "NFE_DUPL.DBF") IF ! FILE("NFE_DUPL.DBF") DBCREATE("NFE_DUPL.DBF",aStr) ENDIF IF ! FILE("NFE_DUPL.CDX") USE NFE_DUPL NEW PACK MsgMeter( { | oMeter, oText, oDlg, lEnd | ; BuildIndex( oMeter, oText, oDlg, @lEnd, "NFE_DUPL->CODVND", "NFE_CODV" ) },; "Criando arquivo de indece NFE_CODV", "Espere um momento!" ) CLOSE NFE_DUPL ENDIF nReg ++ oMeter:Set(nReg) id=code>id=code>Você pode baixar o ACBrNFeMonitor de: http://www.arsoft-ap.com.br/utilitarios.htm Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  19. No forum internacional o Antonio Linhares informa que estão fazendo testes com Pocket Outlook, mas ainda não chegaram a uma solução final. Precisamos aguardar. id=code>id=code>Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  20. Se você usa WorkShop para desenhar sua GROUP BOX, basta deixá-la sem CAPTION (texto) no WorkShop. Depois, é só REdefinir em seu código com o titulo (caption) desejado. Ex: REDEFINE GROUP oGbox ; LABEL "Dados Pessoais" ; ID nn OF oDlg ; COLOR CLR_HBLUE, 14483196 ; ESQUERDA RAISED TRANSPARENT ; FONT oFont id=code>id=code>Detalhe: Estou usando a VLib neste exemplo. Faço dessa forma e funciona certinho. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente" Editado por - j_arist on 10/10/2010 16:37:16
  21. A resposta chegou: oInternet := TInternet():New() oFTP := TFTP():New( DSITE, oInternet, DUSER, DPASS ) oFTP:DeleteFile(DFIC) // deletes a remote FTP file you must inform the complete address ex /xxx/yyy/myfile.dbf OFTP:END() oInternet:End() id=code>id=code>Teste aí e avise se deu certo. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  22. Não sei como fazer. Mas, pra ajudar, postei tua dúvida (que também é minha) no forum internacional. Acompanhe pra ver se algum ajuda por lá: Link: http://forums.fivetechsupport.com/viewtopic.php?f=4&t=20032 Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  23. Desculpa, mas... Já perguntou a algum contador? Quando tenho esse tipo de dúvidas, como sou apenas programador, peço esclarecimentos ao contador do meu cliente. Os contadores podem nos auxiliar bastante nessas horas. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  24. No meu estado (Amapá) o contador de um cliente meu explicou que KITs tem que ser discriminada cada componente, o mais detalhada possível. Se for computador, descrever PLACA MAIN, PROCESSADOR, MEMÓRIA, HD, TECLADO, MOUSE, MULTMIDIA, ETC. É assim que faço nas NF e NFe's. Se ele leu isso em alguma norma, não sei. Esqueci de perguntar. Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
  25. Eu faço assim: FUNCTION SuaFuncao() nOper := 1 cOper := "Nome do operador // Execusa seus comandos, e: LogReg(nOper,cOper,"Executou determinada tarefa") RETURN NIL **+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+** FUNCTION LogReg(nOperad,cOperad,cAction) LOCAL OldLogDb, aStr, cDbfInfo IF nOperad = 0 RETURN NIL ENDIF PUBLIC nErros, lGoOn OldLogDb := SELECT() cDbfInfo := "" nErros := 0 cDbLog := "LOG"+STRZERO(nOperad,5) aStr := {} AADD( aStr, {"DATA", "D", 10, 00}) AADD( aStr, {"HORA", "C", 05, 00}) AADD( aStr, {"ACAO", "C",1024, 00}) AADD( aStr, {"CODIGO", "N", 04, 00}) AADD( aStr, {"NOME", "C", 45, 00}) cDbfInfo += CheckDbf(aStr, cDbLog, .T.) IF ! FILE(cDbLog+".DBF") DBCREATE(cDbLog+".DBF", aStr) ENDIF IF nErros > 0 cDbfInfo := MEMOREAD("STRERRO.TXT") MsgAlert("Existem erros no arquivo "+cDBase+".DBF"+CRLF+CRLF+cDbfInfo+CRLF+CRLF+"Favor corrigir antes de prosseguir.","Erro de estrutura") SELECT(mDb) RELEASE nErros, lGoOn RETURN aPadrao ENDIF USE &(cDbLog) SHARED NEW SelFile := SELECT() LogFile := (SelFile)->(ALIAS()) WHILE ! &(LogFile)->(RLOCK()) ; ERROREDE() ; END &(LogFile)->(DBAPPEND()) REPLACE &(LogFile)->DATA WITH DATE() REPLACE &(LogFile)->HORA WITH LEFT(TIME(),5) REPLACE &(LogFile)->ACAO WITH cAction REPLACE &(LogFile)->CODIGO WITH nOperad REPLACE &(LogFile)->NOME WITH cOperad &(LogFile)->(DBCLOSEAREA()) SELECT(OldLogDb) RELEASE nErros, lGoOn RETURN NIL **+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+** STATIC FUNCTION FiltraLog(dDat,oLogBrw) IF ! EMPTY(DTOS(dDat)) SET FILTER TO DATA = dDat ELSE SET FILTER TO ENDIF oLogBrw:GoBottom() oLogBrw:UpStable() oLogBrw:Refresh() RETURN .T. **+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+** STATIC FUNCTION ImpLog(oLogBrw) LOCAL oPrn, oFont, nPag, mLarg, nWidt, nSpc, nRow, nCls PRINTER oPrn TO cVndImp NAME OemToAnsi("Log do operador") PREVIEW DEFINE FONT oFont NAME "Arial" SIZE 0, -10 OF oPrn DEFINE FONT oFon2 NAME "Courier New" SIZE 0, -10 OF oPrn nPag := 1 nTab := oPrn:nHorzRes()/20 mLarg := oFont:nHeight nWidt := oFont:nWidth*10 nSpc := (oPrn:nHorzRes()-(2*nTab)) / 90 nRow := 4 nCls := {nTab+(nSpc*01),; nTab+(nSpc*11),; nTab+(nSpc*19) } nCent := nTab+(nSpc*48) oPrn:StartPage() FOR Y := 1 TO 90 oPrn:Say(nRow*mLarg, nTab+(nSpc*Y), "-", oFont) NEXT nRow++ oPrn:Say(nRow*mLarg, nCent, oRaz, oFont, , , ,2) nRow++ oPrn:Say(nRow*mLarg, nCent, mEnd+", N. "+mNmr+" - "+mBro, oFont, , , ,2) nRow++ oPrn:Say(nRow*mLarg, nCent, mCid, oFont, , , ,2) nRow++ oPrn:Say(nRow*mLarg, nCent, mFon, oFont, , , ,2) nRow+=2 FOR Y := 1 TO 90 oPrn:Say(nRow*mLarg, nTab+(nSpc*Y), "-", oFont) NEXT nRow++ oPrn:Say(nRow*mLarg, nCls[1], OemToAnsi("RELATà RIO DE ATIVIDADES"), oFont) nRow++ oPrn:Say(nRow*mLarg, nCls[1], "OPERADOR: "+STRZERO(CODIGO,2)+"-"+ALLTRIM(NOME), oFont) nRow+=2 oPrn:Say( nRow*mLarg, nCls[1], OemToAnsi("DATA"), oFont ) oPrn:Say( nRow*mLarg, nCls[2], OemToAnsi("HORA"), oFont ) oPrn:Say( nRow*mLarg, nCls[3], OemToAnsi("ACAO"), oFont ) nRow+=2 FOR Y := 1 TO 90 oPrn:Say(nRow*mLarg, nTab+(nSpc*Y), "-", oFont) NEXT nRow ++ DbGotop() WHILE ! EOF() oPrn:Say( nRow*mLarg, nCls[1], DTOC(DATA), oFont ) oPrn:Say( nRow*mLarg, nCls[2], HORA, oFont ) cTxt := RTRIM(ACAO) mTtL1:= MLCOUNT(cTxt,70) IF mTtL1 > 1 FOR Y := 1 TO mTtL1-1 oPrn:Say(nRow*mLarg, nCls[3], JUSTIFICA(cTxt,70,Y), oFon2) nRow++ NEXT oPrn:Say(nRow*mLarg, nCls[3],MEMOLINE(cTxt,70,mTtL1), oFon2) ELSE oPrn:Say(nRow*mLarg, nCls[3],MEMOLINE(cTxt,70,mTtL1), oFon2) ENDIF nRow++ IF (nRow*mLarg) >= ( oPrn:nVertRes()-(8*mLarg) ) oPrn:Say(oPrn:nVertRes()-(6*mLarg), nCls[1], "PAG: "+STRZERO(nPag,2), oFont) nRow := 3 nPag ++ oPrn:EndPage() oPrn:StartPage() oPrn:Say(nRow*mLarg, nCls[1], OemToAnsi("RELATà RIO DE ATIVIDADES"), oFont) nRow++ FOR Y := 1 TO 90 oPrn:Say(nRow*mLarg, nTab+(nSpc*Y), "-", oFont) NEXT nRow++ oPrn:Say( nRow*mLarg, nCls[1], OemToAnsi("DATA"), oFont ) oPrn:Say( nRow*mLarg, nCls[2], OemToAnsi("HORA"), oFont ) oPrn:Say( nRow*mLarg, nCls[3], OemToAnsi("ACAO"), oFont ) nRow+=2 FOR Y := 1 TO 90 oPrn:Say(nRow*mLarg, nTab+(nSpc*Y), "-", oFont) NEXT nRow++ ELSE nRow++ ENDIF DbSkip(1) END FOR Y := 1 TO 90 oPrn:Say(nRow*mLarg, nTab+(nSpc*Y), "-", oFont) NEXT oPrn:Say(oPrn:nVertRes()-(6*mLarg), nCls[1], "PAG: "+STRZERO(nPag,2), oFont) oPrn:EndPage() oPrn:Preview() RELEASE FONT oFont, oFon2 DbGotop() oLogBrw:UpStable() oLogBrw:Refresh() RETURN NIL **+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+** STATIC FUNCTION DelLog(DbfLog,oLogBrw) IF MsgNoYes(OemToAnsi("Confirma a exclusÆo definitiva destas informa‡äes?"),OemToAnsi("Aten‡Æo")) &(DbfLog)->(DBGOTOP()) WHIL ! &(DbfLog)->(EOF()) WHILE ! &(DbfLog)->(rlock()) ; ERROREDE() ; END &(DbfLog)->(DBDELETE()) &(DbfLog)->(DBSKIP(1)) END oLogBrw:UpStable() oLogBrw:Refresh() ENDIF RETURN NIL **+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+**+-+** id=code>id=code>Ariston Santos FWPPC / Fwh / xHarbour / Bcc55 / xDev / Workshop Conheça o pacote fivewin: www.arsoft-ap.com.br "Leia a Bíblia diariamente"
×
×
  • Create New...