Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.


CONTEÚDO

Índice
indent8.1.
exclude.*CONTEÚDO
stylenone

01. VISÃO GERAL

O cadastro de Serviços x Tarefas (WMSA070) permite configurar os serviços que serão informados obrigatoriamente em todos os documentos que geram integração com o WMS Protheus.

...

Informações
titleIMPORTANTE!
Essa documentação é válida apenas para o WMS com controle de estoque exclusivo (D14).

02. CADASTRO

O cadastro de uma tarefa customizada, por ser realizado independentemente do tipo de serviço, pode ser uma saída, uma entrada ou um movimento interno.

...

Informações
titleIMPORTANTE

Para que a função a executar seja exibida na consulta padrão do campo é necessário cadastrá-la por meio do módulo Configurador, no arquivo SX5 - Tabelas Genéricas (tabela L6).

03. EXECUÇÃO

Toda função customizada receberá por parâmetro o objeto oMovimento e a variável cAcao, nesta ordem, onde:

...

Bloco de código
languagedelphi
titleExemplo
linenumberstrue
collapsetrue
#INCLUDE "RWMAKE.CH"
 
/*
+------------------------------------------------------------------------------+
|User Function Customizazada -> Recebe dois parâmetros, onde:                  |
+------------------------------------------------------------------------------+
|oMovimento |Objeto que contém as informações da movimentação                  |
|           | Este objeto pode ser uma das instâncias das classes padrão:     |
|           | Onde:                                                            |
|           |  cAcao == '1' -> WMSBCCCustomizacao() herdada de da classe       |
|           |                  WMSDTCMovimentosServicoArmazem()                |
|           |  cAcao == '2' -> WMSDTCMovimentosServicoArmazem()                |
+-----------+------------------------------------------------------------------+
|cAcao      | Ponto onde foi chamada a função customizada:                     |
|           | '1' - Na execução da OS                                          |
|           | '2' - Na execução do Coletor                                     |
+-----------+------------------------------------------------------------------+
*/
 
/*
********************************************************************************
                 DE -> PARA = aParam150 -> oMovimento
********************************************************************************
 
    aParam150     := Array(34)
    aParam150[01] -> oMovimento:oMovPrdLot:GetProduto()   //-- Produto
    aParam150[02] -> oMovimento:oMovEndOri:GetArmazem()   //-- Armazém Origem
    aParam150[03] -> oMovimento:oOrdServ:GetDocto()       //-- Documento
    aParam150[04] -> oMovimento:oOrdServ:GetSerie()       //-- Serie
    aParam150[05] -> oMovimento:oOrdServ:GetNumSeq()      //-- Sequencial
    If cAcao == '1'
        aParam150[06] -> oMovimento:GetQuant()             //-- Quantidade Ordem Serviço
    Else
        aParam150[06] -> oMovimento:GetQtdMov()            //-- Quantidade Movimentação
    EndIf
    aParam150[07] -> Date()                               //-- Data da Movimentacao
    aParam150[08] -> Time()                               //-- Hora da Movimentacao
    aParam150[09] -> oMovimento:oMovServic:GetServico()   //-- Servico
    aParam150[10] -> oMovimento:oMovTarefa:GetTarefa()    //-- Tarefa
    aParam150[11] -> oMovimento:oMovTarefa:GetAtivid()    //-- Atividade
    aParam150[12] -> oMovimento:oOrdServ:GetCliFor()      //-- Cliente/Fornecedor
    aParam150[13] -> oMovimento:oOrdServ:GetLoja()        //-- Loja
    aParam150[14] -> Nil                                  //-- Tipo da Nota Fiscal - Obsoleto
    aParam150[15] -> Nil                                  //-- Item da Nota Fiscal - Obsoleto
    aParam150[16] -> "0"                                  //-- Tipo de Movimentacao - Obsoleto
    aParam150[17] -> oMovimento:oOrdServ:GetOrigem()      //-- Origem de Movimentacao
    aParam150[18] -> oMovimento:oMovPrdLot:GetLoteCtl()   //-- Lote
    aParam150[19] -> oMovimento:oMovPrdLot:GetNumLote()   //-- Sub-Lote
    aParam150[20] -> oMovimento:oMovEndOri:GetEnder()     //-- Endereco Origem
    aParam150[21] -> oMovimento:oMovEndOri:GetEstFis()    //-- Estrutura Fisica Origem
    aParam150[22] -> oMovimento:oOrdServ:GetRegra()       //-- Regra de Apanhe (1=LOTE/2=NUMERO DE SERIE/3=DATA)
    aParam150[23] -> oMovimento:oOrdServ:GetCarga()       //-- Carga
    aParam150[24] -> oMovimento:GetIdUnit()               //-- Nr. do Pallet
    aParam150[25] -> oMovimento:oMovEndDes:GetArmazem()   //-- Armazém Destino
    aParam150[26] -> oMovimento:oMovEndDes:GetEnder()     //-- Endereco Destino
    aParam150[27] -> oMovimento:oMovEndDes:GetEstFis()    //-- Estrutura Fisica Destino
    aParam150[28] -> oMovimento:oMovServic:GetOrdem()     //-- Ordem da Tarefa
    aParam150[29] -> oMovimento:oMovTarefa:GetOrdem()     //-- Ordem da Atividade
    aParam150[30] -> oMovimento:oMovTarefa:GetFuncao()    //-- Funcao do Recurso Humano
    aParam150[31] -> oMovimento:oMovTarefa:GetTpRec()     //-- Recurso Fisico
    aParam150[32] -> oMovimento:oOrdServ:GetIdDCF()       //-- Identificador do DCF
    aParam150[34] -> oMovimento:GetIdMovto()              //-- Identificador exclusivo do Movimento no D12
*/
 
User Function DLAponta(oMovimento,cAcao)
Local lRet := .T.
 
   // Executa as ações complementares
   // Para efeito de teste esta função vai replicar o registro da ordem de serviço (DCF) para a tabela D12
   // Ou seja, irá gerar um registro de movimentação (convocação) exatamente igual à DCF
    
    If cAcao == '1' // Na execução da OS
		// Se for um serviço de tipo 1 - Entrada, atribui o endereço destino igual ao origem,
		// pensando que a tarefa customizada será executada ainda na doca de entrada
    	If oMovimento:oMovServic:GetTipo() == "1" .And. Empty(oMovimento:oMovEndDes:GetEnder())
    		oMovimento:oMovEndDes:SetEnder(oMovimento:oMovEndOri:GetEnder())
		// Se for um serviço de tipo 2 - Saída, atribui o endereço origem igual ao destino,
		// pensando que a tarefa customizada será executada apenas na doca de saída
    	ElseIf oMovimento:oMovServic:GetTipo() == "2" .And. Empty(oMovimento:oMovEndOri:GetEnder())
    		oMovimento:oMovEndOri:SetEnder(oMovimento:oMovEndDes:GetEnder())
    	EndIf
        //-- Status movimento
        oMovimento:cStatus := '4'
        //Copiando a quantidade para o movimento
        oMovimento:SetQtdMov(oMovimento:GetQuant())
        If !oMovimento:AssignD12()
            lRet := .F.
        EndIf
    ElseIf cAcao == '2' // Na execução do Coletor
        lRet := U_AptColUsr(oMovimento) // Chama rotina customizada de coletor
    EndIf
    
Return lRet
 
// Função para simples apontamento de tempo. Abrirá no coletor uma tela para que o
// usuário informe a hora de início da movimentação.
User Function AptColUsr(oMovimento)
Local lRet := .T.
 
    // Se o movimento não tiver sido iniciado
    If oMovimento:GetStatus() $ '3|4' .And. Empty(oMovimento:GetDataIni())
        If (lRet := WmsQuestion("Confirma o inicio da atividade?"))
            oMovimento:SetRecHum(__cUserID)
            oMovimento:SetStatus("3")
            oMovimento:SetDataIni(Date())
            oMovimento:SetHoraIni(Time())
            oMovimento:UpdateD12()
        EndIf
    ElseIf oMovimento:GetStatus() == '3' .And. !Empty(oMovimento:GetDataIni())
        If (lRet := WmsQuestion("Confirma a finalização da atividade?"))
            oMovimento:SetStatus("1")
            oMovimento:SetRecHum(__cUserID)
            oMovimento:SetDataFim(Date())
            oMovimento:SetHoraFim(Time())
            oMovimento:UpdateD12()
        EndIf
    Else
        WMSVTAviso("Atividade inconsistente.")
        lRet := .F.
    EndIf
 
    WMSAltSts(.F.) // Informa para o produto padrão que não deve alterar a situação do movimento
 
Return lRet


04. ASSUNTOS RELACIONADOS

Documento de Referência

...