Ir para conteúdo

rtavix

Members
  • Total de itens

    143
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre rtavix

  1. rtavix

    Gerar arquivo de Log- Rotina serviço windows

    Tenho uma aplicação voltada a serviço windows, que realiza leitura dos comprovantes de pagamentos e insere no banco, e por final gerar o arquivo de log de todos os arquivos que foram lidos. Vamos supor que segunda feira foi executado a rotina, sendo que essa rotina é todos os dias no horário da 7 horas da manhã, porém de terça feira a diante ao invés de gerar um novo arquivo de log txt, ele utiliza o mesmo arquivo gerado de segunda feira para registrar os logs, e com isso o arquivo vai ficando cada vez mais grande, e isso poderá ocasionar problemas futuros. Gostaria de saber se existe uma forma para gerar esses logs diariamente, cada arquivo de log para seu respectivo dia, um arquivo para segunda feira, outro novo arquivo para terça e assim por diante. Como poderia está fazendo? Segue o meu código:
  2. rtavix

    Problema para lê o próximo arquivo

    Aqui é aonde verifico se possui o código de barras na tabela do banco: Desculpa por esta postando em partes, mas para não ficar uma coisa "bagunçada" Quintelab, aguardo teu retorno. Valeu até o momento amigo!
  3. rtavix

    Problema para lê o próximo arquivo

    cada arquivo possui a extensão cpv. Esse arquivo é gerado pelo banco, porém existe determinados arquivos que vem com um código de barras que não existe nessa tabela do banco, eu sei disso porque eu fiz a lógica que verifica se existe ou não, no caso seria essa parte do código que eu faço isso:
  4. rtavix

    Problema para lê o próximo arquivo

    Quintelab, uma dúvida, se meu arquivo .cpv que possui um determinado código de barras não existir na tabela sdpj_proc_inter no banco de dados, eu retorno um log informando esse ocorrido, mas eu iria precisar de mover esse arquivo para uma pasta processados com pendnecia, como eu poderia fazer essa condição? Esse método aqui: Serve para mover arquivos .cpv que possuem os códigos de barras cadastrados na tabela sdpj_proc_Inter, mas como eu poderia está fazendo para a condição exposta logo acima?
  5. rtavix

    Problema na leitura do Arquivo

    Estou com uma certa dificuldade de utilizar outros meios para a leitura de um determinado arquivo. tenho o seguinte método: private static void ProcessaArquivo(string FullPathFile) { try { bool Mover = true; string[] StringLinha = System.IO.File.ReadAllLines(FullPathFile); string CodBarra = ""; for (int line = 0; line < StringLinha.Length; line++) { string DtPagamento = ""; string VlrDocumento = ""; string Protocolo = ""; string Registro = ""; string Emissao = ""; #region Recupera o Código de Barra if (StringLinha[line].Contains("Cod. Barras:")) { CodBarra += StringLinha[line].Replace("Cod. Barras:", ""); line += 2; } if (CodBarra != "") { CodBarra += StringLinha[line]; CodBarra = CodBarra.Replace(" ", ""); } #endregion if (CodBarra == "") continue; line += 6; #region Data de Pagamento if (StringLinha[line].Contains("Dt.Pagamento:")) { DtPagamento += StringLinha[line].Replace("Dt.Pagamento:", "").Replace(" ", " "); } #endregion line += 2; #region Valor do Documentos if (StringLinha[line].Contains("Vlr.Documento:")) { VlrDocumento += StringLinha[line].Replace("Vlr.Documento:", "").Replace(" ", ""); } #endregion line += 2; #region Protocolo if (StringLinha[line].Contains("Protocolo:")) { Protocolo += StringLinha[line].Replace("Protocolo:", "").Replace(" ", ""); } #endregion line += 12; #region Registro if (StringLinha[line].Contains("Registro:")) { Registro += StringLinha[line].Replace("Registro:", ""); } #endregion line += 2; #region Emissao if (StringLinha[line].Contains("Emissao.:")) { Emissao += StringLinha[line].Replace("Emissao.:", ""); } #endregion } CodBarra = ""; } if (Mover) { MoveFile(FullPathFile); } } catch (Exception) { throw; } } Existe uma outra forma de utilizar algo como: String[] lines = File.ReadAllLines(Filename); VoucherInfo vi = null; Boolean InBarCodes = false; if (line.StartsWith(CodBarras)) { String codigoBarras = line.Split(new Char[] { ':' })[1].Trim(); vi.CodBarras.Add(codigoBarras); InBarCodes = true; continue; } if (InBarCodes) { vi.codigoBarras.Add(line.Trim()); } Gostaria de ver uma melhor forma de ler esses dados mencionados acima, sem depender da quantidade de linhas até chegar em cada um, tentei algo relacionado ao código logo acima dessa explicação, mas nada que me ajudou, alguém teria uma ideia, uma sugestão do que eu poderia estar fazendo? Pensei em algo assim também: if (!StringLinha[line].Contains("Cod. Barras:") && !StringLinha[line].Contains("Dt.Pagamento:") && !StringLinha[line].Contains("Vlr.Documento:") && !StringLinha[line].Contains("Protocolo:") && !StringLinha[line].Contains("Registro:") && !StringLinha[line].Contains("Emissao.:")) { continue; Console.WriteLine(StringLinha[line]); } Funciona em parte, porque tenho o código de barras que possui a numeração na linha de cima e o restante da numeração desse código de barras na próxima linha, porém ele só está pegando a primeira numeração, eu teria necessidade de concatenar essa quebras de linhas nesse respectivo código do if, mas sem sucesso. Estou postando essas informações detalhadas, mas estou a disposição para explicar mais ainda. Eu só preciso ler esses determinados campos, usando a primeira lógica postada ele funciona, porém gostaria de aplicar em cima do que já tenho uma lógica que não fica dependendo em qual posição de linha certos campos estão ou deixa de estar, pois peguei arquivo aqui que não vem na mesma posição.
  6. rtavix

    Problema para lê o próximo arquivo

    Implementei sua sugestão quintelab, mas ao depurar ele informa que não foi possivel encontrar o arquivo x . cpv, e ao verificar ele move até os arquivos que não podem ser movidos. Se eu tenho um comprovante com o código de barras e ao verificar no banco se ele existe na tabela proc_inter, ele me retorna que não existe, então não pode ser inserido. Já os demais que existem no banco, ai ele insere, registra o log, e como um determinado código de barras não existe lá no banco, eu pego esse arquivo e deixo ele na pasta pendente ainda, até que os responsáveis verificam por qual motivo ele não foi cadastrado nessa tabela. Resumidamente é isso, porém ao usar sua sugestão amigo ele retorna essa mensagem :/
  7. rtavix

    {"ORA-00917: vírgula não encontrada"}

    Conforme solicitado Motta, resolvi retirando os espaços que estava entre as " " e a mascara da data. Meu insert funcionou, ficou da seguinte forma: Espero que essa solução possa ajudar algum amigo :) e agradeço novamente pela orientação.
  8. rtavix

    Problema para lê o próximo arquivo

    Quintelab, alterando o código dessa forma, eu consigo mover o arquivo: Ao compilar e varrer linha por linha, identifiquei que o problema encontrava- se nesse método: Porque eu passo o nome de um desses arquivos, como eu poderia melhorar o código, que ao invés de passar o nome do arquivo para mover ele, eu pego pela extensão do arquivo, que se chama .cpv, como poderia estar fazendo? Tem alguma ideia?
  9. rtavix

    {"ORA-00917: vírgula não encontrada"}

    Valeu Motta, resolvi aqui. Obrigado pela dica.
  10. rtavix

    Problema para lê o próximo arquivo

    Pessoal, boa tarde! Estou com problemas para lê os arquivos de um diretório, apresenta erro como se estivesse passando o caminho errado, porém não enxergo essa falha, alguém poderia me orientar? Aqui é aonde eu verifico a extensão do arquivo e informo o caminho: Método para mover o arquivo: Método de inserir o log: Erro: System.IO.FileNotFoundException: 'Não foi possível localizar o arquivo 'D:\Pendrive\PENDENTES\CGc0001.cpv\CGc0360.cpv'.' Isso acontece que toda vez vou ler o próximo arquivo.
  11. rtavix

    {"ORA-00917: vírgula não encontrada"}

    Mota você acredita que pode ser esse o problema? pensei que fosse algo relacionado a , ou aspas.
  12. rtavix

    {"ORA-00917: vírgula não encontrada"}

    Pessoal, estou com problemas no meu insert ao inserir no banco: Essa é meu método de inserir: esta retornando o erro: {"ORA-00917: vírgula não encontrada"}
  13. rtavix

    Dúvida relacionada a utilização do Serviço windows

    Oi quintelab, obrigado pela sugestão, comecei implementar algo no meu código relacionado ao envio do email para a pessoa responsavel por esses comprovantes, porém estou com problemas de passar o log dentro da mensagem nessa parte do meu código, poderia por gentileza me informa como eu poderia estar resolvendo esse problema: private static void ProcessaArquivo(string FullPathFile, string FileName) { try { bool Mover = true; string[] StringLinha = System.IO.File.ReadAllLines(FullPathFile); string CodBarra = ""; for (int line = 0; line < StringLinha.Length; line++) { string DtAgendamento = ""; string VlrDocumento = ""; string Protocolo = ""; string Registro = ""; string Emissao = ""; #region Recupera o Código de Barra if (StringLinha[line].Contains("Cod. Barras:")) { CodBarra += StringLinha[line].Replace("Cod. Barras:", ""); line += 2; } if (CodBarra != "") { CodBarra += StringLinha[line]; CodBarra = CodBarra.Replace(" ", ""); } #endregion if (CodBarra == "") continue; line += 6; #region Data de Agendamento if (StringLinha[line].Contains("Dt.Agendamento:")) { DtAgendamento += StringLinha[line].Replace("Dt.Agendamento:", "").Replace(" ", " "); } #endregion line += 2; #region Valor do Documentos if (StringLinha[line].Contains("Vlr.Documento:")) { VlrDocumento += StringLinha[line].Replace("Vlr.Documento:", "").Replace(" ", ""); } #endregion line += 2; #region Protocolo if (StringLinha[line].Contains("Protocolo:")) { Protocolo += StringLinha[line].Replace("Protocolo:", "").Replace(" ", ""); } #endregion line += 12; #region Registro if (StringLinha[line].Contains("Registro:")) { Registro += StringLinha[line].Replace("Registro:", ""); } #endregion line += 2; #region Emissao if (StringLinha[line].Contains("Emissao.:")) { Emissao += StringLinha[line].Replace("Emissao.:", ""); } #endregion //Busca Código de Barra string CodProcInter = GetCodProcInter(CodBarra); if (!string.IsNullOrEmpty(CodProcInter)) { if(!CodBarraJaInserido(CodBarra)) { //Insere Código de Barra bool inserido = InsereDadosBanco(CodProcInter,CodBarra,DtAgendamento,VlrDocumento,Protocolo,Registro,Emissao); } else { //Código de Barra já Inserido InsertLog("\n Já Existe -> " + CodBarra); } } else { //Código de Barra não esta disponível na tabela -> sdpj_proc_inter Mover = false; InsertLog("\n O arquivo não foi importado, pois o Cód. Barra -> " + CodBarra + " não estar disponivel na tabela processo interessado"); string from = "noreplylocal@teste.com.br"; // E-mail de remetente string to = "teste@teste.com.br"; // E-mail do destinatário MailMessage message = new MailMessage(from, to, InsertLog("\n O arquivo não foi importado, pois o Cód. Barra -> " + CodBarra + " não estar disponivel na tabela processo interessado")); using (SmtpClient smtp = new SmtpClient("s3a614", 465)) { smtp.Send(message); } Console.WriteLine("Mensagem enviada com sucesso!"); Console.Read(); } //Limpar Variaveis CodBarra = ""; } if (Mover) { MoveFile(FileName); } } catch (Exception) { throw; } } Meu problema esta nessa parte do código: else { //Código de Barra não esta disponível na tabela -> sdpj_proc_inter Mover = false; InsertLog("\n O arquivo não foi importado, pois o Cód. Barra -> " + CodBarra + " não estar disponivel na tabela processo interessado"); string from = "teste@teste.com.br"; // E-mail de remetente string to = "teste@teste.com.br"; // E-mail do destinatário MailMessage message = new MailMessage(from, to, InsertLog("\n O arquivo não foi importado, pois o Cód. Barra -> " + CodBarra + " não estar disponivel na tabela processo interessado")); using (SmtpClient smtp = new SmtpClient("s3a614", 25)) { smtp.Send(message); } Console.WriteLine("Mensagem enviada com sucesso!"); Console.Read(); } Que em: MailMessage message = new MailMessage(from, to, InsertLog("\n O arquivo não foi importado, pois o Cód. Barra -> " + CodBarra + " não estar disponivel na tabela processo interessado")); é apresentado a seguinte mensagem de erro em New MailMessage : There is no argument given that corresponds to the required formal parameter 'body' of 'MailMessage.MailMessage(string, string, string, string) Estou tentando enviar o log por email, porém esta dando esse erro.
  14. Estou com a seguinte dúvida, tenho um serviço windows, e nele após ler o arquivo eu movo esse arquivo para uma outra pasta, porém caso algum código de barras que existe dentro desse arquivo não estiver cadastrado na minha base de dados, eu não irei inserir numa outra determinada tabela, estou explicando somente o processo. Agora minha dúvida: No log gerado, eu informo esse código de barras que não foi inserido por esse motivo, porém gostaria de saber como eu poderia fazer para informar a pessoa responsável, que o código de barras tal não foi inserido na determinada tabela do banco por não esta cadastrado, existe uma forma de enviar um email informando esse código de barras e solicitando para que a mesma cadastre o mesmo? como eu poderia fazer a códificação para o e- mail? //Método InsertLog private static void InsertLog(string linha) { //Cria Pasta de Log, Caso não exista if (!Directory.Exists(PastaArquivoLog)) { Directory.CreateDirectory(PastaArquivoLog); } //Cria Arquivo de Log, Caso não exista string FullPath = PastaArquivoLog+ "\\Log de Processamento de comprovantes.txt"; if (!File.Exists(FullPath)) { using (File.Create(FullPath)) ; } //Escreve no arquivo de LOG using (StreamWriter file = new StreamWriter(FullPath,true)) { file.WriteLine(linha); file.Dispose(); } } //Aqui eu busco todos os proc_inter da tabela sdpj_proc_interessado //que possui o código de barras lido no arquivo, somente para vocês entenderem aonde quero chegar. private static string GetCodProcInter(string CodBarra) { using (DB db = new DB()) { string SQL = string.Format(@"SELECT T0.cod_proc_inter FROM sdpj_proc_inter T0 WHERE T0.cod_barras_banestes = '{0}'",CodBarra); var dados = db.ExecutaComandoComRetorno(SQL); if(dados.Read()) { return dados["cod_proc_inter"].ToString(); } } return ""; } //Esse método, eu utilizo para mover os arquivos lidos. private static void MoveFile(string FileName) { try { PastaArquivosImportados += "\\" + FileName; PastaArquivosPendentes += "\\" + FileName; File.Move(PastaArquivosPendentes, PastaArquivosImportados); } catch (Exception) { throw; } } //Nesse método eu percorro todas as linhas, até eu encontrar as informações que //eu necessido ler e gravar. private static void ProcessaArquivo(string FullPathFile, string FileName) { try { bool Mover = true; string[] StringLinha = System.IO.File.ReadAllLines(FullPathFile); string CodBarra = ""; for (int line = 0; line < StringLinha.Length; line++) { string DtAgendamento = ""; string VlrDocumento = ""; string Protocolo = ""; string Registro = ""; string Emissao = ""; #region Recupera o Código de Barra if (StringLinha[line].Contains("Cod. Barras:")) { CodBarra += StringLinha[line].Replace("Cod. Barras:", ""); line += 2; } if (CodBarra != "") { CodBarra += StringLinha[line]; CodBarra = CodBarra.Replace(" ", ""); } #endregion if (CodBarra == "") continue; line += 6; #region Data de Agendamento if (StringLinha[line].Contains("Dt.Agendamento:")) { DtAgendamento += StringLinha[line].Replace("Dt.Agendamento:", "").Replace(" ", " "); } #endregion line += 2; #region Valor do Documentos if (StringLinha[line].Contains("Vlr.Documento:")) { VlrDocumento += StringLinha[line].Replace("Vlr.Documento:", "").Replace(" ", ""); } #endregion line += 2; #region Protocolo if (StringLinha[line].Contains("Protocolo:")) { Protocolo += StringLinha[line].Replace("Protocolo:", "").Replace(" ", ""); } #endregion line += 12; #region Registro if (StringLinha[line].Contains("Registro:")) { Registro += StringLinha[line].Replace("Registro:", ""); } #endregion line += 2; #region Emissao if (StringLinha[line].Contains("Emissao.:")) { Emissao += StringLinha[line].Replace("Emissao.:", ""); } #endregion //Busca Código de Barra string CodProcInter = GetCodProcInter(CodBarra); if (!string.IsNullOrEmpty(CodProcInter)) { if(!CodBarraJaInserido(CodBarra)) { //Insere Código de Barra bool inserido = InsereDadosBanco(CodProcInter,CodBarra,DtAgendamento,VlrDocumento,Protocolo,Registro,Emissao); } else { //Código de Barra já Inserido InsertLog("\n Já Existe -> " + CodBarra); } } else { //Código de Barra não esta disponível na tabela -> sdpj_proc_inter //caso ele não esteja disponivel, devo comunicar a pessoa responsável, enviando o numero do código de barras para essa pessoa, como fazer? Mover = false; InsertLog("\n Cód. Barra Não disponível -> " + CodBarra); } //Limpar Variaveis CodBarra = ""; } if (Mover) { MoveFile(FileName); } } catch (Exception) { throw; } } Nessa parte do código mora a minha dúvida. if (!string.IsNullOrEmpty(CodProcInter)) { if(!CodBarraJaInserido(CodBarra)) { //Insere Código de Barra bool inserido = InsereDadosBanco(CodProcInter,CodBarra,DtAgendamento,VlrDocumento,Protocolo,Registro,Emissao); } else { //Código de Barra já Inserido InsertLog("\n Já Existe -> " + CodBarra); } } else { //Código de Barra não esta disponível na tabela -> sdpj_proc_inter //caso ele não esteja disponivel, devo comunicar a pessoa responsável, enviando o numero do código de barras para essa pessoa, como fazer? Mover = false; InsertLog("\n Cód. Barra Não disponível -> " + CodBarra); }
  15. rtavix

    Problemas com a querys

    Boa tarde pessoal, estou com o seguinte problema: Eu preciso inserir meus comprovantes no banco de dados oracle, mas antes eu precisa achar o processo e o interessado pelo código de barras no banco: No banco eu consigo encontrar usando essa query: --Até aqui tudo certo. select * from sdpj_proc_inter where cod_barras_banestes = 'AQUI INFORMO O NUMERO DO CODIGO DE BARRAS' Mas o problema esta na query do meu código, que não esta funcionando, segue o código. //Busca Código de Barra (codBarra = vem da linha do arquivo, pois irei usar para achar o processo e o interessado e inserir) string CodProcInter = GetCodProcInter(CodBarra); No código acima estou chamando o método GetCodProcInter, segue o código abaixo referente ao método: private static string GetCodProcInter(string CodBarra) { using (DB db = new DB()) { //string SQL = string.Format(@"SELECT T0.COD_PROC_INTER FROM sdpj_proc_inter T0 WHERE T0.COD_BARRAS_BANESTES = {0}", CodBarra); //string SQL = string.Format(@"SELECT count(T0.COD_COMP_BANESTES) FROM SDPJ_COMP_BANESTES T0 WHERE T0.COD_COMP_BANESTES = '{0}'", CodBarra); //Minha query não esta funcionando. string SQL = string.Format(@"SELECT count(T0.COD_COMP_BANESTES) QUANTITY FROM SDPJ_COMP_BANESTES T0 WHERE T0.COD_COMP_BANESTES = '{0}'", CodBarra); var dados = db.ExecutaComandoComRetorno(SQL); if(dados.Read()) { //return dados["COD_PROC_INTER"].ToString(); return dados["QUANTITY"].ToString(); } } return ""; } O que estou fazendo de errado?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.