Fórum
Ver pergunta

Cadeia de caracteres de entrada com formato incorrecto. | Criar Documento de Venda   

43 visualizações
1
0

Olá, estou a tentar criar documentos de venda a partir das classes VndBEDocumentoVenda e VndBELinhaDocumentoVenda com C# mas estou sempre com este erro de “Cadeia de caracteres de entrada com formato incorrecto.”. Verifiquei séries criadas, Tipo de documento, condição/modo de pagamento, iva e artigo a inserir e estão bem na minha base de dados DEMO.

Segue abaixo o código utilizado para gravar a venda.

 

Obs: o objeto fatura contém os dados chave para compor o documento.

//Cabecalho
vndBEDocumentoVenda = new VndBEDocumentoVenda();
vndBEDocumentoVenda.TipoEntidade = “C”;
vndBEDocumentoVenda.Entidade = fatura.Entidade;
vndBEDocumentoVenda.Filial = “000”;
vndBEDocumentoVenda.Tipodoc = fatura.TipoDoc;
vndBEDocumentoVenda.Serie = this.BSO.Base.Series.DaSerieDefeito(“V”,fatura.TipoDoc, fatura.DataDoc);
vndBEDocumentoVenda.NumDoc = BSO.Base.Series.ProximoNumero(“V”, fatura.TipoDoc, vndBEDocumentoVenda.Serie);
vndBEDocumentoVenda.Moeda = fatura.Moeda;
vndBEDocumentoVenda.CBLAno = fatura.DataDoc.Year;
vndBEDocumentoVenda.DataDoc = fatura.DataDoc;
vndBEDocumentoVenda.DataHoraCarga = fatura.DataDoc;
vndBEDocumentoVenda.DataVenc = fatura.DataDoc;
vndBEDocumentoVenda.Utilizador = this.BSO.Contexto.UtilizadorActual;
vndBEDocumentoVenda.CondPag = this.BSO.Base.Clientes.DaValorAtributo(fatura.Entidade, “CondPag”);
vndBEDocumentoVenda.ModoPag = this.BSO.Base.Clientes.DaValorAtributo(fatura.Entidade, “ModoPag”);
vndBEDocumentoVenda.Cambio = 1;
vndBEDocumentoVenda.CambioMAlt = 1;
vndBEDocumentoVenda.CambioMBase = 1;

//Linhas
VndBELinhaDocumentoVenda vndBELinhaDocumentoVenda = new VndBELinhaDocumentoVenda();
vndBELinhaDocumentoVenda.Artigo = fatura.Artigo;
vndBELinhaDocumentoVenda.Descricao = fatura.Descricao;
vndBELinhaDocumentoVenda.CCustoCBL = fatura.CentroCustos;
vndBELinhaDocumentoVenda.Quantidade = fatura.Quantidade;
vndBELinhaDocumentoVenda.PrecUnit = Math.Round(fatura.PrecoUnitario);
vndBELinhaDocumentoVenda.CodIva = fatura.CodigoIVA;

vndBEDocumentoVenda.Linhas.Add(vndBELinhaDocumentoVenda);

this.BSO.Vendas.Documentos.Actualiza(vndBEDocumentoVenda, ref avisos, ref docLiqRet,ref docLiqRetGat,true);

  • .NET Framework 4.7.1
  • C#
  • Base de dados Demo
  • ERP Executive 10.0010.6046
Faça login para poder traduzir
Integração
V10
Geral
Base Dados
Marcado como spam
Criado há 4 meses e 3 dias dhiegoconceio
dhiegoconceio Iniciante
1 respostas
0
Resposta privada

Olá Dhiego,

acho que nunca vi esse problema exactamente mas o Primavera tem algumas funções que ajudam a preencher os documentos com menos chance de erros. Tal como quando se usa o Editor de Vendas e se escolhe um cliente, se dá um Tab e são automaticamente preenchidos os dados do cliente, no código é possivel fazer o mesmo.

  1. Antes de criar o documento utilize a instrução BSO.IniciaTransaccao(). No final iremos usar BSO.TerminaTransaccao() se tudo correr bem ou BSO.DesfazTransaccao() se houver problemas. Estes métodos abrem, fecham e gerem as ligações e transferência de dados.
  2. Existe um método que preenche automaticamente os "dados relacionados", por exemplo com o código de cliente ele consegue preencher nome, morada, NIF, etc
  3. Antes de usar o BSO.Vendas.Documentos.Actualiza(), é boa ideia começar com o ValidaActualização() que retorna true se o documento não tiver problemas ou falso se houver erros nas validações. É possível tratar esses erros e costumam ser claros o suficiente.
  4. Tudo isto pode ser usado dentro de um try-catch para apanhar alguma coisa mais estranha.

Abaixo deixo um exemplo base.

if (!BSO.EmTransaccao()) { BSO.IniciaTransaccao(); }

VndBEDocumentoVenda docVenda = new VndBEDocumentoVenda();
int vdDadosTodos = (int)BasBETiposGcp.PreencheRelacaoVendas.vdDadosTodos;
int vdDadosCondPag = (int)BasBETiposGcp.PreencheRelacaoVendas.vdDadosCondPag;

docVenda.Entidade = x
docVenda.TipoEntidade = "C";
docVenda.Tipodoc = y;
docVenda.Serie = BSO.Base.Series.DaSerieDefeito("V", docVenda.Tipodoc);
BSO.Vendas.Documentos.PreencheDadosRelacionados(docVenda, ref vdDadosTodos);

docVenda.DataDoc = DateTime.Now;
docVenda.HoraDefinida = false;
docVenda.CondPag = z;
BSO.Vendas.Documentos.PreencheDadosRelacionados(docVenda, ref vdDadosCondPag);

// Manipular linhas do documento e depois introduzir a factura na transaccao em aberto -> verificação -> actualizar -> fechar;
// Introduz fatura na Transacção
BSO.Vendas.Documentos.CalculaValoresTotais(docVenda);

// ValidaActualizacao() utiliza alguns arguemntos por referência por isso têm de ser declarados antes.
if (BSO.Vendas.Documentos.ValidaActualizacao(docVenda, BSO.Vendas.TabVendas.Edita(docVenda.Tipodoc), ref serie, ref strErro)) {
    BSO.Vendas.Documentos.Actualiza(docVenda, ref strAvisos, ref strErro);
    if (BSO.EmTransaccao()) { BSO.TerminaTransaccao(); }
}
else {
    if (BSO.EmTransaccao()) { BSO.DesfazTranscaccao() }
}

De notar que pode fazer BSO.IniciaTransaccao(), criar quantos DocumentosVenda quiser e só no fim fazer BSO.TerminaTransaccao() para os gravar; até lá ficam suspensos na cache. Se a qualquer momento fizer BSO.DesfazTransaccao(), nenhum dos documentos será gravado!

 

Faça login para poder traduzir
Marcado como spam
Criado há 4 meses e 2 dias ricardogiro
ricardogiro Responsiveness Member
    Comentários
    Talvez também consiga saber onde está o erro com o debugger. Ou mesmo a mensagem de erro normalmente algures diz "line:200" por exemplo
    4 meses e 2 dias
    ricardogiro