ÍNDICE

  1. Visão Geral
  2. Exemplo de utilização

01. VISÃO GERAL

Localização: Function MontEstru() - Responsável por montar array com estrutura do produto.

Em que ponto: É chamado antes de iniciar a gravação dos empenhos na abertura de uma ordem de produção. Utilizado para incluir, alterar ou excluir itens que sejam empenhados na abertura da Ordem de Produção.

Finalidade: Alteração de Itens Empenhados na Abertura da OP.

Programa fonte: MATA650.PRX

SintaxeEMP650 - Edição de Itens Empenhados na Abertura da OP ( [ ] )

Observações:

Não recebe parâmetros, porém neste momento o array aCols que é apresentado na alteração de empenhos quando se abre uma Ordem de Produção está disponível para alterações.
O aCols apresenta neste momento as linhas e colunas preenchidas, de acordo com o empenho padrão a ser efetuado no Sistema.
Basta alterar ou incluir o conteúdo deste array para alterar as informações dos empenhos. A estrutura básica do array aCols é apresentada da seguinte forma:

aCols[n,npos] - Onde o n e o  número da linha  e nPos  pode ser:

nPosCod          - Código do Produto a ser empenhado
nPosQuant      - Quantidade do empenho
nPosLocal        - Almoxarifado do empenho
nPosTrt            - Sequência do componente na estrutura (Campo G1_TRT)
nPosLote          - Sub-Lote utilizado no empenho (Somente deve ser preenchido se o produto utilizar rastreabilidade do tipo "S")
nPosLotCTL      - Lote utilizado no empenho (Somente deve ser preenchido se o produto utilizar rastreabilidade)
nPosDValid      - Data de validade do Lote (Somente deve ser preenchido se o produto utilizar rastreabilidade)
nPosPotenc      - Potência de lote (Somente deve ser preenchido se o produto utilizar rastreabilidade)
nPosLocLz        - Localização utilizada no empenho (Somente deve ser preenchido se o produto utilizar controle de localização física) 
nPosnSerie       - Número de Série (Somente deve ser preenchido se o produto utilizar controle de localização física)
nPosUM           - 1a. Unidade de Medida do Produto
nPosQtSegum - Quantidade do Empenho na 2a. Unidade de Medida
nPos2UM         - 2a. Unidade de Medida do Produto
nPosDescr       - Descrição do produto
nPosOper        - Produto Original  
nPosPrdOrg    - Operação vinculada ao produto
nPosIsAlt         - Produto Alternativo


Na acols a ultima coluna define se a linha está deletada (.T.) ou não (.F.)
Como a rotina sofreu alterações, e passou a ter alguma colunas dinâmicas, para pegar a posição da ultima coluna, indicamos utilizar a busca pelo Acols através da função Len  Exemplo:

 LEN(ACOLS[n])



Vale ressaltar que as colunas que não forem preenchidas, devem ser inicializadas com a função Criavar dos respectivos campos. Basta pesquisar qual o campo tomado como base para criação das colunas.


02. EXEMPLO DE UTILIZAÇÃO



#INCLUDE 'PROTHEUS.CH'


User function EMP650()


    Local aArea  := GetArea()

    local nx
    For nx := 1 to len(Acols) // Percorre todas as linhas da acols

         IF ! Acols[nx][len(acols[nx])] // Verifica se linha nao esta Deletada

            Conout("Linha não deletada: "+ cValTochar(nx))
        EndIF

       Conout("Produto :"+ acols[nx,nPoscod] + " Descrição : " +acols[nx,nPosDescr] )
    Next nx

    RestArea(aArea)

Return



Também fica disponível o array aOpcCam, que deve ser atualizado juntamente com o array aCols, para correto cálculo de opcionais.

Exemplo:

#include "rwmake.ch"

User Function EMP650()

Local nQtdDel := Len(aColsDele)
Local nx      := 0

If Len(aColsDele) > 0

    For nx:= nQtdDel To 1 Step -1
        aDel(aCols, aColsDele[nx])
        aDel(aOpcCam, aColsDele[nx])
    Next nx
    
    aSize(aCols, Len(aCols) - Len (aColsDele))
    aSize(aOpcCam, Len(aOpcCam) - Len (aColsDele))
    aSize(aColsDele,0)
    
EndIf

Return



<!-- esconder o menu --> 


<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;
}
</style>