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>