SID.Ped.GravarPedidoContrato (RVPE) - Gravar Pedido Via Contrato De Licitação
Aplicação:
Mercado – Pedido De Vendas.
Parâmetros obrigatórios:
Nome | Descrição |
---|---|
XML | Texto em formato SID XML, cuja definição da estrutura está a seguir. |
<pedidos>
<pedido>
<codcli></codcli>
<pedcli></pedcli>
<ctrcli></ctrcli>
<numemp></numemp>
<datent></datent>
<seqent></seqent>
<itens> <item>
<procli></procli>
<codpro></codpro>
<datent></datent>
<qtdped></qtdped>
<univen></univen>
<qtdven></qtdven>
<preven></preven>
</item> .
. (demais itens)
.
</itens>
</pedido>
.
. (demais pedidos)
.
</pedidos>
A descrição de cada delimitador e sua funcionalidade ou obrigatoriedade está a seguir:
- pedidos: Delimitadores da Sequência de pedidos a serem importados. Indicam que dentro dos mesmos existe uma Sequência de pedidos a serem importados. Esses delimitadores são obrigatórios na estrutura;
- pedido: Delimitadores de um pedido. Devem existir um para cada pedido, e dentro desses delimitadores devem estar os campos e valores de um pedido. Esses delimitadores são obrigatórios na estrutura;
- codcli: Dentro desses delimitadores deve estar o código do cliente do pedido, que é obrigatório. Deve ser um cliente que esteja nos cadastros de clientes de um contrato e ativo no contrato e no sistema;
- pedcli: Delimitadores do código do número do pedido de cliente. É opcional, porém se no contrato ou nas definições do cliente for exigido que deve ser informado o número do pedido do cliente, a importação desse pedido exigirá como consistência esse campo. Se o mesmo não vier informado, a importação do pedido será cancelada, passando ao próximo pedido;
- ctrcli: Delimitadores onde deve estar o número do contrato do cliente para o pedido. Este campo é opcional desde que nas definições do cliente exista o código do contrato padrão para o cliente do pedido. Pode ser informado independentemente disto, inclusive um número de contrato diferente do padrão. Se informado, o sistema irá consistir se o contrato existe, está ativo, e possui o cliente do pedido informado nos seus clientes. Se não for informado e não houver um contrato padrão nas definições do cliente, ou ocorrer algum erro de consistência, a importação do pedido é cancelada e será passado ao próximo pedido;
- numemp: Delimitadores do número de empenho do contrato. Este campo é opcional, e não deve ser informado se o contrato não é controlado por empenho. Se o contrato controlar por empenho e este campo não for informado, será gerado um erro de consistência informando que o contrato controla por empenho e o mesmo deve ser informado. Se o empenho informado for válido, o sistema consiste se o mesmo existe no contrato informado;
- datent: Delimitadores onde entre eles deve estar a data de entrega do pedido. Este campo é opcional. Se não for informada, é sugerida a data corrente para o pedido. O valor atribuído a este campo (seja informado ou a data corrente), será sugerido aos itens se não for informada data de entrega nos mesmos. A data de entrega é consistida com o período de inatividade do cliente do pedido informado no contrato e se for controlado por empenho, irá consistir contra a validade do empenho;
- seqent: Delimitador onde entre eles deve estar código do endereço de entrega do pedido. Este campo é opcional, mas se no cadastro de filial vendas estiver definido que o pedido deve conter o endereço de entrega esse campo é obrigado a ser informado.
- itens: Delimitadores que indicam que dentro dos mesmos existe uma Sequência de itens do pedido a serem importados. Esses delimitadores são obrigatórios na estrutura e devem estar dentro dos delimitadores <pedido></pedidos>.
- item: Delimitador que indica a existência de um item de pedido a ser importado. Dentro desses delimitadores deve estar a Sequência de campos e valores do item do pedido a importar. Esses delimitadores são obrigatórios na estrutura e devem ser internos aos delimitadores <itens></itens>. Os delimitadores abaixo devem estar dentro dos delimitadores <item></item> e se referem aos campos dos itens do pedido.
- procli: Delimitadores onde deve estar o código do produto do cliente para o contrato atual. A funcionalidade desse campo é em conjunto com a funcionalidade do campo código do produto, e documentada logo a seguir à documentação deste campo, logo abaixo.
- codpro: Delimitadores onde deve estar o código do produto do Sapiens para o contrato atual. Ao menos um dos códigos de produto acima deve ser informado. Também ambos podem ser informados ao mesmo tempo, mas a precedência ou o que ocorre em caso de erro é descrita a seguir:
- Se ambos forem informados, o sistema busca primeiramente o código do produto do cliente e o código associado ao produto Sapiens. Se este existir, o código do produto do Sapiens é ignorado. Se não existir o código do produto do cliente, o sistema utiliza o código do produto do Sapiens. Se estiver correto é assumido o código do produto Sapiens e caso contrário o sistema gera um erro e interrompe a importação do pedido atual, passando ao próximo pedido.
- Se apenas o código do produto do cliente for informado, e se este existir, é utilizado, sendo que o sistema busca o código do produto do Sapiens associado. Caso contrário é gerado um erro e interrompida a importação do pedido atual, passando ao próximo pedido.
- Se apenas o código do produto do Sapiens for informado, e se este existir, é utilizado. Caso contrário é gerado um erro e interrompida a importação do pedido atual, passando ao próximo.
- datent: Delimitadores onde deve estar a data de entrega do item do pedido. O valor do campo é opcional, pois é sugerido por padrão a data de entrega dos dados gerais do pedido. Porém está disponível para o caso em que seja necessário possuir itens com datas de entrega diferentes em um mesmo pedido, sobrescrevendo a sugestão dos dados gerais do pedido.
- qtdped: Delimitadores da quantidade pedida do item. O valor nesse campo é obrigatório (deve ser igual a zero quando informa-se valores para a unidade de medida de venda) e se não for informado é gerado um erro e interrompida a importação do pedido atual, passando ao próximo pedido. O valor informado é consistido contra a quantidade mínima e máxima do item do contrato, e com o saldo de quantidade desse item no contrato.
- univen: Delimitadores da unidade de medida de venda do item. O valor nesse campo é opcional, no entanto, caso for informado, a quantidade de venda e o preço de venda devem obrigatoriamente ser informados também.
- qtdven: Delimitadores da quantidade de venda do item. O valor nesse campo é opcional, no entanto, deve ser informado caso uma unidade de medida de venda seja informada para o item. O valor informado é consistido e a conversão para a unidade de estoque (quantidade pedida) é feita automaticamente pelo sistema. A quantidade pedida é então consistida contra a quantidade mínima e máxima do item do contrato, e com o saldo de quantidade desse item no contrato.
- preven: Delimitadores do preço de venda do item. O valor nesse campo é opcional, no entanto, deve ser informado caso a unidade de medida de venda seja informada para o item.
Retorno:
O retorno da ação é um texto também em formato XML, dentro dos delimitadores <retorno></retonro>. Dentro desses delimitadores é indicado o erro ou o sucesso na importação para cada pedido dentro da Sequência de pedidos, ordenados numericamente pela Sequência de entrada e iniciando em 1 (um) e envolvidos nos delimitadores <pedido ></pedido>. O número de ordenação exibido no retorno não é o número de pedido no Sapiens.
O formato geral do retorno para um pedido é:
<retorno>
<pedido pedido= 'Sequência_do_pedido' [item='Sequência_do_item'] resultado='erro ou sucesso'>texto do erro ou número do pedido</pedido>
.
.
.
(demais pedidos)
</retorno>
O formato do retorno para um determinado pedido com erro durante a importação é:
<pedido pedido= 'Sequência_do_pedido' [item='Sequência_do_item'] resultado='erro'>texto_do_erro</pedido>
onde
'Sequência_do_pedido' é o número de Sequência em que foi processado o pedido delimitado pelos delimitadores <pedido></pedido>
'Sequência_do_item' é o número de Sequência do item que está sendo processado dentro do pedido, caso o erro tenha ocorrido em um item delimitado pelos delimitadores <itens></itens>. A Sequência do item é reiniciada para cada pedido. Se o erro for gerado pelos dados gerais ou outra consistência no fechamento do pedido e validação dos valores contra o contrato, esse texto não é exibido.
'texto_do_erro' é a informação textual do erro ocorrido pela consistência ou pela verificação da estrutura do comando XML para um pedido.
O formato do retorno para um determinado pedido processado com sucesso é:
<pedido pedido= 'Sequência_do_pedido' resultado='sucesso'>numero pedido gerado = 'número_pedido_sapiens'</pedido>
onde
'Sequência_do_pedido' também é o número de Sequência em que foi processado o pedido delimitado pelos delimitadores <pedido></pedido>
'número_pedido_sapiens' é o número do pedido gerado pelo Sapiens
O texto de retorno é plano e sem quebras de linha.
Informações adicionais:
Dentro dos delimitadores <pedidos></pedidos> poderão ser informados vários pedidos e dentro de cada delimitador <itens></itens> devem ser informados os vários itens do pedido. A ação pode ser chamada individualmente para um pedido apenas, porém recomenda-se a utilização de vários pedidos dentro de uma única ação, que confere um desempenho melhor à importação.
A função irá processar pedido a pedido que estiver dentro dos delimitadores <pedidos></pedidos>. Caso ocorra um erro em um pedido, este pedido todo é descartado e a função segue processando o próximo pedido na Sequência. Ao final, será gerado o retorno da função indicando, para cada pedido com sucesso gerado, o seu número e para cada pedido não processado, o erro correspondente, na mesma Sequência que foi informada no documento XML.
A rotina possui o mesmo funcionamento da rotina da tela do Comercial\Vendas\Pedidos\Via Contrato de Licitação, gerando pedidos com procedência do tipo 8 e abatendo dos saldos de valor e quantidade dos itens do contrato padrão ou do informado, bem como do empenho em relação a valores ou quantidades, conforme os parâmetros do contrato. Os pedidos são gerados já fechados, ou seja, não necessitam de conferência. A filial e empresa em que são gerados os pedidos são o da filial ativa no Sapiens Server e não é permitido indicar filial ou empresa na ação.
Em relação ao documento XML a ser enviado à ação, este deve ser plano, ou seja, sem quebras de linha e sem espaços entre os delimitadores. Os valores dentro dos delimitadores podem ter espaços entre os mesmos, desde que o valor não seja numérico.
Exemplo de pedido e dois itens:
<pedidos>
<pedido>
<codcli>18</codcli>
<pedcli></pedcli>
<numemp>2222222222222222222</numemp>
<datent>07/12/2004</datent>
<ctrcli>16</ctrcli>
<itens>
<item>
<procli>GENE1</procli>
<codpro></codpro>
<datent></datent>
<qtdped>1</qtdped>
</item>
<item>
<procli>GENE2</procli>
<codpro></codpro>
<datent></datent>
<qtdped>2</qtdped>
</item>
<item>
<procli>GENE3</procli>
<codpro></codpro>
<datent></datent>
<qtdped>1</qtdped>
</item>
</itens>
</pedido>
</pedidos>
Exemplo de um retorno com erro e um com sucesso:
- Erro:<retorno><pedido pedido='1' resultado='erro'>O valor disponível no item do contrato (500,00) é insuficiente para atender ao valor líquido do item 1 do pedido (14.701,50)</pedido></retorno>.
- Sucesso:<retorno><pedido pedido='2' resultado='sucesso'>numero pedido gerado = 12</pedido></retorno>.