01. DADOS GERAIS

Produto:

Linha de Produto:

Segmento:

Módulo:SIGAWMS - Gestão de Armazenagem
Função:-
País:Todos Países
Ticket:-
Requisito/Story/Issue (informe o requisito relacionado) :-


02. DESCRIÇÃO

Este Ponto de Entrada é responsável por montar a consulta que obterá todos os endereços com saldo disponível para efetuar o processo de expedição.

03. LOCALIZAÇÃO

Localizado no método da classe WMSBCCSeparacao, que efetua a busca dos endereços disponíveis para expedição.

04. PARÂMETROS

NomeTipo

Descrição

cArmazemCaractere

Armazém para o qual está sendo solicitado saldo.

cEnderecoCaractere

Endereço para o qual está sendo solicitado saldo.¹

cProdutoCaractereProduto para o qual está sendo solicitado saldo.
cPrdOriCaractereProduto origem para o qual está sendo solicitado saldo.
cLoteCtlCaractere

Lote para o qual está sendo solicitado o saldo

cNumLoteCaractereSublote para o qual está sendo solicitado o saldo
lCnsPkgFutLógicoIndica se deve ser considerado Entradas Previstas no calculo do saldo disponível.

¹ Somente estará preenchido quando for informado no Pedido de Venda.

05. RETORNO

Nome

Tipo

Descrição

cAliasD14CaractereDeverá retornar o alias da consulta criada para a busca de saldo.

Para que o processo funcione corretamente, esta consulta deve trazer, obrigatoriamente, uma estrutura de campos com as seguintes denominações:

CampoValor

DC3_ORDEM

Ordem da estrutura na sequência de abastecimento do produto.
D14_ENDERCódigo do endereço
D14_ESTFISCódigo da estrutura física
D14_LOTECTLote
D14_NUMLOTSublote
D14_DTVALDData de validade do lote²
D14_NUMSERNúmero de série
D14_QTDLIBQuantidade disponível em estoque
D14_SALDOQuantidade disponível em estoque, descontando a saída prevista
D14_QTDSPRQuantidade de saída prevista
D14_IDUNITIdentificador do unitizador
D14_CODUNICódigo do tipo de unitizador

² A data de validade somente se aplica aos produtos que controlam lote; nos demais casos poderá ser retornado espaço em branco neste campo.

06. VERSÕES

12.1.17 e superiores.

07. OBSERVAÇÃO

Todos os parâmetros são recebidos na User Function via PARAMIXB, conforme consta em Execblock / Customização.

08. EXEMPLO

#INCLUDE "PROTHEUS.CH"

User Function WMSQYSEP()
Local cArmazem  := PARAMIXB[1]
Local cEndereco := PARAMIXB[2]
Local cProduto  := PARAMIXB[3]
Local cPrdOri   := PARAMIXB[4]
Local cLoteCtl  := PARAMIXB[5]
Local cNumLote  := PARAMIXB[6]
Local cQuery    := ""
Local cAliasD14 := GetNextAlias()
Local aTamSX3   := TamSx3("D14_QTDEST")

	cQuery := "SELECT DC3_ORDEM,"
	cQuery +=       " D14_ENDER,"
	cQuery +=       " D14_ESTFIS,"
	cQuery +=       " D14_LOTECT,"
	cQuery +=       " D14_NUMLOT,"
	cQuery +=       " D14_DTVALD,"
	cQuery +=       " D14_NUMSER,"
	
	IF lCnsPkgFut == .T.
		cQuery +=  " (D14_QTDEST+D14_QTPEPR-(D14_QTDEMP+D14_QTDBLQ )) D14_QTDLIB,"
		cQuery +=  " (D14_QTDEST+D14_QTPEPR-(D14_QTDEMP+D14_QTDBLQ+D14_QTDSPR)) D14_SALDO,"
	ELSE 
		cQuery +=  " (D14_QTDEST-(D14_QTDEMP+D14_QTDBLQ)) D14_QTDLIB,"
		cQuery +=  " (D14_QTDEST-(D14_QTDEMP+D14_QTDBLQ+D14_QTDSPR)) D14_SALDO,"
	EndIf

	cQuery +=       " D14_QTDSPR,"
	cQuery +=       " D14_IDUNIT,"
	cQuery +=       " D14_CODUNI"
	cQuery +=  " FROM "+RetSqlName("D14")+" D14"
	cQuery += " INNER JOIN "+RetSqlName("DC3")+" DC3"
	cQuery +=    " ON DC3.DC3_FILIAL = '"+xFilial("DC3")+"'"
	cQuery +=   " AND DC3.DC3_LOCAL  = D14.D14_LOCAL"
	cQuery +=   " AND DC3.DC3_CODPRO = D14.D14_PRODUT"
	cQuery +=   " AND DC3.DC3_TPESTR = D14.D14_ESTFIS"
	cQuery +=   " AND DC3.D_E_L_E_T_ = ' '"
	cQuery += " INNER JOIN "+RetSqlName("DC8")+" DC8"
	cQuery +=    " ON DC8.DC8_FILIAL = '"+xFilial("DC8")+"'"
	cQuery +=   " AND DC8.DC8_CODEST = D14.D14_ESTFIS"
	cQuery +=   " AND DC8.DC8_TPESTR  ('1','2','3','4','6')"
	cQuery +=   " AND DC8.D_E_L_E_T_ = ' '"
	cQuery += " WHERE D14.D14_FILIAL = '"+xFilial("D14")+"'"
	cQuery +=   " AND D14.D14_LOCAL  = '"+cArmazem+"'"
	cQuery +=   " AND D14.D14_PRODUT = '"+cProduto+"'"
	cQuery +=   " AND D14.D14_PRDORI = '"+cPrdOri+"'"

	// Se foi informado endereço, lote e/ou sublote na inclusão do pedido
	If !Empty(cEndereco)
		cQuery += " AND D14.D14_ENDER = '"+cEndereco+"'"
	EndIf

	If !Empty(cLoteCtl)
		cQuery += " AND D14.D14_LOTECT = '"+cLoteCtl+"'"
	EndIf

	If !Empty(cNumLote)
		cQuery += " AND D14.D14_NUMLOT = '"+cNumLote+"'"
	EndIf

	cQuery += " AND (D14.D14_QTDEST-(D14.D14_QTDEMP+D14.D14_QTDBLQ)) > 0"
	cQuery += " AND D14.D_E_L_E_T_ = ' '"
	cQuery := ChangeQuery(cQuery)

	DbUseArea(.T.,'TOPCONN',TcGenQry(,,cQuery),cAliasD14,.F.,.T.)
	// Ajustando o tamanho dos campos da query
	TcSetField(cAliasD14,'D14_DTVALD','D')
	TcSetField(cAliasD14,'D14_QTDLIB','N',aTamSX3[1],aTamSX3[2])
	TcSetField(cAliasD14,'D14_QTDSPR','N',aTamSX3[1],aTamSX3[2])
	TcSetField(cAliasD14,'D14_QTDPEM','N',aTamSX3[1],aTamSX3[2])
	TcSetField(cAliasD14,'D14_SALDO' ,'N',aTamSX3[1],aTamSX3[2])


Return cAliasD14



<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>