Jump to content
Fivewin Brasil

sambomb

Membros
  • Posts

    1,951
  • Joined

  • Last visited

  • Days Won

    10

Everything 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. Abre como parâmetro WaitRun("iexplore.exe" + cURL,0)
  3. Perguntar costuma ser mais rápido
  4. Alguém já tem previsão dos temas a serem abordados??
  5. 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
  6. 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 )
  7. 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
  8. O action tem como mudar dinamicamente oBtn:bAction := {|| MsgInfo("Nova ação") }
  9. @ 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?
  10. 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....
  11. 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
  12. 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.
  13. 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 /*------------------------------------------------------------------------*/
  14. 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
  15. Recomendo o uso do skype, ele aceita envio de parâmetros por linha de comando para fazer as ligações
  16. 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.
  17. Se tiver alguma novidade avise por aqui
  18. 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
  19. Depende do seu uso... 20 mb para mim está resolvendo 2MB/1MB costuma resolver Mas eu gostaria de ter 20/10
  20. Quer o número ( EAN 13 ) ou as barras mesmo?
  21. 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.
  22. //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...