SID.Ped. GravarPedidoGrade - Gravar Pedido Em Grade
Aplicação:
Mercado – Pedido De Vendas.
Parâmetros obrigatórios:
Nome | Descrição |
---|---|
SIDXML | Texto em formato SID XML, cuja definição da estrutura está a seguir: |
<pedidos>
<pedido>
<TipPed></TipPed>
<CodRep></CodRep>
<CodCdi></CodCdi>
<CodMar></CodMar>
<CodCli></CodCli>
<TnsPro></TnsPro>
<CatCli></CatCli>
<CodCpg></CodCpg>
<CodLip></CodLip>
<CodTpr></CodTpr>
<DatPrv></DatPrv>
<PedCli></PedCli>
<SeqEnt></SeqEnt>
<SeqCob></SeqCob>
<SeqCto></SeqCto>
<CodVen></CodVen>
<CodTra></CodTra>
<CodRed></CodRed>
<CepFre></CepFre>
<CodFpg></CodFpg>
<itens>
<item>
<CodPro></CodPro>
<CodFam></CodFam>
<CodMod></CodMod>
<CodFxa></CodFxa>
<CodPgr></CodPgr>
<QtdGrd></QtdGrd>
<CodClc></CodClc>
<ResEst></ResEst>
<PedCli></PedCli>
<SeqPcl></SeqPcl>
<derivacoes>
<derivacao></derivacao>
<quantidade</quantidade>
<derivacao></derivacao>
<quantidade></quantidade>
.
.
.
</derivacoes>
</item>
<item>
.
.
.
</item>
</itens>
<observacoes>
<observacao>
<obsped></obsped>
<codmot></codmot>
</observacao>
<observacao>
<obsped></obsped>
<codmot></codmot>
</observacao>
.
.
.
.
</observacoes>
<campos_usuario>
<campo_usuario>
<nomcmp></nomcmp>
<vlrcmp></vlrcmp>
</campo_usuario>
<campo_usuario>
<nomcmp></nomcmp>
<vlrcmp></vlrcmp>
</campo_usuario>
.
.
.
. </campos_usuario >
</pedido>
<pedido>
</pedido>
.
.
.
.
<pedido>
<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.
- tipped: Dentro desses delimitadores deve estar o tipo do pedido. Opcional, sendo considerado o tipo 1 se não for informado o tipo.
- codrep: Dentro desses delimitadores deve estar o código do representante do pedido, que é obrigatório.
- codcdi: Dentro desses delimitadores deve estar o código do canal de distribuição do pedido, que é opcional, sendo sugerido o canal de distribuição padrão do representante se não for informado.
- codmar: Dentro desses delimitadores deve estar o código da marca do pedido. O mesmo é opcional, sendo sugerido o do cliente se não for informado. Porém, se não existir no cliente a marca padrão, será exigido ao consistir o pedido.
- 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, ligado a marca e ativo no contrato e no sistema.
- TnsPro: Esse campo tem como objetivo permitir informar uma transação para o pedido e seus itens diferente da transação padrão existente nas configurações do sistema.
- catcli: Delimitadores do código da categoria do cliente do pedido. É opcional, sendo sugerida a categoria do cliente se não for informado.
- codcpg: Delimitadores onde deve estar o código da condição de pagamento do pedido. Este campo é opcional, desde que exista a sugestão do campo no sistema, nas marcas, representantes ou no próprio cliente. Se não existir sugestão ou não for informado, o mesmo é exigido na consistência do pedido.
- codlip: Delimitadores onde deve estar o código da lista de preço do pedido. Este campo é opcional, desde que exista a sugestão do campo no sistema. Se não for informado ou não possuir sugestão, é exigido na consistência do pedido. Se informado, a regra de consistência é a mesma da rotina de pedidos em grade do cliente servidor.
- codtpr: Delimitadores onde deve estar o código da tabela de preço do pedido. Este campo é opcional, desde que exista a sugestão do campo no sistema. Se não for informado ou não possuir sugestão, é exigido na consistência do pedido. Se informado valor neste campo, a regra de consistência é a mesma da rotina de pedidos em grade do cliente servidor.
- datprv: Delimitadores da 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.
- pedcli: Dentro desses delimitadores deve estar o código do pedido do cliente, que é opcional.
- seqent: Dentro desses delimitadores deve estar o código da Sequência do endereço de entrega do cliente, que é opcional, a não ser que seja exigido se o cliente possuir mais de um endereço de entrega.
- seqcob: Dentro desses delimitadores deve estar o código da Sequência do endereço de cobrança do cliente, que é opcional, a não ser que seja exigido se o cliente possuir mais de um endereço de cobrança.
- seqcto: Dentro desses delimitadores deve estar o código da Sequência do código do contato do cliente, que é opcional.
- codven: Dentro desses delimitadores deve estar o código do vendedor do pedido, que é opcional. Se não for informado, será utilizado o código do vendedor nas definições do cliente.
- codtra: Dentro desses delimitadores deve estar o código da transportadora do pedido, que é opcional. Se não for informado, será utilizado o código da transportadora nas definições do cliente. Pode ser informado com vazio, sobrescrevendo a sugestão padrão.
- codred: Dentro desses delimitadores deve estar o código da transportadora de redespacho do pedido, que é opcional. Se não for informado, será utilizada a sugestão do sistema para o redespacho. Pode ser informado com vazio, sobrescrevendo a sugestão padrão.
- cepfre: Dentro desses delimitadores deve estar o código do CEP de frete para o pedido, que é opcional. Se não for informado, será utilizado a sugestão do sistema. Pode ser informado com vazio, sobrescrevendo a sugestão padrão.
- codfpg: Dentro desses delimitadores deve estar o código da forma de pagamento para o pedido, que é opcional. Se não for informado, pode ser exigido se no cadastro do usuário existir um parâmetro que obriga a informação desse campo.
- itens: Delimitadores que indicam que dentro dos mesmos existe uma Sequência de itens grade 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 grade de pedido a ser importado. Dentro desses delimitadores deve estar a Sequência de campos e valores do item grade 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.
- codpro: Delimitadores onde deve estar o código do produto. Este campo é obrigatório, e pode ser um código de produto que não existe. Se não existir, são exigidos o código da família e código do modelo no documento XML, pois sem os quais não é possível gerar o código do novo produto. O novo produto será gerado dentro das condições do sistema, avaliando se a montagem e estrutura do mesmo estão corretas.
- codfam: Delimitadores onde deve estar o código da família do produto. Este campo é obrigatório apenas se o produto for um novo produto (não existente no sistema). Pode ser informado mesmo que o produto seja já existente, pois não será considerado se o produto já existir.
- codmod: Delimitadores onde deve estar o código do modelo de produção ligado ao produto. Este campo é obrigatório apenas se o produto for um novo produto (não existente no sistema). Pode ser informado mesmo que o produto seja já existente, pois não será considerado se o produto já existir.
- codfxa: Delimitadores onde deve estar o código da faixa do produto. Este campo é obrigatório.
- codpgr: Delimitadores onde deve estar o código da proporcionalidade da faixa do produto. Este campo não é obrigatório. Se for informado, o sistema irá desconsiderar caso estejam sendo passadas derivações e quantidades logo abaixo dos delimitares <derivacoes></derivacoes> no item atual, e irá gerar o item com as derivações da proporcionalidade. Se não for passado, é obrigatória a passagem de valores dentro dos delimitadores <derivacoes></derivacoes>. Nesse caso o sistema irá avaliar as derivações corretamente e buscar ou gerar uma nova proporcionalidade conforme as derivações passadas.
- qtdgrd: Delimitadores onde deve estar a quantidade de grades do item do pedido. É opcional, sendo assumido o valor 1 se não for informado. Se ocorrer a explosão de grades, o mesmo é desconsiderado.
- codclc: Delimitadores onde deve estar o valor do campo coleção do item. Se a coleção não for informada, é sugerida a coleção padrão do produto.
- resest: Delimitadores em que devem estar o indicativo se reserva estoque no item do pedido (S - Sim, N - Não). Se não for enviado ou estiver vazio, assume o valor "N".
- pedcli: Delimitador em que deve estar o número do pedido do cliente, específico para o item de produto. Se ele não for informado, considera o número do pedido nos dados gerais do pedido. Se for informado, considera o valor enviado, e se o valor for nulo ou estiver em branco, sobrescreve o existente.
- seqpcl: Delimitador em que deve estar a sequência do pedido do cliente, específico para o item de produto. Se ele não for informado, é considerado o valor vazio. Se for informado, é considerado o valor enviado, e se o valor for nulo ou estiver em branco, sobrescreve o existente.
- derivacoes: Delimitadores onde devem estar internamente a eles as derivações e respectivas quantidades de cada derivação. Os valores internos a esses delimitadores são considerados sempre que não for informada uma proporcionalidade para o item grade do pedido. Dentro dos delimitadores, para cada par “derivação/quantidade”, devem existir so seguintes delimitadores:
- derivacao: Dentro desses delimitadores deve estar informado um código de derivação do produto.
- quantidade: Dentro desses delimitadores deve estar informada a quantidade da derivação imediatamente anterior Os dois delimitadores acima devem ser sempre em pares, com a derivação em primeiro e em seguida a sua respectiva quantidade. Se não existirem em forma de pares o sistema irá gerar erro e a importação do pedido atual não será feita.
- observacoes: Delimitadores da Sequência de observações a serem importadas para o pedido. Devem estar dentro dos delimitadores <pedido></pedido>. Indicam que dentro dos mesmos existe uma Sequência de observações a serem importados. Esses delimitadores não são obrigatórios na estrutura. É ignorada se não existirem as Sequências de observações.
- observacao: Delimitadores de uma observação do pedido. Para cada observação deve existir um delimitador destes. Dentro desses delimitadores estarão os campos de observação permitidos para importação, que estão descritos a seguir. Cada item observação é gravado como uma observação manual na tabela de observações do pedido atual. A situação da observação é “G” (gravada). Se não existirem delimitadores internos a esse delimitador, não é gravada observação. Observação: se for utilizado o controle de bloqueio por área na filial e o parâmetro –E:AGRINGS no aplicativo, as observações são geradas com a área da empresa VEN (vendas) e não aprovadas.
- obsped: Texto de uma observação do pedido. É opcional, sendo ignorado se não existir valor ou o valor for vazio e não existir o código do motivo da observação. Se existir apenas o código do motivo, a observação é gravada em branco.
- codmot: Código do motivo de uma observação do pedido. É opcional, sendo ignorado se não existir valor ou o valor for vazio.
- campos_usuario: Delimitadores de campos de usuário a serem importadas para o pedido. Devem estar dentro dos delimitadores <pedido></pedido>. Indicam que dentro dos mesmos existe campos de usuário a serem importados. Esses delimitadores não são obrigatórios na estrutura. É ignorada se não existirem os campos de usuários.
- campo_usuário: Delimitadores de um campo de usuário do pedido. Para cada campo de usuário deve existir um delimitador destes. Dentro desses delimitadores estarão os valores dos campos de usuário permitidos para importação, que estão descritos a seguir.
- nomcmp: Nome do campo de usuário do pedido na base de dados. É obrigatório, uma vez que seu valor é usado para encontrar o campo de usuário onde o valor deve ser inserido.
- vlrcmp: Valor do campo de usuário do pedido na base de dados. É obrigatório e representa o valor do campo de usuário a ser importado para a base de dados. Para campos numéricos ou hora deve ser informado apenas o valor inteiro. Para campos de valor real deve ser informado o valor com vírgula. Para campos texto ou data, deve ser informado por extenso, sem aspas simples ou dupla.
Parâmetros opcionais:
Nome | Descrição |
---|---|
ManErrFec | Indica que, se ocorrer erro no fechamento, o pedido não deva ser descartado, apenas gerado sem fechar. O número de pedido gerado, a situação (não fechado) e o erro ocorrido no fechamento serão evidenciados no retorno. |
ManErrIte | Indica que, se ocorrer erro na geração de um item de pedido, o pedido não deva ser descartado, e os demais itens devam ser processados normalmente, sem interromper todo o processo do pedido a ser importado. O pedido será apenas gerado sem fechar. O número de pedido gerado, a situação (não fechado) e os erros ocorridos nos itens serão evidenciados no retorno. |
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 grade 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'>situação = 'fechado ou não fechado' [motivo = 'motivo do erro no fechamento'] número pedido gerado = 'número_pedido_sapiens' </pedido>
onde
'Sequência_do_pedido'
é 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
'fechado ou não fechado'
irá exibir o valor 'fechado' quando o pedido for fechado com sucesso ou 'não fechado' caso o parâmetro ManErrFec for igual a 'S' e ocorrer erro no fechamento do pedido, sendo este apenas gravado
[motivo = 'motivo do erro no fechamento']
sem os colchetes) irá ser exibido somente caso o parâmetro ManErrFec for igual a 'S' e ocorre erro no fechamento do pedido, evidenciando o motivo do não fechamento do pedido, caso em que será apenas gravado e não descartado o pedido
O texto de retorno é plano e sem quebras de linha.
O retorno da ação com o uso do parâmetro não obrigatório ManErrIte é diferenciado. O formato geral do retorno para um pedido quando do uso do parâmetro não obrigatório ManErrIte é:
<retorno>
<pedido pedido = 'Sequência_do_pedido' resultado='erro ou sucesso [, no pedido, com erros na gravação dos itens]'> <mensagem> texto do erro ou número do pedido </mensagem> [<itens><item item='Sequência_do_item_do_pedido'> texto_do_erro_do_item </itens>] </pedido>
.
.
.
.
(demais pedidos)
</retorno>
O formato do retorno quando do uso do parâmetro não obrigatório ManErrIte para um determinado pedido com sucesso durante a importação do pedido (dados gerais, itens do pedido e fechamento) é:
<pedido pedido = 'Sequência_do_pedido' resultado='sucesso'> <mensagem> informações sobre o pedido gerado pelo Sapiens </mensagem> </pedido>
O formato do retorno quando do uso do parâmetro não obrigatório ManErrIte para um determinado pedido com erro no fechamento ou na geração do pedido, durante a importação é:
<pedido pedido = 'Sequência_do_pedido' resultado = 'erro'> <mensagem> texto_do_erro </mensagem> </pedido>
O formato do retorno quando do uso do parâmetro não obrigatório ManErrIte para um determinado pedido com erro nos itens, durante a importação é:
<pedido pedido = 'Sequência_do_pedido' resultado = 'sucesso no pedido, com erros na gravação dos itens'> <mensagem> <itens> <item item= 'Sequência_do_item_do_pedido'> texto_do_erro_do_item </item> </itens> </mensagem> </pedido>
O formato do retorno quando do uso do parâmetro não obrigatório ManErrIte para um determinado pedido com erro no fechamento do pedido e erros nos itens, durante a importação é:
<pedido pedido = 'Sequência_do_pedido' resultado = 'erro no pedido, com erros na gravação dos itens'> <mensagem> texto_do_erro_do_pedido </mensagem> <itens> <item item= 'Sequência_do_item_do_pedido'> texto_do_erro_do_item </item> </itens> </pedido>
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. O pedido gerado é automaticamente fechado. Se ocorrer erro no fechamento, o pedido é descartado, a não ser que exista o parâmetro ManFecErr igual a 'S', que no caso irá apenas gravar o pedido se houver erro no fechamento. 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 Grade de Produto, gerando pedidos fechados. A filial e empresa em que são gerados os pedidos são o da filial logada 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.
Segue um exemplo de uma ação com um pedido e dois itens:
acao=sid.ped.gravarpedidograde
sidxml=
<pedidos>
<pedido>
<codmar>SUPERMARCA</codmar>
<codcli>3</codcli>
<codrep>3</codrep>
<itens>
<item>
<codpro>FCAL00010017</codpro>
<codfxa>FAIXA DE CAL 01</codfxa>
<derivacoes>
<derivacao>33</derivacao>
<quantidade>1</quantidade>
<derivacao>34</derivacao>
<quantidade>2</quantidade>
<derivacao>35</derivacao>
<quantidade>2</quantidade>
<derivacao>36</derivacao>
<quantidade>5</quantidade>
</derivacoes>
</item>
<item>
<codpro>FCAL00010011</codpro>
<codfxa>FAIXA DE CAL 01</codfxa>
<codpgr>F100</codpgr>
</item>
</itens>
<observacoes>
<observacao>Pedido gerado via importação</observacao>
<observacao>Entrega normal</observacao>
</observacoes>
<campos_usuario>
<campo_usuario>
<nomcmp>usu_numerico</nomcmp>
<vlrcmp>10</vlrcmp>
</campo_usuario>
<campo_usuario>
<nomcmp>usu_real</nomcmp>
<vlrcmp>15,7</vlrcmp>
</campo_usuario>
<campo_usuario>
<nomcmp>usu_texto</nomcmp>
<vlrcmp>Texto do pedido</vlrcmp>
</campo_usuario>
<campo_usuario>
<nomcmp>usu_data</nomcmp>
<vlrcmp>01/01/2008</vlrcmp>
</campo_usuario>
<campo_usuario>
<nomcmp>usu_hora</nomcmp>
<vlrcmp>658</vlrcmp>
</campo_usuario>
</campos_usuario> </itens>
</pedido>
<pedido>
<tipped>6</tipped>
<codmar>SUPERMARCA</codmar>
<codcli>3</codcli>
<codrep>3</codrep>
<itens>
<item>
<codpro>FCAL00010017</codpro>
<codfxa>FAIXA DE CAL 01</codfxa>
<derivacoes>
<derivacao>33</derivacao>
<quantidade>1</quantidade>
<derivacao>34</derivacao>
<quantidade>2</quantidade>
<derivacao>35</derivacao>
<quantidade>2</quantidade>
<derivacao>36</derivacao>
<quantidade>5</quantidade>
</derivacoes>
</item>
</itens>
</pedido>
</pedidos>
Exemplo de um retorno com erro e um com sucesso:
- Erro: <retorno><pedido pedido='1' resultado='erro'>É necessário informar o cliente</pedido></retorno>
- Sucesso: <retorno><pedido pedido='2' resultado='sucesso'>numero pedido gerado = 1050</pedido></retorno>