Neste guia serão abordadas as funcionalidades relacionadas a Operação de Requisição, 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 requisição.
O objetivo deste guia é orientar como utilizar as APIs disponibilizadas para manipular uma Operação de Requisição onde iremos explanar desde a criação de uma requisição, edição, e as demais funcionalidades como aprovação, cancelamento de uma requisição, dentre outras funcionalidades.
Considerando-se a complexidade de um ERP, não serão descritos nesse guia termos introdutórios do sistema.
Para a perfeita compreensão do uso do objeto de gestão responsável por manipular Operação de Requisição 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.
O objeto responsável por manipular as operações de requisição é o OperacaoRequisicao, localizado através do script: -1898190048. O objeto OperacaoRequisicao é uma especialização do objeto Operacao e desta forma, tem como principais API's seus datasets. Os principais datasets do objeto OperacaoRequisicao são os "requisic" e "movDepos".
O dataSet "requisic" representa os dados da requisição, indicando informações como: classe da requisição, requisitante, recurso, quantidade, aprovador, cancelador e etc. Essas informações serão persistidas na tabela REQUISIC.
O dataSet "movDepos" representa os dados da movimentação gerada baseada nos dados da requisição. Além de algumas informações da requisição a movimentação registará as seguintes informações: depósito que será requisitado o recurso, quantidade movimentada, custo da movimentação e etc. Essas informações serão persistidas na tabela MOVDEPOS.
Os principais métodos públicos do objeto OperacaoRequisicao são: nova, grava, aprova, desaprova, cancela, descancela, abre e o buscaPendencia. Esses métodos serão detalhados à seguir.
Geralmente, o fluxo operacional para efetivar uma requisição gerando uma movimentação é: criação, aprovação e baixa da requisição.
Para uma melhor visão de como utilizar o OperacaoRequisicao abaixo serão listados os principais casos de uso e a explicação de quais as APIs devem ser utilizadas.
configurando instância
Ao realizar a instância do OperacaoRequisicao não será necessário passar parâmetros adicionais, à partir da instância o objeto estará pronto para realizar uma requisição.
Exemplo de idbc realizando a instância do OperacaoRequisicao:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.nova();
aproveitando instância da requisição
Conforme explicado no guia técnico das operações para maior performance é possível aproveitar a instância do OperacaoRequisicao e realizar várias operações sem a necessidade de reinstanciar o objeto OperacaoRequisicao. Ou seja, é possível instanciar somente uma vez o OperacaoRequisicao e criar, abrir, editar uma operação após a outra. Para isto, faremos uso dos métodos "nova" e "fecha", conforme explicado o passo a passo abaixo:
Ao instanciar um OperacaoRequisicao para criação de uma nova requisição, conforme descrito em criar uma nova requisição, utilizamos o método nova() em seguida populamos o dataset "requisic" e gravamos utilizando o método grava().
Abaixo temos o código completo para criar uma nova requisição:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.nova();
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 185842 /* Papel A4 */;
opRequisicao.requisic.quantidade = 2;
opRequisicao.requisic.observacao = "Consumo de Papel";
opRequisicao.requisic.emissao = new Date();
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
opRequisicao.grava();
Neste momento, caso a operação seja gravada, o objeto de gestão não irá gerar uma movimentação de depósito, pois ainda a requisição está pendente de aprovação e, consequentemente, pendente de baixa. As ações de aprovação e baixa serão detalhadas nos próximos tópicos.
Caso seja necessário criar uma nova requisição não se faz necessário instanciar outra vez o OperacaoRequisicao, 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 da primeira requisição:
opRequisicao.fecha()
Após fechar caso queria criar uma segunda requisição basta chamar o método nova.
opRequisicao.nova()
Em seguida deve ser populado as informações da nova requisição no dataSet "requisic".
Para inserir as informações da requisição, deve ser manipulada a api de dataset "requisic", executando o método append do dataset e preenchendo as informações da requisição, em seguida executando o método post do dataset. Segue exemplo:
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 185842 /* Papel A4 */;
opRequisicao.requisic.quantidade = 2;
opRequisicao.requisic.observacao = "Consumo de Papel";
opRequisicao.requisic.emissao = new Date();
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
Em seguida deve ser chamado o grava:
opRequisicao.grava();
Exemplo completo no idbc criando duas requisições com a mesma instância do OperacaoRequisicao. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.nova();
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 185842 /* Papel A4 */;
opRequisicao.requisic.quantidade = 2;
opRequisicao.requisic.observacao = "Consumo de Papel";
opRequisicao.requisic.emissao = new Date();
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
opRequisicao.grava();
opRequisicao.fecha();
opRequisicao.nova();
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 38965224 /* Agua */
opRequisicao.requisic.quantidade = 10;
opRequisicao.requisic.emissao = new Date();
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
opRequisicao.grava();
Para realizar a criação de uma requisição devemos iniciar instanciando o OperacaoRequisicao:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
Em seguida deve ser utilizado o método "nova" conforme api da Operacao.
opRequisicao.nova();
Em seguida deve ser populado as informações da requisição.
Para inserir as informações da requisição, deve ser manipulada a api de dataset "requisic", executando o método append do dataset e preenchendo as informações da requisição, em seguida executando o método post do dataset.
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 38965224 /* Agua */
opRequisicao.requisic.quantidade = 10;
opRequisicao.requisic.emissao = new Date();
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
Observação: Os passos acima de popular a requisição não é necessário ao desenvolver interfaces com o WebFramework, o tratamento de manipulação de dataset é realizado pelo próprio Framework, bastando a grade de requisicões terem como referência o dataset (requisic) do objeto.
Em seguida deve ser chamado o grava:
opRequisicao.grava();
Exemplo completo no idbc. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.nova();
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 185842 /* Papel A4 */;
opRequisicao.requisic.quantidade = 2;
opRequisicao.requisic.observacao = "Consumo de Papel";
opRequisicao.requisic.emissao = new Date();
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
opRequisicao.grava();
A abertura da requisição pode ser realizada através dos métodos abre() e buscaPendencia() do objeto OperacaoRequisicao. A diferença entre eles está apenas na passagem dos parâmetros que serão detalhadas à seguir.
O método abre() possibilita que seja informado como parâmetro apenas a chave da requisição que deseja abrir. O formato dessa chave deve ser do tipo "number", conforme exemplo abaixo:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.abre(385548609);
Caso seja informada uma chave que não existe na base de dados, o sistema apresentará uma mensagem de validação indicando que não foi encontrada esta requisição.
O método buscaPendencia() possibilita que seja informado como parâmetro uma clausula where SQL no formato "string" que será aplicada como filtro na tabela REQUISIC para retornar as requisições que atendam os filtros informados. Segue exemplo:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.buscaPendencia("chave = 385548609");
Os dois métodos supracitados ao serem executados com sucesso irão popular as propriedades "movDepos" e "requisic" da instância da OperacaoRequisicao. Não haverá retorno na execução deles.
abrindo e aprovando requisições
A aprovação de requisições pode ser realizada através do método aprova() do objeto OperacaoRequisicao. A execução desse método deverá ocorrer após a execução da criação ou abertura de requisições. Segue exemplo:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.buscarPendencia("CHAVE = 385548600");
opRequisicao.aprova();
opRequisicao.grava();
Ao executar este método serão aprovadas todas requisições que estão na propriedade "requisic", mas as informações só serão persistidas ao executar o método grava(). Caso não existam requisições pendentes de aprovação, será apresentada uma mensagem de validação pelo objeto OperacaoRequisicao.
abrindo e desaprovando requisições
A desaprovação de requisições pode ser realizada através do método desaprova() do objeto OperacaoRequisicao. A execução desse método deverá ocorrer após a execução da criação ou abertura de requisições. Segue exemplo:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.buscarPendencia("CHAVE = 385548601");
opRequisicao.desaprova();
opRequisicao.grava();
Ao executar este método serão desaprovadas todas requisições que estão na propriedade "requisic", mas as informações só serão persistidas ao executar o método grava(). Caso não existam requisições aprovadas ou existam baixas da requisição, será apresentada uma mensagem de validação pelo objeto OperacaoRequisicao.
abrindo e baixando requisições
A baixa de requisições representa a movimentação de depósito gerada através das informações da requisição. Esta ação ocorre através da inserção de registros na propriedade "movDepos" do objeto OperacaoRequisicao e somente poderá ocorrer após a aprovação das requisições que serão baixadas, caso contrário, será apresentara uma mensagem de validação.
A inserção de registro na propriedade "movDepos" da instânica do objeto OperacaoRequisicao é realizada após a criação ou abertura de requisições, conforme exemplo abaixo:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.nova();
var data = new Date();
var hora = data.toString("hh:mm:ss");
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 185842 /* Papel A4 */;
opRequisicao.requisic.quantidade = 2;
opRequisicao.requisic.observacao = "Consumo de Papel";
opRequisicao.requisic.emissao = data;
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
opRequisicao.aprova();
opRequisicao.movDepos.append();
opRequisicao.movDepos.classe = -2008878000 /* Movimentação de depósitos */;
opRequisicao.movDepos.chcriacao = opRequisicao.requisic.chave;
opRequisicao.movDepos.recurso = opRequisicao.requisic.recurso;
opRequisicao.movDepos.quantidade = opRequisicao.requisic.quantidade * (-1);
opRequisicao.movDepos.deposito = 285302 /* UNUM ALMOX */
opRequisicao.movDepos.movimentac = data;
opRequisicao.movDepos.movimentach = hora;
opRequisicao.movDepos.post();
O cálculo do custo da requisição é realizado pelo objeto OperacaoRequisicao através do somatório dos campos CUSTOMAT, CUSTOMOD e CUSTOGGF da propriedade "movDepos". O preenchimento desses campos é de resposabilidade de quem está realizando a baixa das requisições, sendo necessário realizar o seguinte preenchimento:
opRequisicao.movDepos.customat = 30;
opRequisicao.movDepos.customod = 0;
opRequisicao.movDepos.custoggf = 0;
Para que as informações da baixa sejam persistidas na tabela MOVDEPOS é necessário que a instância do objeto OperacaoRequsicao seja gravada, conforme execução do método abaixo:
opRequisicao.grava();
Exemplo completo no idbc baixando uma requisição conforme procedimento supracitado. Há necessidade de trocar as chaves informadas por uma chave da base onde está sendo executado.
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.nova();
var data = new Date();
var hora = data.toString("hh:mm:ss");
opRequisicao.requisic.append();
opRequisicao.requisic.classe = -1899999777; /* Req p Consumo */
opRequisicao.requisic.requisitan = 38905313 /* otacilio mota */;
opRequisicao.requisic.ccustres = 408424 /* UNUM CCUSTRES - UNUM CCUSTRES */;
opRequisicao.requisic.recurso = 185842 /* Papel A4 */;
opRequisicao.requisic.quantidade = 2;
opRequisicao.requisic.observacao = "Consumo de Papel";
opRequisicao.requisic.emissao = data;
opRequisicao.requisic.usuario = session.erp.entidadeDoUsuario;
opRequisicao.requisic.post();
opRequisicao.aprova();
opRequisicao.movDepos.append();
opRequisicao.movDepos.classe = -2008878000 /* Movimentação de depósitos */;
opRequisicao.movDepos.chcriacao = opRequisicao.requisic.chave;
opRequisicao.movDepos.recurso = opRequisicao.requisic.recurso;
opRequisicao.movDepos.quantidade = opRequisicao.requisic.quantidade * (-1);
opRequisicao.movDepos.deposito = 285302 /* UNUM ALMOX */
opRequisicao.movDepos.movimentac = data;
opRequisicao.movDepos.movimentach = hora;
opRequisicao.movDepos.customat = 30;
opRequisicao.movDepos.customod = 0;
opRequisicao.movDepos.custoggf = 0;
opRequisicao.movDepos.post();
opRequisicao.grava();
abrindo e cancelando requisições
O cancelamento de requisições pode ser realizada através do método cancela() do objeto OperacaoRequisicao. A execução desse método deverá ocorrer após a execução da criação ou abertura de requisições. Segue exemplo:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.buscarPendencia("CHAVE = 385548601");
opRequisicao.cancela();
opRequisicao.grava();
Ao executar este método serão canceladas todas requisições, mas as informações só serão persistidas ao executar o método grava(). Caso não existam requisições aprovadas será apresentada uma mensagem de validação pelo objeto OperacaoRequisicao, impossibilitando o cancelamento da operação.
abrindo e descancelando requisições
O descancelamento de requisições pode ser realizada através do método descancela() do objeto OperacaoRequisicao. Esta ação irá desfazer o cancelamento de uma operação. A execução desse método deverá ocorrer após a execução da criação ou abertura de requisições. Segue exemplo:
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.buscarPendencia("CHAVE = 385548601");
opRequisicao.descancela();
opRequisicao.grava();
Ao executar este método serão descanceladas todas requisições canceladas, mas as informações só serão persistidas ao executar o método grava(). Caso não existam requisições canceladas será apresentada uma mensagem de validação pelo objeto OperacaoRequisicao.
excluindo requisições sem baixa
Para excluir uma Requisiçao já gravada anteriormente que esteja sem movimentação, deve ser instanciado o OperacaoRequisicao e deve ser utilizado o método abre() ou o método buscaPendencia() do objeto OperacaoRequisicao e, em seguida, realizar a exclusão de todos os registros da propriedade "requisic".
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.abre(385548601);
opRequisicao.requisic.empty();
Em seguida deve ser chamado o grava:
opRequisicao.grava();
Exemplo completo no idbc
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.abre(385548601);
opRequisicao.requisic.empty();
opRequisicao.grava();
excluindo requisições com baixa
Para excluir uma Requisiçao já gravada anteriormente que esteja com movimentação, deve ser instanciado o OperacaoRequisicao e deve ser utilizado o método abre() ou o método buscaPendencia() do objeto OperacaoRequisicao e, em seguida, realizar a exclusão de todos os registros das propriedades "requisic" e "movDepos".
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.abre(385548601);
opRequisicao.requisic.empty();
opRequisicao.movDepos.empty();
Em seguida deve ser chamado o grava:
opRequisicao.grava();
Exemplo completo no idbc
__includeOnce(-1898190048); // /products/INTEQerp infrastructure/library/recursos/objects/Estoque/OperacaoRequisicao.ijs
var opRequisicao = new OperacaoRequisicao();
opRequisicao.abre(385548601);
opRequisicao.requisic.empty();
opRequisicao.movDepos.empty();
opRequisicao.grava();
Para realizar a consulta de requisição, deve-se utilizar o datasource "requisicoes.ids" (chave: -1894743326).
O prefixo a ser utilizado tanto nos filtros quanto nas colunas são: "REQ" e "MOV", representando respectivamente as requisicões e as movimentações. Todos os campos visíveis da tabela "Requisição" e "Movimentação de Depósito" estão disponíveis para filtragem e para exibição como colunas.
Exemplo de uso do dataSource "requisicoes.ids" para retornar todas as operações de requisições realizadas em um período:
__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs
__includeOnce(-1898142156); // /products/INTEQengine/library/dataSource/DataSource.ijs
var dts = new DataSource( -1894743326 /* requisicoes.ids */);
var dataInicio = new Date(2015, 4, 15);
var dataFim = new Date(2015, 4, 18);
var filters = dts.createFilters([
{name: "REQ_EMISSAO_START", value: dataInicio },
{name: "REQ_EMISSAO_END", value: dataFim }
]);
var columns = dts.createColumns([
{name: "REQ_CHAVE"},
{name: "REQ_CLASSE"},
{name: "REQ_RECURSO"},
{name: "REQ_EMISSAO"},
{name: "REQ_QUANTIDADE"}
]);
dts.getDataSet(filters, columns);
Exemplo de uso do dataSource "requisicoes.ids" para trazer uma operação específica de requisição e suas movimentações à partir da chave da requisição:
__includeOnce(-1898141835); // /products/INTEQengine/configuration/iDBCsql library.ijs
__includeOnce(-1898142156); // /products/INTEQengine/library/dataSource/DataSource.ijs
var dts = new DataSource( -1894743326 /* requisicoes.ids */);
var filters = dts.createFilters([
{name: "REQ_CHAVE", value: 385548601 }
]);
var columns = dts.createColumns([
{name: "REQ_CHAVE"},
{name: "REQ_CLASSE"},
{name: "REQ_RECURSO"},
{name: "REQ_EMISSAO"},
{name: "REQ_QUANTIDADE"},
{name: "MOV_QUANTIDADE"},
{name: "MOV_DEPOSITO"}
]);
dts.getDataSet(filters, columns);