Windows Server - Error

Windows Server - Error

Postby karinha » Tue Aug 20, 2013 3:12 pm

Maestro, ¿hay alguna posibilidad de que un comando aFindFile() Cambiar el directorio Dónde está el ejecutable?

En Windows SERVER?

Ejemplo:

Code: Select all  Expand view

   PRIVATE cDirExe := cFILEPATH(GETMODULEFILENAME(GETINSTANCE()))


   cPdfNfeUni := aFindFile( ALLTRIM( cCHAVE ) + "-danfe.pdf", ;
                            cDirExe+"unidanfe\email\anexos" )
 


Al retornar, el programa me dice que no encuentra más los .DBFs dónde está el ejecutable...

Esto solo me ocorri en WINDOWS SERVER.

Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Windows Server - Error

Postby lucasdebeltran » Tue Aug 20, 2013 4:31 pm

Hola,

Prueba con hb_dirbase(), te indica el path desde el que ejecutas tu aplicación.
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: Windows Server - Error

Postby karinha » Tue Aug 20, 2013 5:45 pm

Holá Lucas, Gracias...

PRIVATE cDirPleno := GETCURDIR() // En FHW13.06 FOR XHARBOUR Funciona...

// No uso HARBOUR.
//PRIVATE cDirPleno := hb_dirbase() // Esto no funciona en XHARBOUR debe ser comando de HARBOUR Correcto?
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Windows Server - Error

Postby lucasdebeltran » Tue Aug 20, 2013 6:06 pm

Así es, es de Harbour.

Por favor, prueba con:

FUNCTION HB_DIRBASE(); RETURN CURDRIVE() + ":\" + CURDIR() + "\"
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: Windows Server - Error

Postby karinha » Tue Aug 20, 2013 7:05 pm

Gracias Lucas, no hay diferencias..

Code: Select all  Expand view

#include "FiveWin.ch"

FUNCTION Main()

 // Harbour
 ? HB_DIRBASE()  // Vuelve:  "C:\FWH1306\SAMPLES\"  // con el \

 // xHarbour
 ? GETCURDIR()   // Vuelve:  "C:\FWH1306\SAMPLES" // sin el \

 // La misma cosa...

RETURN NIL

FUNCTION HB_DIRBASE(); RETURN CURDRIVE() + ":\" + CURDIR() + "\"
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Windows Server - Error

Postby karinha » Tue Aug 20, 2013 7:46 pm

Señores, és posible uno de estes comandos cambiar el directório dónde está el ejecutable?

DIRECTORYRECURSE()

ó

DIRECTORYRECURSIVE()

ó

HB_FNAMESPLIT()

Si si, porque solo en WINDOWS SERVER?

Antes, funcionaba todo perfecto, ahora con el FWH13.06 no funciona idéntico.

Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Windows Server - Error

Postby Rick Lipkin » Wed Aug 21, 2013 3:07 pm

João

This code works for me to get the location of the executable .. If you are mapped it will return the logical drive and path .. the code will also return the unc if the executable is launched without a mapped drive.

As you can see .. I get the file location then set the applications internal DEFAULT .. that way you can use the set(7) function to re-call the application DEFAULT anywhere in your application to return the location.

Rick Lipkin
Code: Select all  Expand view

/-- get executable location //

cFILE := GetModuleFileName( GetInstance() )
aDIR  := DIRECTORY( cFILE )
dEXE  := aDIR[1] [3]                // time stamp on exe ( used to manage revision date )

// where .exe started from is default directory //

mSTART := RAT( "\", cFILE )
cDEFA  := SUBSTR(cFILE,1,mSTART-1)

aDIR := NIL

SET DEFA to ( cDEFA )

User avatar
Rick Lipkin
 
Posts: 2615
Joined: Fri Oct 07, 2005 1:50 pm
Location: Columbia, South Carolina USA

Re: Windows Server - Error

Postby karinha » Wed Aug 21, 2013 3:58 pm

Gracias Rick,

El problema es que tengo dos ejecutables. Ejemplo:

Uno de ellos está en: P:\plenoCB

el otro está en: C: \ INST_NFE

Cuando la primera llamada, el segundo, y hacer una orden de búsqueda con el comando aFindFile (), Windows Server pierde la forma en que fue el primero.

En Windows 7 funciona perfectamente en Windows Server, no funciona de la misma manera. ¿Entiendes?

Usando lCHDIR () volver al trabajo en p:\Plenocb. Pero no entiendo por qué esto ocurre sólo en el Windows Server.

Gracias, abrazos.


Thank you Rick,

The problem is that I have two executables. example:

One is: P: \ plenoCB

the other is in: C: \ INST_NFE

When the first calls the second, and do a search command with the command aFindFile (), Windows Server loses the way where was the first.

In windows 7 works perfect on windows server, does not work the same way. Understand?

Using lCHDIR () back to work. But do not understand why this happens only on SERVER.

Thank you, hugs.

João Santos - São Paulo - Brasil
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Windows Server - Error

Postby Antonio Linares » Wed Aug 21, 2013 5:52 pm

Joao,

La función aFindFile() solo usa la función Directory() de Harbour, la cual no debe cambiar de directorio.

No será otra parte de tu aplicación la que cambia de directorio ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Windows Server - Error

Postby karinha » Wed Aug 21, 2013 7:30 pm

No Maestro, Solo AFindFile() y DirectoryRecurse() y hb_Split() nada mas...

Siempre funciono com windows 95/98/xp y 7 Con Windows Server Pierde la conexion.

Code: Select all  Expand view

FUNCTION ENVIAR_EMAIL()

   LOCAL cSubject, cNoteText, cMsgType, cConversationID, dDate,  cTime,    ;
         lReceipt, lFromUser, aOrigin,  aRecipients,     aFiles, oMail,    ;
         EmailCliente, cChave, cXml,    oDlgEmail, oFnt, oFont,  oSaida2,  ;
         cAlias, oLbx, IDCor,   oIco,   TRAB, aGet := ARRAY(5)
   LOCAL nKey := VK_RETURN, oEnviaSoUm, oEnviaTodos, nRecNo
   LOCAL lContinua := .T.,  cValNf, oBtn1, ccxml, oEnviaDireto
   LOCAL oBtnNewAnexo, oBtnExclAnexo, oList, cArq, cExt
   LOCAL oHand, oAlterar, oGravar, oImprimir, oBrush, oEnviar, oDlgEnv
   LOCAL nContaNFe, lLigaBtnVar := .F., cArq3, cPdfNFeUni
   LOCAL cUser := SPACE(50), cRemt := SPACE(50), ;
         cDest := SPACE(250), cTxt := SPACE(10), cAssunto := SPACE(100),;
         cCC := SPACE(250), cCCO := SPACE(250)
   LOCAL oGet[15], oSay[12], oBtn[2], nItem := 0, cArq2, cPdfCCeUni
   LOCAL cDados, i, oAdd, oDel, cTitle, oSay1, oTahoma, rCampo
   LOCAL cServPOP3, cServSMTP, nServPORT, cServSEGU
   LOCAL oSayBanco, cPromptBanco, cDirPdf := [C:\NFEPDF ]

   PRIVATE oCab, oGru, oCon, oCod, oMenu, lSair := .F., oM2, lCheck := .T.
   PRIVATE DbServidor, cNomeUsuario
   PRIVATE cPass := SPACE(15)
   // Esta area, pegar do banco de dados
   PRIVATE aServs  // Servidores
   PRIVATE aDomin := {}, nServ := 1 // Dominio e Servidores
   PRIVATE oFont1

   MEMVAR XNUMPEDIDO

   PUBLIC wNomeEmpresa, lNovaDll, NewAnexo, lNewAnexoVemdaNFe

   // Caso o usuario tecle <esc> quando estiver enviando automatico
   lSaida := .T.  //-> Permite sair sem problemas

   XNUMPEDIDO := 0
   nContaNFe  := 1

   cTitle := [Enviar Email ]

   //-> Abre Notas Fiscais
   SELECT CADNFE

   IF CADPARAM->TPAMB = [1]

      IF OrdCount() < 3

          MsgStop( OemToAnsi( "Aten‡Æo Usu rio:         " ) +CRLF+ ;
                   OemToAnsi( "Problemas nos INDICES 34 " ) +CRLF+ ;
                   OemToAnsi( "Saia do programa e       " ) +CRLF+ ;
                   OemToAnsi( "Entre no PLENO e         " ) +CRLF+ ;
                   OemToAnsi( "REINDEXAR TODOS OS BANCOS" ),       ;
                   OemToAnsi( "Problemas com os Indices." ) )
          RETURN ( .F. )
       ELSE
          SET ORDER TO 03
       ENDIF

   ELSE
      SET ORDER TO 01
   ENDIF

   SEEK NFECOD2  //-> Numero da Nota Fiscal

   IF FOUND()

      SELECT CADFATPE

      IF CADPARAM->TPAMB = [1]

         IF OrdCount() < 5

             MsgStop( OemToAnsi( "Aten‡Æo Usu rio:         " ) +CRLF+ ;
                      OemToAnsi( "Problemas nos INDICES 35 " ) +CRLF+ ;
                      OemToAnsi( "Saia do programa e       " ) +CRLF+ ;
                      OemToAnsi( "Entre no PLENO e         " ) +CRLF+ ;
                      OemToAnsi( "REINDEXAR TODOS OS BANCOS" ),       ;
                      OemToAnsi( "Problemas com os Indices." ) )
             RETURN ( .F. )
          ELSE
             SET ORDER TO 05
          ENDIF

         SEEK CADNFE->NFECOD
      ELSE
         SET ORDER TO 01         //-> Por FATURCOD - Indice
         SEEK CADNFE->FATURCOD
      ENDIF

      IF .NOT. FOUND()

         IF lImprimeOutros  // Enviar Email do Fat. Outros

            SELECT CADFATUR
            SET ORDER TO 01

            SEEK CADNFE->FATURCOD

         ENDIF

      ENDIF

   ELSE

      MsgStop( OemToAnsi( "Aten‡Æo Usu rio:               " ) +CRLF+ ;
               OemToAnsi( "Nota Fiscal NÆo Localizada     " ) +CRLF+ ;
               OemToAnsi( "Para Gerar o Email do Cliente. " ),       ;
               OemToAnsi( "Impossivel Enviar o Email...   " ) )

      RETURN( .F. )

   ENDIF

   IF FOUND()

      IF CADFATPE->TIPOENTGA = "ME"

         PEDIDCOD2 := CADFATPE->PEDIDCOD

         XNUMPEDIDO := PEDIDCOD2

         lNaoAchouAprovada := .T.

         IF lOutLook // Sera enviado pelo OutLook Express
            lMultiEntrega := .F. // Para nao reindexar em SOMENTE UM EMAIL
         ELSE  // Sera enviado direto pelo programa
            lMultiEntrega := .T. // Se for direto, tem que reindexar
         ENDIF

         TRAB := OemToAnsi( "<<< NFE's: RELA€ÇO DE EMAILS DO PEDIDO: " ;
                            +STR(PEDIDCOD2)+                           ;
                            " -  " + "MULTI ENTREGA: PARA ENVIAR >>>" )

         LCHDIR( cDirPleno ) // ANTES NO ERA NECESSARIO...
         SET DEFAULT TO

         SELECT CADNFE

         ERASE C:\PLENOTMP\INFETEMP.CDX

         INDEX ON CADNFE->NFECOD TAG 07 TO C:\PLENOTMP\INFETEMP ;
                  WHILE CADNFE->PEDIDCOD == PEDIDCOD2 .AND.     ;
                        CADNFE->TPFAT_OP == "P"       .AND.     ;
                        CADNFE->STATUS   == "IMP"     .OR.      ;
                        CADNFE->STATUS   == "CAN"     .OR.      ;
                        CADNFE->STATUS   == "APR"     .AND.     ;
                        ( .NOT. EOF() )

         SET INDEX TO C:\PLENOTMP\INFETEMP, INFE

         GO TOP

         WHILE .NOT. EOF()

            SYSREFRESH()

            IF nContaNFe > 1
               lLigaBtnVar := .T. // Botao de Varios Emails
            ENDIF

            SKIP

            nContaNFe := nContaNFe + 1

         ENDDO

         GO TOP

         IF VSIS = "01082"

            cPromptBanco := OemToAnsi( "               ATEN€ÇO USUµRIO      "+ ;
                                       "ANTES DE TENTAR ENVIAR EMAILS, "     + ;
                                       "FECHE O SUPERCASH SANTANDER OU "     + ;
                                       "COBRAN€A ITAé.  PROIBIDO O USO DE "  + ;
                                       "PROGRAMAS DE BANCOS COM A NF-e. " )

         ELSE

            cPromptBanco := OemToAnsi( "               ATEN€ÇO USUµRIO: "   + ;
                                       "ANTES DE TENTAR ENVIAR EMAILS, "    + ;
                                       "FECHE QUALQUER PROGRAMA DE BANCO. " + ;
                                       "PROIBIDO O USO DE " + ;
                                       "PROGRAMAS DE BANCOS COM A NF-e. " )


         ENDIF

         cAlias := ALIAS()  //-> CADNFE.DBF

         DEFINE BRUSH oBrush    RESOURCE "LOGO2" //-> PEGA A BITMAP DO ARQUIVO.RES(LOGO.BMP)
         DEFINE ICON oIco NAME "ICONE"
         DEFINE FONT oFnt  NAME "Ms Sans Serif" SIZE 00,  14 BOLD
         DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

         DEFINE DIALOG oDlgEmail  RESOURCE "BROWSE_ENVIAR_EMAILS"    ;
                ICON oIco  COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

         oDlgEmail:lHelpIcon := .F.

         REDEFINE SAY ID 401  OF oDlgEMail                           ;
                  COLORS CLR_BLACK, CLR_WHITE UPDATE FONT oFnt TRANSPARENT

         REDEFINE SAY ID 402  OF oDlgEMail                           ;
                  COLORS CLR_BLACK, CLR_WHITE UPDATE FONT oFnt TRANSPARENT

         REDEFINE GROUP oGroup ID 501 OF oDlgEmail FONT oFnt TRANSPARENT

         REDEFINE DYNAMIC SAY oSayBanco  VAR cPromptBanco ID 801 OF oDlgEmail;
                  CENTERED HORIZONTAL SCROLL SPEED 50 WRAP                   ;
                  COLOR CLR_YELLOW, CLR_BLACK    FONT oFont

         IF lLigaBtnVar // Multi entrega, tem varios emails, aqui.

            REDEFINE LISTBOX oLbx FIELDS                                         ;
                     IIF( ( cAlias )->NFECOD != 0,                               ;
                     xPadl( Alltrim( Str( ( cAlias )->NFECOD, 6,0 ) ),  6   ),   ;
                     xPadl( Alltrim( Str( ( cAlias )->FATURCOD, 6,0 ) ), 6 ) ) , ;
                     NUMERO_DO_PEDIDO()                                        , ;
                     NOME_CLIENTE_VIEW()                                       , ;
                     VERIFICA_STATUS_CLIENTE()                                   ;
                     HEADERS OemToAnsi( "N. Fiscal "       )                   , ;
                             OemToAnsi( "Pedido N§ "       )                   , ;
                             OemToAnsi( "Nome do Cliente " )                   , ;
                             OemToAnsi( "Status NF-e "     )                     ;
                     FIELDSIZES 090, 090, 425, 120                               ;
                     COLOR CLR_BROWN, CLR_LGREEN FONT oFnt ID 101 OF oDlgEmail   ;
                     ON DBLCLICK( MsgRun( OemToAnsi( "Tentando Gerar o Email da NF-e Para Enviar. " ), ;
                                                     "Conectando ao Servidor de Email(s). Espere! ",   ;
                                  { || ENVIAR_SOMENTE_UM_EMAIL( cAlias, oLbx ) } ),  ;
                                               oLbx:Refresh(), oLbx:SetFocus() )

         ELSE // e multi entrega, mas foi escolhido somente um email, aqui.

            REDEFINE LISTBOX oLbx FIELDS                                             ;
                     IIF( ( cAlias )->NFECOD != 0,                                   ;
                     xPadl( Alltrim( Str( ( cAlias )->NFECOD, 6,0 ) ),  6   ),       ;
                     xPadl( Alltrim( Str( ( cAlias )->FATURCOD, 6,0 ) ), 6 ) )     , ;
                     NUMERO_DO_PEDIDO()                                            , ;
                     NOME_CLIENTE_VIEW()                                           , ;
                     VERIFICA_STATUS_CLIENTE()                                       ;
                     HEADERS OemToAnsi( "N. Fiscal "       )                       , ;
                             OemToAnsi( "Pedido N§ "       )                       , ;
                             OemToAnsi( "Nome do Cliente " )                       , ;
                             OemToAnsi( "Status NF-e "     )                         ;
                     FIELDSIZES 090, 090, 425, 120                                   ;
                     COLOR CLR_BROWN, CLR_LGREEN FONT oFnt ID 101 OF oDlgEmail       ;
                     ON DBLCLICK( MsgRun( OemToAnsi( "Tentando Gerar o Email da NF-e Para Enviar. " ), ;
                                                     "Conectando ao Servidor de Email(s). Espere! ",   ;
                                  { || ENVIAR_SOMENTE_UM_EMAIL( cAlias, oLbx ) } ),  ;
                              oLbx:Refresh(), oLbx:SetFocus(), oDlgEmail:End() )
         ENDIF

         IF lLigaBtnVar // Multi entrega, tem varios emails, aqui.

            oLbx:bKeyDown := { | nKey |                                         ;
                              IF ( nKey = VK_RETURN,                         ;
                                 ( MsgRun( OemToAnsi( "Tentando Gerar o Email da NF-e Para Enviar. " ), ;
                                                      "Conectando ao Servidor de Email(s). Espere! ",   ;
                                { || ENVIAR_SOMENTE_UM_EMAIL( cAlias, oLbx ) } ), ;
                                         oLbx:Refresh(), oLbx:SetFocus()  ), ;
                              IF ( nKey = VK_INSERT,                         ;
                                 ( "" ),                                     ;
                              IF ( nKey = VK_DELETE,                         ;
                                 ( "" ), ) ) ) }

         ELSE // e multi entrega, mas foi escolhido somente um email, aqui.

            oLbx:bKeyDown := { | nKey |                                         ;
                              IF ( nKey = VK_RETURN,                         ;
                                 ( MsgRun( OemToAnsi( "Tentando Gerar o Email da NF-e Para Enviar. " ), ;
                                                      "Conectando ao Servidor de Email(s). Espere! ",   ;
                                 { || ENVIAR_SOMENTE_UM_EMAIL( cAlias, oLbx ) } ), ;
                         oLbx:Refresh(), oLbx:SetFocus(), oDlgEmail:End() ), ;
                              IF ( nKey = VK_INSERT,                         ;
                                 ( "" ),                                     ;
                              IF ( nKey = VK_DELETE,                         ;
                                 ( "" ), ) ) ) }

         ENDIF

         oLbx:cToolTip := OemToAnsi( "<ENTER>  Enviar Somente Uma Nota " +CRLF+   ;
                                     "<INSERT> Desabilitado.           " +CRLF+   ;
                                     "<CLICK>  Enviar Somente Uma Nota " +CRLF+   ;
                                     "<DELETE> Desabilitado.           " )

         oLbx:lToolTipBallon   := .T.
         oLbx:nTooltipWidth    := 200  // 100
         oLbx:nTooltipTexColor := nRGB( 000, 000, 000 )
         oLbx:nTooltipBKColor  := nRGB( 250, 250, 250 )
         oLbx:cTooltipTitle    := OemToAnsi( "Enviar Emails das Notas Fiscais " )
         oLbx:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
         //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
         oLbx:nSetDelayType    := 2
         oLbx:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

         oLbx:nClrBackHead  := CLR_LGREEN  // Cor do Fundo do Cabe‡alho
         oLbx:nClrText      := {|| nRGB( 165,  42,  42 ) }
         oLbx:nClrBackFocus := CLR_HBLUE   // Cor do Cursor Em Cima do Ötem
         oLbx:nClrForeFocus := CLR_AMARELO // cor da letra da barra ativa
         oLbx:nClrForeHead  := CLR_HRED    // Cor nos Headers - Cabe‡alhos
         oLbx:nClrPane      := { || IIF( ( oLbx:cAlias )->( OrdKeyNo() ) %2 == 0,  ;
                                           CLR_LGREEN, CLR_LGRAY ) }
         oLbx:nColAct       := 3           // Onde o Cursor Vai Iniciar qual coluna
         oLbx:nLineStyle    := 3           // Estilo das linhas nos dados da Browse
         oLbx:lCellStyle    := .T.         // S¢ Pinta a celula que o cursor est 
         oLbx:aJustify      := { .T., .T., .F., .F., .F., .F. }
         oLbx:lMChange      := .F.         // Desabilita Mousemove
         oLbx:Refresh()                    // Estabiliza o Browse/Listbox
         oLbx:SetFocus()                   // Refocus on The Browse

         REDEFINE GET aGet[1] VAR TRAB ID 20 PICTURE "@K" WHEN( .F. )     ;
                  OF oDlgEmail UPDATE  FONT oFnt COLORS CLR_BLACK, CLR_WHITE

         IF lLigaBtnVar // Multi entrega, tem varios emails, aqui.

            REDEFINE BUTTONBMP oEnviaSoUm  ID 301 OF oDlgEmail                  ;
                     ACTION( MsgRun( OemToAnsi( "Tentando Gerar o Email da NF-e Para Enviar. " ), ;
                                                "Conectando ao Servidor de Email. Espere!    ",   ;
                     { || ENVIAR_SOMENTE_UM_EMAIL( cAlias, oLbx )  } ), ;
                                        oLbx:Refresh(), oLbx:SetFocus() )

         ELSE // e multi entrega, mas foi escolhido somente um email, aqui.

            REDEFINE BUTTONBMP oEnviaSoUm  ID 301 OF oDlgEmail                  ;
                     ACTION( MsgRun( OemToAnsi( "Tentando Gerar o Email da NF-e Para Enviar. " ), ;
                                                "Conectando ao Servidor de Email. Espere!    ",   ;
                     { || ENVIAR_SOMENTE_UM_EMAIL( cAlias, oLbx )  } ), ;
                                                   oDlgEmail:End() )

         ENDIF

         oEnviaSoUm:cToolTip := OemToAnsi( "Enviar Somente Uma Nota Fiscal, Servidor de Email" )

         REDEFINE BUTTONBMP oEnviaTodos ID 302 OF oDlgEmail                 ;
                  WHEN( lLigaBtnVar )                                       ;
                  ACTION( MsgRun( OemToAnsi( "Tentando Gerar o Email da NF-e Para Enviar. " ), ;
                                             "Conectando ao Servidor de Email. Espere!    ",   ;
                  { || ENVIAR_TODOS_OS_EMAILS( oLbx ) } ), oDlgEmail:End() )

         oEnviaTodos:cToolTip := OemToAnsi( "Enviar Todos as Notas, Via Servidor de Email" )

         REDEFINE BUTTONBMP oSaida2      ID 303 OF oDlgEmail                ;
                  ACTION( lContinua := .F., oDlgEmail:End() ) CANCEL UPDATE

         oSaida2:cToolTip := OemToAnsi( "Saida - Exit - Cancelar" )

         SET FONT OF oEnviaSoUm  TO oFnt
         SET FONT OF oEnviaTodos TO oFnt
         SET FONT OF oSaida2     TO oFont

         ACTIVATE DIALOG oDlgEmail CENTERED

         oBrush:End()
         oFnt:End()
         oFont:End()

         lNaoAchouAprovada := .F.
         lNaoAbreServ := .T.
         lMultiEntrega := .F.

         DO CASE
         CASE NKEY == VK_ESCAPE .OR. GETKEYSTATE( VK_ESCAPE ) .OR. ;
              .NOT. lContinua

            // PEGO NOVAMENTE O DIRETORIO ONDE ESTA O PLENOCB.EXE 18/08/2013
            LCHDIR( cDirPleno )
            SET DEFAULT TO

            CLOSE DATABASES  // MUDEI EM 04/05/2010 - SILCO
            //-> Reabro os bancos Para NÆo quebrar o Indice ao retornar p/Dialogo
            ABRENFEDBFS()    // Paulo 24/08/2009

            SELECT CADNFE

            lContinua := .T.

            XFOCUS( oNota )

            RETURN NIL

         ENDCASE

         // PEGO NOVAMENTE O DIRETORIO ONDE ESTA O PLENOCB.EXE 18/08/2013
         LCHDIR( cDirPleno )
         SET DEFAULT TO

         CLOSE DATABASES

         ABRENFEDBFS()

         SELECT CADNFE

         lContinua := .T.

         XFOCUS( oNota )

         RETURN NIL

      ENDIF

   ELSE

      MsgStop( OemToAnsi( "Aten‡Æo Usu rio:               " ) +CRLF+ ;
               OemToAnsi( "Nota Fiscal NÆo Localizada     " ) +CRLF+ ;
               OemToAnsi( "Para Gerar o Email do Cliente. " ),       ;
               OemToAnsi( "Impossivel Enviar o Email...   " ) )

      RETURN( .F. )

   ENDIF

   IF FOUND()

      cValNF := CADFATPE->TOTNF

      SELECT CADCLIEN
      SET ORDER TO 01

      SEEK CADFATPE->CLIENCOD

      IF .NOT. FOUND()

         IF lImprimeOutros  // Enviar Email do Fat. Outros

            cValNF := CADFATUR->TOTNF

            SELECT CADCLIEN
            SET ORDER TO 01

            SEEK CADFATUR->CLIENCOD

         ENDIF

      ENDIF

      SELECT CADTRANS
      SET ORDER TO 01
      SEEK CADCLIEN->TRANSCOD

      SELECT CADCLIEN

   ELSE

      MsgStop( OemToAnsi( "Aten‡Æo Usu rio:               " ) +CRLF+ ;
               OemToAnsi( "Nota Fiscal NÆo Localizada     " ) +CRLF+ ;
               OemToAnsi( "Para Gerar o Email do Cliente. " ),       ;
               OemToAnsi( "Impossivel Enviar o Email...   " ) )

      RETURN( .F. )

   ENDIF

   IF lImprimeOutros  // Enviar Email do Fat. Outros

      cValNF := CADFATUR->TOTNF

      SELECT CADCLIEN
      SET ORDER TO 01

      SEEK CADFATUR->CLIENCOD

   ENDIF

   IF FOUND()

      aEmpresa := CADCLIEN->CLIENTE

      aTabela := LOWER( CADCLIEN->EMAILNFE )  //-> Email do Cliente

      IF CADCLIEN->EMAILNFE = [ ] //-> se estiver vazio

         ALTERAR_EMAIL_CLIENTE( DeOndeVem := "ENVIAR_EMAIL" )

         RETURN( .F. )

      ENDIF

   ELSE

      MsgStop( OemToAnsi( "Aten‡Æo Usu rio:                      " ) +CRLF+ ;
               OemToAnsi( "Empresa NÆo Localizada em CADCLIEN.DBF" ) +CRLF+ ;
               OemToAnsi( "Para Gerar o Email do Cliente/Empresa." ),       ;
               OemToAnsi( "Impossivel Enviar o Email...    Erro! " ) )

      RETURN( .F. )

   ENDIF

   cChave := ALLTRIM(CADNFE->CHAVEACES)

   cSubject        := "Nota Fiscal Eletrônica Nº.: " + STRZERO( NFECOD2 ) + ;
                      " - " + "Arquivo XML do Cliente"

   cAssunto := ALLTRIM( cSubject ) // assunto do email direto
   cTitle := cAssunto

   cNoteText       := "Prezado Cliente:"                       +CRLF+CRLF+;
                      ALLTRIM( CADCLIEN->CLIENTE )             +CRLF+CRLF+;
                      "Para suas devidas providencias, "       +          ;
                      "segue em anexo o arquivo digital, "     +          ;
                      "padrão XML, que deu origem "            +          ;
                      "a nossa Nota Fiscal Eletrônica com as " +          ;
                      "seguintes características: "            +CRLF+CRLF+;
                      "Número: "+STRZERO( NFECOD2 )            +CRLF+     ;
                      "Emissão: " + IIF( lImprimeOutros,                  ;
                                         DTOC( CADFATUR->DTEMIS ),        ;
                                         DTOC( CADFATPE->DTEMIS ) )+CRLF+ ;
                      "Valor: "   +                                       ;
                      TRANSF(( cValNF ),"@E 999,999,999.99")   +CRLF+CRLF+;
                      "O destinatário da NF-e, seja ele "      +          ;
                      "emissor ou não de NF-e, deve consultar a "        +;
                      "validade do documento no portal da NF-e "         +;
                      "na SEFAZ do seu Estado ou no "                    +;
                      "Portal Nacional "                                 +;
                      "da NF-e, Utilizando a Chave de Acesso de Nº.: "    ;
                                                                    +CRLF+;
                      ALLTRIM( cChave )                        +CRLF+CRLF+;
                      "Qualquer dúvida entre em contato Conosco."+CRLF+CRLF+;
                      "* Este e-mail foi enviado automaticamente "       +;
                      "pelo Sistema de Notas Fiscais "                   +;
                      "Eletrônicas (NF-e), não sendo "                   +;
                      "necessário respondê-lo."                +CRLF+CRLF+;
                      "Atenciosamente,"                        +CRLF+CRLF+;
                      ALLTRIM(wNomeEmpresa)  //-> Nome do Remetente/Enviador

   cTxt := cNoteText   //-> Corpo do Email

   cMsgType        := "C"
   cConversationID := ""
   dDate           := DATE()
   cTime           := TIME()
   lReceipt        := .F.
   lFromUser       := .T.
   aOrigin         := {""}  //-> Email de quem enviou, nao precisa informar

   IF lOutLook // Sera enviado pelo OutLook Express
      EmailCliente    := LOWER(ALLTRIM( CADCLIEN->EMAILNFE ) )
   ELSE
      EmailCliente    := LOWER(ALLTRIM( CADCLIEN->EMAILNFE )+SPACE(230)  )
   ENDIF

   IF lOutLook // Sera enviado pelo OutLook Express
      cCC             := LOWER(ALLTRIM( CADTRANS->EMAIL ) )
   ELSE  // direto pelo programa
      cCC             := LOWER(ALLTRIM( CADTRANS->EMAIL )+SPACE(230)  )
   ENDIF

   IF VSIS = "01082"
      IF lOutLook // Sera enviado pelo OutLook Express
         cCC          := LOWER(ALLTRIM( CADCLIEN->EMAIL ) )
      ELSE  // direto pelo programa desde que esteja configurado
         cCC          := LOWER(ALLTRIM( CADCLIEN->EMAIL )+SPACE(230) )
      ENDIF
   ENDIF

   IF .NOT. EMPTY( cCC )  // Com Copia no Email da Transportadora
      aRecipients     := { EmailCliente, cCC } //-> Email final para enviar
   ELSE
      aRecipients     := { EmailCliente } //-> email final para enviar
   ENDIF

   cDest := ALLTRIM( EmailCliente ) //-> email final para enviar

   VER_EMAIL_ERRADO( cDest ) //-> Verifica se o email esta errado: 03/08/2012

   cChave := ALLTRIM(CADNFE->CHAVEACES)

   IF lNovaDll .AND. CPROTOC = [S]  //-> PROTOCOLO SIM OU NAO ?

      // ISTO NAO FUNCIONA MAIS EM FWH13.05 - 15/07/2013
      // cXml := cPathNFe := CURDRIVE() + ":\" + GETCURDIR()   + ;
      cXml := cPathNFe := GETCURDIR()                       + ;
              "\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + "nfe.xml"

      IF .NOT. FILE( cXml )

          MsgStop( OemToAnsi( "
ARQUIVO.XML da Nota Fiscal Eletr“nica, " )     +;
                   OemToAnsi( "
NÆo Foi Localizado no Diret¢rio:       " )+CRLF+;
                                                                         +CRLF+;
                               ALLTRIM( cPathNFe )                       +CRLF+;
                                                                         +CRLF+;
                   OemToAnsi( "
Para Resolver o Problema, Volte Para a Tela " )+;
                   OemToAnsi( "
da NF-e, e <Click> no BotÆo: <Manuten‡Æo> - " )+;
                   OemToAnsi( "
<Manuten‡Æo das NFe's>, Execute a Rotina " )   +;
                   OemToAnsi( "Somente Para Esta NFE "                    ),   ;
                   OemToAnsi( "ARQUIVO.XML NÆo Foi Localizado no Diret¢rio. ERRO! " ) )

          RETURN NIL

      ENDIF

   ELSE

      // ISTO NAO FUNCIONA MAIS EM FWH13.06 - 15/07/2013
      // cXml := cPathNFe := CURDRIVE() + ":\" + GETCURDIR()   + ;
      cXml := cPathNFe := GETCURDIR()                       + ;
              "\REMESSA\ENVIADAS\" + ALLTRIM( cChave ) + "nfe.xml"

      IF .NOT. FILE( cXml )

          MsgStop( OemToAnsi( "ARQUIVO.XML da Nota Fiscal Eletr“nica, " )     +;
                   OemToAnsi( "NÆo Foi Localizado no Diret¢rio:       " )+CRLF+;
                                                                         +CRLF+;
                               ALLTRIM( cPathNFe )                       +CRLF+;
                                                                         +CRLF+;
                   OemToAnsi( "Para Resolver o Problema, Volte Para a Tela " )+;
                   OemToAnsi( "da NF-e, e <Click> no BotÆo: <Manuten‡Æo> - " )+;
                   OemToAnsi( "<Manuten‡Æo das NFe'
s>, Execute a Rotina " )   +;
                   OemToAnsi( "
Somente Para Esta NFE "                    ),   ;
                   OemToAnsi( "
ARQUIVO.XML NÆo Foi Localizado no Diret¢rio. ERRO! " ) )

          RETURN NIL

      ENDIF

   ENDIF

   IF FILE( "
C:\NFEPDF\NFE" + ALLTRIM( STR(NFECOD2) + ".PDF" ) ) .OR. ;
      FILE( "
C:\NFEPDF\NFE" + cChave + ".PDF" )                  .OR. ;
      FILE( "
C:\NFEPDF\CCE" + ALLTRIM( STR(NFECOD2) + ".PDF" ) )

      cAnexos := "
C:\NFEPDF\NFE" + ALLTRIM( STR(NFECOD2) + ".PDF" )

      IF .NOT. FILE( cAnexos ) // .PDF GERADO PELA FLEXDOCS 06/05/2013
         cAnexos := "
C:\NFEPDF\NFE" + cChave + ".PDF"
         // NAO TEM .PDF EM C:\NFEPDF GERADO PELA FLEX
         IF .NOT. FILE( cAnexos )
            cAnexos := "
"
         ENDIF
      ENDIF

      cAnexoNfeCAN := cPathNFe := GETCURDIR()                 + ;
                      "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + "-can.xml"

      IF .NOT. FILE( cAnexoNfeCAN ) .OR. EMPTY( cAnexoNfeCAN )
         cAnexoNfeCAN := "
"
      ENDIF

      nNumCCe := 1

      FOR i := 1 to 20  // para pegar sempre a ultima carta de correcao

         cAnexoNfeCCe := cPathNFe := + GETCURDIR()                     + ;
                            "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + ;
                            "
-CCe"+ALLTRIM(STR(nNumCCe))+".xml"

         IF .NOT. EMPTY( cAnexoNfeCCe )

            nNumCCe := nNumCCe + 1

            cAnexoNfeCCe := cPathNFe := GETCURDIR()+                     ;
                            "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + ;
                            "
-CCe"+ALLTRIM(STR(nNumCCe))+".xml"

            IF FILE( cAnexoNfeCCe ) // SE EXISTIR NO DIR, CONTINUA
               CONTINUE
            ELSE
               nNumCCe := nNumCCe - 1

               cAnexoNfeCCe := cPathNFe := GETCURDIR()                    + ;
                               "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + ;
                               "
-CCe"+ALLTRIM(STR(nNumCCe))+".xml"

               IF .NOT. FILE( cAnexoNfeCCe )
                  cAnexoNfeCCe := "
" // Nao tem nenhuma CCe
               ENDIF

               EXIT

            ENDIF

         ENDIF

      NEXT

      IF .NOT. EMPTY( cAnexoNfeCCe )

         cPdfCCeUni := aFindFile( ALLTRIM( cCHAVE ) + "
_" +                  ;
                              ALLTRIM( STRZERO( nNumCCe, 2 ) ) + "
-cce.pdf", ;
                              cDirExe+"
unidanfe\email\anexos" )

         IF .NOT. EMPTY( cPdfCCeUni )

            cArq2 := cPdfCCeUni[1]

            cPdfCCeUni := ALLTRIM( cArq2 )

         ELSE  // nao achou o arquivo pelo UNIDANFE.EXE, pega gerado manualmente

            cPdfCCeUni :=  "
C:\NFEPDF\CCE" + ALLTRIM( STR(NFECOD2) + ".PDF" )

            IF .NOT. FILE( cPdfCCeUni )  // NAO ACHOU O ARQUIVO, PARA NAO QUEBRAR
               cPdfCCeUni :=  "
"
            ENDIF

         ENDIF

      ELSE

         cPdfCCeUni := "
"   // Para nao quebrar o envio de email

      ENDIF

      cPdfNfeUni := aFindFile( ALLTRIM( cCHAVE ) + "
-danfe.pdf", ;
                               cDirExe+"
unidanfe\email\anexos" )

      IF .NOT. EMPTY( cPdfNFeUni )

         cArq3 := cPdfNFeUni[1]

         cPdfNfeUni := ALLTRIM( cArq3 )

      ELSE

         cPdfNFeUni := "
"   // Para nao quebrar o envio de email

         cArq  := "
"
         cExt  := "
"
         cPath := "
"

         cPath := cDirExe+"
UNIDANFE\EMAIL\ANEXOS\"

         cFile := ALLTRIM( cCHAVE ) + "
-danfe.pdf"

         aFile := DIRECTORYRECURSE( cPath + cFile )

         If Len(aFile)==0

            cPdfNFeUni := "
"

         Else

            For nI := 1 to Len( aFile )

               hb_FNameSplit( aFile[nI,1], @cPath, @cArq, @cExt )

            Next

            aFiles := ALLTRIM( cPath+cArq+cExt )

            cPdfNFeUni := aFiles

         EndIf

      ENDIF

      IF FILE( cAnexoNfeCAN ) .AND. FILE( cAnexoNfeCCe )  // Adiciona anexo(s) da CCe

         IF .NOT. EMPTY( cPdfCCeUni )

            NewAnexo := { cXml, cAnexoNfeCAN, cAnexos, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar - Email direto
            aFiles   := { cXml, cAnexoNfeCAN, cAnexos, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar: Aqui e no OutLook

         ELSE

            NewAnexo := { cXml, cAnexoNfeCAN, cAnexos, cAnexoNfeCCe } //-> Arquivo para anexar - Email direto
            aFiles   := { cXml, cAnexoNfeCAN, cAnexos, cAnexoNfeCCe } //-> Arquivo para anexar: Aqui e no OutLook

         ENDIF

      ELSEIF FILE( cAnexoNfeCCe )

         IF .NOT. EMPTY( cPdfCCeUni )

            IF FILE( cPdfNFeUni )

               NewAnexo := { cXml, cAnexos, cAnexoNfeCCe, cPdfCCeUni, cPdfNFeUni } //-> Arquivo para anexar - Email direto
               aFiles   := { cXml, cAnexos, cAnexoNfeCCe, cPdfCCeUni, cPdfNFeUni } //-> Arquivo para anexar: Aqui e no OutLook

            ELSE // NAO TEM PDF DO UNIDANFE

               IF FILE( cAnexos ) .OR. .NOT. EMPTY( cAnexos )
                  NewAnexo := { cXml, cAnexos, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar - Email direto
                  aFiles   := { cXml, cAnexos, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar: Aqui e no OutLook
               ELSE
                  NewAnexo := { cXml, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar - Email direto
                  aFiles   := { cXml, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar: Aqui e no OutLook
               ENDIF

            ENDIF

          ELSE

            NewAnexo := { cXml, cAnexos, cAnexoNfeCCe } //-> Arquivo para anexar - Email direto
            aFiles   := { cXml, cAnexos, cAnexoNfeCCe } //-> Arquivo para anexar: Aqui e no OutLook

          ENDIF

      ELSEIF FILE( cAnexoNfeCAN ) // Nota Fiscal Cancelada

         NewAnexo := { cXml, cAnexoNfeCAN, cAnexos } //-> Arquivo para anexar - Email direto
         aFiles   := { cXml, cAnexoNfeCAN, cAnexos } //-> Arquivo para anexar: Aqui e no OutLook

      ELSE

         NewAnexo := { cXml, cAnexos } //-> Arquivo para anexar - Email direto
         aFiles   := { cXml, cAnexos } //-> Arquivo para anexar: Aqui e no OutLook

      ENDIF

   ELSE

      cAnexoNfeCAN := cPathNFe := GETCURDIR()                          + ;
                      "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + "-can.xml"

      IF .NOT. FILE( cAnexoNfeCAN ) .OR. EMPTY( cAnexoNfeCAN )
         cAnexoNfeCAN := "
"
      ENDIF

      nNumCCe := 1

      FOR i := 1 to 20  // para pegar sempre a ultima carta de correcao

         cAnexoNfeCCe := cPathNFe := GETCURDIR()   + ;
                            "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + ;
                            "
-CCe"+ALLTRIM(STR(nNumCCe))+".xml"

         IF .NOT. EMPTY( cAnexoNfeCCe )

            nNumCCe := nNumCCe + 1

            cAnexoNfeCCe := cPathNFe := GETCURDIR()                    + ;
                            "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + ;
                            "
-CCe"+ALLTRIM(STR(nNumCCe))+".xml"

            IF FILE( cAnexoNfeCCe ) // SE EXISTIR NO DIR, CONTINUA
               CONTINUE
            ELSE
               nNumCCe := nNumCCe - 1

               cAnexoNfeCCe := cPathNFe := GETCURDIR()                    + ;
                               "
\REMESSA\PROTOCOLOS\" + ALLTRIM( cChave ) + ;
                               "
-CCe"+ALLTRIM(STR(nNumCCe))+".xml"

               IF .NOT. FILE( cAnexoNfeCCe )
                  cAnexoNfeCCe := "
" // Nao tem nenhuma CCe
               ENDIF

               EXIT

            ENDIF

         ENDIF

      NEXT

      IF .NOT. EMPTY( cAnexoNfeCCe )

         cPdfCCeUni := aFindFile( ALLTRIM( cCHAVE ) + "
_" +                  ;
                              ALLTRIM( STRZERO( nNumCCe, 2 ) ) + "
-cce.pdf", ;
                              cDirExe+"
unidanfe\email\anexos" )

         IF .NOT. EMPTY( cPdfCCeUni )

            cArq2 := cPdfCCeUni[1]

            cPdfCCeUni := ALLTRIM( cArq2 )

         ELSE

            cPdfCCeUni := "
"

         ENDIF

      ELSE

         cPdfCCeUni := "
"

      ENDIF

      cPdfNfeUni := aFindFile( ALLTRIM( cCHAVE ) + "
-danfe.pdf", ;
                               cDirExe+"
unidanfe\email\anexos" )

      IF .NOT. EMPTY( cPdfNFeUni )

         cArq3 := cPdfNFeUni[1]

         cPdfNfeUni := ALLTRIM( cArq3 )

      ELSE

         cArq  := "
"
         cExt  := "
"
         cPath := "
"

         cPath := cDirExe+"
UNIDANFE\EMAIL\ANEXOS\"

         cFile := ALLTRIM( cCHAVE ) + "
-danfe.pdf"

         aFile := DIRECTORYRECURSE( cPath + cFile )

         If Len(aFile)==0

            cPdfNFeUni := "
"

         Else

            For nI := 1 to Len( aFile )

               hb_FNameSplit( aFile[nI,1], @cPath, @cArq, @cExt )

            Next

            aFiles := ALLTRIM( cPath+cArq+cExt )

            cPdfNFeUni := aFiles

         EndIf

      ENDIF

      IF FILE( cAnexoNfeCAN ) .AND. FILE( cAnexoNfeCCe ) // Adiciona anexo(s) da CCe

         IF .NOT. EMPTY( cPdfNFeUni )

            IF .NOT. EMPTY( cPdfCCeUni )

               NewAnexo := { cXml, cAnexoNfeCAN, cAnexoNfeCCe, cPdfCCeUni, cPdfNFeUni } //-> Arquivo para anexar - Email direto
               aFiles   := { cXml, cAnexoNfeCAN, cAnexoNfeCCe, cPdfCCeUni, cPdfNFeUni } //-> Arquivo para anexar: Aqui e no OutLook

            ELSE

               NewAnexo := { cXml, cAnexoNfeCAN, cAnexoNfeCCe, cPdfNFeUni } //-> Arquivo para anexar - Email direto
               aFiles   := { cXml, cAnexoNfeCAN, cAnexoNfeCCe, cPdfNFeUni } //-> Arquivo para anexar: Aqui e no OutLook

            ENDIF

         ELSEIF .NOT. EMPTY( cPdfCCeUni )

            NewAnexo := { cXml, cAnexoNfeCAN, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar - Email direto
            aFiles   := { cXml, cAnexoNfeCAN, cAnexoNfeCCe, cPdfCCeUni } //-> Arquivo para anexar: Aqui e no OutLook

         ELSE

            NewAnexo := { cXml, cAnexoNfeCAN, cAnexoNfeCCe } //-> Arquivo para anexar - Email direto
            aFiles   := { cXml, cAnexoNfeCAN, cAnexoNfeCCe } //-> Arquivo para anexar: Aqui e no OutLook

         ENDIF

      ELSEIF FILE( cAnexoNfeCAN ) // Adiciona anexo(s) da cancelada - somente

         NewAnexo := { cXml, cAnexoNfeCAN } //-> Arquivo para anexar - Email direto
         aFiles   := { cXml, cAnexoNfeCAN } //-> Arquivo para anexar: Aqui e no OutLook

      ELSEIF .NOT. EMPTY( cAnexoNfeCCe )  // Adiciona anexo(s) da CCe e .PDF

         IF .NOT. EMPTY( cPdfNFeUni ) // .pdf gerado no UNIDANFE.EXE

            IF .NOT. EMPTY( cPdfCCeUni )  // vai os 4 anexos
               NewAnexo := { cXml, cAnexoNfeCCe, cPdfCCeUni, cPdfNFeUni  }  //-> Arquivo para anexar - Email direto
               aFiles   := { cXml, cAnexoNfeCCe, cPdfCCeUni, cPdfNFeUni  }  //-> Arquivo para anexar: Aqui e no OutLook
            ELSE  // NAO TEM O .PDF GERADO NO UNIDANFE.EXE
               NewAnexo := { cXml, cAnexoNfeCCe, cPdfNFeUni  }  //-> Arquivo para anexar - Email direto
               aFiles   := { cXml, cAnexoNfeCCe, cPdfNFeUni  }  //-> Arquivo para anexar: Aqui e no OutLook
            ENDIF

         ELSEIF .NOT. EMPTY( cPdfCCeUni )

            NewAnexo := { cXml, cAnexoNfeCCe, cPdfCCeUni  }  //-> Arquivo para anexar - Email direto
            aFiles   := { cXml, cAnexoNfeCCe, cPdfCCeUni  }  //-> Arquivo para anexar: Aqui e no OutLook

         ELSE

            NewAnexo := { cXml, cAnexoNfeCCe }  //-> Arquivo para anexar - Email direto
            aFiles   := { cXml, cAnexoNfeCCe }  //-> Arquivo para anexar: Aqui e no OutLook

         ENDIF

      ELSEIF FILE( cPdfNFeUni )

         NewAnexo := { cXml, cPdfNFeUni }  //-> Arquivo para anexar - Email direto
         aFiles   := { cXml, cPdfNFeUni }  //-> Arquivo para anexar: Aqui e no OutLook

      ELSE // Nao tem nota fiscal cancelada - nem PDF ainda

         NewAnexo := { cXml } //-> Arquivo para anexar - Email direto
         aFiles   := { cXml } //-> Arquivo para anexar: Aqui e no OutLook

      ENDIF

   ENDIF

   ccxml := ALLTRIM( cChave ) + "
nfe.xml"   // Mostra o anexo na tela

   IF lOutLook

      oMail:=TMail():New( cSubject       , ;
                          cNoteText      , ;
                          cMsgType       , ;
                          cConversationID, ;
                          dDate          , ;
                          cTime          , ;
                          lReceipt       , ;
                          lFromUser      , ;
                          aOrigin        , ;
                          aRecipients    , ;
                          aFiles )

      oMail:Activate()

      IF oMail:nRetCode != 0

         IF oMail:nRetCode=1
            MsgAlert("
Email Cancelado","Email")
         ELSE
            MsgAlert("
A mensagem não foi enviada."+CRLF+CRLF+;
                     "
Codigo do Erro: "+LTRIM(STR(oMail:nRetCode))+" : "+;
                     MAPI_ERROR(oMail:nRetCode), "
Erro de Envio" )
         ENDIF

      ENDIF

      oMail:End()

   ELSE // EMAIL DIRETO PELO PROGRAMA

      IF FILE( "
dadosmail.dat" )

         cDados := StrTran(MemoRead( "
dadosmail.dat" ), "@hotmail.com", "")
         cUser  := Memoline( cDados, 250, 1)
         cNomeUsuario := ALLTRIM( cUser ) // Nome do usuario para guardar
         cRemt  := Memoline( cDados, 250, 2)

         IF MlCount( cDados, 250 ) >= 3
            nServ := VAL(ALLTRIM(Memoline(cDados, 250, 3)))
         ENDIF

         IF MlCount( cDados, 250 ) >= 4

            IF ALLTRIM(ALLTRIM(Memoline(cDados, 250, 4))) = "
0"
               lCheck := .F.
            ELSE
               lCheck := .T.
            ENDIF

         ENDIF

      ENDIF

      ArqsDBF() // Criacao e abertura dos DBFS

      // Banco de dados dos Servidores de Email
      SELECT( DbServidor:cAlias )
      SET INDEX TO NOMEUSUA  // Por nome do Usuario

      SER    := ALIAS() //-> ALIAS de: SERVIDOR.DBF
      SELECT( SER )
      DBGOTOP()

      SEEK cUser

      // Impedir que continue se nao tiver usuario cadastrado ainda
      IF .NOT. FOUND()

         CLOSE DATABASES

         ABRENFEDBFS()    // Paulo 24/08/2009

         lNewAnexoVemdaNFe := .F.

         SELECT CADNFE

         RETURN( .F. )
      ENDIF

      rCampo := DECRYPT( ALLTRIM(( SER )->SENHACONTA ), "
*+-." )
      cPass := ALLTRIM( rCampo )

      cServPOP3 :=  ALLTRIM( ( SER )->SEMAILPOP3 ) // Alfa
      cServSMTP :=  ALLTRIM( ( SER )->SEMAILSMTP ) // Alfa
      nServPORT :=         ( ( SER )->NPORTASERV ) // Numerico
      cServSEGU :=         ( ( SER )->CONEXAOSEG ) // Https/SSL?

      aServs := { { cServPop3, cServSMTP, nServPORT, cServSEGU } }

      cNomeUsuario := ALLTRIM( LOWER( cRemt     ) ) + ;
                      ALLTRIM( LOWER( cServPOP3 ) )

      lNewAnexoVemdaNFe := .T.

      // Pega o servidor
      FOR i := 1 to LEN( aServs )
         AADD( aDomin, aServs[i][1] )
      NEXT

      IF nServ = 0 .OR. nServ > LEN(aServs)
         nServ := 1
      ENDIF

      DEFINE BRUSH oBrush  RESOURCE "
LOGO2"
      DEFINE ICON oIco   NAME "
ICONE"
      DEFINE FONT oFont1 NAME "
Ms Sans Serif" SIZE 0, -12 BOLD
      DEFINE FONT oFnt   NAME "
Ms Sans Serif" SIZE 00,  14 BOLD
      DEFINE FONT oFont  NAME "
Ms Sans Serif" SIZE 00, -14 BOLD

      DEFINE DIALOG oDlgEnv RESOURCE "
DLG_TIPO_OUTLOOK" TITLE ALLTRIM(cTitle);
             ICON oIco COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

      oDlgEnv:lHelpIcon := .F.

      For IDCor = 401 To 412 // Os ID's dos TEXTOS na DIALOG.
         REDEFINE SAY ID IDCor OF oDlgEnv                  ;
         COLORS CLR_BLACK, CLR_WHITE UPDATE FONT oFont1 TRANSPARENT
      Next IDCor

      For IDCor = 413 To 413 // Os ID's dos TEXTOS na DIALOG.
         REDEFINE SAY ID IDCor OF oDlgEnv                  ;
         COLORS CLR_VERMELHO, CLR_WHITE UPDATE FONT oFont1 TRANSPARENT
      Next IDCor

      REDEFINE GET aGet[1] VAR cNomeUsuario  ID 20 OF oDlgEnv FONT oFont1   ;
               UPDATE PICTURE "
@" COLORS CLR_BLACK, CLR_WHITE  WHEN( .F. )

      REDEFINE GET oGet[4] VAR cDest ID 21 OF oDlgEnv MEMO        ;
               FONT oFont1 UPDATE COLORS CLR_BLACK, CLR_WHITE     ;
               VALID( CHECA_GET_Dest( ALLTRIM( cDest ) ) ) // ESTA EM RMAIL.PRG

      oGet[4]:cToolTip := OemToAnsi( "
Para: Contato(Email) " + ;
                                     "
Campo Obrigat¢rio " )

      oGet[4]:bKeyDown:={|nKey|IF(nKey==VK_RETURN, VER_FOCO_GET4( oGet ),)}

      REDEFINE BITMAP oIncEmail ID 120 RESOURCE "
BUSCAR" OF oDlgEnv ADJUST ;
               TRANSPARENT                                                    ;
               ON CLICK( INCLUI( oGet[4], @cDest ), xFocus( oGet[4] ) )

      oIncEmail:cToolTip := OemToAnsi( "
Pegar o Contato(Email) Campo Obrigat¢rio ")
      oIncEmail:lToolTipBallon   := .T.
      oIncEmail:nTooltipWidth    := 100  // 100
      oIncEmail:nTooltipTexColor := nRGB( 000, 000, 000 )
      oIncEmail:nTooltipBKColor  := nRGB( 250, 250, 250 )
      oIncEmail:cTooltipTitle    := OemToAnsi( "
Pegar o Contato(Email) Campo Obrigat¢rio ")
      oIncEmail:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
      //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
      oIncEmail:nSetDelayType    := 2
      oIncEmail:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

      REDEFINE GET oGet[5] VAR cCC        ID 22 OF oDlgEnv  MEMO  ;
               FONT oFont1 UPDATE COLORS CLR_BLACK, CLR_WHITE

      oGet[5]:cToolTip := OemToAnsi( "
Contato(Email) " + ;
                                     "
Para Enviar com C¢pia " )

      oGet[5]:bKeyDown:={|nKey|IF(nKey==VK_RETURN, VER_FOCO_GET5( oGet ), ;
                               IF(nKey==VK_UP, oGet[4]:SetFocus(), ) ) }

      REDEFINE BITMAP oInccCC   ID 121 RESOURCE "
BUSCAR" OF oDlgEnv ADJUST ;
               TRANSPARENT                                                 ;
               ON CLICK( INCLUI( oGet[5], @cCC ), xFocus( oGet[5] ) )

      oInccCC:cToolTip := OemToAnsi( "
Pegar o Contato(Email) Para Enviar com C¢pia ")
      oInccCC:lToolTipBallon   := .T.
      oInccCC:nTooltipWidth    := 100  // 100
      oInccCC:nTooltipTexColor := nRGB( 000, 000, 000 )
      oInccCC:nTooltipBKColor  := nRGB( 250, 250, 250 )
      oInccCC:cTooltipTitle    := OemToAnsi( "
Pegar o Contato(Email) Para Enviar com C¢pia ")
      oInccCC:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
      //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
      oInccCC:nSetDelayType    := 2
      oInccCC:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

      REDEFINE GET oGet[6] VAR cCCO       ID 23 OF oDlgEnv MEMO   ;
               FONT oFont1 UPDATE COLORS CLR_BLACK, CLR_WHITE

      oGet[6]:cToolTip := OemToAnsi( "
Contato(Email) " + ;
                                     "
Para Enviar com C¢pia Oculta " )

      oGet[6]:bKeyDown := { |nKey| IF( nKey==VK_RETURN, ( xFocus( oGet[7] ) ), ;
                                   IF( nKey==VK_UP, VER_FOCO_GET6( oGet ), ) ) }

      REDEFINE BITMAP oInccCO   ID 122 RESOURCE "
BUSCAR" OF oDlgEnv ADJUST   ;
           TRANSPARENT ON CLICK( INCLUI( oGet[6], @cCCO ), xFocus( oGet[6] ) )

      oInccCO:cToolTip := OemToAnsi( "
Pegar o Contato(Email) Para Enviar com C¢pia Oculta" )
      oInccCO:lToolTipBallon   := .T.
      oInccCO:nTooltipWidth    := 100  // 100
      oInccCO:nTooltipTexColor := nRGB( 000, 000, 000 )
      oInccCO:nTooltipBKColor  := nRGB( 250, 250, 250 )
      oInccCO:cTooltipTitle    := OemToAnsi( "
Pegar o Contato(Email) Para Enviar com C¢pia Oculta")
      oInccCO:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
      //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
      oInccCO:nSetDelayType    := 2
      oInccCO:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

      REDEFINE GET oGet[7] VAR cAssunto   ID 24 OF oDlgEnv MEMO   ;
               FONT oFont1 UPDATE COLORS CLR_BLACK, CLR_WHITE     ;
               VALID( CHECA_GET_cAssunto( ALLTRIM( cAssunto ) ) )

      oGet[7]:cToolTip := OemToAnsi( "
Assunto do Email Campo Obrigat¢rio " )

      oGet[7]:bKeyDown:={|nKey|IF(nKey==VK_RETURN, ( xFocus( oEnviar ) ), ;
                               IF(nKey==VK_UP, oGet[6]:SetFocus(), ) ) }

      REDEFINE GET oGet[8] VAR cTxt         ID 25 OF oDlgEnv MEMO ;
               FONT oFont1 UPDATE COLORS CLR_BLACK, CLR_WHITE     ;
               VALID .NOT. EMPTY( cTxt )

      oGet[8]:cToolTip := OemToAnsi( "
Mensagem do Email Para o Destinat rio " )

      oGet[8]:bKeyDown:={|nKey|IF(nKey==VK_UP, oGet[7]:SetFocus(),)}

      REDEFINE GET oGet[9] VAR ccxml      ID 26 OF oDlgEnv                  ;
               FONT oFont1 UPDATE PICTURE "
@" COLOR CLR_BLACK, CLR_WHITE    ;
               VALID( .NOT. EMPTY( ccxml ) )

      REDEFINE GET oGet[10] VAR cDirPdf ID 27 OF oDlgEnv FONT oFont1 UPDATE ;
               PICTURE "
@" COLOR CLR_BLACK, CLR_WHITE WHEN( .F. )

      REDEFINE LISTBOX oList VAR nItem ITEMS NewAnexo ID 101 OF oDlgEnv ;
               COLORS CLR_BLACK, CLR_WHITE

      REDEFINE BITMAP oBmpEmail ID 125 RESOURCE "
EMAIL" OF oDlgEnv ADJUST ;
               TRANSPARENT

      oBmpEmail:cToolTip := OemToAnsi( "
Cadastre Seus Contatos "+CRLF+;
                                       "
no Quarto BotÆo: "      +CRLF+;
                                       "
<Configurar/Enviar Email(s)>")
      oBmpEmail:lToolTipBallon   := .T.
      oBmpEmail:nTooltipWidth    := 100  // 100
      oBmpEmail:nTooltipTexColor := nRGB( 000, 000, 000 )
      oBmpEmail:nTooltipBKColor  := nRGB( 250, 250, 250 )
      oBmpEmail:cTooltipTitle    := OemToAnsi( "
Cadastre Seus Contatos ")
      oBmpEmail:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
      //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
      oBmpEmail:nSetDelayType    := 2
      oBmpEmail:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

      REDEFINE BUTTONBMP oEnviar     ID 301 OF oDlgEnv                ;
               ACTION ( IF( lRet := CONFIG_MAIL(LOWER(ALLTRIM(cUser)),;
                          ALLTRIM(cPass), LOWER(ALLTRIM(cRemt)),      ;
                          LOWER(ALLTRIM(cDest)), LOWER(ALLTRIM(cCC)), ;
                          LOWER(ALLTRIM(cCCO)), cTxt, cAssunto ),     ;
                          MsgInfo( "
Mensagem Enviada com Sucesso!",   ;
                                   "
Atenção "),), oDlgEnv:End() ) CANCEL

      oEnviar:cToolTip := OemToAnsi( "
Enviar o Email ao Destinat rio " )

      oEnviar:bWhen := { || .NOT. EMPTY( cUser ) }

      REDEFINE BUTTONBMP oSaida2     ID 302 OF oDlgEnv                      ;
               ACTION( oDlgEnv:End() ) CANCEL UPDATE

      oSaida2:cToolTip :=  OemToAnsi( "
Saida - Exit - Cancelar" )

      REDEFINE BUTTONBMP oEnviaDireto ID 303 OF oDlgEnv               ;
               WHEN( lEnviar_Varios_Emails )                          ;
               ACTION( ENVIA_EMAIL_AUTOMATICO( oEnviar ) ) CANCEL

      oEnviaDireto:cToolTip := OemToAnsi( "
Enviar Email da NF-e Para o Cliente. "+;
                                          "
Automaticamente, Sem Precisar "       +;
                                          "
Clickar no BotÆo de Enviar. "         +;
                                          "
Bom trabalho!" )

      oEnviaDireto:lToolTipBallon   := .T.
      oEnviaDireto:nTooltipWidth    := 180
      oEnviaDireto:nTooltipTexColor := nRGB( 000, 000, 000 )
      oEnviaDireto:nTooltipBKColor  := nRGB( 250, 250, 250 )
      oEnviaDireto:cTooltipTitle    := OemToAnsi( "
Enviar Email da NF-e Automaticamente" )
      oEnviaDireto:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
      //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
      oEnviaDireto:nSetDelayType    := 2
      oEnviaDireto:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

      REDEFINE BUTTONBMP oBtnNewAnexo  ID 304 OF oDlgEnv                   ;
               ACTION( ESCOLHER_TIPO_ANEXO( oList ) ) CANCEL

      oBtnNewAnexo:cToolTip := OemToAnsi( "
Enviar Anexo(s) do Email da " + ;
                                          "
NF-e Para o Cliente. " )

      oBtnNewAnexo:lToolTipBallon   := .T.
      oBtnNewAnexo:nTooltipWidth    := 180
      oBtnNewAnexo:nTooltipTexColor := nRGB( 000, 000, 000 )
      oBtnNewAnexo:nTooltipBKColor  := nRGB( 250, 250, 250 )
      oBtnNewAnexo:cTooltipTitle    := OemToAnsi( "
Enviar Anexo(s) do Email da NF-e " )
      oBtnNewAnexo:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
      //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
      oBtnNewAnexo:nSetDelayType    := 2
      oBtnNewAnexo:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

      REDEFINE BUTTONBMP oBtnExclAnexo ID 305 OF oDlgEnv                ;
               ACTION( IIF( LEN( NewAnexo ) >= 2, ( oList:Del( nItem ), ;
                                                    oList:Refresh() ),  ;
                            MsgInfo( "
Sem Anexo(s) Para Excluir ",      ;
                                     "
Aviso: Cuidado!!! " ) ), TONE( 900, 2 ) )

      oBtnExclAnexo:cToolTip := OemToAnsi( "
ExclusÆo de Anexo(s), Tome Cuidado" )

      oBtnExclAnexo:lToolTipBallon   := .T.
      oBtnExclAnexo:nTooltipWidth    := 180
      oBtnExclAnexo:nTooltipTexColor := nRGB( 000, 000, 000 )
      oBtnExclAnexo:nTooltipBKColor  := nRGB( 250, 250, 250 )
      oBtnExclAnexo:cTooltipTitle    := OemToAnsi( "
ExclusÆo de Anexo(s), Tome Cuidado" )
      oBtnExclAnexo:nTooltipIcon     := 1  && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
      //-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
      oBtnExclAnexo:nSetDelayType    := 2
      oBtnExclAnexo:nSetDelayTime    := 350000 //-> Velocidade do TOOLTIP-> +- 50 Secs

      SET FONT OF oEnviar       TO oFont
      SET FONT OF oSaida2       TO oFont
      SET FONT OF oEnviaDireto  TO oFont1
      SET FONT OF oBtnNewAnexo  TO oFont1
      SET FONT OF oBtnExclAnexo TO oFont1
      SET FONT OF oList         TO oFont1

      ACTIVATE DIALOG oDlgEnv CENTERED ON INIT( XFOCUS( oGet[4] ) )

      oBrush:End()
      oFnt:End()
      oFont:End()
      oFont1:End()

      CLOSE DATABASES

      ABRENFEDBFS()    // Paulo 24/08/2009

   ENDIF

   lNewAnexoVemdaNFe := .F.

   SELECT CADNFE

   XFOCUS( oNota )

RETURN( .T. )


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Windows Server - Error

Postby karinha » Wed Aug 21, 2013 8:46 pm

En tiempo maestro,

Este conflito, solo ocorri entre WINDOWS XP(Terminal) y WINDOWS SERVER 2008.

Windows 7 e SERVER 2008 funciona tranquilo.

saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Windows Server - Error

Postby Antonio Linares » Thu Aug 22, 2013 7:29 am

Puedes probar a no usar DirectoryRecurse() y ver si ese problema persiste ? gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Windows Server - Error

Postby karinha » Thu Aug 22, 2013 2:49 pm

Gracias maestro. Problema resuelto.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7213
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 61 guests