sistem
Membros-
Posts
561 -
Joined
-
Last visited
-
Days Won
25
Everything posted by sistem
-
syspel começei a alterar voconsefaz.prg e ta 90% alterado amanha devo concluir, vc sabe se eh possivel publicar aqui as alteracoes? caso o gilmer permitir eu coloco as alteraçoes aqui, []'s
-
ola WISKI "baixe os arquivos em anexo que baxei do site do correio" onde encontro os anexo?
-
kapiaba seu cliente tb pode ir na sefaz com um cd limpo, dai eles grava todos os xml no cd/dvd obs: o cliente tem q apresentar alguns documentos que nao lembro quais é (ligar para sefaz para saber quais documento)
-
essa rotina baixa o xml nao assinado do site da nfe. (testado) se quiser gerar o xml assinado tente esse site http://www.fsist.com.br/ (vai precisar do certificado) (NAO testado)
-
parece que esta disponivel no site da sefaz as nfe dos ultimos 3 meses Function ConsultaSefazXml(cChave) Local oFont, oDlgCaptcha, oGet,oGet1, cCaptcha:=Space(8), oSefaz, oImage Default cChave := Space(44) DEFINE FONT oFont NAME "Arial" SIZE 0, -20 BOLD DEFINE DIALOG oDlgCaptcha TITLE "Gerar XML" FROM 0,0 to 110,400 PIXEL @ 001, 032 SAY "* poderá inserir qualquer chave" PIXEL OF oDlgCaptcha @ 010, 002 SAY "Chave NFe" PIXEL OF oDlgCaptcha SIZE 30, 10 @ 009, 032 GET oGet VAR cChave PIXEL OF oDlgCaptcha SIZE 165, 10 Picture "@9" @ 030, 002 SAY "Captcha" PIXEL OF oDlgCaptcha SIZE 20, 10 @ 022, 108 GET oGet1 VAR cCaptcha PIXEL OF oDlgCaptcha SIZE 40, 15 FONT oFont @ 022, 032 IMAGE oImage SIZE 70, 30 PIXEL OF oDlgCaptcha ADJUST @ 039, 108 BUTTON "&Gerar XML" PIXEL OF oDlgCaptcha SIZE 40, 12 ACTION (If(oSefaz:DownloadHtml2Xml(cChave,cCaptcha),; (MsgInfo("XML gerado com sucesso! verificar a pasta: "+oApp:cDir_001+"backup\remessa","Retorno!"),; MYRUN( oApp:cDir_001+"UniDANFe\unidanfe.exe arquivo="+oApp:cDir_001+"backup\remessa\"+Alltrim(cChave)+"nfe.xml edição=Free imprimir=1 visualizar=1 copias=1"), oDlgCaptcha:End() ),; (MsgInfo("Não gerado, tente novamente.", "Aviso!"), oDlgCaptcha:End(), ConsultaSefazXml()) ) ) oSefaz = TVoConsultaSefaz():New(oDlgCaptcha,oImage) oSefaz:lDebug:=.f. oDlgCaptcha:lHelpIcon := .f. ACTIVATE DIALOG oDlgCaptcha CENTER Return nil
-
como saber (rapido) o numero de linhas de um mega arquivo.txt
sistem replied to gibaf's topic in Programação
soh para deixar registrado caso alguem procure as dica: warderlei Cardoso oTxtFile:LastRec() e AnaCatacombs aRetorno := FParseEx(NomedoArquivo,Delimitador) aRetornoP := FParseEx(oApp:cDir_Ssr+"0001P.txt", Chr(9)) oFileP = TTxtFile():New( oApp:cDir_Ssr+"0001P.txt" ) nNumeroLinha:=oFileP:LastRec() oFileP:End() for xx=1 to nNumeroLinha DbSelectArea("Clie") Clie->(DbSeek(aRetornoP[xx,2])) DbSelectArea("Reth") Reth->(AppendReg()) Reth->Cod_Reth := aRetornoP[xx,1] Reth->Dat_Reth := date() Reth->Sta_Reth := "A" Reth->Cli_Reth := aRetornoP[xx,2] Reth->Ven_Reth := Clie->Ven_Clie Reth->Rot_Reth := Clie->Rot_Clie Reth->Seg_Reth := Clie->Seg_Clie Reth->Val_Reth := Val(aRetornoP[xx,5]) Reth->Usu_Reth := oApp:WUsuario Reth->Tim_Reth := DtoC(Date())+"-"+Left(Time(),5) Reth->(DbCommit()) Reth->(DbUnlock()) Next -
oribeiro, preciso de algo que seja sem limite de envio e sem propaganda. se alguem pudesse testar o envio com a funcao acima,... alguem que tenha o modem. aqui a msg chega mais com caracteres estranhos => ????????ã???? acho q seja por causa do meu modem
-
deu certo meu amigo emotta, ficou perfeito muitíssimo obrigado
-
Alguem poderia conferir o codigo abaixo com o MODEM3G para envio de SMS aqui envia mais chega somente caracters tipo => ???????ã??????? nao sei se eh pq meu modem ser chigling Function SMSForm() Local oFont, oDlg, oOle, lOk:=.f., oMsg,; cMsg:=Space(124), cDDD:=Space(2), cTel:=Space(9), cNom:=Space(15), cPort:="COM5" DEFINE FONT oFont NAME "Arial" SIZE 0, -12 DEFINE FONT oFont2 NAME "Arial" SIZE 0, -12 BOLD DEFINE DIALOG oDlg FROM 4, 4 TO 12, 50 TITLE "Enviar SMS" @ 02, 03 SAY "De:" FONT oFont PIXEL of oDlg @ 02, 99 SAY "Ex: JOSE" FONT oFont PIXEL of oDlg @ 14, 03 SAY "Fone:" FONT oFont PIXEL of oDlg @ 14, 99 SAY "Ex: 85 88889999" FONT oFont PIXEL of oDlg @ 26, 03 SAY "Msg:" FONT oFont PIXEL of oDlg @ 52, 03 SAY oSay VAR StrZero(Len(Alltrim(cMsg)),3) PIXEL OF oDlg SIZE 11, 06 FONT oFont2 @ 52, 17 SAY "de 120" PIXEL OF oDlg SIZE 60, 08 FONT oFont2 @ 02, 40 GET cNom PIXEL OF oDlg COLOR CLR_GET1,CLR_GET2 SIZE 55, 10 PICTURE "@!" @ 14, 40 GET cDdd PIXEL OF oDlg COLOR CLR_GET1,CLR_GET2 SIZE 12, 10 PICTURE "99" @ 14, 55 GET cTel PIXEL OF oDlg COLOR CLR_GET1,CLR_GET2 SIZE 40, 10 PICTURE "999999999" @ 26, 40 GET oMsg VAR cMsg Multiline PIXEL OF oDlg COLOR CLR_GET1,CLR_GET2 SIZE 140, 30 ON Change ContaGet(oMsg, oSay, cMsg, 119) @ 40, 02 BUTTON "&Enviar" PIXEL OF oDlg SIZE 35, 10 ACTION ( lOk:=.t., oDlg:End() ) @ 02, 150 COMBOBOX cPort ITEMS {"COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "COM10", "COM11", "COM12", "COM13", "COM14", "COM15", "COM16", "COM17", "COM18", "COM19"} PIXEL OF oDlg COLOR CLR_GET1,CLR_GET2 SIZE 30, 50 FONT oFont oMsg:bGotFocus = { || oMsg:SetSel( 0, 0 ), oMsg:Goto( oMsg:GetLineCount() ) } oDlg:lHelpIcon := .f. ACTIVATE DIALOG oDlg CENTERED If lOk SMSEnvia("55"+cDdd+Alltrim(cTel), Alltrim(cMsg), cPort) Endif Return nil //---------------------------------------------------------------- Function SMSEnvia(cTel, cMsg, cPort) // precisar da lIB hbcomm.lib, DOWNLOAD => http://www.salc.com.br/atual/hbcomm.lib local nHandle, cBuffer:="", nChar nHandle :=Init_Port( cPort, 9600, 8, 0, 1, 1024 ) If nHandle <= 0 MsgStop("Erro ao iniciar a comunicacao, porta: "+cPort, "Aviso") Return .f. Endif OutBufClr(nHandle) OutChr(nHandle, "AT+CMGF=1"+Chr(13) ) SysWait( 0.1 ) OutChr(nHandle, "AT+CMGS="+Chr(34)+cTel+Chr(34)+Chr(13) ) // cTel DDD + NumeroTel ex: "558599998888" SysWait( 0.1 ) OutChr(nHandle, cMsg+Chr(26) ) // aki a Msg SysWait(1) nChar := InBufSize( nHandle ) InChr( nHandle,nChar,@cBuffer ) UnInt_Port(nHandle) MsgInfo(StrTran(cBuffer,CRLF," "), "Retorno!") Return nil //---------------------------------------------------------------- //Contar quantidade caracteres GET ON Change Function ContaGet(oGet, oSay, cGet, nTamanho) Local nLen:= Len(Alltrim(cGet)) oSay:VarPut(Strzero(nLen,3)) oSay:Refresh() If nLen > nTamanho MsgAlert("O campo com tamanho limite.", "Aviso!") Endif Return(nil) fontes: http://forums.fivetechsupport.com/viewtopic.php?f=6&t=27875 http://afercondini.wordpress.com/2013/04/27/modem-3g-para-enviar-sms/ http://www.vbmania.com.br/pages/?varModulo=Forum&varMethod=abrir&varID=408143&varPagina=1
-
emotta o vetor e criado da seguinte maneira: For x=1 to Prod->(Lastrec()) For y=1 to 11 aVetor[x,y] := 0 Next Next nPos teria que representar o valor do sr_recno de cada linha da tabela do cad.produdo para que o select funcione teria que por o sr_recno do cadastro de produto no TotSR, mais ou menos assim: cSelect := 'SELECT fam_essu, pro_essu, mov_essu, sr_recno, SUM(qtd_essu) nTotQTD FROM essu WHERE dat_essu < "'+Sr_cDbValue(dData1)+'" GROUP BY fam_essu, pro_essu, mov_essu' o sr_recno teria que ser o valor do cadastro de produto para cada grupo ENT e SAI do TotSR ou teria que alterar a logica da criacao do vetor. tipo: DbGoTop() While !TotSR->(Eof()) If TotSR->Mov_Essu == "ENT" aVetor[TotSR->sr_recno,3] := TotSR->nTotQtd // valor do sr_recno do cad.prod ElseIf TotSR->Mov_Essu == "SAI" aVetor[TotSR->sr_recno,4] := TOTSR->nTotQtd EndIf TotSR->(DbSkip()) EndDo TotSR->(DbCloseArea())
-
emotta seu codigo ficou bem melhor. com certeza o banco de dados ficara menos sobrecarregado e o relatório mais rapido irei ver e digo como ficou obrigado de novo, *esse topic foi de grade ajuda e ensinamento
-
DbSelectArea("Prod") Prod->(DBSETORDER("Prod1")) Prod->(DbGotop()) Do While !Prod->(Eof()) cSelect := 'SELECT fam_essu, SUM(qtd_essu) nTOTQTD, SUM((qtd_essu*prc_essu)-(qtd_essu*prc_essu*des_essu/100)) nTOTVAL FROM essu WHERE fam_essu = "'+prod->Fam_Prod+'" and pro_essu = "'+prod->Cod_Prod+'" and dat_essu < "'+dtos(dData1)+'" and mov_essu = "ENT" GROUP BY fam_essu' DbUseArea(.t.,"SQLRDD",cSelect,"TOTSR") aVetor[Prod->(recno()),3] := TOTSR->nTOTQTD aVetor[Prod->(recno()),7] := TOTSR->nTOTVAL TOTSR->(DbCloseArea()) cSelect := 'SELECT fam_essu, SUM(qtd_essu) nTOTQTD, SUM((qtd_essu*prc_essu)-(qtd_essu*prc_essu*des_essu/100)) nTOTVAL FROM essu WHERE fam_essu = "'+prod->Fam_Prod+'" and pro_essu = "'+prod->Cod_Prod+'" and dat_essu < "'+dtos(dData1)+'" and mov_essu = "SAI" GROUP BY fam_essu' DbUseArea(.t.,"SQLRDD",cSelect,"TOTSR") aVetor[Prod->(recno()),4] := TOTSR->nTOTQTD aVetor[Prod->(recno()),7] := TOTSR->nTOTVAL TOTSR->(DbCloseArea()) Prod->(DbSkip()) Enddo realmente não entendi. com base no código acima poderia colocar um exemplo:
-
emotta, o tempo foi o mesmo, na verdade foi 10 segundos as duas maneiras, talvez em rede a opção com GROUP BY seja mais rápido ainda. com o skip o cliente diz q mandava rodar o relatório e ia fazer outras coisas rsrs ficou otimo sql eh show
-
DbSelectArea("Prod") Prod->(DBSETORDER("Prod1")) Prod->(DbGotop()) Do While !Prod->(Eof()) cSelect := 'SELECT SUM(qtd_essu) nTOTAQTD FROM essu WHERE fam_essu = "'+prod->Fam_Prod+'" and pro_essu = "'+prod->Cod_Prod+'" and dat_essu < "'+dtos(dData1)+'" and mov_essu = "ENT"' DbUseArea(.t.,"SQLRDD",cSelect,"TOTSR") aVetor[Prod->(recno()),3] := TOTSR->nTOTAQTD TOTSR->(DbCloseArea()) cSelect := 'SELECT SUM(qtd_essu) nTOTAQTD FROM essu WHERE fam_essu = "'+prod->Fam_Prod+'" and pro_essu = "'+prod->Cod_Prod+'" and dat_essu < "'+dtos(dData1)+'" and mov_essu = "SAI"' DbUseArea(.t.,"SQLRDD",cSelect,"TOTSR") aVetor[Prod->(recno()),4] := TOTSR->nTOTAQTD TOTSR->(DbCloseArea()) Prod->(DbSkip()) Enddo Ficou super rápido, antes usava o skip imagine usar o skip em uma tabela para pegar o saldo anterior da movimentação do estoque desde de 2007 o relatoria demorava uns 4 minutos agora demorou somente 20 segundos
-
deu certo obrigado.
-
SR_GetConnection():exec( 'SELECT SUM(qtd_essu) AS nTOTAQTD FROM essu WHERE fam_essu = "'+cFam_Prod+'" and pro_essu = "'+cCod_Prod+'" and dat_essu < "'+dtos(dData1)+'" and mov_essu = "ENT";') gostaria de pegar a coluna qtd_essu somar e guardar o valor na variável nTOTAQTD alguém teria exemplo com sqrdd []s
-
http://social.technet.microsoft.com/Forums/pt-BR/a046c963-3fb0-4d62-90e9-7691808159f1/vrus-compacta-arquivo-para-rar-com-senha
-
na minha pouca experiencia melhora, mais melhora muito.
-
não fica lento uso a classe desde 2011 para bloquear o programa com senha ou mesmo encerrar.
-
tem esse aqui tb: http://www.superdownloads.com.br/download/40/usb-over-network-server/ parece que tem gente usando http://www.projetoacbr.com.br/forum/index.php?/topic/4848-compartilhar-cerfiticado-a3/
-
qual seria a pagina? Function CnpjSintegra(cCgc, cEst) Local hWnd, oOle, cUrl, cCnpj:=Alltrim(StrTran(StrTran(StrTran(cCgc, "/", ""), ".", ""), "-", "")) oOle:= CreateObject("InternetExplorer.Application") oOle:Visible := .t. // Apresenta o Browser oOle:ToolBar := .f. // Desativa a barra de ferramentas oOle:StatusBar := .f. // Desativa a barra de status oOle:MenuBar := .f. // desativa a barra de menu If cEst="AC" cUrl:="http://sefaznet.ac.gov.br/sefazonline/servlet/sintegraconsulta" ElseIf cEst="AL" cUrl:="http://sintegra.sefaz.al.gov.br/consulta_empresa_pesquisa.asp" ElseIf cEst="AP" cUrl:="http://www.sintegra.ap.gov.br/Sintegra/" ElseIf cEst="AM" cUrl:="http://online.sefaz.am.gov.br/sintegra/index.asp" ElseIf cEst="BA" cUrl:="http://www.sefaz.ba.gov.br/sintegra/sintegra.asp?estado=BA" ElseIf cEst="CE" cUrl:="http://www.sefaz.ce.gov.br/content/aplicacao/internet/servicos_online/sintegra/sintegra.asp?estado=ce" ElseIf cEst="DF" cUrl:="http://www.fazenda.df.gov.br/area.cfm?id_area=110" ElseIf cEst="ES" cUrl:="http://www.sintegra.es.gov.br/" ElseIf cEst="GO" cUrl:="http://www.sefaz.go.gov.br/ccs/default.asp" ElseIf cEst="MA" cUrl:="http://sistemas.sefaz.ma.gov.br/sintegra/jsp/consultaSintegra/consultaSintegraFiltro.jsf" ElseIf cEst="MT" cUrl:="http://www.sefaz.mt.gov.br/sid/consulta/infocadastral/consultar/publica" ElseIf cEst="MS" cUrl:="http://www1.sefaz.ms.gov.br/cadastro/CadastroMsCCI.asp" ElseIf cEst="MG" cUrl:="http://consultasintegra.fazenda.mg.gov.br/sintegra/" ElseIf cEst="PR" cUrl:="http://www.sintegra.fazenda.pr.gov.br/sintegra/" ElseIf cEst="PB" cUrl:="https://saplic.receita.pb.gov.br/sintegra/SINf_ConsultaSintegra.jsp" ElseIf cEst="PA" cUrl:="https://app.sefa.pa.gov.br/Sintegra/" ElseIf cEst="PE" cUrl:="http://www.sintegra.sefaz.pe.gov.br/" ElseIf cEst="PI" cUrl:="http://web.sintegra.sefaz.pi.gov.br/consulta_empresa_pesquisa.asp" ElseIf cEst="RJ" cUrl:="http://www.fazenda.rj.gov.br/projetoCPS/consulta.jsp" ElseIf cEst="RN" cUrl:="http://www.set.rn.gov.br/sintegra/default.asp" ElseIf cEst="RS" cUrl:="http://sintegra.sefaz.rs.gov.br/sef_root/inf/Sintegra_Entrada.asp" ElseIf cEst="RO" cUrl:="http://portal.intranet.sefin.ro.gov.br/PortalContribuinte/Publico/parametropublica.jsp" ElseIf cEst="RR" cUrl:="https://www.sefaz.rr.gov.br/sintegra/servlet/hwsintco" ElseIf cEst="SC" cUrl:="http://sistemas3.sef.sc.gov.br/sintegra/consulta_empresa_pesquisa.aspx" ElseIf cEst="SE" cUrl:="https://security.sefaz.se.gov.br/SIC/sintegra/index.jsp" ElseIf cEst="SP" cUrl:="http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/consultaSintegraServlet" ElseIf cEst="TO" cUrl:="http://sintegra.sefaz.to.gov.br/" Else Return nil Endif oOle:Navigate(cUrl) hWnd:=oOle:hWnd ShowWindow(hWnd, 1 ) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 BringWindowToTop(hWnd) While oOle:Busy syswait(.2) End oOle := oOle:Document() If cEst="AC" oOle:All:Item("vNUMDOC",0):Value := cCnpj oOle:All:Item("cfield",0):Focus() ElseIf cEst="AL" oOle:All:Item("txt_CNPJ",0):Value := cCnpj oOle:All:Item("Submit",0):Focus() oOle:All:Item("Submit",0):Click() ElseIf cEst="AP" oOle:All:Item("j_id4:tipo",0):Value := "CNPJ" oOle:All:Item("j_id4:doc",0):Value := cCnpj oOle:All:Item("j_id4:txtcaptcha",0):Focus() ElseIf cEst="AM" oOle:All:Item("cgc",0):Value := cCnpJ oOle:All:Item("captcha_code",0):Focus() ElseIf cEst="BA" oOle:All:Item("txt_CNPJ",0):Value := cCnpj oOle:All:Item("Submit",0):Focus() oOle:All:Item("Submit",0):Click() ElseIf cEst="CE" oOle:All:Item("CGC",0):Value := cCnpj oOle:All:Item("B1",0):Focus() oOle:All:Item("B1",0):Click() ElseIf cEst="DF" oOle:All:Item("CGC",0):Value := cCnpj oOle:All:Item("B1",0):Focus() oOle:All:Item("B1",0):Click() ElseIf cEst="ES" oOle:All:Item("num_cnpj",0):Value := cCnpj oOle:All:Item("botao",0):Focus() oOle:All:Item("botao",0):Click() ElseIf cEst="GO" // GO erro // oOle:All:Item("tCNPJ",0):Value := cCnpj // oOle:All:Item("btCGC",0):Focus() // oOle:All:Item("btCGC",0):Click() ElseIf cEst="MA" // MA erro // oOle:All:Item("tipoEmissao",0):Value := "2" // oOle:All:Item("cpfCnpj",0):Value := cCnpj // oOle:All:Item("j_id23",0):Focus() ElseIf cEst="MT" oOle:All:Item("numero",0):Value := cCnpj oOle:All:Item("captchaDigitado",0):Focus() ElseIf cEst="MS" oOle:All:Item("CGC_CPF",0):Value := cCnpj oOle:All:Item("captchacode",0):Focus() ElseIf cEst="MG" oOle:All:Item("identificadorCmbOpcao",0):Value := "Número do CNPJ" oOle:All:Item("filtro",0):Value := cCnpj oOle:All:Item("recaptcha_response_field",0):Focus() ElseIf cEst="PR" oOle:All:Item("data[Sintegra1][Cnpj]",0):Value := cCnpj oOle:All:Item("data[Sintegra1][CodImage]",0):Focus() ElseIf cEst="PB" oOle:All:Item("nrDocumento",0):Value := cCnpj oOle:All:Item("B1",0):Focus() oOle:All:Item("B1",0):Click() ElseIf cEst="PA" oOle:All:Item("CNPJ",0):Value := cCnpj oOle:All:Item("OP",0):Focus() oOle:All:Item("OP",0):Click() ElseIf cEst="PE" oOle:All:Item("CNPJ",0):Value := cCnpj // problema oOle:All:Item("ConsultaCGC",0):Focus() oOle:All:Item("ConsultaCGC",0):Click() ElseIf cEst="PI" oOle:All:Item("txt_CNPJ",0):Value := cCnpj oOle:All:Item("Submit",0):Focus() oOle:All:Item("Submit",0):Click() ElseIf cEst="RJ" oOle:All:Item("CGC",0):Value := cCnpj oOle:All:Item("cod_img",0):Focus() ElseIf cEst="RN" oOle:All:Item("CGC",0):Value := cCnpj oOle:All:Item("B1",0):Focus() oOle:All:Item("B1",0):Click() ElseIf cEst="RS" oOle:All:Item("cgcmf",0):Value := cCnpj ElseIf cEst="RO" oOle:All:Item("NuDevedor",0):Value := cCnpj oOle:All:Item("recaptcha_response_field",0):Focus() ElseIf cEst="RR" oOle:All:Item("_CONINSESTG",0):Value := cCnpj oOle:All:Item("cfield",0):Focus() ElseIf cEst="SC" oOle:All:Item("txt_CPFCNPJ",0):Value := cCnpj oOle:All:Item("txtCodigoCaptcha",0):Focus() ElseIf cEst="SE" oOle:All:Item("cdCnpj",0):Value := cCnpj oOle:All:Item("dsImagem",0):Focus() ElseIf cEst="SP" oOle:All:Item("cnpj",0):Value := cCnpj oOle:All:Item("Key",0):Focus() ElseIf cEst="TO" oOle:All:Item("CGC",0):Value := cCnpj oOle:All:Item("B1",0):Focus() oOle:All:Item("B1",0):Click() Endif oOle := NIL Return nil segue exemplo de preencher na pagina do sintegra
-
já uso a tabela IBPT na NF-e para calculo dos impostos, gostaria de saber a forma correta de usar no cupom fiscal, se é igual ao video tanto para daruma como bematech concatenando? ou teria outra forma? é isso
-
Ola grupo Gostaria de saber a maneira certa para destacar os impostos no cupom fiscal com a DARUMA. Continua da mesma forma como mostra o video abaixo? http://www.youtube.com/watch?feature=player_embedded&v=8Pbo9ZNQwyM mudou alguma coisa? e com a bematech, como seria?. soh agora estou implementando isto. agradeço ajuda
-
tem uns comentario nessa pagina: http://www.lawebdelprogramador.com/foros/Clipper_FiveWin/1001465-Es_confiable_usar_FiveWin__.html parece q jah ta tudo resolvido, vamos em frente.
-
Eroni e Yury obrigado pelo esclarecimento com certeza vai ajudar bastante. []´s