Inclusão de Pedidos

Para incluirmos pedidos e outros tipos de movimentos de estoque devemos usar o serviço CACSP.incluirNota do módulo mgecom.

Pedidos ou notas incluídos por esse serviço passam pelo mesmo conjunto de regras de negócio que um pedido/nota incluído pela interface padrão do sistema Sankhya/Jiva.
Todas as configurações e validações presentes no Tipo de Operação (TOP), Tipo de Negociação, etc. serão respeitados, assim como a geração de informações auxiliares, como Financeiro, atualização de estoque, geração de impostos, solicitação de liberações, etc.

Os campos obrigatórios dependem estreitamente da configuração de TOP, empresa, produto, etc. Portanto, neste exemplo colocamos os campos tipicamente obrigatórios em todos os casos de uso. Este exemplo não tenta exaurir as possibilidades, que são muitas, então em alguns casos a chamada a esse serviço pode resultar em mensagem de erro exigindo que outros campos sejam enviados.
Apenas um pedido/nota pode ser enviado por vez.

Para usar serviços de módulos auxiliares, como é o caso do mgecom devemos enviar um parâmetro adicional na URL, cujo nome é mgeSession e o valor será o ID adquirido no serviço de autenticação. Isso não se aplica para serviços do módulo mge, que é o principal.

Parametros de chamada

nota

Elemento XML com informações sobre o cabeçalho e os itens do pedido. Cada elemento está documentado no exemplo contido neste documento.

Dados modificados

Quando bem sucedida, a chamada deste serviço inclui um novo Pedido ou nota, incluindo ou modificando dados em diversas tabelas, dependendo das configurações de TOP, Tipo de Negociação, etc.

Transação

Esse serviço é transacional, portanto se alguma falha ocorrer (status = 0, por exemplo) nenhuma informação será incluída ou modificada.

Detalhes do HTTP

Método de requisição: POST
URL:
https://api.sankhya.com.br/gateway/v1/mgecom/service.sbr?serviceName=CACSP.incluirNota

Note que, neste caso, estamos usando um parametro adicional na URL, chamado mgeSession.
Esse parâmetro deve receber o ID adquirido no serviço de autenticação e só é necessário em módulos secundários, como é o caso do mgecom (o módulo principal, mge, não exige).
O cookie JSESSIONID também é obrigatório em chamadas de serviço de módulo secundários.

Headers HTTP:
Content-Type: text/xml;charset=ISO-8859-1
Autorization: bearerToken=[TOKEN gerado no serviço de autenticação]


Estrutura básica da requisição:

<nota>
<cabecalho>
	<!-- campos do cabeçalho devem ser colocados aqui-->
	</cabecalho>
     <itens>
		<item>
			<!-- campos do item devem ser colocados aqui-->
		</item>
</itens> 
</nota>

Estrutura básica da resposta:

<pk>
	<!-- Nro.único do pedido/nota gerado pelo sistema
     <NUNOTA>99999</NUNOTA>
</pk>
<!-- 
avisos diversos que o sistema pode emitir por conta da inclusão do pedido. Esse elemento só será retornado caso haja avisos.
-->
<avisos>
<aviso/>
</avisos>
<!-- 
Liberações diversas que o sistema pode emitir, como por exemplo Limite de Crédito, estoque insuficiente, etc.
Esse elemento só será retornado caso haja solicitações de liberação de alçada.
-->
<liberacoes>
	<liberacao/>
</liberacoes>

Exemplo de uso

Corpo da requisição:

<serviceRequest serviceName="CACSP.incluirNota">
	<requestBody>
		<nota>
			<cabecalho>
<!--
O elemento NUNOTA deve ser enviado vazio, pois o nro. será gerado pelo sistema.
-->
				<NUNOTA/>
<!-- 
TIPMOV=P determina que é um pedido.
Caso necessário, verificar os outros valores possíveis deste campo na tela 'Dicionário de dados'
--> 		
				<TIPMOV>P</TIPMOV>
				<DTNEG>D12/10/2015</TNEG>
				<CODTIPVENDA>11</CODTIPVENDA>
				<CODPARC>2</CODPARC>
				<CODTIPOPER>18</CODTIPOPER>
				<CODEMP>1</CODEMP>
				<CODVEND>2</CODVEND>
				<OBSERVACAO><![CDATA[pedido incluido via integração]]></OBSERVACAO>
			</cabecalho>
<!--
O atributo 'INFORMARPRECO' do elemento 'itens' é uma flag (S=Sim, N=Não) que determina se o preço unitário será informado no XML ou se será obtido da tabela de preços automaticamente.
Neste exemplo estamos usando a flag = "N", portanto não é necessário enviarmos o campo VLRUNIT (que é o valor unitário do produto).
Se queremos usar um preço diferente do preço de tabela do produto então devemos alterar essa flag para "S" e adicionarmos no XML o elemento VLRUNIT.
Em qualquer das alternativas a totalização do item e do pedido é realizada pelo sistema, portanto não é necessário incluir campos de totais, pois eles serão sempre calculados.
-->
			<itens INFORMARPRECO="N">
				<item>
<!--
Os elemento NUNOTA e SEQUENCIA devem ser enviados vazios, 
pois serão gerados pelo sistema
-->	
					<NUNOTA/>
					<SEQUENCIA/> 
<!-- 
Código do produto vinculado a esse item.
Conforme cad. no sistema 
-->					
					<CODPROD>13</CODPROD>
<!-- 
Unidade de venda. 
-->				
					<CODVOL><![CDATA[UN]]></CODVOL>
	

<!-- 
Local de estocagem. 
ZERO caso não use local 
-->				
					<CODLOCALORIG>0</CODLOCALORIG>
<!-- 
Controle especial de estoque (exemplo: Pequeno, Médio, Grande, Azul, Vermelho, etc).
Produtos controlados por lote geralmente não possuem lote informado no pedido, apenas na nota. Verificar documentação do sistema.
Vazio se não usa controle especial
-->				
					<CONTROLE/>
<!-- 
Qtd. do produto na unidade informada em 'CODVOL'
Esse campo é decimal, e a qtd. de casas decimais depende da configuração do produto 
--> 				
					<QTDNEG>1</QTDNEG>
				</item>
<!-- 
Outros itens. 
O limite depende da configuração da TOP 
-->
				<item>
					<NUNOTA/>
					<SEQUENCIA/>      
					<CODPROD>108</CODPROD>
					<CODVOL><![CDATA[UN]]></CODVOL>
					<CODLOCALORIG>0</CODLOCALORIG>
					<CONTROLE/>
					<QTDNEG>3</QTDNEG>
				</item>		
			</itens>
		</nota>
	</requestBody>
</serviceRequest>

Resposta bem sucedida:

<?xml version="1.0" encoding="UTF-8"?>
<serviceResponse serviceName="CACSP.incluirNota" status="1" pendingPrinting="false" transactionId="afc01974-351c-4a92-a03d-45c48ed2af94">
    <responseBody>
        <pk>
            <NUNOTA>3508</NUNOTA>
        </pk>
    </responseBody>
</serviceResponse>

Dump HTTP para conferência:

POST /mgecom/service.sbr?serviceName=CACSP.incluirNota&mgeSession=BEAC770E756370D54A0329B68ADA2CBE HTTP/1.1
Host: localhost:8080
Content-Type: text/xml;charset=ISO-8859-1
Cookie: JSESSIONID=BEAC770E756370D54A0329B68ADA2CBE
Cache-Control: no-cache
Postman-Token: 021cb85f-3366-2c8d-c0ba-b82da65b8fc5

<serviceRequest serviceName="MobileLoginSP.login">
  <requestBody>
<nota>
	<cabecalho>
	    <NUNOTA/>
		<TIPMOV>P</TIPMOV>
		<DTNEG>12/10/2015</DTNEG>
		<CODTIPVENDA>11</CODTIPVENDA>
		<CODPARC>2</CODPARC>
		<CODTIPOPER>18</CODTIPOPER>
		<CODEMP>1</CODEMP>
		<CODVEND>2</CODVEND>
		<OBSERVACAO><![CDATA[pedido incluido via integração]]></OBSERVACAO>
	</cabecalho>
	<itens>
		<item>
		    <NUNOTA/>
		    <SEQUENCIA/>      
			<CODPROD>13</CODPROD>
			<CODVOL><![CDATA[UN]]></CODVOL>
			<CODLOCALORIG>0</CODLOCALORIG>
			<CONTROLE/>
			<QTDNEG>1</QTDNEG>
		</item>
		<item>
		    <NUNOTA/>
		    <SEQUENCIA/>      
			<CODPROD>108</CODPROD>
			<CODVOL><![CDATA[UN]]></CODVOL>
			<CODLOCALORIG>0</CODLOCALORIG>
			<CONTROLE/>
			<QTDNEG>3</QTDNEG>
		</item>		
	</itens>
</nota>
</requestBody>
</serviceRequest>