Árvore de páginas

POSCusOrd - Ordenação personalizada da consulta de Ordem de Produção

Linha de Produto:

Protheus

Segmento:

Manufatura

Módulo:

SIGAPCP - Planejamento e Controle da Produção

Parâmetro(s):

NomeTipoDescrição
PARAMIXB[1]Caracter

Código do usuário

PARAMIXB[2]CaracterCódigo do formulário
PARAMIXB[3]Caracter

Tipo do apontamento

PARAMIXB[4]Caracter

Consulta SQL que será executada na pesquisa que virá no seguinte modelo:

    SELECT TC_OP, --Número da OP          
           TC_COD, --Código do produto
           TC_DESC, --Descrição do produto
           TC_QUANT, --Quantidade prevista da OP  
           TC_QUJE, --Quantidade produzida da OP   
           TC_DATPRI, --Data de previsão de início da OP
           TC_DATPRF, --Data de Previsão de conclusão da OP
           TC_DATINI, --Data real de início da OP
           TC_DATRF, --Data de conclusão da OP
           TC_SITOP, --Situação da OP 
           TC_SPLIT, --Código do split  
           TC_OPER, --Código da operação  
           TC_DESCOPE, --Descrição da operação
           TC_QTPVOPE, --Quantidade prevista da operação
           TC_QTPDOPE, --Quantidade produzida da operação
           TC_DTINOPE, --Data início da operação
           TC_DTFIOPE, --Data fim da operação
           TC_IDOPER, --Id da operação
           TC_PERDA, --Quantidade de perda
           TC_ARMZ, --Código do armazém
           TC_UM, --Unidade de medida do produto
           TC_PEDIDO, --Número do pedido
           TC_CODCLI, --Código do cliente
           TC_NOMCLI, --Nome do cliente
           TC_MAQUINA, --Código da máquina
           TC_CNTRTRB, --Centro de trabalho
           TC_OPSTART --Operação em andamento 1-produção/2-horas improdutivas
      FROM TCXXXX

Observação: A tabela de pesquisa é criada em tempo de execução e o nome é formado por "TC_" + ThreadID()

PARAMIXB[5]Lógico

Indica se a consulta deve ter ordem descendente

Idiomas:

Todos

País(es):

Todos

Banco(s) de Dados:

Todos

Sistema(s) Operacional(is):

Todos

Ponto de Entrada

Descrição:
O ponto de entrada POSCusOrd será executado ao realizar uma consulta de ordem de produção no App Minha Produção e nele será possível manipular a consulta SQL que trará as ordens de produção filtradas para que realize a ordenação conforme necessitar, assim como atribuir um nome à ordenação para que apareça na tela de resultados da consulta.
Localização:

API ProductionOrderSearch, método GET ProductionOrderMaster - Responsável por retornar uma lista de ordens de produção durante a utilização do APP Minha Produção - Consulta de OP.

Eventos:

Não se aplica.

Programa Fonte:ProductionOrderSearch.PRW

Sintaxe:

POSCusOrd( ) --> aRetOrd

Retorno:
NomeTipoDescriçãoObrigatório
aRetOrdArray

aRetOrd[1] - Nome da ordenação que será visualizada na consulta

aRetOrd[2] - Consulta SQL com a nova ordenação atribuída.

Observação: Se além de adicionar a cláusula ORDER BY na query, for necessário adicionar relacionamento com outras tabelas ou novos campos na consulta, assim pode ser feito, desde que nenhum dos campos recebidos pelo ponto de entrada seja removido.

Sim
Observações:

Não é permitida a utilização de qualquer componente de interface gráfica nesse ponto de entrada, visto que a função será executada durante uma requisição REST.



Exemplo
#INCLUDE "TOTVS.CH"
  
User Function POSCusOrd()
    //parâmetros
    Local cUserCode := PARAMIXB[1]
    Local cFormCode := PARAMIXB[2]
    Local cApType   := PARAMIXB[3] //0-Menu,1-Apont. Produção(MATA250),3-Apont. Produção MOD 2(MATA681),4-Apont. Produção SFC (SFCA314),6-Cad. Ordem Produção(MATA650)
    Local cQuery    := PARAMIXB[4]
    Local lDesc     := PARAMIXB[5]
    //partes da query
    Local nFieldsIni := AT("TC_",cQuery)
    Local nFieldsFin := AT("FROM",cQuery)
    Local cFields    := AllTrim(SUBSTRING(cQuery,nFieldsIni,nFieldsFin-nFieldsIni))
    Local cTable     := AllTrim(SUBSTR(cQuery,nFieldsFin+4))
    //nome da ordenação no app
    Local cSortName  := ""
    //query customizada
    Local cQueryOrd  := ""
    //array de retorno - [1] = nome da ordenação, [2] = query
    //obs.: para não aplicar ordenação na consulta, manter o array vazio
    Local aRet       := {}

    conout("cUserCode: " + cUserCode)
    conout("cFormCode: " + cFormCode)
    conout("cApType: " + cApType)
    conout("cQuery: " + cQuery)
    conout("lDesc: " + IIF(lDesc,"true","false"))

    If cApType == "3"
        cSortName  := "Carga Máquina"
        cQueryOrd := "SELECT "
        cQueryOrd += cFields
        cQueryOrd += " FROM " + cTable + " TC"
        cQueryOrd += " LEFT JOIN "+RetSqlName("SH8")+" SH8 ON SH8.H8_OP = TC.TC_OP AND SH8.H8_OPER = TC.TC_OPER"
        cQueryOrd += " ORDER BY SH8.H8_OPER,SH8.H8_BITINI"
    EndIf
    If cApType $ "|1|4|6|"
        cSortName := "Prev. Término"
        cQueryOrd := cQuery
        cQueryOrd += " ORDER BY TC_DATPRF"
        If lDesc
            cQueryOrd += " DESC"
        EndIf    
    EndIf
    //A pesquisa de OP localizada no menu não terá ordenação customizada, portanto, será devolvido o array vazio
    If !Empty(cSortName)
        aAdd(aRet,cSortName) 
        aAdd(aRet,cQueryOrd)
    EndIf
Return aRet