Ir para conteúdo
Fórum Script Brasil

paulobergo

Membros
  • Total de itens

    295
  • Registro em

  • Última visita

Tudo que paulobergo postou

  1. Prezados, boa tarde! A pergunta não é estritamente sobre o MySQL, porém, como este é o BD que uso, resolvi postar a questão aqui. Em meus sistemas, parte das informações são permanentes, isto é, não podem ser modificadas, alteradas, etc... ficando, inclusive, registradas com hash para evidenciar uma alteração feita diretamente na tabela. O que em preciso, exatamente, é saber o nome desta característica - se é que existe -, isto é, que nome se dá às informações que nunca podem ser alteradas, em um banco de dados. O pedido que faço aos colegas é porque precisamos, na organização em que trabalho (pública - prefeitura) especificar este tipo de informação no termo de referência de aquisição/produção de um sistema. Assim, em uma especificação de requisitos, solicitamos a alguns desenvolvedores representantes de sistemas que considerassem a situação abaixo: Ano: 2015. A paciente Maria José da Silva fez um exame de glicose e o bioquímico responsável, que "assinou" o exame foi o Maurício Vieira Nunes Em 2016 a Maria José se casou, agregando o sobrenome do marido, passando a se chamar "Maria José da Silva Santos", e fez um exame de triglicéris, assinado pelo mesmo bioquímico, Em 2017, a Maria José realizou outro exame, de creatinina, sendo que o responsável agora foi a bioquímica Marcela Ferreira Dias (que substituiu o Maurício Vieira Nunes, que foi trabalhar em um hospital). Em 2018, a Maria José foi a uma UBS fazer uma consulta e o médico solicitou a reemissão de todos os seus exames. Resultado esperado (ano, nome, exame, responsável): 2015, Maria José da Silva, glicose, Maurício Vieira Nunes 2016, Maria José da Silva Santos, triglicéris, Maurício Vieira Nunes 2017, Maria José da Silva Santos, creatinina, Marcela Ferreira Dias Alguns sistemas apresentaram dados errados, uma vez que buscavam as informações sempre atualizadas no banco de dados, não preservando os dados que eu chamo de 'documentais'. Para essa característica (que eu chamo de 'documental') é que eu gostaria de saber se tem um nome próprio... Mais ou menos, se for especificar a tabela que conterá os dados dos exames, preciso apontar que determinados campos serão 'documentais', isto é, não poderão ser 'relacionais' - obtidos em outras tabelas, exatamente para permitir que a informação histórica seja preservada. E, caso este fórum não seja o apropriado para a pergunta, f i q u e m i n t e i r a m e n t e à vontade para apontar alternativas Muitíssimo obrigado!
  2. Olá pessoal... Bom... descobri que o único jeito de dar certo era mesmo criando dois arquivos, o Main.java e o Gerador.java. Claro, o Gerador.java, para funcionar, precisa ser todo corrigido (Separando "Class" de "Gerador", "private" de "int", etc.... ficando tudo assim: Main.java public class Main { public static void main(String args[]) { Gerador g1, g2, g3, g4; g1 = new Gerador ("g1",0); g2 = new Gerador ("g2",1); g3 = new Gerador ("g3",0); g4 = new Gerador ("g4",1); g1.start(); g2.start(); g3.start(); g4.start(); } } Gerador.java class Gerador extends Thread { private int time; public Gerador (String str, int desloc) { super(str); time = (int) ((Math.random() + desloc) * 1000.0); } public void run() { try { Thread.sleep(time); } catch (Exception e) { } System.err.print(getName()+":"+time+" "); } } Daí, é só compilar e testar: bergo-P01157220:~/Documentos/Java$ javac Gerador.java bergo-P01157220:~/Documentos/Java$ javac Main.java bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g1:783 g3:868 g4:1425 g2:1754 bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g1:70 g3:226 g4:1419 g2:1889 bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g3:399 g1:817 g2:1004 g4:1802 bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g3:331 g1:674 g2:1521 g4:1811 bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g3:392 g1:872 g4:1565 g2:1869 bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g3:159 g1:710 g4:1378 g2:1907 bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g3:406 g1:843 g4:1094 g2:1128 bergo-P01157220:~/Documentos/Java$ bergo-P01157220:~/Documentos/Java$ java Main g3:781 g1:840 g2:1333 g4:1824 bergo-P01157220:~/Documentos/Java$ Porém, ainda fica a dúvida... Porque um dos valores da alternativa d) não teriam causado uma exceção? Obrigado! Bergo
  3. Prezados, bom dia! Podem avaliar? a seguinte questão foi cobrada em uma prova de concurso: QUESTÃO 48 – Dado o seguinte código-fonte Java (arquivo Main.java), assinale a alternativa que NÃO ilustra uma saída impressa válida para sua execução: public class Main { classGerador extends Thread { public static void privateint time; main(String args[]) { publicGerador (String str, intdesloc) { Gerador g1, g2, g3, g4; super(str); g1 = new Gerador ("g1",0); time = (int) ((Math.random() + desloc) * 1000.0); g2 = new Gerador ("g2",1); } g3 = new Gerador ("g3",0); public void run() { g4 = new Gerador ("g4",1); try { Thread.sleep(time); } g1.start(); g2.start(); catch (Exception e) { } g3.start(); g4.start(); System.err.print(getName()+":"+time+" "); } } } } a) g1:909 g3:922 g2:1670 g4:1989 b) g3:92 g1:954 g4:1323 g2:1726 c) g1:842 g3:908 g2:1253 g4:1636 d) g3:334 g2:1266 g4:1595 g1:585 e) g1:157 g3:378 g4:1177 g2:1634 O programa não compila nem executa, criando-se simplesmente o arquivo Main.java, tanto desta forma: public class Main { classGerador extends Thread { public static void privateint time; main(String args[]) { publicGerador (String str, intdesloc) { Gerador g1, g2, g3, g4; super(str); g1 = new Gerador ("g1",0); time = (int) ((Math.random() + desloc) * 1000.0); g2 = new Gerador ("g2",1); } g3 = new Gerador ("g3",0); public void run() { g4 = new Gerador ("g4",1); try { Thread.sleep(time); } g1.start(); g2.start(); catch (Exception e) { } g3.start(); g4.start(); System.err.print(getName()+":"+time+" "); } } } } como desta forma: public class Main { public static void main(String args[]) { Gerador g1, g2, g3, g4; g1 = new Gerador ("g1",0); g2 = new Gerador ("g2",1); g3 = new Gerador ("g3",0); g4 = new Gerador ("g4",1); g1.start(); g2.start(); g3.start(); g4.start(); } } classGerador extends Thread { privateint time; publicGerador (String str, intdesloc) { super(str); time = (int) ((Math.random() + desloc) * 1000.0); } public void run() { try { Thread.sleep(time); } catch (Exception e) { } System.err.print(getName()+":"+time+" "); } } (o arquivo Main.java criado com vi em um Linux - Xubuntu 14.04). - Consideram que a questão mereceria ser anulada por 'má-formação'? - A letra (d) foi a resposta correta. Por que? Obrigado por qualquer ajuda! Abraços PVictor
  4. Olá amigos... saudações! Como identificar o alias em uma query usando ODBC Microsoft DBase Driver? Explicando melhor... Isso funciona: select distinct cfop from notas Isso não funciona: select distinct cfop from odmatriz!notas select distinct cfop from 'odmatriz!notas' select distinct cfop from "odmatriz!notas" select distinct cfop from 'odmatriz:notas' E, explicando mais ainda... O que preciso: abrir uma query, pelo DBExplorer (Delphi, BDE), usando uma conexão ODBC (ODBC Microsoft DBF Driver), identificando o alias, para poder juntar (union) dois resultados (queries) de bancos diferentes... Então, precisaria identificar o alias junto com a tabela e, segundo a única documentação que consegui obter até agora, o correto seria separar o alias do nome da tabela com uma exclamação... Porém, retorna falha, mesmo com um só alias... Então, seja: ODmatriz o alias para as tabelas em d:\empresas\acme\matriz, usando Microsoft ODBC para DBase ODfilial o alias para as tabelas em d:\empresas\acme\filial DBFmatriz o alias Standard DBase da própria BDE, para a pasta d:\empresas\acme\matriz DBFfilial o alias Standard DBase da própria BDE, para a pasta d:\empresas\acme\filial e... usando o DBExplorer para fazer as consultas (nos exemplos, uma query para mostrar as entradas na matriz e as saidas na filial)... Isto funciona, executando na janela "Enter SQL" tanto do dbmatriz como do dbfilial: select sum(qtde) as entradas, 0 as saidas, codigo from ":dbmatriz:notas.dbf" where substring(cfop from 1 for 1) in ("1", "2", "3") group by codigo union select 0 as entradas, sum(qtde) as saidas, codigo from ":dbfilial:notas.dbf" where substring(cfop from 1 for 1) in ("5", "6", "7") group by codigo e Isto não funciona (executando em uma janela na ODmatriz ou ODFilial... select sum(qtde) as entradas, 0 as saidas, codigo from 'odmatriz!notas' where mid(cfop, 1, 1) in ('1', '2', '3') group by codigo union select 0 as entradas, sum(qtde) as saidas, codigo from 'odfilial!notas' where mid(cfop, 1, 1) in ('5', '6', '7') group by codigo Grato por qualquer colaboração! Abraços!
  5. Olá pessoal! olá Jhonas! Solução! a) Atualizar o MySQL: não deu resultado... ou seja, o pc (e apenas um) continuou a mostar "(Memo)" no lugar do resultado correto da função... B) BDE: remover completamente e reinstalar a BDE também não resolveu... c) Atualizar o conector ODBC... isso sim... removi a versão 3.51 - que é a que uso em todas as máquinas, inclusive as com Ubuntu+Wine - pela 5.1.8 e pronto! problema resolvido!!! Pode marcar aí como solucionado... Realmente, não consegui entender o que fez, de uma hora para outra, especificamente em um computador que vem funcionando desde, creio, 2004, com as mesmas características, parar de exibir uma informação da mesma forma como fazia antes... Ainda vou postar isso na dev.mysql.com... por curiosidade... De qualquer forma, grato pelas idéias! A todos um abraço!
  6. Olá... Bom... esse é mesmo um problema no Firebird... nos outros bancos (até no VisualDbase7 com BDE) o campo AUTOINC não "esquece" a sequência... Eu uso o MySQL em praticamente todas as aplicações... Meus colegas que trabalham com as aplicações no Firebird usam uma trigger para sempre gravar o último valor do campo autoinc de uma tabela... Eu faria o seguinte... - criaria uma tabela para conter o nome de todas as tabelas e respectivos campos "autoinc" exemplo: tabela campo ultimo pedido idpedido 0 participante idparticipante 32 - antes de incluir um registro novo na tabela (por exemplo) pedido, pego o ultimo usado (0), somo 1 e faco o "insert": insert into pedido (idpedido, qtde, codigo...) values (1, 10.5, '7893934041911'....); Logo, a trigger com o "before insert" deverá: - identificar a tabela que receberá um novo registro, identificando se tem campo autoincrement... se não tiver, prossegue no insert normalmente... e se tiver o campo autoincrement, obtem o ultimo, incrementa e então parte para o insert... Ok? Espero ter ajudado...
  7. paulobergo

    Comandos do mysql

    (015 , 'suco' , 11, 'bebidas' , 3,19); Veja... para os centavos do valor unitario, use o . (ponto) e não , (virgula)... Assim... (015 , 'suco' , 11, 'bebidas' , 3.19); 015=codigo do produto suco=descricao 11=unidade (o corrego seria 'UN', 'M', 'L', 'ML', 'DZ', 'PAR', etc... bebidas=categoria 3.19=valor unitario Provavelmente voce recebeu uma mensagem indicando que havia mais dados do que campos na query... Ok?
  8. Bom... para verificar a função, executei esta query: select max(length(mydatapg(vencimento, data_baixa, pago))) as maximo, min(length(mydatapg(vencimento, data_baixa, pago))) as minimo from conta_ar e o resultado foi maximo=10, minimo=10. Dos 23 pcs na rede, 22 retornam o resultado da função corretamente, sempre via BDE+MysqlODBCConector, tanto nos XPs como nos Linux via Wine... E somente um "intepreta" erradamente o resultado... Antes de fazer a atualização no servidor, experimentarei trocar a versão do conector ODBC... posto aqui se der resultado! Grato e abraços!
  9. Jhonas! grato pela resposta... Com certeza, vou tentar a 5.1.41... Mas uma coisa não entendi... quanto a ultrapassar o limite de caracteres... como a função está definida para retornar exatamente 10 caracteres, e as respostas também estão limitadas a 10 caracteres, quando ultrapassaria o limite de caracteres? Grato!
  10. Olá pessoal... Não intrepretem, por favor, como sendo um tópico exclusivamente para o Delphi (até poderia ser...) Observei um problema em obter um resultado a partir de uma query usando BDE e ODBC MySQL. No servidor, no banco MySQL 5.0.27, existe uma função que 'traduz' a situação de uma duplicata... A função recebe a data de vencimento da duplicata, a data da liquidação e a situação (liquidada ou não) e retorna: - Se a duplicata não foi liquidada ainda, irá retornar "vencida" se estiver atrasada, "vence hoje" se estiver vencendo exatamente na data de hoje e "a vencer" se vencerá de amanhã em diante... - Se a duplicata foi liquidada, irá retornar, simplesmente, a data em que foi liquidada. Então, é uma função que manipula datas e retorna sempre uma string (char)... A função é esta: DROP FUNCTION IF EXISTS `MyDataPG`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` FUNCTION `MyDataPG`(in_vencimento date, in_data_pg date, in_pago tinyint) RETURNS varchar(10) CHARSET latin1 NO SQL begin declare resultado varchar(10) default ''; if in_pago=0 then if in_vencimento<now() then set resultado = 'vencida '; else if in_vencimento=now() then set resultado = 'vence hoje'; else set resultado = 'a vencer '; end if; end if; else set resultado = cast(in_data_pg as char(10)); set resultado = concat(substring(resultado, 9, 2), '/', substring(resultado, 6, 2), '/', substring(resultado, 1, 4)); end if; return resultado; end $$ DELIMITER; Bom, tendo os campos vencimento e data_baixa como sendo do tipo Date e o campo pago sendo do tipo TinyInt, a query a seguir: select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where mydatapg(vencimento, data_baixa, pago)="vencida" union select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where mydatapg(vencimento, data_baixa, pago)="vence hoje" union select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where mydatapg(vencimento, data_baixa, pago)="a vencer" union select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where pago=1 and data_baixa between "2011/04/01" and "2011/04/05" Irá retornar: +------------+------------+------+------------+ | vencimento | data_baixa | pago | situacao | +------------+------------+------+------------+ | 2011-01-02 | 2011-01-02 | 0 | vencida | | 2011-01-01 | 2011-01-01 | 0 | vencida | | 2011-01-03 | 2011-01-03 | 0 | vencida | | 2011-01-04 | 2011-01-04 | 0 | vencida | | 2011-01-07 | 2011-01-07 | 0 | vencida | | 2011-01-10 | 2011-01-10 | 0 | vencida | | 2011-01-12 | 2011-01-12 | 0 | vencida | | 2011-01-13 | 2011-01-13 | 0 | vencida | | 2011-01-14 | 2011-01-14 | 0 | vencida | | 2011-04-14 | 2011-04-25 | 0 | vence hoje | | 2011-04-28 | 2011-04-28 | 0 | a vencer | | 2011-04-29 | 2011-04-29 | 0 | a vencer | | 2011-04-30 | 2011-04-30 | 0 | a vencer | | 2011-04-26 | 2011-04-26 | 0 | a vencer | | 2011-04-27 | 2011-04-27 | 0 | a vencer | | 2011-04-04 | 2011-04-05 | 1 | 05/04/2011 | | 2011-04-01 | 2011-04-02 | 1 | 02/04/2011 | | 2011-03-19 | 2011-04-05 | 1 | 05/04/2011 | | 2011-04-03 | 2011-04-05 | 1 | 05/04/2011 | | 2011-04-02 | 2011-04-05 | 1 | 05/04/2011 | | 2011-02-23 | 2011-04-02 | 1 | 02/04/2011 | | 2011-03-23 | 2011-04-01 | 1 | 01/04/2011 | | 2011-03-31 | 2011-04-01 | 1 | 01/04/2011 | | 2011-04-14 | 2011-04-01 | 1 | 01/04/2011 | | 2011-04-21 | 2011-04-05 | 1 | 05/04/2011 | | 2011-03-31 | 2011-04-05 | 1 | 05/04/2011 | | 2011-03-31 | 2011-04-02 | 1 | 02/04/2011 | +------------+------------+------+------------+ Esta query vem funcionando desde que existe a versão 5.0 do MySQL... (nem sei precisar desde quando)... E sempre funcionou tanto via BDE/ODBC, localmente ou remotamente, e também pelo ZeosBDO, PHP, PHPMyAdmin, MySQLNavigator... sem problemas... Mas, desde terça feira, uma máquina, num universo de não sei tantas outras, passou a mostrar, no lugar da coluna da situação, a palavra (MEMO) em troca do conteúdo correto... Assim... Clicando-se no campo memo exibido, aparece o conteúdo correto... O problema acontece somente nas conexões feitas através da dupla BDE/ODBC Conector... e desinstalar/reinstalar ambos não resolveu... Alguém já passou por isso ou viu algo similar? Grato por qualquer colaboração...
  11. Olá pessoal... Não intrepretem, por favor, como sendo um tópico para o MySQL (até poderia ser...) Observei um problema em obter um resultado a partir de uma query usando BDE e ODBC MySQL. No servidor, no banco MySQL 5.0.27, existe uma função que 'traduz' a situação de uma duplicata... A função recebe a data de vencimento da duplicata, a data da liquidação e a situação (liquidada ou não) e retorna: - Se a duplicata não foi liquidada ainda, irá retornar "vencida" se estiver atrasada, "vence hoje" se estiver vencendo exatamente na data de hoje e "a vencer" se vencerá de amanhã em diante... - Se a duplicata foi liquidada, irá retornar, simplesmente, a data em que foi liquidada. Então, é uma função que manipula datas e retorna sempre uma string (char)... A função é esta: DROP FUNCTION IF EXISTS `MyDataPG`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` FUNCTION `MyDataPG`(in_vencimento date, in_data_pg date, in_pago tinyint) RETURNS varchar(10) CHARSET latin1 NO SQL begin declare resultado varchar(10) default ''; if in_pago=0 then if in_vencimento<now() then set resultado = 'vencida '; else if in_vencimento=now() then set resultado = 'vence hoje'; else set resultado = 'a vencer '; end if; end if; else set resultado = cast(in_data_pg as char(10)); set resultado = concat(substring(resultado, 9, 2), '/', substring(resultado, 6, 2), '/', substring(resultado, 1, 4)); end if; return resultado; end $$ DELIMITER; Bom, tendo os campos vencimento e data_baixa como sendo do tipo Date e o campo pago sendo do tipo TinyInt, a query a seguir: select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where mydatapg(vencimento, data_baixa, pago)="vencida" union select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where mydatapg(vencimento, data_baixa, pago)="vence hoje" union select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where mydatapg(vencimento, data_baixa, pago)="a vencer" union select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao from conta_ar where pago=1 and data_baixa between "2011/04/01" and "2011/04/05" Irá retornar: +------------+------------+------+------------+ | vencimento | data_baixa | pago | situacao | +------------+------------+------+------------+ | 2011-01-02 | 2011-01-02 | 0 | vencida | | 2011-01-01 | 2011-01-01 | 0 | vencida | | 2011-01-03 | 2011-01-03 | 0 | vencida | | 2011-01-04 | 2011-01-04 | 0 | vencida | | 2011-01-07 | 2011-01-07 | 0 | vencida | | 2011-01-10 | 2011-01-10 | 0 | vencida | | 2011-01-12 | 2011-01-12 | 0 | vencida | | 2011-01-13 | 2011-01-13 | 0 | vencida | | 2011-01-14 | 2011-01-14 | 0 | vencida | | 2011-04-14 | 2011-04-25 | 0 | vence hoje | | 2011-04-28 | 2011-04-28 | 0 | a vencer | | 2011-04-29 | 2011-04-29 | 0 | a vencer | | 2011-04-30 | 2011-04-30 | 0 | a vencer | | 2011-04-26 | 2011-04-26 | 0 | a vencer | | 2011-04-27 | 2011-04-27 | 0 | a vencer | | 2011-04-04 | 2011-04-05 | 1 | 05/04/2011 | | 2011-04-01 | 2011-04-02 | 1 | 02/04/2011 | | 2011-03-19 | 2011-04-05 | 1 | 05/04/2011 | | 2011-04-03 | 2011-04-05 | 1 | 05/04/2011 | | 2011-04-02 | 2011-04-05 | 1 | 05/04/2011 | | 2011-02-23 | 2011-04-02 | 1 | 02/04/2011 | | 2011-03-23 | 2011-04-01 | 1 | 01/04/2011 | | 2011-03-31 | 2011-04-01 | 1 | 01/04/2011 | | 2011-04-14 | 2011-04-01 | 1 | 01/04/2011 | | 2011-04-21 | 2011-04-05 | 1 | 05/04/2011 | | 2011-03-31 | 2011-04-05 | 1 | 05/04/2011 | | 2011-03-31 | 2011-04-02 | 1 | 02/04/2011 | +------------+------------+------+------------+ Esta query vem funcionando desde que existe a versão 5.0 do MySQL... (nem sei precisar desde quando)... E sempre funcionou tanto via BDE/ODBC, localmente ou remotamente, e também pelo ZeosBDO, PHP, PHPMyAdmin, MySQLNavigator... sem problemas... Mas, desde terça feira, uma máquina, num universo de não sei tantas outras, passou a mostrar, no lugar da coluna da situação, a palavra (MEMO) em troca do conteúdo correto... Assim... Clicando-se no campo memo exibido, aparece o conteúdo correto... O problema acontece somente nas conexões feitas através da dupla BDE/ODBC Conector... e desinstalar/reinstalar ambos não resolveu... Alguém já passou por isso ou viu algo similar? Grato por qualquer colaboração...
  12. Olá pessoal... Grato a todos pelas dicas... O problema foi solucionado com a troca do cabo que ligava os switches... Era um cabo branco... não me lembro a marca... mas não tinha o carimbo da Anatel... Como não tinhamos testadores decentes, não conseguíamos "provar" que o problema era no cabo... porém, quando exigimos que o instalador certificasse o cabo, uma empresa especializada fez a análise da rede com testadores da Fluke Networks, o que comprovou o problema... e levou à troca do cabeamento... Daí, o switch passou a trabalhar 100%! Mais uma vez, grato a todos e um grande abraço! Problema resolvido!
  13. Jhonas... grato pela resposta... Bom... quanto ao switch, sabemos que não é problema com ele... afinal, adquirimos 52 unidades... assim, testamos pelo menos cinco, em várias portas... O switch principal (que leva ao DataCenter) conecta todos os demais switches dos outros andares e toda a infraestrutura externa, rádios, fibra, etc...... Assim, na nossa infraestrutura com esses switches 3Com temos perto de 1800 computadores, sem problema... O que nos faz ter a quase absoluta certeza de que o problema é o com o cabo é que: a) trata-se de um cabo DNI, não homologado pela Anatel, com a seguinte marcação: "Cabo DNI - CABO 4 pares trançado CAT 5E xxxm", cor branca; B) pedimos que a empresa que fez a instalação nos apresentasse a certificação da rede (para isso, ela tem que contratar uma outra empresa que faça as medições corretas com equipamentos como os DTX CableAnalyzer da Fluke) e ela fica só "adiando"; c) efetuamos as conexões entre switches novíssimos 3Com 2924 e também com outros 3Com 4400, 4200 e 3300... em todos o "defeito" aparece... com a conexão indo e voltando o tempo todo... e aí, quando eles ligam um hub mixuruca, a conexão fica estável... Então, para montar meu parecer exigindo a substituição do cabo, só falta eu ter condições de dizer em que situações um hub simples pode fazer uma coisa que um switch gerenciável, certificado e superavançado não pode... Ok? Grato! Abraços
  14. Olá pessoal... Estou com o seguinte problema... Em nossa rede, temos cerca de 960 computadores... todos distribuidos em oito andares, conectados em Switches gerenciáveis 3Com 2924... Daí, uma empresa instalou cinco catracas de acesso no térreo, para controle de presença (um equipamento que nem sequer cumpre as normas do MT - dentre eles o de que para marcar o ponto dos funcionários não poderia, em hipótese alguma, depender de equipamentos externos - no caso, de rede), puxou um cabo do switch ao qual estão conectadas as catracas até o switch que dá acesso ao nosso DataCenter. Um cabo com aproximadamente 25 metros e que está com defeito. A situação é : - das catracas (cinco) até o switch que as conecta, no térreo, tudo ok. - do switch do andar ao DataCenter, tudo ok. - do switch do térreo ao switch do andar, devido ao problema do cabo, há falha intermitente (não é problema nos switches, pois, além de serem novos, foram testados mais um). A tal empresa recusa-se a trocar o cabo com defeito pois alega que, com um hub, no lugar do switch, não há problema... A questão então é esta... porque, em um segmento da rede, com problema de cabo, um (m#@!1##@) de hub funciona e um switch gerenciável 100% certificado não? Preciso, de alguma forma, exigir que a firma substitua o cabo e elimine o hub... mas, com que argumentos... Grato por qualquer ajuda!!!
  15. Olá pessoal! Saudações! Gero uma aplicação que, antes de dar uma boa arrumada e eliminar muitas inutilidades (exemplo: por conta da NF-e, agora tenho um cadastro único de "participantes" em troca da versão anterior que tinha uma cadastro de clientes, um de fornecedores, um de vendedores, um de transportadores, um de produtores rurais, etc... etc... etc...). o tamanho do executável era de exatos 3.298.304 bytes. Com a arrumação, ficou, até o presente momento, em 1.561.088 !!! Porém, gostaria que ficasse, pelo menos, perto dos 2.900.000 bytes... Alguém aí já usou de alguma forma no próprio Delphi6 (ou outra forma) para definir isso? Grato por qualquer ajuda! Abraços!
  16. Olá. Interessados em trabalhar em Juiz de Fora (MG), na administração de redes. 1 (uma) vaga. Salário: ~~R$ 1.580,00, líquido ~~R$ 1.400,00 Início imediato. Horário: 08:00-12:00, 14:00-18:00, de segunda a sexta-feira. Trabalhar em órgão público, contratação CLT. Fundamental ter conhecimentos de redes e Linux... firewall (iptables), proxy (squid), etc... (Debian, Slackware, Ubuntu) Ok?
  17. Olá pessoal! É possível remover uma entrada específica no store do Squid3? De um momento para o outro, ao abrir o site da Tribuna de Minas (www.tribunademinas.com.br), os navegadores passaram a abrir a página do provedor que hospeda o site (www.indicca.com.br). Estado fora da prefeitura, os computadores abrem o site correto. O problema está no nosso Proxy (Squid3 sob Debian)... Infelizmente não posso simplesmente apagar o cache... daí, queria saber se existe algo como um squid3 -remove www.tribunademinas.com.br ou squid3 -refresh www.tribunademinas.com.br para forçá-lo a resolver o endereço novamente... Em tempo... Do prompt, para ver se o IP está sendo resolvido direito, com um ping www.tribunademinas.com.br eu recebo 200.251.53.161 tanto nos pcs da rede que estão indo para o site errado como os que estão em outras redes e indo para o site correto... Alguma idéia? Grato! abraços!
  18. Olá pessoal... Tenho um adaptador usb-serial que funciona no windows-xp. Preciso ativá-lo no linux.keep-os (debian) e o adaptador aparece com"Prolific Technology Inc. USB-Serial Controller [0300]" em um Virtual Box... (instalei um XP na Virtual Box para ver se conseguia utilizá-lo, mas, na própria Virtual-Box, ele aparece como Indisponível)... Preciso da serial no Linux para fazer testes de desenvolvimento com impressora fiscal, pela IDE Lazarus (tipo Delphi)... Se alguém puder dar alguma dica... Grato Abraços!
  19. Olá pessoal... Depois de muita pesquisa e muitos posts e muitas sugestões, conseguir resolver o problema e ficou quase 100%... Agora, consigo não só agrupar as células da forma necessária como também consigo evitar que um título de uma conta fique "viúva" de seus subitens, em outras páginas, calculando o espaço que seria necessário para imprimir por completo a sequência de cada conta e sua subconta, como no exemplo... Porém, surgiu outra necessidade... a de destacar, em negrito, itálico ou sublinhado, algum texto dentro da célula (usando as tags html (B) (/b), (u) (/u), (i) (/i) )... O código completo, abaixo, faz a impressão do texto corretamente, usando multicell Já tentei substituir o uso da multicell pelo write, como pode ser visto com a função writehtml() porém, falta conseguir colocar o conteúdo dentro de uma área específica, como ocorre com a multicel... Então, caso alguém já tenha passado por isso e puder dar uma ajuda, agradeço muitissimo... No texto acima, preciso que o texto "projeto essencial para comunicação de dados" fique em negrito e sublinhado... O código atual é este: <?php require("include/def_links.php"); session_start(); if (! isset($_SESSION['idusuario'])) { header("Location: index.php?erro=1"); exit; } include("include/conecta.php"); $escolha = $_POST['escolha']; $opcao = $_POST['opcao']; $sel_supervisao = $_POST['sel_supervisao']; $sel_detalhe = $_POST['sel_detalhe']; $sel_depto = $_POST['sel_depto']; if (! isset($_POST['margem_sup'])) { $margem_sup = 12; } else { $margem_sup = $_POST['margem_sup']; } if (! isset($_POST['ativas'])) { $ativas = 'T'; } else { $ativas = $_POST['ativas']; } if ($escolha=='1') { $defescolha = 'and essencial=1 '; $escolhatit = ' - Essenciais'; } else if ($escolha=='2') { $defescolha = 'and essencial=0 '; $escolhatit = ' - Projetos'; } else { $defescolha = ' '; $escolhatit = ''; } If ($sel_supervisao=='todas') { $defsup = ' '; } else { $defsup = ' and (acao.idsupervisao='.$sel_supervisao.') '; } If ($sel_depto=='T') { $sele_depto = ' '; } else { $sele_depto = ' and (substring(acao.conta, 1, 1)="'.$sel_depto.'") '; } // echo $sele_depto; // exit; if ($ativas=='T') { $sele_ativas = ' '; } else { $sele_ativas = ' and (acao.ativa='.$ativas.') '; } $boldtitulo = ''; $boldconta = ''; $boldtotais = 'B'; $boldcelula = ''; $b_ha_sub_1 = 0; $b_ha_sub_2 = 0; $b_ha_sub_3 = 0; $res1_conta = ''; $res1_codigo = ''; $res1_cdescr = ''; $res1_subcab = ''; $res1_impres = 0; $res2_conta = ''; $res2_codigo = ''; $res2_cdescr = ''; $res2_subcab = ''; $res2_impres = 0; $res3_conta = ''; $res3_codigo = ''; $res3_cdescr = ''; $res3_subcab = ''; $res3_impres = 0; include("include/conecta.php"); define("FPDF_FONTPATH", 'fpdf/font/'); require_once('fpdf/fpdf.php'); class PDF extends FPDF { // ***************************** Extensão da Classe FPDF. Início. function Header() { // ***** Logo da PJF. global $escolhatit; global $boldtitulo; global $margem_sup; $yposimg = $margem_sup-4; $this->Image('imagens/logo_pjf.jpg', 12, $yposimg, 5); // x, y, tamanho $titulo = "PJF/SPDE/SSTI. Resumo de Ações pelo Plano de Contas".$escolhatit; $datarel = date('d/m/Y').' '.strftime('%H:%M:%S'); $this->SetFont('Arial', $boldtitulo, 12); // Posicao Vertical, no caso -1, que é o limite da margem. $this->SetY($margem_sup); // escreve no pdf largura, altura, conteudo, borda, quebra de linha, alinhamento $this->SetX(18); $this->Cell(226, 0, $titulo, 0, 0, 'L'); $this->SetX(244); $this->SetFont('Arial', $boldtitulo, 11); $this->Cell(40, 0, $datarel, 0, 0, 'R'); $this->Ln(8); $this->SetFont('Arial', $boldtitulo, 10); $this->SetX(10); $this->Cell(25, 5, 'Conta', 1, 0, 'C'); $this->SetX(35); $this->Cell(19, 5, 'Código', 1, 0, 'C'); $this->SetX(54); $this->Cell(195, 5, 'Descrição da Ação', 1, 0, 'C'); $this->SetX(249); $this->Cell(35, 5, '2011', 1, 0, 'C'); $this->Ln(8); } function Footer() { $n_pagina = $this->PageNo(); if (($n_pagina%2)==0) { $lado_spde = 'R'; $lado_pag = 'L'; } else { $lado_spde = 'L'; $lado_pag = 'R'; } $this->SetFont('Arial', 'BI', 8); $this->SetY(-5); $this->Cell(0, 0, 'SPDE/SSTI', 0, 0, $lado_spde); $this->SetY(-5); $this->Cell(0, 0, 'Página '.$this->PageNo(), 0, 0, $lado_pag); $this->SetFont('Arial', '', 8); $this->SetY( -1); } var $widths; var $aligns; var $ffamilys; var $fformats; var $fsizes; function SetFFontFamily($ff) { // Define o array para o tipo de fonte das colunas. $this->ffamilys=$ff; } function SetFFontMode($fm) { // Define o formato da fonte das colunas. $this->fformats=$fm; } function SetFFontFSize($fz) { // Define o tamanho da fonte das colunas. $this->fsizes=$fz; } function SetWidths($w) { // Define o array para dimensão das colunas. $this->widths=$w; } function SetAligns($a) { // Define o array para alinhamento das colunas. $this->aligns=$a; } // ********************** Novas Funções Início. // * A função WriteHTML consegue modificar a fonte usando as tags <u></u>, <b></b>, <i></i> e <href>... // function WriteHTML($html, $qw, $qa) { //HTML parser $html=str_replace("\n",' ',$html); $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); foreach($a as $i=>$e) { if($i%2==0) { //Text if($this->HREF) $this->PutLink($this->HREF,$e); else $this->MultiCell($qw, 5, $e, 0, $qa); // $this->Write(5,$e); } else { //Tag if($e[0]=='/') $this->CloseTag(strtoupper(substr($e,1))); else { //Extract attributes $a2=explode(' ',$e); $tag=strtoupper(array_shift($a2)); $attr=array(); foreach($a2 as $v) { if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3)) $attr[strtoupper($a3[1])]=$a3[2]; } $this->OpenTag($tag,$attr); } } } } function OpenTag($tag,$attr) { //Opening tag if($tag=='B' || $tag=='I' || $tag=='U') $this->SetStyle($tag,true); if($tag=='A') $this->HREF=$attr['HREF']; if($tag=='BR') $this->Ln(5); } function CloseTag($tag) { //Closing tag if($tag=='B' || $tag=='I' || $tag=='U') $this->SetStyle($tag,false); if($tag=='A') $this->HREF=''; } function SetStyle($tag,$enable) { //Modify style and select corresponding font $this->$tag+=($enable ? 1 : -1); $style=''; foreach(array('B','I','U') as $s) { if($this->$s>0) $style.=$s; } $this->SetFont('',$style); } function PutLink($URL,$txt) { //Put a hyperlink $this->SetTextColor(0,0,255); $this->SetStyle('U',true); $this->Write(5,$txt,$URL); $this->SetStyle('U',false); $this->SetTextColor(0); } // ********************** Novas Funções Fim. function Row($data) { // Calcula a altura da linha. $nb=0; for ($i=0;$i< count($data);$i++) $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i])); $h = 5*$nb; // Comanda uma quebra de página primeiro, se necessário. $this->CheckPageBreak($h); // Desenha as células da linha. for ($i=0;$i< count($data);$i++) { if (isset($this->ffamilys[$i])) { // echo $this->ffamilys[$i].', '.$this->fformats[$i].', '.$this->fsizes[$i].'<br>'; // exit; $this->SetFont($this->ffamilys[$i], $this->fformats[$i], $this->fsizes[$i]); } $w = $this->widths[$i]; $a = isset($this->aligns[$i]) ? $this->aligns[$i] : 'L'; // Salva a posição corrente. $x = $this->GetX(); $y = $this->GetY(); // Desenha a borda. $this->Rect($x,$y,$w,$h); // $this->SetLeftMargin($x); // $this->SetRigthMargin($x+$w); // Preenche o texto. $this->MultiCell($w, 5, $data[$i], 0, $a); // $this->WriteHTML($data[$i], $w, $a); // Define de volta a posição à direita da célula. $this->SetXY($x+$w,$y); } // Avança para a próxima linha. $this->Ln($h); } function CheckPageBreak($h) { // Se a altura h for causar um "overflow" na página, inclua um avança de página imediatamente. if ($this->GetY()+$h>$this->PageBreakTrigger) $this->AddPage($this->CurOrientation); } function NbLines($w,$txt) { // Calcula o número de linhas que a MultiCell de tamanho w irá precisar. $cw = &$this->CurrentFont['cw']; if ($w==0) $w=$this->w-$this->rMargin-$this->x; $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; $s = str_replace("\r",'',$txt); $nb = strlen($s); if ($nb>0 and $s[$nb-1]=="\n") $nb--; $sep = -1; $i=0; $j=0; $l=0; $nl=1; while($i<$nb) { $c=$s[$i]; if($c=="\n") { $i++; $sep=-1; $j=$i; $l=0; $nl++; continue; } if($c==' ') $sep=$i; $l+=$cw[$c]; if($l>$wmax) { if($sep==-1) { if($i==$j) $i++; } else $i=$sep+1; $sep=-1; $j=$i; $l=0; $nl++; } else $i++; } return $nl; } // ***************************** Extensão da Classe FPDF. Fim. } $pdf = new PDF("L", "mm", "A4"); $pdf->Open(); $pdf->SetY("-1"); // Assunto. $pdf->SetSubject("redes"); $sql = 'select * from '. ' ( '. ' select distinct 1 as nivel, "" as ccodigo, conta.conta, conta.descricao as cdescricao, '. ' " " as produto, '. ' 0 as meta_1, 0 as meta_2, 0 as meta_3, 0 as meta_4, 0 as essencial '. ' from acao, conta '. ' where substring(acao.conta, 1, 1)=conta.conta '. $defescolha. $defsup. $sele_depto. $sele_ativas. ' '. ' union '. ' '. ' select distinct 2 as nivel, "" as ccodigo, conta.conta, conta.descricao as cdescricao, '. ' " " as produto, '. ' 0 as meta_1, 0 as meta_2, 0 as meta_3, 0 as meta_4, 0 as essencial '. ' from acao, conta '. ' where substring(acao.conta, 1, 4)=conta.conta '. $defescolha. $defsup. $sele_depto. $sele_ativas. ' '. ' union '. ' '. ' select distinct 3 as nivel, conta.codigo as ccodigo, conta.conta, conta.descricao as cdescricao, '. ' " " as produto, '. ' 0 as meta_1, 0 as meta_2, 0 as meta_3, 0 as meta_4, 0 as essencial '. ' from acao, conta '. ' where acao.conta=conta.conta '. $defescolha. $defsup. $sele_depto. $sele_ativas. ' '. ' union '. ' '. ' select distinct 4 as nivel, "" as ccodigo, concat(acao.conta, ".", acao.item) as conta, '. ' acao.descricao as cdescricao, '. ' produto, '. ' acao.meta2a as meta_1, acao.meta1a as meta_2, '. ' acao.meta3a as meta_3, acao.meta4a as meta_4, essencial '. ' from acao, conta '. ' where acao.conta=conta.conta '. $defescolha. $defsup. $sele_depto. $sele_ativas. ' '. ' ) as consulta1 '. 'order by conta, nivel; '; // echo $sql; // exit; $acao = 0; $totalm1 = 0; $tot_1_m1 = 0; $subcab1 = ''; $tot_2_m1 = 0; $subcab2 = ''; $tot_3_m1 = 0; $subcab3 = ''; $key_nivel1 = 0; $key_nivel2 = 0; $key_nivel3 = 0; $key_nivel4 = 0; $nivel_atual = 0; $pdf->Ln(5); $query = mysql_query($sql, $base); $linhas = mysql_num_rows($query); if ($linhas < 1) { $pdf->Cell( 16, 5, "SemDados", 1, 0, 'C'); } else { $n_registro = 0; while ($reg = mysql_fetch_array($query, MYSQL_ASSOC)) { if ($reg['essencial']==1) { $idessencial = 'Essencial'; } else { $idessencial = 'Projeto'; } $acao = $acao+1; $cdescricao = $reg['cdescricao']; $produto = $reg['produto']; if (strlen($produto)>69) { $jproduto = substr($produto, 0, 66).'...'; } else { $jproduto = $produto; } if ($sel_detalhe=='ac+pr') { $produto = $reg['cdescricao'].chr(10).'Produto: '.$reg['produto']; } if ($reg['nivel']==1) { $space = ''; } else if ($reg['nivel']==2) { $space = ' '; } else if ($reg['nivel']==3) { $space = ' '; } else if ($reg['nivel']==4) { $space = ' '; } $nivel = $reg['nivel']; if ($nivel<$nivel_atual) { if ((($nivel_atual-$nivel)>0) && ($b_ha_sub_3==1)) { $b_ha_sub_3 = 0; $total3m1 = number_format($tot_3_m1, 2, ',', '.'); $pdf->SetFont('Arial', 'B', 11); $pdf->SetX(10); $pdf->Cell(239, 5, '* Subtotal '.$subcab3.' *', 1, 0, 'R'); $pdf->SetX(249); $pdf->Cell(35, 5, $total3m1, 1, 0, 'R'); $pdf->Ln(5); $tot_3_m1 = 0; } if ((($nivel_atual-$nivel)>1) && ($b_ha_sub_2==1)) { $b_ha_sub_2 = 0; $total2m1 = number_format($tot_2_m1, 2, ',', '.'); $pdf->Ln(1); $pdf->SetFont('Arial', 'B', 12); $pdf->SetX(10); $pdf->Cell(239, 5,'* Subtotal '.$subcab2.' *', 1, 0, 'R'); $pdf->SetX(249); $pdf->Cell(35, 5, $total2m1, 1, 0, 'R'); $pdf->Ln(7); $tot_2_m1 = 0; } if ((($nivel_atual-$nivel)>2) && ($b_ha_sub_1==1)) { $b_ha_sub_1 = 0; $total1m1 = number_format($tot_1_m1, 2, ',', '.'); $pdf->Ln(1); $pdf->SetFont('Arial', 'B', 13); $pdf->SetX(10); $pdf->Cell(239, 5,'* Subtotal '.$subcab1.' *', 1, 0, 'R'); $pdf->SetX(249); $pdf->Cell(35, 5, $total1m1, 1, 0, 'R'); $pdf->Ln(7); $tot_1_m1 = 0; } } $nivel_atual = $nivel; $totalm1 = $totalm1+$reg['meta_1']; $tot_3_m1 = $tot_3_m1+$reg['meta_1']; $tot_2_m1 = $tot_2_m1+$reg['meta_1']; $tot_1_m1 = $tot_1_m1+$reg['meta_1']; if ($nivel==4) { $b_ha_sub_3 = 1; $b_ha_sub_2 = 1; $b_ha_sub_1 = 1; } $meta_1v = number_format($reg['meta_1'], 2, ',', '.'); if ($nivel==1) { $res1_conta = $space.$reg['conta'].' '.$cdescricao; $res1_cdescr = $space.$reg['conta'].' '.$cdescricao; $subcab1 = $space.$reg['conta'].' '.$cdescricao; $res1_impres = 1; } if ($nivel==2) { $res2_conta = $space.$reg['conta'].' '.$cdescricao; $res2_cdescr = $space.$reg['conta'].' '.$cdescricao; $subcab2 = $space.$reg['conta'].' '.$cdescricao; $res2_impres = 1; } if ($nivel==3) { $res3_conta = $space.$reg['conta']; $res3_codigo = $reg['ccodigo']; $res3_cdescr = $cdescricao; $subcab3 = $space.$reg['conta'].' '.$cdescricao; $res3_impres = 1; } // ******************** Detalhado. ********** Início. if (($nivel==4) && ($opcao==1)) { $val1 = $space.' '.$reg['conta']; $val2 = $idessencial; $val3 = $produto; $val4 = $meta_1v; $fbold = $boldcelula; $hpb = $pdf->PageBreakTrigger-10; // esta variável contém o limite de impressão na página. $hgy = $pdf->GetY(); // esta variável contém a linha atual na página. $hup = $hgy; // esta variável testa a impressão dos três cabeçalhos de contas na própria página da ação. if ($res1_impres==1) { $nbx = $pdf->NbLines(195, $res1_cdescr); $hup = $hup+(5*$nbx); } if ($res2_impres==1) { $nbx = $pdf->NbLines(195, $res2_cdescr); $hup = $hup+(5*$nbx); } if ($res3_impres==1) { $nbx = $pdf->NbLines(195, $res3_cdescr); $hup = $hup+(5*$nbx); } if (($res1_impres==1)|($res2_impres==1)|($res3_impres==1)) { $nbt = $pdf->NbLines(195, $produto); $hup = $hup+(5*$nbt); } if ((($res1_impres==1)|($res2_impres==1)|($res3_impres==1))&&($hup>$hpb)) { // se for causar um "overflow" na página, inclua um avança de página imediatamente. $pdf->AddPage($pdf->CurOrientation); } if ($res1_impres==1) { $pdf->SetFont('Arial', 'B', 13); $pdf->SetX(10); $pdf->Cell(239, 5, $res1_cdescr, 1, 0, 'L'); $pdf->SetX(249); $pdf->Cell(35, 5, '', 1, 0, 'R'); $pdf->Ln(5); $subcab1 = $res1_cdescr; // $space.$reg['conta'].' '.$cdescricao; $res1_impres = 0; } if ($res2_impres==1) { $pdf->SetFont('Arial', 'B', 12); $pdf->SetX(10); $pdf->Cell(239, 5, $res2_cdescr, 1, 0, 'L'); $pdf->SetX(249); $pdf->Cell(35, 5, '', 1, 0, 'R'); $pdf->Ln(5); $subcab2 = $res2_cdescr; // $space.$reg['conta'].' '.$cdescricao; $res2_impres = 0; } if ($res3_impres==1) { // Imprime o cabeçalho da ação. $pdf->SetFont('Arial', 'B', 11); $pdf->SetX(10); $pdf->Cell(25, 5, $res3_conta, 1, 0, 'L'); $pdf->SetX(35); $pdf->Cell(19, 5, $res3_codigo, 1, 0, 'L'); $pdf->SetX(54); $pdf->Cell(195, 5, $res3_cdescr, 1, 0, 'L'); $pdf->SetX(249); $pdf->Cell(35, 5, ' ', 1, 0, 'R'); $pdf->Ln(5); $subcab3 = $res3_cdescr; // $space.$reg['conta'].' '.$cdescricao; $res3_impres = 0; } // Agora, imprimir a ação. $pdf->SetFFontFamily(array("Arial", "Arial", "Arial", "Arial")); $pdf->SetFFontMode(array($boldconta, $fbold, $fbold, $fbold)); $myfont = 10; if ($sel_detalhe=='ac+pr') { $myfont = 10; } $pdf->SetFFontFSize(array(9, 10, $myfont, 10)); $pdf->SetAligns(array("L", "L", "L", "R")); $pdf->SetWidths(array(25, 19, 195, 35)); // srand(microtime()*1000000); // for($i=0;$i<20;$i++) $pdf->Row(array("$val1", "$val2", "$val3", "$val4")); // $pdf->Ln(5); } // ******************** Detalhado. ********** Fim. // ******************** Simplificado. Início. ********** if (($nivel==4) && ($opcao==2)) { $pdf->SetFont('Arial', $boldconta, 9); $pdf->SetX(10); $pdf->Cell(35, 5, $space.$reg['conta'], 1, 0, 'L'); $pdf->SetX(35); $pdf->SetFont('Arial', $boldcelula, 8); $pdf->Cell(19, 5, $idessencial, 1, 0, 'L'); $pdf->SetFont('Arial', $boldcelula, 10); $pdf->SetX(54); $pdf->Cell(205, 5, $jproduto, 1, 0, 'L'); $pdf->SetX(249); $pdf->Cell(35, 5, $meta_1v, 1, 0, 'R'); $pdf->Ln(5); } // ******************** Simplificado. Fim. ********** } } if ($b_ha_sub_3==1) { $b_ha_sub_3 = 0; $total3m1 = number_format($tot_3_m1, 2, ',', '.'); $pdf->SetFont('Arial', 'B', 11); $pdf->SetX(10); $pdf->Cell(239, 5, '* Subtotal '.$subcab3.' *', 1, 0, 'R'); $pdf->SetX(249); $pdf->Cell(35, 5, $total3m1, 1, 0, 'R'); $pdf->Ln(5); $tot_3_m1 = 0; } if ($b_ha_sub_2==1) { $b_ha_sub_2 = 0; $total2m1 = number_format($tot_2_m1, 2, ',', '.'); $pdf->Ln(1); $pdf->SetFont('Arial', 'B', 12); $pdf->SetX(10); $pdf->Cell(239, 5,'* Subtotal '.$subcab2.' *', 1, 0, 'R'); $pdf->SetX(249); $pdf->Cell(35, 5, $total2m1, 1, 0, 'R'); $pdf->Ln(7); $tot_2_m1 = 0; } if ($b_ha_sub_1==1) { $b_ha_sub_1 = 0; $total1m1 = number_format($tot_1_m1, 2, ',', '.'); $pdf->Ln(1); $pdf->SetFont('Arial', 'B', 13); $pdf->SetX(10); $pdf->Cell(239, 5,'* Subtotal '.$subcab1.' *', 1, 0, 'R'); $pdf->SetX(249); $pdf->Cell(35, 5, $total1m1, 1, 0, 'R'); $pdf->Ln(7); $tot_1_m1 = 0; } $total_1 = number_format($totalm1, 2, ',', '.'); $pdf->Ln(5); $pdf->SetFont('Arial', 'BI', 13); $pdf->SetX(10); $pdf->Cell(239, 5,'* TOTAIS *', 1, 0, 'C'); $pdf->SetX(249); $pdf->Cell(35, 5, $total_1, 1, 0, 'R'); $pdf->Output(); ?> Abraços...
  20. paulobergo

    Nota Fiscal

    Sem querer te assustar... o cálculo é muito complexo... Você deve começar guiando-se pelo item 6.1 do Guia Pratico EFD, que tem a Tabela B indicando os campos obrigatorios a serem calculados. Basicamente, o calculo do ICMS deve ser baseado na combinacao de: UF de destino da mercadoria Situacao tributaria do produto nas operacoes internas (isto é, dentro da propria UF) Destinacao da mercadoria Enquadramento fiscal do destinatario Para que voce tenha uma ideia... em Minas, pensa numa industria que fabrica uma ração para aves, no caso, especial para postura. Quando ela comercializa esta racao para dentro do proprio estado, isto é, Minas Gerais mesmo, ela é tributada mais ou menos assim: - um produtor rural (tem CPF e Inscrição de Produtor Rural): Base de Calculo: 40%, Aliquota: 18%. Neste caso, a diferença de base de calculo (18% em cima de 30% que não está sendo tributado) deve ser dada como desconto para o comprador, obrigatoriamente. - um consumidor final (tem CPF apenas): Base de Calculo: 100%, Aliquota: 18% - um comerciante, enquadrado com Debito/Credito: Base de Calculo: 80%, Aliquota 18%. O desconto da alíquota em cima da base de calculo reduzida tambem tem que ser repassado para o comprador. - um comerciante, enquadrado no Simples Nacional: Isento. - uma cooperativa de produtores rurais: Base de Calculo: 60%, Aliquota: 18%. o desconto também precisa ser repassado. - um orgao, como o IMA (Inst. Mineiro de Agropecuária): Base de Calculo: 80%, Aliquota 18%. Aí, são dados dois descontos: aquele em cima da base reduzida e também o do próprio imposto que seria pago na apuração mensal. Ah... e o diferimento? outro exemplo... da mesma fábrica... quando ela vende ração para gado, se a compra for de um produtor rural de MG, ela não pagará imposto nenhum... Porém, é obrigatório, para isso, que a ração que ela fabrica tenha o registro no Ministério da Agricultura e na nota fiscal tem que sair este código e não o código de barras ou outro código interno. E se ela vender a mesma ração para um produtor rural de outro estado? ah... aí a coisa muda de figura... Minas e, claro, os outros estados também, não dão o mesmo benefício... então, um produtor rural do vizinho Goiás irá comprar exatamente a mesma ração, mas com redução de base de cálculo... e o cálculo varia conforme o tipo de comprador, cooperativa, comerciante, etc... A Substituição tributária também é complexa. No cadastro do produto, você precisa ter registrada a base de cálculo interna (isto é, a do estado do contribuinte). Veja o exemplo da mesma fábrica de rações, que neste caso fabrica uma ração da linha "pet" (cães, gatos, peixes, etc...). Ao vender o produto dentro de Minas, a CST na nota será 060 - Substituição Tributaria. Porém, se vende o produto para alguém do Espírito Santo (estado que não tem convénio de ST com Minas nos alimentos da linha "pet"), o cálculo é assim: Valor do Produto: R$ 200,00 Base de Cálculo, 156,66% = R$ 313,32 Alíquota Interna, isto é, de MG: 18% Imposto Interno (18% de R$ 313,32) = R$ 56,40 Agora, o cálculo do imposto interestadual, já que a mercadoria está indo para o ES. Valor do Produto: R$ 200,00 Base de Cálculo, 100% = R$ 200,00 Alíquota MG->ES = 7% Imposto p/ES (7% de R$ 200,00) = R$ 14,00 Finalmente, o valor do imposto que a fábrica vai recolher, será de R$ 56,40 - R$ 14,00, que será de R$ 42,40 Eu uso uma tabela de ICMS que contém: Região ou UF do participante (participante é o cliente, fornecedor, prestador de serviço, etc...) Tipo de participante (1=CPF consumidor, 2=CNPJ Deb.Credito, 3=CNPJ Isento ou Não Obrigadoa Inscrição Estadual, 4=CNPJ com IE mas Microempresa, Simples Nacional, etc, 5=CPF Produtor Rural). Tipo de Produto quanto à tributação: Nacional trib. a 7%, Nacional Trib a 8.4 %, Nacional Trib a 12%, Nacional Trib a 18%, Isento, Substituição Tributaria, Diferido, IMportado, etc, etc... de 01 a 99 tipos possíveis. CFOP ICMS Base de Cálculo CST Aliquota Calcula ou não a dif. de imposto em ST (aquela situação que expliquei acima) IPI incluso na base de calculo ou não do ICMS (é... tem produtos que, dependendo do participante, o IPI integra a base de cálculo do ICMS...) No produto, tenho a informação da base de cálculo para ST (tanto interna - do próprio estado - como a externa), e também as alíquotas de ST (interna), IPI na entrada e IPI na saída (é... tem casos de produtos industrializados que são entram com uma alíquota e saem com outra... situações raras, mas tem)..., a CST e a Tributação usadas em operações de venda a consumidor com nota modelo-2 e Cupom Fiscal. Mesmo que voce não esteja desenvolvendo a NFe, guie-se pela EFD, ok? Espero ter ajudado!
  21. Olá pessoal... boa noite... Gostaria de saber se alguém já conseguiu estabelecer uma conexão com uma máquina Linux via ssl... Explicando melhor... o que eu faço no dia-a-dia... -No trabalho: De minha máquina Linux (Ubuntu10), no prompt, acesso várias subredes (e seus hosts se necessário), via ssh. Exemplo: ssh -p3844 bergo@11.0.5.1 (usamos a porta 3844 em troca da padrão). Da máquina acessada (geralmente, um firewall ou servidor), posso tanto monitorar a rede (mrtg, ping, arp, etc...) como configurar ou ajustar serviços (squid, dhcp, apache, etc...) - De casa, ou de qualquer máquina com Windows, e de qualquer lugar com acesso à Internet, usando o PuTTY, acesso meu PC em primeiro lugar e, a partir dele, acesso os demais, como no exemplo acima... Então, o que eu gostaria de fazer é, basicamente, uma especie de túnel usando os componentes Indy... de forma que, no form, eu conseguisse fazer a conexão com minha máquina e dela fazer a conexão com outro destino, tendo condições de, principalmente, monitorar a rede (com um ping, obteria os dados de resposta e gravaria em um banco de dados ou planilha local)... Bom... acho que é mais ou menos isso... Então, se alguém tiver alguma sugestão, agradeço muito! Abraços P.Bergo
  22. Bom... não sei o motivo... mas, antes de tudo (isto é, de $res = ... ), colocaria um echo $sql_insere; exit; Para verificar o conteúdo da query... Ok? Espero ter ajudado!
  23. Olá... Minha sugestão é que você use a classe FPDF no seu código em PHP... E' tranquilo de implementar... você escolhe os campos que farão parte da página (ou páginas, se quiser mais de uma). Basicamente, em todos meus sistemas Web, independente da plataforma (IIS, FireFox, PHP, Delphi, MySQL, Firebird, PortGreSQL) TODA impressão é feita gerando-se páginas PDF. Assim, desde uma boleta bancária, uma duplicata, um relatório de contabilidade, livro caixa, contas a receber, lista de aniversariantes, etc... qualquer coisa que tiver que ser impressa, é gerada em PDF Para outras consultas, listagens, fichas, cadastros, etc... só me preocupo com a formatação e navegação visual... A classe FPDF você encontra neste link: = F P D F = Ok? Espero ter ajudado!
  24. Olá pessoal... Até criar um projeto em PHP para orçamento público, nunca havia usado a função MultiCell em uma planilha com FPDF... Na prática, utilizei sempre a função MultiCell para escrever texto livre em uma única célula (por exemplo, ocupando metade da página), sem células simples nas laterais esquerda e/ou direita... Então, anexei duas figuras: a primeia, identifica o que está acontecendo e a segunda o que eu gostaria de obter... A planilha é baseada em um formulário (planilha) contábil... Esta é a situação que eu tenho: E esta é a situação que eu desejo: O código atual é este: $pdf->SetFont('Arial', 'B', 10); $pdf->SetX(10); $pdf->Cell(30, 5, $space.$reg['conta'], 1, 0, 'L'); $pdf->SetX(40); $pdf->Cell(14, 5, ' ', 1, 0, 'L'); $pdf->SetX(54); $pdf->MultiCell(130, 5, $produto, 1, 'L', 0); $pdf->SetX(184); $pdf->Cell(25, 5, $meta_1v, 1, 0, 'R'); $pdf->SetX(209); $pdf->Cell(25, 5, $meta_2v, 1, 0, 'R'); $pdf->SetX(234); $pdf->Cell(25, 5, $meta_3v, 1, 0, 'R'); $pdf->SetX(259); $pdf->Cell(25, 5, $meta_4v, 1, 0, 'R'); $pdf->Ln(5); O conteúdo da variável $produto é obtido a partir de um campo tipo "Text" de uma tabela no MySQL. E o problema é, basicamente, conseguir "esticar" as células à esquerda da "multicell" e fazer com que as células da direita se iniciem na posição "y" superior direita da célula multicell... Bom... é isso... Grato por qualquer dica! Abraços.
  25. Olá pessoal... Ao tentar abrir um projeto que compila perfeitamente no Delphi6, no Delphi7 aparece a mensagem [Fatal Error] File not found: 'c:\arquivos de programas\borland \delphi7\Lib\ACBr\Fontes\synalist\Classes.pas' Não é especificamente a falta do arquivo Classes.pas nem falta de um componente da ACBr como visto acima... isso acontece com qualquer projeto feito no Delphi6, desde um projeto bem simples, com um TEdit e um TButton a um mais complexo... Até agora, a única forma que encontrei de contornar o problema foi abrindo o projeto e removendo cada componente e colando um "novo" (igualzinho, mas escolhido na palette do Delphi7) e colando no form... Será que há outro jeito para contornar este "caminho das pedras"? Grato! Abraços!
×
×
  • Criar Novo...