none
Impressão de etiquetas RRS feed

  • Pergunta

  • Boa tarde..

    Preciso da ajuda de vcs do forum, vou tenta expicar o que preciso , tenho uma tela criada no c#  que faz impressão de etiquetas por nota fiscal, ex digito o numero de uma nota fiscal e o sistema imprime umas etiquetas de acordo coma quantidade de volumes dessa nota, o que preciso fazer e o seguinte, hoje eu digito nota a nota, preciso fazer com que eu digite um range de notas, Ex. nota numero 2240400 ate a 2240450, tem uma range ai de 50 notas, ao o sistema faça o que faz hoje gere as etiquetas de acordo com os volumes da notas guarde em algum lugar e gere a segunda nota e assim sucessivamente, e depois imprima tudo de uma vez. Não sei se consegui me explicar direito, mas estou a disposição para maiores esclarecimentos. Abaixo esta a tela que uso e o código que uso para gerar as etiquetas.

     

    namespace MenuRelatorios
    {
        public partial class frmEtqTransportePS : Form
        {
            int largura;
            int altura;

            List<string> ListaConteudoImpressao = new List<string>();
            int iQuantidadeVolumes = 0;
            string sTextoNF = "";
            string sNomeImpressora = System.Configuration.ConfigurationSettings.AppSettings["ImpressoraPadrao"];

            public frmEtqTransportePS()
            {
                InitializeComponent();
            }

            private void frmEtqTransportePS_Load(object sender, EventArgs e)
            {

            }

            private void btnPesquisa_Click(object sender, EventArgs e)
            {

                vizualização.Document = Documento;
                vizualização.InvalidatePreview();
                Documento.DefaultPageSettings.Landscape = true;  
            }

            public string retornaVol(string txtNota)
            {
                string ret = string.Empty;
                string connectionString = this.EtqTransportePSTableAdapter.Connection.ConnectionString;


                ListaConteudoImpressao.Clear();
                iQuantidadeVolumes = 0;

                using (SqlConnection con = new SqlConnection(connectionString))
                {
                    con.Open();
                    string strQuery = @" SELECT DISTINCT
                                      SF.F2_VOLUME1,
                                      SF.F2_DOC,
                                      SD.D2_PEDIDO,
                                      SA.A1_NREDUZ,
                                      SA.A1_MUN,
                                      SF.F2_EST
                                      FROM SF2020 AS SF
                                      INNER JOIN SA1020 AS SA WITH (NOLOCK) ON SA.A1_COD = SF.F2_CLIENTE
                                      INNER JOIN SD2020 AS SD WITH (NOLOCK) ON SD.D2_DOC = SF.F2_DOC
                                      WHERE F2_DOC = '" + txtNota + "'AND SD.D_E_L_E_T_  <> '*' AND SF.D_E_L_E_T_ <> '*'";
                    using (SqlCommand command = new SqlCommand(strQuery, con))

                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            reader.GetDouble(0);
                            ret = reader[0].ToString();
                            
                            iQuantidadeVolumes = int.Parse(ret);

                            ListaConteudoImpressao.Add(" PED. VENDA : " + (reader[2].ToString()));
                            ListaConteudoImpressao.Add(" NF.: " + (reader[1].ToString()) +"                           "+ " VOLUME : " + ret.ToString()  );
                            ListaConteudoImpressao.Add(" CLIENTE : "    + (reader[3].ToString()));
                            ListaConteudoImpressao.Add(" MUNICIPIO : "  + (reader[4].ToString()));
                            ListaConteudoImpressao.Add(" ESTADO : "     + (reader[5].ToString()));
                            sTextoNF = " NF.: " + (reader[1].ToString());
                            break;

                        }
                    }
                    con.Close();
                }
                return ret;
            }

            private void txtNota_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
                {
                    txtVolume.Text = retornaVol(txtNota.Text);
                    txtVolume.Focus();

                }
            }

            private void btnFechar_Click(object sender, EventArgs e)
            {
                Close();
            }

            private void btnImprimir_Click(object sender, EventArgs e)
            {

                for (int i = 0; i < iQuantidadeVolumes; i++)
                {
                    var volumeUnico = (i + 1).ToString();
                 
                    for (int ii = 0; ii < ListaConteudoImpressao.Count; ii++)
                    {
                        if (ListaConteudoImpressao[ii].Contains("VOLUME : "))
                        {
                            ListaConteudoImpressao[ii] = sTextoNF +  "VOLUME : " + volumeUnico + "/" + iQuantidadeVolumes.ToString();
                            Documento.PrinterSettings.PrinterName = sNomeImpressora;
                            Documento.DefaultPageSettings.Landscape = true;
                            Documento.Print();

                        }
                    }
                }

             
            }

            private void Documeto_PrintPage(object sender, PrintPageEventArgs e)
            {
                string texto = "";
                Font letra = new Font("Aerial", 23, FontStyle.Bold, GraphicsUnit.Pixel);
                SolidBrush cor = new SolidBrush(Color.Black);
                Rectangle retangulo = new Rectangle(0, 100, largura, 30);
                StringFormat alinhamento = new StringFormat();
                alinhamento.Alignment = StringAlignment.Center;
                alinhamento.LineAlignment = StringAlignment.Center;

                e.Graphics.DrawString(texto.ToUpper(), letra, cor, retangulo, alinhamento);

                int y = 170;
                foreach (string frase in ListaConteudoImpressao)
                {
                    e.Graphics.DrawString(frase, letra, cor, new Point(20, y));
                    y += 40;
                }
            
            }


            public int F2_VOLUME1 { get; set; }

            private void vizualização_Click(object sender, EventArgs e)
            {
             
            }
        }
    }


    JUNIOR GUERREIRO T.I

    domingo, 22 de janeiro de 2017 20:49

Respostas

  • Olá Junior.
    Uma sugestão:

    1.Colocar o valor inicial e o valor final(você pode colcoar um segundo campo na tela OU pedir pro usuário separar por traço o intervalo,como quando você manda imprimir alguma coisa pelo Word)
    2.Declarar um List<int> lstQuantidadeDeVolumes na classe
    3.No txtNota_KeyDown fazer um loop tipo for (i=valorInicial;i++;i<valorFinal) .A cada passadas no método retornaVol, ao inves de você setar esse iQuantidadeVolumes  , você vai adicionar um item no list criado acima
    4.Por fim, no btnImprimir_Click, dentro do seu for, você vai fazer um foreach no lstQuantidadeDeVolumes, e atribuir o valor do iQuandidadeVolumes, e ai começar o for.
    Ex:
    private void btnImprimir_Click(object sender, EventArgs e)
            {
    foreach(item in lstQuantidadeDeVlomes)
    iQuantidadeVolumes = item;
      for (int i = 0; i < iQuantidadeVolumes; i++)
    //continua


    Certo?

    --
    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta

    • Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 13:06
    domingo, 22 de janeiro de 2017 22:54
  • Bom dia Daniel...

    Sim e isso mesmo, só um detalhe no meu código acima eu imprimo as etiquetas de acordo com o numero de volumes. Ex nota fiscal 100 volumes 4 então são 4 etiquetas, nota 101 volumes 1 uma etiqueta assim sucessivamente. Isso hoje já faço, so que agora preciso imprimir varias notas em sequencia.


    JUNIOR GUERREIRO T.I

    • Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 13:05
    terça-feira, 24 de janeiro de 2017 12:24

Todas as Respostas

  • Olá Junior.
    Uma sugestão:

    1.Colocar o valor inicial e o valor final(você pode colcoar um segundo campo na tela OU pedir pro usuário separar por traço o intervalo,como quando você manda imprimir alguma coisa pelo Word)
    2.Declarar um List<int> lstQuantidadeDeVolumes na classe
    3.No txtNota_KeyDown fazer um loop tipo for (i=valorInicial;i++;i<valorFinal) .A cada passadas no método retornaVol, ao inves de você setar esse iQuantidadeVolumes  , você vai adicionar um item no list criado acima
    4.Por fim, no btnImprimir_Click, dentro do seu for, você vai fazer um foreach no lstQuantidadeDeVolumes, e atribuir o valor do iQuandidadeVolumes, e ai começar o for.
    Ex:
    private void btnImprimir_Click(object sender, EventArgs e)
            {
    foreach(item in lstQuantidadeDeVlomes)
    iQuantidadeVolumes = item;
      for (int i = 0; i < iQuantidadeVolumes; i++)
    //continua


    Certo?

    --
    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta

    • Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 13:06
    domingo, 22 de janeiro de 2017 22:54
  • Rodrigo não entendi muito bem, vc poderia colocar dentro do meu codigo acima o que vc me indicou pra fazer, e que sou leigo ainda no c# então não sei onde devo colocar este codigo dentro do meu codigo acima.

    Se vc puder me ajudar agradeço.


    JUNIOR GUERREIRO T.I

    domingo, 22 de janeiro de 2017 23:34
  • Bom dia Junior,

    Conseguiu resolver o problema postado nessa thread?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 23 de janeiro de 2017 13:48
    Moderador
  • Ainda não Robson, estou com dificuldade em colocar este código acima dentro do meu código, não esta dando certo, seria possível colocar o código acima dentro do meu código que eu coloquei no post.

    JUNIOR GUERREIRO T.I

    segunda-feira, 23 de janeiro de 2017 13:56
  • Olá Junior Guerreiro

    Vamos ver se entendi sua necessidade, neste momento você precisa colocar o numero da NF inicial e Fim certo?

    Após isso o sistema irá fazer um loop até chegar na ultima NF e realizar a impressão das etiquetas?


    Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.


    Daniel Ribeiro Arrais
    Consultor Sênior
    Site: www.danielarrais.com.br
    Linkedin: http://www.linkedin.com/in/danielarrais
    E-mail: arraishapkido@gmail.com
    Skype: dani.arrais

    terça-feira, 24 de janeiro de 2017 09:51
  • Bom dia Daniel...

    Sim e isso mesmo, só um detalhe no meu código acima eu imprimo as etiquetas de acordo com o numero de volumes. Ex nota fiscal 100 volumes 4 então são 4 etiquetas, nota 101 volumes 1 uma etiqueta assim sucessivamente. Isso hoje já faço, so que agora preciso imprimir varias notas em sequencia.


    JUNIOR GUERREIRO T.I

    • Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 13:05
    terça-feira, 24 de janeiro de 2017 12:24
  • Bom dia Junior,

    Existem alguns posts seus que tem o mesmo título ou muito semelhante.

    Este aqui especificamente, foi resolvido?

    Se sim, por gentileza marque a resposta que mais ajudou, ou poste a sua própria solução.

    Se não, por gentileza, busque evitar títulos ou conteúdos iguais ou muito semelhantes para mantermos o fórum organizado.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 31 de janeiro de 2017 12:58
    Moderador
  • Tinha esquecido de marcar a resposta.

    JUNIOR GUERREIRO T.I

    terça-feira, 31 de janeiro de 2017 13:06