Usuário com melhor resposta
Importando um XML e usando colunas para fazer calculos

Pergunta
-
Preciso de uma ajuda, estou importando xml de Nfe, e estou usando o campo QTDA para fazer um calculo, só que o campo quantidade no xml e composto desta forma, 360.0000 e quando faço a importação desse campo fica desta forma 3600000 porque estou transformando para decimal no código, e também uso esta coluna de QTDA para fazer um calculo por Ex. coluna QTDA / QTDA. EMB. no caso seria 3600000 / 2 = 1.800.000,00 mas esta errado este resultado o resultado correto deveria ser 180 e o campo QTDA deveria retornar do XML 360 e não 3600000 como esta retornando. Como posso resolver isso?
Segue o XML
<prod><cProd>CB60007/0180/6P32</cProd><cEAN/>
<xProd>CRODAPEARL AF-LQ-(BR) 006416</xProd>
<NCM>38249929</NCM>
<CEST>2806300</CEST>
<CFOP>5101</CFOP>
<uCom>KG</uCom>
<qCom>360.0000</qCom>
<vUnCom>8.5600000000</vUnCom>
<vProd>3081.60</vProd>
<cEANTrib/><uTrib>KG</uTrib>
<qTrib>360.0000</qTrib>
<vUnTrib>8.5600000000</vUnTrib>
<indTot>1</indTot>
<xPed>002459</xPed>
<nFCI>D89A9C05-4493-4740-937A-5DA6B9E675A8</nFCI></prod>
segue meu codigo
private void btn_xml_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml(@"C:\Xml_Entrada\" + txt_chave.Text + ".xml");
txt_fornecedor.Text = ds.Tables["emit"].Rows[0]["xNome"].ToString();
txt_cnpj.Text = ds.Tables["emit"].Rows[0]["CNPJ"].ToString();
txt_nota.Text = ds.Tables["ide"].Rows[0]["nNF"].ToString();
string FileName = @"C:\Xml_Entrada\" + txt_chave.Text + ".xml";
List<ClasseItensXml> ListaItens = new List<ClasseItensXml>();
XmlDocument doc = new XmlDocument();
doc.Load(FileName);
var proditens = doc.GetElementsByTagName("prod");
foreach (XmlElement nodo in proditens)
{
ListaItens.Add(
new ClasseItensXml()
{
CodigoProduto = nodo.GetElementsByTagName("cProd")[0].InnerText.Trim(),
NomeProduto = nodo.GetElementsByTagName("xProd")[0].InnerText.Trim(),
QuantidadeComercializada = Convert.ToDecimal(nodo.GetElementsByTagName("qCom")[0].InnerText.Trim())
});
}
dgw_Xml.DataSource = ListaItens;
DataGridViewComboBoxColumn TipoEmabalagem = new DataGridViewComboBoxColumn();
TipoEmabalagem.HeaderText = "TIPO EMBALAGEM";
TipoEmabalagem.ReadOnly = false;
//TipoEmabalagem.DisplayIndex = 8;
TipoEmabalagem.Sorted = true;
dgw_Xml.Columns.Add(TipoEmabalagem);
var embalagem = new ArrayList();
embalagem.Add("SACARIA");
embalagem.Add("BOMBONA");
embalagem.Add("TAMBOR");
embalagem.Add("TAMBORETE");
embalagem.Add("BALDE");
embalagem.Add("BARRICA DE PAPELAO");
embalagem.Add("CAIXA");
embalagem.Add("FRASCO");
embalagem.Add("PACOTE");
TipoEmabalagem.Items.AddRange(embalagem.ToArray());
dgw_Xml.Columns["PesoBruto"].DefaultCellStyle.Format = "N";
dgw_Xml.Columns["QtdaEmbalagem"].DefaultCellStyle.Format = "N";
dgw_Xml.Columns["ConferenciaPB"].DefaultCellStyle.Format = "N";
dgw_Xml.Columns["ConferenciaPL"].DefaultCellStyle.Format = "N";
//dgw_Xml.Columns["QuantidadeComercializada"].DefaultCellStyle.Format = "N";
dgw_Xml.Columns["DataFabricacao"].DefaultCellStyle.Format = "d";
dgw_Xml.Columns["DataValidade"].DefaultCellStyle.Format = "d";
dgw_Xml.Columns["DataFabricacao"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgw_Xml.Columns["DataValidade"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgw_Xml.Columns["PesoBruto"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgw_Xml.Columns["QtdaEmbalagem"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgw_Xml.Columns["ConferenciaPB"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgw_Xml.Columns["ConferenciaPL"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dgw_Xml.Columns["CodigoProduto"].HeaderText = "COD. PRODUTO";
dgw_Xml.Columns["NomeProduto"].HeaderText = "DESCRIÇÃO";
dgw_Xml.Columns["LoteFornecedor"].HeaderText = "LOTE";
dgw_Xml.Columns["DataFabricacao"].HeaderText = "FABRICAÇÃO";
dgw_Xml.Columns["DataValidade"].HeaderText = "VALIDADE";
dgw_Xml.Columns["QuantidadeComercializada"].HeaderText = "QTDA.";
dgw_Xml.Columns["PesoBruto"].HeaderText = "PESO BRUTO";
dgw_Xml.Columns["QtdaEmbalagem"].HeaderText = "QTDA. EMB.";
dgw_Xml.Columns["ConferenciaPB"].HeaderText = "CONFERENCIA PB";
dgw_Xml.Columns["ConferenciaPL"].HeaderText = "CONFERENCIA PL";
dgw_Xml.Columns["CodigoProduto"].DisplayIndex = 0;
dgw_Xml.Columns["NomeProduto"].DisplayIndex = 1;
dgw_Xml.Columns["LoteFornecedor"].DisplayIndex = 2;
dgw_Xml.Columns["DataFabricacao"].DisplayIndex = 3;
dgw_Xml.Columns["DataValidade"].DisplayIndex = 4;
dgw_Xml.Columns["QuantidadeComercializada"].DisplayIndex = 5;
dgw_Xml.Columns["PesoBruto"].DisplayIndex = 6;
dgw_Xml.Columns["QtdaEmbalagem"].DisplayIndex = 7;
dgw_Xml.Columns["ConferenciaPB"].DisplayIndex = 8;
dgw_Xml.Columns["ConferenciaPL"].DisplayIndex = 9;
dgw_Xml.Columns["CodigoProduto"].ReadOnly = true;
dgw_Xml.Columns["NomeProduto"].ReadOnly = true;
dgw_Xml.Columns["LoteFornecedor"].ReadOnly = false;
dgw_Xml.Columns["DataFabricacao"].ReadOnly = false;
dgw_Xml.Columns["DataValidade"].ReadOnly = false;
dgw_Xml.Columns["QuantidadeComercializada"].ReadOnly = true;
dgw_Xml.Columns["PesoBruto"].ReadOnly = false;
dgw_Xml.Columns["QtdaEmbalagem"].ReadOnly = false;
dgw_Xml.Columns["ConferenciaPB"].ReadOnly = true;
dgw_Xml.Columns["ConferenciaPL"].ReadOnly = true;
}
private void dgw_Xml_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (DataGridViewRow row in dgw_Xml.Rows)
{
if (e.ColumnIndex == dgw_Xml.Columns["QtdaEmbalagem"].Index)
{
dgw_Xml.CurrentRow.Cells["ConferenciaPB"].Value = ConferirPB();
dgw_Xml.CurrentRow.Cells["ConferenciaPL"].Value = ConferirPL();
}
}
}
private decimal ConferirPB()
{
decimal pesoBruto = Convert.ToDecimal(dgw_Xml.CurrentRow.Cells["PesoBruto"].Value);
decimal qtdaEmbalagem = Convert.ToDecimal(dgw_Xml.CurrentRow.Cells["QtdaEmbalagem"].Value);
return pesoBruto / qtdaEmbalagem;
}
private decimal ConferirPL()
{
decimal pesoLiquido = Convert.ToDecimal(dgw_Xml.CurrentRow.Cells["QuantidadeComercializada"].Value);
decimal qtdaEmbalagem = Convert.ToDecimal(dgw_Xml.CurrentRow.Cells["QtdaEmbalagem"].Value);
return pesoLiquido / qtdaEmbalagem;
}segue a tela do resultado coluna CONFERENCIA PL esta com valor errado.
<pr/vol
JUNIOR GUERREIRO T.I
- Editado Junior Guerreiro quinta-feira, 19 de julho de 2018 14:45
Respostas
-
Resolvi o problema, alterando esta parte do meu código.
solução
QuantidadeComercializada = Convert.ToDecimal(nodo.GetElementsByTagName("qCom")[0].InnerText.Trim(),System.Globalization.CultureInfo.InvariantCulture)
JUNIOR GUERREIRO T.I
- Marcado como Resposta Junior Guerreiro quinta-feira, 19 de julho de 2018 17:09