Ir para o conteúdo

Rankings


Conteúdo Popular

A mostrar o conteúdo com mais reputação desde 20-08-2018 em todas as áreas

  1. 2 pontos
    OOP, no seu conceito geral, não é difícil. A grande dificuldade que muitos encontram é a diferença de paradigmas, mais do que a dificuldade intrínseca do paradigma em si. O de um programador imperativo para um programador OOP é radicalmente diferente. O que acontece é que muitos querem programar em OOP com o mindset imperativo. Fazem uns objectos, usam umas heranças, metem umas propriedades, e pensam que é OOP. Mas depois vão e misturam UI com domínio, heranças onde não devem ser usadas, métodos com centenas de comandos em sequência, classes com multi-responsabilidade, etc. Quando dão por ela, é tudo menos OOP. Lembro-me de te dizer uma vez que Delphi (ou Object Pascal, no geral), é tão simples que até ser mau programador é fácil. Repito-o. Em Delphi, com o seu IDE RAD (Integrated Development Environment - Rapid Application Development), queres um botão, arrastas para a form. Duplo click no botão e ele cria-te logo o esqueleto de código do evento que esse botão despoleta. E o programador 'comum' completa lá o código do que quer fazer. É um objecto? É. Funciona? Sim. É OOP? Nem pensar. Vai dar dor de cabeça quando for preciso dar manutenção? Sem sombra de dúvida! Mas isto não significa que não se possa trabalhar bem. Dá mais trabalho? Claro que sim. Mas fica bem feito, e a longo prazo, o trabalho inicial irá poupar outro: O da manutenção. As coisas têm um tempo certo de acontecer, e o teu interesse em aprender é uma tremenda mais valia para ti. É isso que separa o bom programador do programador medíocre. Se ainda não sabes (seja o que for), irás saber. Irás aprender, irás mergulhar, irás usar. O trajecto dos outros é só deles. Se for bom, terão futuro. Se não for, acabarão por mudar de rumo. Não te preocupes em demasia, faz o teu próprio percurso, e alguma coisa, estamos aqui.
  2. 1 ponto
    Detalhe... 🙂 Tenta trocar os caracteres de aspa simples ' pelo caractere de aspas duplas " Outra coisa.. Troca tambem a linha if (line2 == "") Por if (string.IsNullOrWhiteSpace(line2)) Att Ricardo
  3. 1 ponto
    Ola Quais erros ? Att Ricardo
  4. 1 ponto
    Ola, segue uma ideia... espero que consiga fazer funcionar... :-) string line; string line2; while ((line = streamReader.ReadLine()) != null) { if (!string.IsNullOrWhiteSpace(line)) { if (line == '---------------------------------------------------------') { streamWriter.WriteLine(line); line2 = ''; } else { if (line2 == ''){ line2 = line; } else { line2 = line2 + " " + line; streamWriter.WriteLine(line2); } } } } Atenciosamente, Ricardo
  5. 1 ponto
    Podes ver aqui: https://html.spec.whatwg.org/#dom-window-nameditem De qualquer modo, mesmo que te pareça que poupe na quantidade de código, é uma abordagem que não recomendo (pelos motivos que já expus). Penso que não existe nada de análogo para a getElementsByClassName. Para tudo isto podes sempre utilizar a querySelectorAll (e até mesmo fazer alias dela para um nome de escrita mais fácil).
  6. 1 ponto
    @coxosclassic Esse comportamento é «normal», está definido no standard (embora isto seja algo controverso, e tenha surgido com o IE). Posto isto, imagina que num local qualquer do código eu escrevo alvo como elem = 'foobar'. A partir de agora, se quiseres aceder ao elemento DOM com id #elem, precisas mesmo de utilizar getElementById, caso contrário irás obter apenas 'foobar'; ficas muito susceptível a fenómenos de shadowing se utilizares directamente as variáveis globais (aliás... propriedades do objecto window). Mesmo em termos de legibilidade, a utilização das funções de manipulação do DOM é mais clara, pois deixa explícito que uma determinada variável é um elemento do DOM e não apenas uma variável global qualquer.
  7. 1 ponto
    Espero que sim, mas alguma coisa, apita.
  8. 1 ponto
    Penso que o que precisas é procurar o padrão, e agir sobre ele. Exemplo (precisas de, nesta ordem): Eliminar linhas em branco Copiar o texto das linhas numéricas para o final da linha anterior Eliminar a linha numérica Sugiro-te fazer um ciclo que corra todas as linhas e que a cada uma, teste que tipo de linha é e execute esses 3 passos, se aplicáveis.
  9. 1 ponto
    Depois do excelente texto do @nunopicado, não sei o que muito mais se pode acrescentar 😄 Anyway, Pascal foi a minha primeira linguagem de programação, introduzida no meu Ensino Secundário. Decidi desde cedo ir além do ensinado pela professora, a modos que quando mostrei o meu primeiro grande projecto - Mini Calc -, o qual aproveitei para apresentar numa animação Flash que era trabalho do período seguinte, a senhora ficou embasbacada e a primeira coisa que disse foi "não sabia que dava para fazer isto em Pascal". Frise-se que eu nem OOP usei na Mini Calc Série 3, é apenas paradigma procedural muito mal parido pelo newbie que eu era na época. Ainda hoje me considero um verdadeiro newbie ao lado de grandes nomes do Delphi, como o próprio @nunopicado (por muita humildade que ela tenha, eu digo peremptoriamente que o ele é um dos grandes desta linguagem na actualidade). Enquanto utilizador exclusivo do Free Pascal, esta é uma linguagem que só deixarei de usar quando deixar de haver compilador disponível e pretendo avançar para Delphi a médio prazo. Tendo já usado outras linguagens, acabo sempre por "regressar às origens". O futuro... não sendo primo da Maya, não tenho bem noção de qual possa ser o futuro, mas há projectos interessantes que quase não são conhecidos, feitos mesmo em Free Pascal / Lazarus, que mostram claramente que a família Pascal só afundaria devido à ignorância da maioria dos programadores e não pela incapacidade da linguagem. O que não falta são linguagens menos capazes e menos flexíveis, mas muito mais famosas e colocadas em pedestais de ouro. Cumprimentos.
  10. 1 ponto
    Olá, peço vossa permissão para fazer meu primeiro comentário. Encontrei ontem o fórum Portugal a Programar, e gostaria muito de participar e colaborar. Acredito que o Delphi, como ferramenta RAD, se popularizou bastante no início por causa da facilidade de montar as telas/interfaces de usuário, e também pela funcionalidade da ajuda, bastando pressionar F1 para obter um descritivo dos componentes e exemplos de códigos fontes. Porém, por outro lado, isso também permitiu que vários desenvolvedores iniciantes, principalmente "autoditactas", construíssem softwares "mal feitos" na hora de codificar... Aqui no Brasil, temos um dos maiores projetos de software livre voltado para as plataformas Lazarus e Delphi (compatível desde a versão 7 lançado em 2002). O Projeto ACBr (Automação Comercial Brasil) disponibiliza vários componentes que agilizam a integração e desenvolvimento de sistemas em diferentes ramos, por exemplo com balanças eletrônicas, maquininha de cartão, impressoras térmicas, emissão de boletos de cobrança, e emissão da Nota Fiscal Eletrônica (NF-e, equivalente a vossa e-fatura portuguesa) e outros documentos fiscais. No fórum do projeto hoje existem mais de 70 mil usuários/utilizadores cadastrados. Enfim, se o (Object) Pascal vai morrer? Acredito que algum dia vai, mas daqui a muito longo prazo, tanto no meio acadêmico como no meio corporativo... Aqui no Brasil mesmo, ainda existem empresas com sistemas desenvolvidos na linguagem Cobol, linguagem esta que, como dizem por aí: já nasceu morta... Atenciosamente, Ricardo
  11. 1 ponto
    A questão é pertinente, ainda que a sua resposta tenha sido já avançada há anos pelos opositores à linguagem... Está morta e enterrada. Dito isto, não, não está! Não obstante, o Object Pascal não é uma linguagem da moda... É usado por todo o mundo, não apenas Portugal e Brasil (na Rússia por exemplo o Delphi é bastante usado), mas não pertence ao rol de linguagens que a maioria se orgulhe de colocar no currículo. Infelizmente - mas talvez inevitavelmente - grande parte dos programadores apostam em linguagens da moda, pelos mais variados motivos... Uns é porque... bem, porque está na moda! Outros é porque ao estar na moda, as empresas 'da moda' tenderão a utilizá-la também, e com isso abrem-se mais perspectivas de emprego. Em questão não está o poderio da linguagem, reconhecido por quem a conheça, mas completamente olvido para quem segue os tradicionais pontos de debate contra a linguagem, geralmente assentes em argumentos desactualizados e aplicáveis apenas ao Standard Pascal, uma snapshot da linguagem com 35 anos e que em nada representa o Pascal actual. Após esta pequena introdução, a questão do tópico é "Qual o futuro do Pascal e do Delphi", que se me permites, irei refrasear como "Qual o futuro do Object Pascal". Como qualquer tecnologia, o seu futuro não depende apenas da qualidade do produto, mas também, e com especial ênfase, na qualidade da marca que tem por trás. Quanto a mim, o grande problema do Object Pascal é este: As sucessivas detentoras dos direitos sobre o Delphi - o mais proeminente e profissional ramo da linguagem - têm tido uma excelente equipa técnica, mas uma medíocre equipa de marketing, e uma desastrosa equipa executiva - e todos aqui devemos saber que apenas uma excelente equipa técnica não faz milagres por um produto. Depois do fim da fase Borland, o Delphi tem vindo a cair a olhos vistos, e com ele, toda a linguagem Object Pascal. Se actualmente a linguagem não está morta, contra todas as previsões dos seus opositores, é simplesmente pela qualidade do produto. A Codegear foi uma transição mal amanhada para uma empresa em fim de vida, e a Embarcadero, enquanto empresa, foi uma tábua de salvação à la Titanic, suficiente para proteger do afogamento, mas não o suficiente para impedir a hipotermia. Na fase actual, a Idera (enquanto nova detentora do produto por via de aquisição da Embarcadero), parece estar a dar mostras de querer fazer algo de bom pelo produto e pela comunidade, como mostra o lançamento da versão Community Edition, gratuita e com um conjunto de funcionalidades equiparado à versão Professional. Tem limitações a nível de licenciamento, mas isso não é inédito neste tipo de produtos. Será o suficiente para a médio prazo trazer a linguagem para a moda? Sinceramente, não creio. É possível, mas não creio. É preciso mais. São precisos incentivos nas universidades para usarem e ensinarem esta linguagem, é esse o caminho da 'moda', e isso custa dinheiro - muito dinheiro, que não há quem esteja disposto a investir. A Idera acabou de comprar a Embarcadero, não deverá querer gastar esse tipo de dinheiro pelo menos para já, e a equipa do FreePascal, a única alternativa viável ao Delphi, não faz dinheiro que chegue para isso, nem que quisesse. Algo que talvez ajudasse um pouco seria a criação de um standard para o Object Pascal, o que poderia abrir mercado a outras empresas apostarem no produto. O problema é que isso significa a perda de poder de influencia por parte da detentora do Delphi - qualquer que ela seja - e havendo só duas equipas a trabalhar na linguagem, e se a principal delas não tiver interesse na criação do standard, é virtualmente impossível essa criação - a equipa do FreePascal sozinha não teria qualquer hipótese, e não tem ninguém além da Idera a quem se juntar. Por conseguinte, o Object Pascal deverá continuar a ser usado apenas por quem o experimente, e verifique as vantagens que ele trás em algumas áreas de software - geralmente equipas pequenas sem tempo a perder em que o programador também é designer, arquitecto, beta-tester, project manager e apoio ao cliente. Até lá, o estigma deverá continuar a fazer pressão negativa, combatida apenas pelo excelente produto que é o Delphi (e o FreePascal, ainda que em menor grau), mantendo-a, creio eu, como tem estado até agora.
  12. 1 ponto
    Boas, Não era suposto isso acontecer, Se retirares os Documentos anulados não bate certo com os valores da AT ? e se separares as NCs ? Houve em tempos algumas situações, mas penso que hoje em dia isso está mais do que ultrapassado. Dado o volume de documentos, o conselho que dou é no teu sistema, tentares tirar listagem com e sem NCs, com e sem Documentos Anulados, a ver se consegues tentar chegar ao Valor que te aparece na AT. Se conseguires uma Listagem no teu sistema com o valor que eles têm na AT, tens parte, senao a totalidade, do problema identificado. Pelo menos foi assim que fiz há uns anos também com volumes altos de documentos. Cumps,
  13. 1 ponto
    Podes adicionar uma impressora com as seguintes características: Driver: Generic / Text Only Porta: FILE Ao mandares imprimir, ela irá gerar um ficheiro com a extensão .prn do qual podes extrair a informação que precisas. Para o CSV de exemplo seguinte: 1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8 2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58 3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39 4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58 5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5 6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37 7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38 8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization, 9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization, 10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38 O resultado é: 1 1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8 2 2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58 3 3,"Cardinal Slant-D® Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39 4 4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58 5 5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5 6 6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37 7 7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38 8 8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization, 9 9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization, 10 10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38 11 O que é razoavelmente simples de extraíres a informação que necessitas!
  14. 1 ponto
    O recente reacender do tópico sobre o Delphi Starter, que passou a gratuito em 2016, lembrou-me que ainda não tinha aqui partilhado uma "novidade mais actual"... Recentemente a Idera, actual detentora da Embarcadero que faz o desenvolvimento, substituiu o produto Delphi Starter pelo novo Delphi Community Edition (CE). Este é basicamente a edição Delphi Professional (incluindo os módulos mobile), apenas com algumas diferenças: Licença comercial limitada a facturação anual de até 5000€ Código fonte da VCL apenas parcial Face à versão Architect, existem algumas diferenças (tal como existem na versão Professional), sendo que a mais sonante é a ausência de compilador para Linux. A Idera prometeu abrir mais o Delphi à comunidade, e esta excelente notícia parece confirmar isso, ainda que possam ainda fazer melhor. Feature Matrix: https://www.embarcadero.com/features/feature-matrix Download do produto: https://www.embarcadero.com/products/delphi/starter/free-download
  15. 1 ponto
    Mas não te sintas desanimado! No geral, a programação orientada a objectivos facilita imenso o desenvolvimento de certos tipos de programas. Sim, também há conceitos complexos, mas mesmo esses (quando lá chegares) vais ver que apesar de complexos ajudam imenso a fazer coisas que anteriormente hesitarias pela sua dificuldade! Temos aqui alguns programadores que dominam POO em Pascal (*hint* @nunopicado :P)
  16. 1 ponto
    @Yamix, há muito mais no paradigma OOP do que poder colocar métodos como privados Ainda me lembro de quando me introduzi ao paradigma de pensar mais ou menos o mesmo que tu. Mas vários anos se passaram e posso afirmar com toda a certeza que estou muito longe de saber programar verdadeiramente em OOP. É um paradigma extremamente elegante e poderoso quando usado e entendido devidamente, e aí eu não sou, de todo, a melhor pessoa para te poder dar sequer uma ideia do que é possível. Coisas como injecção de dependência e interfaces são exemplos de "maravilhas" deste paradigma. A ideia não é dizeres ao programa exactamente o que fazer (paradigma imperativo, "organizado" com o paradigma procedural), mas sim construir o programa como se fosse um Lego. Terás tempo de chegar ao paradigma OOP depois de te sentires confortável nos paradigmas procedural e imperativo. Duvido que os teus amigos do Java saibam sequer o que é OOP a sério. Quando um dia lá chegares, poderás ser tu a dar umas aulas de OOP aos teus Java friends. Um passo de cada vez sem pressa, é o melhor conselho que creio que qualquer um de nós pode dar neste momento. Cumprimentos.
  17. 1 ponto
    Mais uma vez obrigado ao RikFonseca e Hugo Costa. Voltei ao VS2015 +.net 3.5 e acrescentei estas linhas: //Tls=192 | Tls11=768 | Tls12=3072 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | (SecurityProtocolType)768 | (SecurityProtocolType)3072; ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; Para já parece estar funcionar em + computadores (excepto XP) mesmo no Windows 10 Home que antes não funcionava. (Em alternativa, ainda tenho a outra versão em VS2017 +.net 4.5 sem qualquer linha acrescentada) Cumprimentos.
  18. 1 ponto
    Boa tarde, Quando não definimos o SecurityProtocol, é utilizado o protocolo que estiver definido por defeito no Windows... O que tem sido alterado nos ultimos tempos através do Windows Update. Por isso, forcei a utilização de TLS 1.2. O ServerCertificateValidationCallback serve para ignorar a validação do certificado remoto (o tal que foi alterado pela AT, cuja entidade emissora - COMODO - não consta nas entidades de certificação raiz). Se instalares o certificado em todas as máquinas, não é necessário estar a implementar isto... Relativamente à framework, eu estou a utilizar a 3.5 (por isso tive de utilizar o valor 3072 em vez da constante por não existir), e só tive problemas com máquinas que não tinham updates em dia... o erro algo semelhante a: «could not load protocol»... Não tenho a aplicação instalada em XP, mas como o XP não tem atualizações, pode não ter o protocolo instalado ou estar desativado no registry...
  19. 1 ponto
    valor por defeito SKIP -1 v_armazem = bi.armazem goto bottom replace bi.armazem with v_armazem return bi.armazem
  20. 1 ponto
    Não sei exactamente o que pretende, mas colocar uma lupa de pesquisa nesse campo, é o correcto nao precisa de codigo relativamente ao apresentada, é normal que nao funcione porque no inicio do codigo tem If bo.ndos<>39 and bo.ndos<>40 e se o ecra nao tem registos entao bo.ndos='', alias nesta altura o BO não existe, quando abre o PHC pela primeira ves "sem views" retire o if, para permitir executar em qualquer ecran e altere a query para, TEXT to msel textmerge noshow select bo.bostamp, bo.nmdos, bo.obranome as Referencia, st.design as designacao from bo(nolock) inner join st(nolock) on bo.obranome=st.ref where bo.obranome like '<<alltrim(vRef)>>%' and bo.ndos in (39, 40) order by bo.ndos, bo.obranome ENDTEXT desta forma com o navega vai para o registo... mas a partir de qualquer outro ecra...
  21. 1 ponto
    Vou testar Retire o if m.escolheu=.t. Endif Assim so actualiza a última linha alterada ------- Dentro do scan pode controlar se o valor foi alterado e se for efectua o update
  22. 1 ponto
    colocar no final da tecla sbo.refresh()
  23. 1 ponto
    Boas O codigo correcto segue em baixo, verifique nao testei ___________ Erros 1) No select faltava o stamp (bi.bistamp) da linha a fazer o update 2) No update : para utilizar o comando update pelo SQL, deveria controlar se o ecra não esta em modo de edição ou introdução, se estiver a browlist nao deveria abrir se o ecra estiver em modo de edição ou introdução deveria ser corrigido atravès do replace _______ Possivel melhoria: Na BI existe o campo peso, que preenche o peso existente na ficha do produto, e este sim utilizado para actualizar, mas este campo nao fica visivel nas linhas ao utilizar a campo u_pesogr, este pode ficar disponivel nas linhas e editavel, e desta forma nao necessita da browlist, pode apresentar uma mensagem ao gravar a indicar que faltam pesos. _______ select bi u_sqlexec([SELECT bi.bistamp, bi.bostamp, ref,design, qtt, peso, u_pesogr, u_pesogr as u_pesogr2 FROM bi where bi.bostamp=']+alltrim(bi.bostamp)+['],[PESOS]) Declare list_tit(4),list_cam(4),list_pic(4),list_tam(4),list_tag(4),list_ronly(4) list_tit(1) = 'Ref' list_tit(2) = 'Desginação' list_tit(3) = 'Qtt' list_tit(4) = 'Peso' List_cam(1) = 'PESOS.ref' List_cam(2) = 'PESOS.design' List_cam(3) = 'PESOS.qtt' List_cam(4) = 'PESOS.u_pesogr' list_pic(1) = '' list_pic(2) = '' list_pic(3) = '' list_pic(4) = '' list_tam(1) = 100 list_tam(2) = 300 list_tam(3) = 100 list_tam(4) = 100 list_ronly(1) = .t. list_ronly(2) = .t. list_ronly(3) = .t. list_ronly(4) = .f. m.escolheu=.f. browlist('Correção de Pesos','PESOS','Browlist1',.t.,.F.,.F.,.F.,.F.,'',.t.) IF m.escolheu=.t. go top select PESOS scan x1 = [ update bi set peso=']+StrTran(astr(PESOS.u_pesogr, 10, 3), ',', '.')+[' where bi.bistamp=']+alltrim(pesos.bistamp)+[' ] u_sqlexec(x1) endscan endif
  24. 1 ponto
    local contador1, contador2 contador1=0 contador2=0 select bi scan if bi.u_aprovado = .t. contador1 = contador1 +1 endif if bi.u_aprovado = .f. contador2 = contador2 +1 endif endscan if contador1>=1 and Contador2=0 replace bo.trab5 with "Aprovado totalidade" else if contador1=0 and Contador2>=1 replace bo.trab5 with "Reprovado" else replace bo.trab5 with "Aprovado parcialmente "+astr(contador1) + " / "+ astr(contador2) endif endif
  25. 1 ponto
    Boas, Acho que percebi o conceito da ideia.... Da forma como fizeste em cada linha ele verifica se este tudo bem, ou seja de o dossier tiver 50 linhas existem 100 consultas ao SQL sem necessidade. A regra deverá ser as ultimas a ser executada ou seja coloca no campo ordem da regra 80 assim esta será das ultimas regras a correr. ----------------Forma 1---- com select á BD-------------------- If bo.ndos!=30 return .F. else Text to m.cSelbo noshow textmerge select (select count(bi.U_APROVADO) from bi where bi.ref<>'' and bi.U_APROVADO=1 and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') aprov , (select count(bi.U_APROVADO) from bi where bi.ref<>'' and bi.U_APROVADO=0 and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') Naprov , (select count(bi.U_APROVADO) from bi where bi.ref<>'' and Bi.bostamp='<< (Alltrim(bo.bostamp)) >>') total] EndText u_sqlexec(m.cSel,"AprovaBO") If (AprovaBO.aprov=AprovaBO.total) and AprovaBO.Naprov=0 Replace bo.aprovado With .T. Else Replace bo.aprovado With .F. Endif Endif ----------------Forma 2------ sem select á bd -- na teoria é mais rápido ---------------- select bo If bo.ndos=30 replace bo.aprovado=.t. Select bi Go Top Scan For !Empty(bi.ref) if bi.u_aprovado=.f. Replace bo.aprovado With .F. Endif Endscan Endif
×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.