Jump to content
Fivewin Brasil

sambomb

Membros
  • Posts

    1,951
  • Joined

  • Last visited

  • Days Won

    10

Posts posted by sambomb

  1. aArray := {"002", "SAMIR", "TESTE"}
    ? aScan(aArray,"001") //-- 0
    ? aScan(aArray,"002") //-- 1
    ? aScan(aArray,"003") //-- 0
    ? aScan(aArray,"SAMIR") //-- 2
    ? aScan(aArray,"TESTE") //-- 3

    aArray := {{"001", "SAMIR", "TESTE"},{"002", "JOAO", "TESTA"}}
    ? aScan(aArray,{|X| X[1] = "001"}) //-- 1
    ? aScan(aArray,{|X| X[1] = "002"}) //-- 2

    ? aScan(aArray,{|X| X[2] = "SAMIR"}) //-- 2

    ? aScan(aArray,{|X| X[2] = "JOAO"}) //-- 2

    ? aScan(aArray,{|X| X[3] = "TESTE"}) //-- 1

    ? aScan(aArray,{|X| X[3] = "TESTA"}) //-- 2

  2. Fiquei curioso com as respostas, mas o Dorneles não postou a solução utilizada.

    Eu faço mais ou menos igual ao Ladinilson, embora ele calcula o valor unitário do desconto e multiplica pela quantidade, enquanto eu calculo pelo valor total de cada item, mas não enxerguei como ele age em relação a produtos com tributação e sem tributação, pq não é interessante vc dar desconto em produtos isentos, quando é permitido a utilização do desconto no cálculo dos tributos.

    Exemplo:

    Numa operação de 1.000,00, onde 600,00 é de produto tributado e 400,00 isento e seja permitido desconto no cálculo dos tributos em alguns exemplos postados não enxerguei tratamento diferenciado, para aproveitar o desconto somente nos itens tributados.

    São aqueles tipos de situação em que as Uf's agem conforme suas regras próprias, um bom exemplo é o frete, algumas isentam o frete dos cálculos em operações internas, enquanto outras exigem que faça parte da base de cálculo, e fica uma boa salada.

    Posta aí Dorneles depois a solução que vc utilizou, pq todos estão certos, utilizando cada qual uma forma diferente, mas chegando aos mesmos resultados no final.

    []s,

    Nesses casos, se o total de desconto for maior que o valor dos produtos tributados, como você faz?

    Exemplo:

    Isento 900,00

    Tributado 100,00

    Desconto 150,00

  3. O que fazemos aqui é o seguinte:

    //-- Aumento a precisão
    Set Decimals to 20
    Set Exact On
    
    //Venda de 3 itens:
    aAdd(aItens,{"Arroz",15,0}) //Arroz R$ 15,00
    aAdd(aItens,{"Feijão",35,0}) //Feijão R$ 35,00
    aAdd(aItens,{"Carne",50,0}) //Carne R$ 50,00
    
    nDesc := 10 //Desconto de R$ 10,00
    
    //-- Somo o total e verifico o maior valor
    nTotal := 0
    nMaior := 0
    nPosMaior := 0
    
    For nItem := 1 to Len(aItens)
       If aItens[nItem,2] > nMaior
          nPosMaior := nItem
          nMaior := aItens[nItem,2] 
       end
       nTotal += aItens[nItem,2]
    End
    
    
    //-- Calcular a porcentagem de desconto sobre o valor total 
    nPerc := ( nDesconto / nTotal ) //-- R$ 10,00 / R$ 100,00 => 0,1 => 10%
    
    //-- Aplico a porcentagem em cada valor unitário e somo o desconto efetuado
    nTotDesc := 0
    For nItem := 1 to Len(aItens)
       aItens[nItem,3] := Round(aItens[nItem,2] * nPerc,2)
       nTotDesc += aItens[nItem,3]
    End
    
    //-- Lanço a diferença no maior item
    aItens[nPosMaior,3] += ( nDesc - nTotDesc ) 
  4. 
    

    Procedure DebugarMensagem

    Local nDebugMsg := 20, i := 0, cDebug := ""

    For i := 1 to nDebugMsg

    If Empty(AllTrim( ProcName( i ) ))

    exit

    end

    cDebug += Trim( ProcName( i ) ) + " (" + StrTrim( ProcLine( i )) + ")" + Chr(13) + Chr(10)

    end

    MsgInfo(cDebug)

    Return Nil

  5. @ oDlg:nTop + 2 ,oDlg:nLeft + 2 BUTTON "B1" Pixel size 16,16 OF oDlg ACTION MsgInfo("Button 01 Test on oWinMain")

    Aqui no Top funciona perfeitamente mais nao consigo pegar os do fundo da tela

    @ oDlg:nBottom ,oDlg:nLeft + 2 BUTTON "B2" size 16,16 OF oDlg ACTION MsgInfo("Button 01 Test on oWinMain")

    Um está com Pixel e o outro não, já verificou isso?



  6. Try


    oConecta := CreateObject( 'Msxml2.XMLHTTP.3.0' )


    Catch


    Try


    oConecta := CreateObject( 'MSXML2.XMLHTTP' )


    Catch


    oConecta := CreateObject( 'Microsoft.XMLHTTP' )


    End
    End


    oConecta:Open( 'POST', "https://www.cellcard...gracao_xml.php", .F. )


    If oConecta:readyState = 1


    oConecta:setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )


    oConecta:Send("codigo_transacao=1"+;
    "&loja_primaria=teste"+;
    "&nome_primario=teste"+;
    "&senha_primaria=teste"+;
    "&id_terminal=001"+;
    "&uf_terminal=RJ"+;
    "&versao=3.94" )


    If Empty( oConecta:ResponseBody )
    MsgInfo("Sem resposta")
    EndIf


    EndIf

  7. Se eu entendi, você quer um comando para ser chamado na tela principal, para identificar qual o comando já chamado pelo cliente?

    Se for o caso basta você criar um array bidimensional com o nome das funções e uma flag lógica, ao abrir/fechar cada uma delas marcar inverter essa flag

    Exemplo:

    aStatus := { {"Vendas X Fiscal", .F.}, {"Associar Pedido 2",.F.}, {"Desassociar Pedido 2",.F.} }
    
    
    function opcao1(nOpcao)
    
       //-- Inicio
       aStatus[nOpcao,1] := !aStatus[nOpcao,1]
    
       //-- Fim
       aStatus[nOpcao,1] := !aStatus[nOpcao,1]
    
    return .t.
     
    
    
  8. Para samir - Sambomb.

    #include "FiveWin.ch"
     
    function Main()
     
       LOCAL cMemoria, nBytes, nKBytes, nMBytes, nGBytes
     
       nBytes  := nExtMem()
     
       nKBytes := nBytes / 1014
     
       nMBytes := nKBytes / 1024
     
       nGBytes := nMBytes / 1014
     
       // Com erro - With Error
       //  aAdd( ::aTexto,"Memória: " + cValToChar( Int( nExtMem() / ( 1024 * 1024 ) ) + 1 ) + " MBs" )
       ? ( "Memóry Error: " + cValToChar( Int( nExtMem() / ( 1024 * 1024 ) ) + 1 ) + " MBs" )
     
       ? cMemoria := Trans( nExtMem(), "@E 9,999,999,999 Bytes free" )
     
       ? cMemoria := Trans( ( nExtMem() / ( 1024 * 1024 * 1014 ) ), "@E 999.99 GB Free" )
     
                                                           // or .97 = 4 Gbs.
       ? cMemoria := Trans( ( nExtMem() / ( 1024 * 1024 * 1014 ) + 1 ), "@E 999.99 GB Total" )
     
    RETURN NIL
     
    // END OF PROGRAM
    

    Obrigado, vou testar aqui.

  9. 
    

    CmdRun({"taskkill /f /im programa.exe", DirExe()+"programa.exe"})

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

    function CmdRun(xLinhaComando, bEval, lExibe)

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

    *

    * Rodar uma linha de comando no prompt do DOS

    * Parametros: xLinhaComando

    * Retorno: Nenhum

    *

    * Autor: Samir

    * 06/12/2011 - 09:33:25

    *

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

    local cFileBat := "", cTextoBat := "", i := 0, lResult := .F.

    Default lExibe := .F.

    //-- Verifica se é uma única linha

    If ValType(xLinhaComando) = "C"

    cTextoBat := xLinhaComando

    //-- Verifica se são múltiplas linhas

    elseIf ValType(xLinhaComando) = "A"

    For i := 1 to Len(xLinhaComando)

    if !Empty(cTextoBat)

    cTextoBat += CRLF

    end

    cTextoBat += xLinhaComando

    end

    //-- Tratamento para parâmetro inválido

    else

    MsgInfo("Parâmetro inválido","CMDRUN")

    Return lResult

    end

    //-- Gerar o nome do arquivo bat a ser executado

    cFileBat := DirExe() + "CMDRUN_"+DToS(Date())+"_"+StrTran(Now(),":") + ".BAT"

    //-- Roda um loop para apagar o arquivo

    i := 0

    While File(cFileBat)

    SysRefresh()

    If fErase(cFileBat) != 0

    SysWait(1)

    //-- 3 tentativas "silenciosas"

    If i < 3

    i++

    loop

    end

    //-- Mensagem de erro

    If MsgYesNo("Erro " + UT( fError() ) + " ao apagar o arquivo: " + CRLF +;

    cFileBat + CRLF + "Tentar novamente")

    loop

    else

    exit

    end

    else

    exit

    end

    end

    //-- Se o arquivo não existe

    If !File(cFileBat)

    //-- Tenta criar o arquivo bat

    If CreateTxt(cFileBat,cTextoBat)

    //-- Verifica se criou

    i := 0

    While !File(cFileBat)

    SysRefresh()

    SysWait(1)

    //-- 3 tentativas "silenciosas"

    If i < 3

    i++

    loop

    end

    If MsgYesNo("Arquivo ainda não foi criado " + CRLF + "Deseja aguardar")

    loop

    else

    exit

    end

    end

    //-- Verifica se o arquivo foi criado com sucesso

    If File(cFileBat)

    lResult := .T.

    //-- Executa o BAT

    If lExibe

    WaitRun(cFileBat,1)

    else

    WaitRun(cFileBat,0)

    end

    //-- Caso tenha sido passada uma validação, executa

    If ValType(bEval) = "B"

    lResult := Eval(bEval)

    end

    end

    //-- Apaga o arquivo BAT para não deixar resíduos

    i := 0

    While File(cFileBat)

    SysRefresh()

    If fErase(cFileBat) != 0

    SysWait(1)

    //-- 3 tentativas "silenciosas"

    If i < 3

    i++

    loop

    end

    If MsgYesNo("Erro " + UT( fError() ) + " ao apagar o arquivo: " + CRLF +;

    cFileBat + CRLF + "Tentar novamente")

    loop

    else

    exit

    end

    else

    exit

    end//If fErase(cFileBat) != 0

    end//While File(cFileBat)

    end//If CreateTxt(cFileBat,cTextoBat)

    end//If !File(cFileBat)

    Return lResult

    /*------------------------------------------------------------------------*/

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

    Function DirExe()

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

    *

    * Pegar o caminho aonde se encontra o executavel

    * Parametros:

    * Retorno: cDir

    *

    * Autor: Samir

    * 18/5/2009 - 09:55:56

    *

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

    local cDir := cFilePath( GETMODULEFILENAME( GETINSTANCE() ) )

    If Right(cDir,1) != "\"

    cDir += "\"

    end

    Return cDir

    /*------------------------------------------------------------------------*/

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

    function UT(cStr)

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

    *

    * Remover os espaços excedentes e forçar caixa alta

    * Parametros: cStr

    * Retorno: cStrFormatado

    *

    * Autor: Samir

    * 7/4/2009 - 09:55:35

    *

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

    local cStrFormatado := ""

    If ValType(cStr) = "N"

    cStrFormatado := Str(cStr)

    elseif ValType(cStr) = "C"

    cStrFormatado := cStr

    elseif ValType(cStr) = "U"

    cStrFormatado := ""

    elseif ValType(cStr) = "A"

    cStrFormatado := "Matriz"

    else

    cStrFormatado := ""

    end

    cStrFormatado := AllTrim(Upper(cStrFormatado))

    Return cStrFormatado

    /*------------------------------------------------------------------------*/
  10. Recomendo o uso do skype, ele aceita envio de parâmetros por linha de comando para fazer as ligações

    Can I run Skype for Windows desktop from the command line?

    You can run Skype for Windows desktop from the command line. For example, if you have installed Skype in the default location, type the following command (including quotes):

    "C:\Program Files\Skype\Phone\Skype.exe"

    You can also supply the following arguments:

    Command Description
    /nosplash Do not display splash screen when Skype starts.
    /minimized Skype is minimized to system tray when it starts.
    /callto:nameornumber Call the specified Skype Name or phone number.
    /shutdown Close Skype.
    /secondary Allows you to start an additional skype.exe instance.

    For example, the following command will close Skype:

    "C:\Program Files\Skype\Phone\Skype.exe /shutdown"

  11. A melhor forma de resolver isso:
    Faça a validação antes de salvar, já no botão correspondente.

    A vantagem é que você pode fazer todas as validações ao mesmo tempo e não trava o usuário de navegar entre os campos, como por exemplo ir digitando o Nome, RG, etc enquanto o cliente pega o CPF.
    Fora que se você for fazer essa validação antes de salvar pode ocorrer do CPF ser válido e até ser finalizado o restante o CPF ser gravado em outra estação.

  12. Fica a dica de cada um abordar um tópico e fazer algo a nível coletivo...

    Exemplo:

    Como carregar um comando de uma DLL:


    /*---------------------------------------------------------*/​
    Function Main()
    
    Public nLib
    
       InstanciarDLL() //-- Instanciar a DLL
    
       B_LEITURAX( ) //-- Executar o comando
    
       //-- Descarregar a DLL
       FreeLibrary(nLib)
       Release nLib
    
    Return
    
    /*---------------------------------------------------------*/​
    
    Procedure InstanciarDLL()
    
       nLib := LoadLibrary("BemaFI32.dll") //-- Carregar ela para a memória
    
    
       DLL32 function B_LEITURAX( );//-- Nome definido para o comando
             AS _INT; //-- Tipo do retorno
    
             PASCAL FROM "Bematech_FI_LeituraX" //-- Nome do comando na DLL
              nLib //-- Biblioteca carregada na memória
    
    Return
  13. //cURL:=https://www.mpgateway.com/v_3_00/sms/smspush/enviasms.aspx?Credencial=XXXX110B1B8723382XXXX793A74B5BC08D12266E&Token=123456&Principal_User=FF&Aux_User=F1&Mobile=552194797025&Send_Project=S&Message=teste

    //-- Estava atribuindo a variável sem ASPAS
    cURL := "https://www.mpgateway.com/v_3_00/sms/smspush/enviasms.aspx?Credencial=XXXX110B1B8723382XXXX793A74B5BC08D12266E&Token=123456&Principal_User=FF&Aux_User=F1&Mobile=552194797025&Send_Project=S&Message=teste"

    E tente assim:



    Try
       ? "Entrou no Try"
       //-- Sua rotina
       nNumero := 1/0
    Catch
       ? "Foi para o catch"
    End
×
×
  • Create New...