Usuário com melhor resposta
Impressão de etiquetas

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
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
-
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
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
-
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
-
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.
-
-
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
-
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
-
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.
-