Jump to content
Fivewin Brasil

sambomb

Membros
  • Posts

    1,951
  • Joined

  • Last visited

  • Days Won

    10

Posts posted by sambomb

  1. Olá Pessoal

    Bom ano 2015 a todos.

    Não trabalho com automação comercial, então é só uma curiosidade:

    A NFc-e não veio para substituir o ECF? Não seria um DANFE simplificado para consumidor?

    Desculpem a minha "inguinorância" rsrsrs

    abs

    Alberto-SP

    Ainda existe a necessidade da impressão do comprovante para o cliente, e neste irá constar um QR-Code com o link para pesquisa na receita da NFC-e, e portanto existe a necessidade de uma impressora, pode ser impresso em A4, mas para economia tb pode ser feito em uma impressora não fiscal ( DARUMA e BEMATECH possuem )

  2. 
    

    Destino := SPACE(512)

    //-- Adicionado o @ para indicar que vai passar a variável por referência para preenchimento pela DLL

    IF (nRet := BmMFDEX("C:\SISCOM\FISCO\DOWNLOAD.MFD","04/10/2014",@Destino)) <> 1

    MsgStop("Arquivo Não Foi Gerado","Atenção")

    RETURN nil

    ELSE

    MSGSTOP(SUBSTR(Destino,1,10),"Atenção")

    ENDIF

  3. Provavelmente não é então segue:

    //-- Chamada no VB
    //Public Declare Function Bematech_FI_GeraRegistrosCAT52MFD Lib "BEMAFI32.DLL" (ByVal cArquivo As String, ByVal cData As String) As Integer
    
       DLL32 function BmMFDAto1704( cOrigem           AS STRING,; //-- Path+nome do arquivo contendo o download da MFD (.mfd).
                                  cData      AS STRING) //-- Data  no formato "DD/MM/AAAA".
             AS _INT PASCAL FROM  "Bematech_FI_GeraRegistrosCAT52MFD";
             LIB xDll
    
    
    //-- Exemplo de chamada de relatório do SPED ( PARA COMPARAÇÃO )
    //-- Chamada no VB
    //Public Declare Function Bematech_FI_GeraRegistrosSpedMFD Lib "BEMAFI32.DLL" ( ByVal arq_origem as string, ByVal arq_destino as string, ByVal data_inicial as string, ByVal data_final as string, ByVal perfil as string, ByVal CFOP as string, ByVal  lac_fiscal as string, ByVal pis as string, ByVal cofins as string) as Integer
    
       DLL32 function B_RELSPED(  cOrigem           AS STRING,; //-- Path+nome do arquivo contendo o download da MFD (.mfd).
                                  cDestino          AS STRING,; //-- Path+nome do arquivo texto de destino.
                                  cDataInicial      AS STRING,; //-- Data inicial no formato "DD/MM/AAAA".
                                  cDataFinal        AS STRING,; //-- Data final no no formato "DD/MM/AAAA".
                                  cPerfil           AS STRING,; //-- Perfil do relatório a ser gerado, sendo "A", "B" ou "T", onde T = Todos os registros (A e .
                                  cCFOP             AS STRING,; //-- Código CFOP do estabelecimento, com o tamanho de 4 dígitos.
                                  cCodObsLancFiscal AS STRING,; //-- Código da observação do lançamento fiscal. Caracter branco caso opcional.
                                  cAliquotaPis      AS STRING,; //-- Valor percentual da alíquota para o cálculo do PIS, com o tamanho de 4 dígitos sem a vírgula (0000) ou 5 dígitos com a vírgula (00,00).
                                  cAliquotaCofins   AS STRING); //-- Valor percentual da alíquota para o cálculo do COFINS, com o tamanho de 4 dígitos sem a vírgula (0000) ou 5 dígitos com a vírgula (00,00).
             AS _INT PASCAL FROM  "Bematech_FI_GeraRegistrosSpedMFD";
             LIB xDll
    
  4. Veja se é só o underline:
    // Gera Arquivos requisito Arq. MFD, REQUISITO VII - ITEM 6
    DLL32 FUNCTION BmMFDAto1704 ( carquivo AS LPSTR, carquivoD AS LPSTR, CtipoArq AS LPSTR, Ctipo AS LPSTR, In AS LPSTR, Fi AS LPSTR, cusuario AS LPSTR ) AS LONG PASCAL ;
    FROM "Bematech_FI_GeraRegistrosCat52MFD" LIB xDll

  5. O grande problema que será enfrentado será competir com a velocidade de evolução das plataformas nativas e das que já estão disponíveis, esse projeto já está começando atrasado pelo menos uns 5 anos e com apenas 2 desenvolvedores é muito trabalho a ser executado, digamos que em 2015 tenhamos uma versão funcional para começar o desenvolvimento, até lá Android e iOS já avançaram pelo menos 1 versão, fazendo com que fique defasado e performance é crucial nesse tipo de aplicação o que vai ser um empecilho extra

  6. Resolvido assim:

    *****************************************

    Function EditCell( )

    *****************************************

    *

    * USE CLIENTES // abrir qualquer arquivo que tenha mais de 30 campos para fazer um scroll automático...

    *

    *

    oGet := {}

    cGet := {}

    estr := DbStruct()

    For i=1 to Len(estr)

    estr[i,1] := Upper( Substr( estr[i,1], 1, 1 ) ) + Lower( Substr( estr[i,1], 2 ) )

    End

    nMax := Len(estr)

    DEFINE DIALOG xDlg FROM 1,5 TO 44,100 TITLE Alias()

    nLin := 0.5

    oGet := Array(nMax)

    For i=1 to nMax

    @ nLin,1 say estr[i,1] of xDlg

    nLin+=0.86

    End

    nCtn:=0

    nLin:=-0.5

    For i=1 to nMax

    nLin+=1

    nCtn++

    cGet:=field(i)

    @ nLin,5 get oGet var &cGet of xDlg

    End

    ACTIVATE DIALOG xDlg CENTERED

    return nil

    Abrindo agora novo tópico para auxílio no scroll automático... valeu SAMBOMB!!!!

    Disponha!

    Edita o título para por como resolvido e na próxima tenta um título pro post mais sugestivo, fica mais simples de entender sobre o que se trata e ajudar quem vier a ter o mesmo problema que você ;)

  7. 
    

    Local oGet := {}, cGet := {}

    estr := DbStruct()

    For i=1 to Len(estr)

    estr[i,1] := Upper( Substr( estr[i,1], 1, 1 ) ) + Lower( Substr( estr[i,1], 2 ) )

    cVar := estr[i,1]

    estr[i,2] := &(cVar)

    End

    nMax := Min( Len(estr) , 20 )

    DEFINE DIALOG xDlg;

    FROM 1, 5;

    TO 40, 100;

    TITLE Alias()

    nLin := 0.99

    oGet := Array(nMax)

    cGet := aFill(Array(nMax),Space(20))

    For i=1 to nMax

    @ nLin,1 say estr[i,1] of xDlg

    nLin+=0.86

    End

    For i=1 to nMax

    cGet := estr[i,2]

    @ i,5 get oGet var cGet of xDlg

    End

    ACTIVATE DIALOG xDlg CENTERED

    return nil

  8. 
    

    estr := DbStruct()

    For i=1 to Len(estr)

    estr[i,1] := Upper( Substr( estr[i,1], 1, 1 ) ) + Lower( Substr( estr[i,1], 2 ) )

    cVar := estr[i,1]

    estr[i,2] := &(cVar)

    End

    nMax := Min( Len(estr) , 20 )

    DEFINE DIALOG xDlg;

    FROM 1, 5;

    TO 40, 100;

    TITLE Alias()

    nLin := 0.99

    For i=1 to nMax

    @ nLin,1 say estr[i,1] of xDlg

    nLin+=0.86

    End

    For i=1 to nMax

    @ i,5 get estr[i,2] of xDlg

    End

    ACTIVATE DIALOG xDlg CENTERED

    return nil

  9. Amiguinhos,

    Quanta incoerência de resultados esta DLL retorna. O sucesso é 0 ou 1?. Parece que é só pra complicar a vida da gente.

    Verifique o manual a relação destes valores de retorno e se 0 e 1 são o mesmo resultado saneie suas funções para que o trecho de retorno seja:

    ...
    if nResult <= 1 //-- Pronto, assim resolve a balbúrdia
       ? "Sucesso: " + cString
    else
       ? FuncaoQueRetorneUmaStringDeErro( nResult )
    end
    
    FUNCTION FuncaoQueRetorneUmaStringDeErro( nResult )
       do case
          case nResult = 0
               return "Sucesso(0):"
          case nResult = 1
               return "Sucesso(1):"
          case nResult = 2
               return "Erro(2): blablabla..."
          // outros cases
       endcase
       return "Mensagem indefinida"
    

    Rochinha, algumas dlls indicam sucesso com 1 e erro com 0, outras sucesso com 0 e erro com -1, entre infinitas combinações possíveis, até mesmo o código do erro já pode vir diretamente nesse retorno.

    Exemplo:

    1 = Sucesso

    0 = Sem comunicação

    -1 = Parâmetro inválido

    -2 = Erro aleatório de exemplo

    -3 = Outro exemplo

    Então nem sempre pode por <= 1, vai de caso a caso ;)

    E no caso dele o retorno válido é o 1:

    If nRetorno = 1 // 1=tem abastecimento

    MsgAlert("Informacoes do abastecimento: "+cContem)

    Else // 0-nao teve abastecimento

    MsgAlert("nao teve abastecimento.")

    Endif

  10. Tem diversos níveis de infecção, eu utilizo o Kasperky ( original KIS2014 ) e alguns arquivo contaminados ele limpa, outros ele manda para quarentena.

    Se for um executável mal intencionado a única solução é excluir, se for um arquivo com um executável "injetado" tem como tentar limpar.

  11. Crie uma função para isso...

       For i := 1 TO 100
          CriaBotao(i)
       End
       
    Procedure CriaBotao( nCont )
    
       REDEFINE SBUTTON    OBOTAOM[nCont];
                ID         (nCont+101); //-- 101 + 1 = 102 até 101 + 100 = 201
                ACTION     Botao(nCont)
                TOOLTIP    "Clique aqui para efetuar vendas por telefone" ;
                COLORS     PRETO,CORTABELA;
                FONT       FNORMAL;
                OFFICE;
                OF       DLGVEN
                
    Return
    
    Procedure Botao( nCont )
       
       ? "Botão pressionado foi o : " + Str( nCont )
       
    Return            
    
  12. 
    

    @ 79, 206 BTNBMP oBtnW OF oFld:aDialogs[3] 2007;

    FILE "pwd\level3.bmp" SIZE 15, 15 UPDATE;

    TOOLTIP "Grava a dados";

    ACTION ClickBotao()

    Function ClickBotao()

    Local oDlgPause

    GRAVA_DE()

    oBrDE:Refresh()

    cCODES:=Space(20)

    nQTDE:=0

    cDEN:=Space(8)

    oGde[1]:Refresh()

    oGde[2]:Refresh()

    oGde[3]:Refresh()

    DEFINE DIALOG oDlgPause;

    FROM -10,-10 TO 1, 1;

    STYLE nOr( DS_MODALFRAME, WS_POPUP );

    OF oFld:aDialogs[3]

    oDlgPause:nTop := -20

    oDlgPause:nLeft := -20

    oDlgPause:bStart := { || Eval( { || WaitSeconds( 0.2 ) }, oDlgPause ), oDlgPause:End(), SysRefresh() }

    ACTIVATE DIALOG oDlgPause

    oDlgPause := Nil

    oGde[1]:SetFocus()

    Return

×
×
  • Create New...