-
Posts
1,951 -
Joined
-
Last visited
-
Days Won
10
Posts posted by sambomb
-
-
Abre como parâmetro
WaitRun("iexplore.exe" + cURL,0) -
-
Alguém já tem previsão dos temas a serem abordados??
-
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
-
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 )
-
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
-
O action tem como mudar dinamicamente
oBtn:bAction := {|| MsgInfo("Nova ação") } -
@ 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? -
Sei que você não quer criar eles no resource e dar hide, mas é a solução mais prática, até pra dar manutenção depois....
-
-
o pessoal desta empresa http://www.rcasistemas.com.br/index.php fazem esse tipo de rotinha no sistema deles, quem sabe alguem pode ajudar voce
e eles usam fivewin
Serve eu?
-
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 -
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.
-
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.
-
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 := cStrelseif ValType(cStr) = "U"cStrFormatado := ""elseif ValType(cStr) = "A"cStrFormatado := "Matriz"elsecStrFormatado := ""endcStrFormatado := AllTrim(Upper(cStrFormatado))Return cStrFormatado/*------------------------------------------------------------------------*/ -
Só cuidado com os conectivos, exemplo:
TokenUpper("samir sardinha soares de abreu") => Samir Sardinha Soares De Abreu
Tem que passar o 3º parâmetro pelo que o Kapiaba mostrou -
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"
-
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. -
Se tiver alguma novidade avise por aqui
-
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
-
Depende do seu uso... 20 mb para mim está resolvendo
2MB/1MB costuma resolver
Mas eu gostaria de ter 20/10 -
Quer o número ( EAN 13 ) ou as barras mesmo?
-
Eu também acredito que seja isso Ana, por isso apontei para ele usar uma mensagem na primeira linha do Try para ele ver ocorrendo a mensagem em ambos.
-
//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
Conteudo de uma Matriz
in Programação
Posted
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