guia técnico do pedido

introdução

Neste guia serão abordadas as funcionalidades relacionadas a Operação de Pedido, voltadas aos desenvolvedores do Bematech ERP, dando a visão a quem irá implementar melhorias no sistema utilizando o objeto de gestão responsável pela criação e edição de pedidos.

objetivo

O objetivo deste guia é orientar como utilizar as APIs disponibilizadas para manipular uma Operação de Pedido onde iremos explanar desde a criação de um pedido, edição, e as demais funcionalidades como aprovação, cancelamento de um pedido, dentre outras funcionalidades.

Considerando-se a complexidade de um ERP, não serão descritos nesse guia termos introdutórios do sistema.

pré-requisitos

Para a perfeita compreensão do uso do objetos de gestão responsável por manipular Operação de Pedido se faz necessário entender sua abrangência e estar familiarizado com a linguagem do sistema Bematech ERP. Devemos iniciar tendo uma visão de como desenvolver no sistema Bematech ERP, portanto realize a leitura do Guia de estudo da Plataforma Bematech ERP, além disso é necessário que o leitor tenha o conhecimento de uso e dos conceitos do Bematech ERP.

introdução ao objeto de pedido

De forma macro, existem dois tipos principais de Pedido: o Pedido que posteriormente será baixado e o Pedido com Baixa Automática.

Neste guia será abordado o primeiro tipo de pedido descrito: o Pedido que posteriormente será baixado.

O objeto responsável por manipular as operações de Pedido é o OperacaoPedido. O OperacaoPedido é uma especialização do objeto Operacao e desta forma, tem como principais API's seus datasets. Lembrando que como a diferenciação entre um pedido de Compras, Vendas, etc é a classe de operação, o objeto OperacaoPedido é utilizado para manipular qualquer pedido independente desta classe.

Antes de conhecermos os conceitos e as APIs do objeto de gestão OperacaoPedido, precisamos entender a base para geração destes dataset que é o modelo de dados do pedido.

Em seguida, devemos conhecer a API do OperacaoPedido, que é uma especialização da Operação. Deve ser realizada a leitura do seguinte manual que explica as principais API's do OperacaoPedido: datasets do operacaoPedido

utilizando o objeto OperacaoPedido

Para uma melhor visão de como utilizar o OperacaoPedido abaixo serão listados os principais casos de uso e a explicação de quais as APIs devem ser utilizadas.

instanciando o OperacaoPedido

configurando instância

Ao realizar a instância do OperacaoPedido deve-se passar qual a classe de configuração de Pedido desejamos instanciar. Essa classe de configuração determina qual configuração de campos será utilizada, ou seja, será pesquisado, por exemplo, a definição da classe de quais campos são de item ou de cabeçalho. Também será base para as pesquisas da Sugestão de Classe e Sugestão de Núcleo quanto ao Tipo de Pedido. Por este motivo, a classe deve ser passada na instância do objeto. No caso de não ser passada nenhuma informação será utilizada a classe mãe -2008879000; /* Pedidos ou Provisões */.

var novoPedido = new OperacaoPedido( <informar a chave da classe de configuração do Pedido> );

Exemplo de idbc realizando a instância do OperacaoPedido utilizando a classe de configuração de Entradas. Assim como Entradas podem ser utilizadas qualquer classe de Pedido que seja exibida no processo Configuração de Campos do Pedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

aproveitando instância do pedido

Conforme explicado no guia técnico das operações para maior performance é possível aproveitar a instância do OperacaoPedido e realizar várias operações sem a necessidade de reinstanciar o OperacaoPedido. Ou seja, é possível instanciar somente uma vez o OperacaoPedido e criar, abrir, editar uma operações após a outra. Para isto faremos uso dos métodos "nova" e "fecha", conforme explicado o passo a passo abaixo.

Ao instanciar um OperacaoPedido para criação de um novo pedido, conforme descrito em criar um novo pedido com dados informados, utilizamos o método nova() em seguida populamos os datasets pedido e pedidoCab e gravamos utilizando o método grava.

Abaixo temos o código completo para criar um novo pedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

novoPedido.grava();

Caso seja necessário criar um novo pedido não se faz necessário instanciar outra vez o OperacaoPedido, pois podemos aproveitar a mesma instância criada anteriormente, bastando para isso utilizar o método fecha que irá deixar o objeto pronto para manipular uma nova operação.

Dessa forma podemos chamar o fecha após a gravação do primeiro pedido.

novoPedido.fecha();

Após fechar caso queria criar um segundo pedido basta chamar o método nova.

novoPedido.nova();

Em seguida deve ser populado as informações de cabeçalho de itens do pedido.

Para popular as informações do cabeçalho do pedido, basta informar os dados de cabeçalho sem necessidade de dar um append no dataset e ao final executar o post do dataset, visto que o pedidoCab somente tem um item e é preenchido automaticamente pelo objeto, sempre.

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

Para inserir as informações do item do pedido, deve ser manipulada a api de dataset pedido, executando o método append do dataset e preenchendo as informações.

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc criando dois pedidos com a mesma instância do OperacaoPedido. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

novoPedido.grava();

novoPedido.fecha();

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

novoPedido.grava();

criando pedidos

criar um novo pedido com dados informados

Para realizar a criação de um novo Pedido devemos iniciar instanciando o OperacaoPedido passando a classe mãe das classes de Pedido que iremos utilizar. Ou seja, se iremos realizar pedido de Compras p Consumo, Compras p Consumo ST, etc, devemos instanciar o OperacaoPedido passando a classe Entradas.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método "nova" conforme api da Operacao.

novoPedido.nova();

Em seguida deve ser populado as informações de cabeçalho de itens do pedidos.

Para popular as informações do cabeçalho do pedido, basta informar os dados de cabeçalho sem necessidade de dar um append no dataset e ao final executar o post do dataset, visto que o pedidoCab somente tem um item e é preenchido automaticamente pelo objeto, sempre.

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

Para inserir as informações do item do pedido, deve ser manipulada a api de dataset pedido, executando o método append do dataset e preenchendo as informações.

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

Observação: Os passos acima de popular tanto o cabeçalho quando o item do pedido, ao desenvolver interfaces com o WebFramework o tratamento de manipulação de dataset é realizado pelo próprio Framework, bastando a grade de item e grade de cabeçalho terem como referência o dataset do objeto.

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

novoPedido.grava();

criar um novo pedido utilizando as sugestões

Como realizar a criação de um novo Pedido utilizando as sugestões de classe, sugestão de núcleo e regras de preço.

Para realizar a criação de um novo Pedido devemos iniciar instanciando o OperacaoPedido passando a classe mãe das classes de Pedido que iremos utilizar. Ou seja, se iremos realizar pedido de Compras p Consumo, Compras p Consumo ST, etc, devemos instanciar o OperacaoPedido passando a classe Entradas.

Em seguida deve ser utilizado o método "nova" conforme api da Operacao.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método "nova" conforme api da Operacao.

novoPedido.nova();

Em seguida deve ser populado as informações de cabeçalho de itens do pedidos.

Para popular as informações do cabeçalho do pedido, basta informar os dados de cabeçalho sem necessidade de dar um append no dataset e ao final executar o post do dataset, visto que o pedidoCab somente tem um item e é preenchido automaticamente pelo objeto, sempre.

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

Para inserir as informações do item do pedido, deve ser manipulada a api de dataset pedido, executando o método append do dataset e preenchendo inicialmente o campo do recurso que será utilizado nas APIs de sugestão.

novoPedido.pedido.append();

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

A primeira sugestão a ser pesquisada será a Sugestão de Classe.

novoPedido.pedido.classe = SugestaoPedido.pegaSugestaoClasse(novoPedido.pedidoCab, novoPedido.pedido);

Para a pesquisa da sugestão de classe devem ser informados os datasets de cabeçalho e item populados com as informações que impactam na sugestão de classe (recurso, núcleo, pessoa, local de escrituração e tipo de saída). A informação de "Tipo de Pedido" do cadastro de Sugestão de Classe deverá ser passada para o método pegaSugestaoClasse através do parâmetro opcional "extrafilter" onde deve ser informada a mesma classe de configuração informada na instância do OperacaoPedido.

var extraFilter = [["classepedido", -1899999819 /* Entradas */]];

novoPedido.pedido.classe = SugestaoPedido.pegaSugestaoClasse(novoPedido.pedidoCab, novoPedido.pedido, extraFilter);

Em seguida deverá ser pesquisada a Sugestão de Núcleo, isso porque a sugestão de núcleo leva em consideração a classe do item já pesquisada anteriormente.

novoPedido.pedido.nucleo = SugestaoPedido.pegaSugestaoNucleo(novoPedido.pedidoCab, novoPedido.pedido);

Para a pesquisa da sugestão de núcleo devem ser informados os datasets de cabeçalho e item populados com as informações que impactam na sugestão de núcleo (classe operação, local de escrituração, estabelecimento, recurso e pessoa).

Em seguida deverá ser pesquisado o preço do recurso para preenchimento do campo unitário.

novoPedido.pedido.unitario = novoPedido.pegaPrecoUnitarioPedido(novoPedido.pedido, novoPedido.pedidoCab);

Em seguida devem ser preenchidos os demais campos do dataset pedido.

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.post();

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1894443575); // /products/INTEQerp infrastructure/library/pedido/misc/SugestaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;novoPedido.pedidoCab.post();

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

var extraFilter = [["classepedido", -1899999819 /* Entradas */]];

novoPedido.pedido.classe = SugestaoPedido.pegaSugestaoClasse(novoPedido.pedidoCab, novoPedido.pedido, extraFilter);

novoPedido.pedido.nucleo = SugestaoPedido.pegaSugestaoNucleo(novoPedido.pedidoCab, novoPedido.pedido);

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = novoPedido.pegaPrecoUnitarioPedido(novoPedido.pedido, novoPedido.pedidoCab);

novoPedido.pedido.post();

novoPedido.grava();

criar um novo pedido e selecionando uma negociação

Para realizar a criação de um novo Pedido devemos iniciar instanciando o OperacaoPedido passando a classe mãe das classes de Pedido que iremos utilizar. Ou seja, se iremos realizar pedido de Compras p Consumo, Compras p Consumo ST, etc, devemos instanciar o OperacaoPedido passando a classe Entradas.

Em seguida deve ser utilizado o método "nova" conforme api da Operacao.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

Em seguida deve ser populado as informações de cabeçalho de itens do pedidos.

Para popular as informações do cabeçalho do pedido, basta informar os dados de cabeçalho sem necessidade de dar um append no dataset e ao final executar o post do dataset, visto que o pedidoCab somente tem um item e é preenchido automaticamente pelo objeto, sempre.

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

Para inserir as informações do item do pedido, deve ser manipulada a api de dataset pedido, executando o método append do dataset e preenchendo as informações.

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

Antes de realizar a aprovação de um pedido, deve ser considerado o comportamento configurado para a classe do pedido.

  • Nos casos onde a classe do item do pedido está configurada para exigir negociação (verificar se campo “Exige Negociação” no cadastro de classes está preenchido com "Sim" ou se alguma classe mãe estiver com a configuração indicando "Sim"), a operação exigirá negociação antes da aprovação.

  • Nos casos onde a classe do item do pedido não está configurada para exigir negociação a operação pode ser aprovada sem negociação

Para realizar a negociação a operação precisa estar calculada.

novoPedido.calcula();

Estamos considerando no exemplo abaixo uma operação que ainda não foi negociada, então vamos primeiro carregar a negociação.

var itens = novoPedido.negociacaoDoPedido.itens;

itens.carrega();

Em seguida deve ser selecionado o item de negociação, neste exemplo vamos negociar no item "Todos" considerando que os recursos da operação não tem condição própria.

var item = itens.pegaItem(IdItens.TODOS);

Em seguida deve ser realizada a busca das condições de negociação que estão disponíveis para negociação.

item.condicoesDeNegociacao.busca();

A busca monta todas as sugestões de negociação que poderão ser verificadas no dataset "item.condicoesDeNegociacao.sugestoesDeNegociacao". Após verificar as sugestões será necessário selecionar umas das sugestões de negociação, indicando qual a condição de negociação que será negociada, qual o tipo de documento, bandeira e o número de parcelas.

var condNeg = 175728950 /* Fin. Store 4x c/ TAC */;

var tipoDoc = -1894542753 /* FIN */;

var bandeira = null;

var numParcelas = 2;

var identificadorSugestao = {

condNeg: condNeg, tipoDocumento: tipoDoc, bandeira: bandeira, numParcelas: numParcelas

};

var valorANegociar = novoPedido.pedidoCab.totalnegociado - novoPedido.pedidoCab.acrescnegfin + novoPedido.pedidoCab.descnegfin;

var sugestaoSelecionada = itens.selecionaSugestao(item.id, valorANegociar, identificadorSugestao);

Para visualizar as parcelas geradas após ter sido selecionado a sugestão.

sugestaoSelecionada.calcula(identificadorSugestao);

sugestaoSelecionada.parcelas;

Caso tenha uma operação que já tenha sido negociada e se deseje reiniciar a negociação para fazer uma nova negociação.

var itens = novoPedido.negociacaoDoPedido.itens;

itens.reinicia();

Em seguida deve ser chamado o aprova e o grava.

novoPedido.aprova();

novoPedido.grava();

Exemplo completo no idbc. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

novoPedido.calcula();

var itens = novoPedido.negociacaoDoPedido.itens;

itens.reinicia();

itens.carrega();

var item = itens.pegaItem(IdItens.TODOS);

item.condicoesDeNegociacao.busca();

item.condicoesDeNegociacao.sugestoesDeNegociacao;

var condNeg = 175728950 /* Fin. Store 4x c/ TAC */;

var tipoDoc = -1894542753 /* FIN */;

var bandeira = null;

var numParcelas = 2;

var identificadorSugestao = {

condNeg: condNeg, tipoDocumento: tipoDoc, bandeira: bandeira, numParcelas: numParcelas

};

var valorANegociar = novoPedido.pedidoCab.totalnegociado - novoPedido.pedidoCab.acrescnegfin + novoPedido.pedidoCab.descnegfin;

var sugestaoSelecionada = itens.selecionaSugestao(item.id, valorANegociar, identificadorSugestao);

novoPedido.aprova();

novoPedido.grava();

criar um novo pedido sem gravar as informações

Para realizar a criação de um novo Pedido, porém sem persistir as informações no banco de dados, deve ser informado "false" para a propriedade "applyUpdatesDosDataSetsNaGravacao" do objeto Operacao.

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.applyUpdatesDosDataSetsNaGravacao = false;

Ao instanciar o objeto OperacaoPedido o padrão desta propriedade é "true", ao informar "false" a operação poderá ser calculada, aprovada e gravada, realizando todas as validações da operação, porém ao executar o método grava() as alterações não serão gravadas no banco de dados.

Exemplo completo no idbc onde iremos simular a criação de um pedido, porém sem gravar a informação no banco de dados. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.applyUpdatesDosDataSetsNaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

novoPedido.grava();

criar um novo pedido aprovado

Para realizar a criação de um novo Pedido devemos iniciar instanciando o OperacaoPedido passando a classe mãe das classes de Pedido que iremos utilizar. Ou seja, se iremos realizar pedido de Compras p Consumo, Compras p Consumo ST, etc, devemos instanciar o OperacaoPedido passando a classe Entradas.

Em seguida deve ser utilizado o método "nova" conforme api da Operacao.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

Em seguida deve ser populado as informações de cabeçalho de itens do pedidos.

Para popular as informações do cabeçalho do pedido, basta informar os dados de cabeçalho sem necessidade de dar um append no dataset e ao final executar o post do dataset, visto que o pedidoCab somente tem um item e é preenchido automaticamente pelo objeto, sempre.

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

Para inserir as informações do item do pedido, deve ser manipulada a api de dataset pedido, executando o método append do dataset e preenchendo as informações.

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

Antes de realizar a aprovação de um pedido, deve ser considerado o comportamento configurado para a classe do pedido em relação a obrigatoriedade para realizar a negociação do pedido, conforme descrito em criar um novo pedido e selecionando uma negociação. Dessa forma antes de aprovar, caso necessário o pedido deve ser negociado.

Considerando que a classe do pedido não exija a negociação, para realizar a aprovação do pedido deve ser utilizado o método aprova.

novoPedido.aprova();

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.nova();

novoPedido.fechaOperacaoNoTerminoDaGravacao = false;

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.locescritu = 408425 /* Unum LocEscritu */;

novoPedido.pedidoCab.pessoa = 39633 /* AGUANAMBI */;

novoPedido.pedidoCab.post();

novoPedido.pedido.append();

novoPedido.pedido.classe = -1899998925 /* C p Consumo */;

novoPedido.pedido.nucleo = 36925844 /* Almox Análise */;

novoPedido.pedido.recurso = 42354 /* ANTENA TV */;

novoPedido.pedido.programaca = new Date();

novoPedido.pedido.quantidade = 1;

novoPedido.pedido.unitario = 5;

novoPedido.pedido.post();

novoPedido.aprova();

novoPedido.grava();

criar um novo pedido a partir de outro pedido

Para realizar a criação de um novo Pedido copiando informações de um outro Pedido, gravado anteriormente, devem existir duas instâncias do objeto OperacaoPedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

var pedidoOrigem = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve abrir a operação com o pedido origem que se deseja duplicar, informando para o método abre() a chave de criação do pedido origem.

pedidoOrigem.abre(123456);

O novo pedido a ser criado será copiado sem a necessidade de chamar o método nova(), pois o método copia() do objeto Operacao já chama o método nova(). Deve ser passado como parâmetro a operação origem já aberta e em seguida a operação com o novo pedido pode ser calculada, aprovada, gravada, etc.

novoPedido.copia(pedidoOrigem);

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

var pedidoOrigem = new OperacaoPedido(-1899999819 /* Entradas */);

pedidoOrigem.abre(123456);

novoPedido.copia(pedidoOrigem);

novoPedido.grava();

abrindo e alterando

abrindo pedido e alterando dados

Para realizar a edição de dados de um Pedido já gravado anteriormente, deve ser instanciado o OperacaoPedido.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Em seguida os dados do cabeçalho podem ser acessados e editados pelo dataset pedidoCab.

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.post();

Os dados dos itens podem acessados e editados pelo dataset pedido.

novoPedido.pedido.quantidade = 2;

novoPedido.pedido.post();

Caso precise alterar mais de um item do pedido o dataset pedido pode ser percorrido para edição.

var pedido = novoPedido.pedido;

for (pedido.first(); !pedido.eof; pedido.next() ){

pedido.quantidade = pedido.quantidade * 2;

pedido.post();

}

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.pedidoCab.estabeleci = 27945820 /* Sanzio Estab */;

novoPedido.pedidoCab.post();

var pedido = novoPedido.pedido;

for (pedido.first(); !pedido.eof; pedido.next() ){

pedido.quantidade = pedido.quantidade * 2;

pedido.post();

}novoPedido.grava();

abrindo pedido e aprovando

Para aprovar um Pedido já gravado anteriormente, deve ser instanciado o objeto OperacaoPedido.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Antes de realizar a aprovação de um pedido, deve ser considerado o comportamento configurado para a classe do pedido em relação a obrigatoriedade para realizar a negociação do pedido, conforme descrito em criar um novo pedido e selecionando uma negociação. Dessa forma antes de aprovar, caso necessário o pedido deve ser negociado.

Considerando que a classe do pedido não exija a negociação, para realizar a aprovação do pedido deve ser utilizado o método aprova.

novoPedido.aprova();

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.aprova();

novoPedido.grava();

abrindo pedido e desaprovando

Para desaprovar um Pedido já gravado anteriormente, deve ser instanciado o objeto OperacaoPedido.

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Em seguida deve ser utilizado o método desaprova, porém para desaprovar um pedido ele não deve ter sido baixado. Também não pode ser desaprovado um pedido com saldo cancelado.

novoPedido.desaprova();

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.desaprova();

novoPedido.grava();

cancelamentos

cancelando um pedido

Para cancelar um Pedido já gravado anteriormente, deve ser instanciado o OperacaoPedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Em seguida realizar o cancelamento do pedido utilizando o método cancela(), considerando que um pedido que tenha sido baixado não pode ser cancelado.

novoPedido.cancela();

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.cancela();

novoPedido.grava();

cancelando itens de um pedido

Para cancelar um item de um Pedido já gravado anteriormente, deve ser instanciado o OperacaoPedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Em seguida realizar o cancelamento do item do pedido utilizando o método cancelaItem(), passando a chave do item que se deseja cancelar.

novoPedido.cancelaItem(123457);

Outra forma de realizar o cancelamento de item do pedido é utilizando o método cancelaItem() passando o dataset pedido posicionado no item que se deseja cancelar.

novoPedido.pedido.findKey(123457);

novoPedido.cancelaItem(novoPedido.pedido);

Um item de pedido que tenha sido baixado não pode ser cancelado.

Ao cancelar um item do pedido pode existir impacto no valor do total a ser negociado na operação, já que o item cancelado não será mais considerado para todos os cálculos da operação, portanto caso o pedido já tenha sido negociado será necessário realizar a negociação novamente.

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.pedido.findKey(123457);

novoPedido.cancelaItem(novoPedido.pedido);

novoPedido.grava();

cancelando saldo de um pedido

Para cancelar o saldo de um Pedido já gravado anteriormente, deve ser instanciado o OperacaoPedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Em seguida realizar o cancelamento do saldo do pedido utilizando o método cancelaSaldo() do objeto OperacaoPedido.

novoPedido.cancelaSaldo();

O cancelamento de saldo não pode ser realizado apenas para o um item do pedido, e após o cancelamento de saldo de um pedido não existirá mais pendência de baixa do pedido para o pedido que teve o saldo cancelado.

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.cancelaSaldo();

novoPedido.grava();

descancelando saldo de um pedido

Para descancelar o saldo de um Pedido já gravado anteriormente, deve ser instanciado o OperacaoPedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Em seguida realizar o descancelamento do saldo do pedido utilizando o método descancelaSaldo() do objeto OperacaoPedido.

novoPedido.descancelaSaldo();

O descancelamento de saldo não pode ser realizado apenas para o um item do pedido, e após o descancelamento de saldo de um pedido o saldo do pedido volta a ficar com pendência de baixa.

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.descancelaSaldo();

novoPedido.grava();

exclusão

excluindo um pedido

Para excluir um Pedido já gravado anteriormente, deve ser instanciado o OperacaoPedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Para excluir um pedido, deve ser manipulada a api de dataset pedido, executando o método empty do dataset que irá excluir todos os itens do pedido. Deve ser considerado que um pedido aprovado ou um pedido baixado não pode ser excluído.

novoPedido.pedido.empty();

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.pedido.empty();

novoPedido.grava();

excluindo itens de um pedido

Para excluir um item de um Pedido já gravado anteriormente, deve ser instanciado o OperacaoPedido.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

Em seguida deve ser utilizado o método abre() do objeto Operacao passando a chave de criação da operação.

novoPedido.abre(123456);

Para excluir um item do pedido, deve ser manipulada a api de dataset pedido, executando o método del do dataset onde o dataset deve estar posicionado no item que se deseja excluir.

novoPedido.pedido.findKey(123457);

novoPedido.pedido.del();

Um pedido que tenha sido baixado não pode ter um item de pedido excluído.

Ao excluir um item do pedido pode existir impacto no valor do total a ser negociado na operação, já que o item excluído não será mais considerado para todos os cálculos da operação, portanto caso o pedido já tenha sido negociado será necessário realizar a negociação novamente.

Em seguida deve ser chamado o grava.

novoPedido.grava();

Exemplo completo no idbc.

__includeOnce(-1898188604); // /products/INTEQerp infrastructure/library/pedido/objects/OperacaoPedido.ijs

__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs

var novoPedido = new OperacaoPedido(-1899999819 /* Entradas */);

novoPedido.abre(123456);

novoPedido.pedido.findKey(123457);

novoPedido.pedido.del();

novoPedido.grava();

consultando operações de pedido

Para realizar a consulta de pedidos, deve-se utilizar o datasource de Pedidos.

Maiores detalhes: https://sites.google.com/a/bematech.com/erp/o-que-fazemos/modulos/venda/manuais-tecnicos/datasource-de-pedido

Tópicos avançados

Configuração de campos do pedido