[RESOLVIDO] Exemplo de como utilizar a API/BO para Criar item

Discussão em 'EMS , HCM e Totvs 11' iniciado por rhemati, Agosto 14, 2013.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. rhemati

    rhemati Membro Participativo

    Pessoal, boa tarde.

    Alguém ai tem exemplo, como utilizar a API/BO bodi154.p para criar item ( ped-item ) no pedido ( ped-venda ), no PD4000?

    Obrigado.
  2. rhemati

    rhemati Membro Participativo

    Pessoal, bom dia.

    Eu consegui complementar o meu código com um que eu já tinha aqui na empresa de cancelar o item, a intenção é esta mesmo.
    Mas eu quero deixar o mesmo item cancelado nesta quantidade atual, e na outra colocar a quantidade que o usuário do comercial/faturamento achar conveniente conforme estoque. E isto eu estou chamando de corte parcial e não integral, como acontece hoje que pelo programa já corta/cancela o item total.
    Com este pedaço de código, com o que eu estudei na BO e com uma ajuda de um amigo aqui do fórum o chacmaster ( Carlos ), eu gerei este código, mas ainda estou tendo problemas, alguém pode me dá uma luz?
    Segue abaixo o código que está dando erro.
    Obrigado.

    Código:
    def temp-table tt-pedido-cancelar
        field cod-estabel   like ped-venda.cod-estabel
        field nr-pedido     like ped-venda.nr-pedido
        field it-codigo     like ped-item.it-codigo
        field cod-motivo    as int
        .
    
    def var i-cod-motivo    as int no-undo.
    def var i-seq-item      as int no-undo.
    
    DEFINE TEMP-TABLE tt-ped-item-aux  NO-UNDO LIKE ped-item.
    
    EMPTY TEMP-TABLE tt-ped-item-aux.
    
    DISABLE TRIGGERS FOR LOAD OF ped-venda.
    DISABLE TRIGGERS FOR LOAD OF ped-item.
    
    Def Temp-table RowErrors No-undo
        Field errorSequence         As Int
        Field errorNumber           As Int
        Field errorDescription      As Char
        Field errorParameters       As Char
        Field errorType             As Char
        Field errorHelp             As Char
        Field errorsubtype          As Char.
    
    {cdp/cd0666.i}
    
    /* Def Output Param Table For tt-erro. */
    
    def var bo-ped-item-criar       as handle no-undo.
    def var bo-ped-item-cancelar    as handle no-undo.
    def var c-situacao-ped      as char extent 7 initial ["ABERTO", "ATENDIDO PARCIAL","ATENDIDO TOTAL", "PENDENTE","SUSPENSO","CANCELADO", "FATURAMENTO BALCAO"] no-undo.
    
    
    def buffer bf-ped-item              for ped-item.
    def buffer bf-ped-item-sequencia    for ped-item.
    def buffer bf-emitente              for emitente. 
    
    EMPTY TEMP-TABLE tt-erro.
    
    /*RUN pi-inicializar. */
    
    /* Criando o Item para teste */
    assign  i-cod-motivo    =   1.
    
        create  tt-pedido-cancelar.
        assign  tt-pedido-cancelar.cod-estabel  =   '50'
                tt-pedido-cancelar.nr-pedido    =   11871 /* Base teste Vetor */
                tt-pedido-cancelar.it-codigo    =   '948.2'
                tt-pedido-cancelar.cod-motivo   =   i-cod-motivo
                .
    
    /*----------------------------------------------------------------------------------------------------------*/
    {bodi154.i tt-ped-item}
    
    /* Segundo Cancelar o Item */
    
    MESSAGE 'segundo'
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    Run dibo/bodi154can.p Persistent Set bo-ped-item-cancelar.
    
    for each tt-pedido-cancelar
        no-lock:
    
    
        MESSAGE 'tt-pedido-cancelar.cod-estabel  ' tt-pedido-cancelar.cod-estabel  SKIP
            'tt-pedido-cancelar.nr-pedido    ' tt-pedido-cancelar.nr-pedido    
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    
        For Each ped-venda 
            NO-LOCK 
            WHERE ped-venda.cod-estabel =   tt-pedido-cancelar.cod-estabel
            AND ped-venda.nr-pedido     =   tt-pedido-cancelar.nr-pedido
            /* and c-situacao-ped[bf-ped-venda.cod-sit-ped]    =   'ABERTO' */
            /* and ped-venda.cod-sit-ped   =   1 */
            :
    
            MESSAGE 2
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
            MESSAGE 'tt-pedido-cancelar.it-codigo' tt-pedido-cancelar.it-codigo
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    
            MESSAGE 'ped-venda.nome-abrev         ' ped-venda.nome-abrev            SKIP
                    'ped-venda.nr-pedcli          ' ped-venda.nr-pedcli             SKIP
                    'tt-pedido-cancelar.it-codigo ' tt-pedido-cancelar.it-codigo 
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
        
            find first ped-item 
                where ped-item.nome-abrev   =   ped-venda.nome-abrev
                and ped-item.nr-pedcli      =   ped-venda.nr-pedcli
                and ped-item.it-codigo      =   tt-pedido-cancelar.it-codigo 
                no-lock no-error.
            If Avail ped-item AND ped-item.cod-sit-item <> 6 /*Cancelado*/ Then Do:
        
    
                MESSAGE 3
                    VIEW-AS ALERT-BOX INFO BUTTONS OK.
        
                Run ValidateCancelation  In bo-ped-item-cancelar    (   Input Rowid(ped-item),
                                                                        Input "Cancelamento de Itens",
                                                                        Input-output Table RowErrors
                                                                            ).
                Find First RowErrors No-error.
                If Not Avail RowErrors Then Do:
        
                   Run UpdateCancelation In bo-ped-item-cancelar (  Input Rowid(ped-item),
                                                                    Input "Cancelamento de Itens",
                                                                    Input Today,
                                                                    Input i-cod-motivo
                                                                    ).
                End.
                Else Do:
            
                    For Each RowErrors:
            
                        Create tt-erro.          
                        Assign tt-erro.i-sequen = errorSequence
                               tt-erro.cd-erro  = Rowerrors.errorNumber
                               tt-erro.mensagem = Rowerrors.errorDescription.
        
                    End.
                End.
            End. /* if avail ped-item */
            else do:
    
            end.
    
        End.
        
        /*Run cdp/cd0666.p (input Table tt-erro).*/
    
    end.
    
    for each tt-erro:
        disp    tt-erro.i-sequen
                tt-erro.cd-erro
                tt-erro.mensagem
                with 1 col width 550.
    end.
    
    delete procedure bo-ped-item-cancelar.
    
    MESSAGE 'CRIANDO TESTE'
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    /* Criar o item com a quantidade já com o corte parcial */
    Run dibo/bodi154.p Persistent Set bo-ped-item-criar.
    
        find first tt-pedido-cancelar
            no-lock no-error.
        if available tt-pedido-cancelar then do:
    
            MESSAGE 'tt-pedido-cancelar.cod-estabel  ' tt-pedido-cancelar.cod-estabel  SKIP
                'tt-pedido-cancelar.nr-pedido    ' tt-pedido-cancelar.nr-pedido    
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
            find first ped-venda 
                where ped-venda.cod-estabel =   tt-pedido-cancelar.cod-estabel
                and ped-venda.nr-pedido     =   tt-pedido-cancelar.nr-pedido
                /* and c-situacao-ped[bf-ped-venda.cod-sit-ped]    =   'ABERTO' */
                /* and ped-venda.cod-sit-ped   =   1 */
                no-lock no-error.
            if available ped-venda then do:
    
                find first bf-ped-item 
                    where bf-ped-item.nome-abrev   =   ped-venda.nome-abrev
                    and bf-ped-item.nr-pedcli      =   ped-venda.nr-pedcli
                    and bf-ped-item.it-codigo      =   tt-pedido-cancelar.it-codigo 
                    no-lock no-error.
                if avail bf-ped-item 
                    /*and ped-item.cod-sit-item <> 6 */
                    /*Cancelado*/ Then Do:
    
                    /* Pegando a última sequência */
                    find last bf-ped-item-sequencia
                        where bf-ped-item-sequencia.nome-abrev  =   bf-ped-item.nome-abrev
                        and bf-ped-item-sequencia.nr-pedcli     =   bf-ped-item .nr-pedcli
                        and bf-ped-item-sequencia.it-codigo     =   bf-ped-item .it-codigo
                        no-lock no-error.
                    if available bf-ped-item-sequencia then do:
                        assign  i-seq-item  =   bf-ped-item-sequencia.nr-sequencia + 10.
    
                        MESSAGE 'i-seq-item' i-seq-item
                            VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
                    end.
    
                    MESSAGE 'ped-item-aux'
                        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
                    find first bf-emitente
                        where bf-emitente.cod-emitente  =   ped-venda.cod-emitente.
                    if available bf-emitente then do:
                        
                        CREATE  tt-ped-item-aux.
                        ASSIGN  tt-ped-item-aux.nome-abrev              =   bf-ped-item.nome-abrev
                                tt-ped-item-aux.nr-pedcli               =   bf-ped-item.nr-pedcli
                                tt-ped-item-aux.nat-operacao            =   bf-ped-item.nat-operacao
                                tt-ped-item-aux.it-codigo               =   bf-ped-item.it-codigo 
                                tt-ped-item-aux.qt-pedida               =   6   /* Exemplo da Quantidade Parcial */
                                tt-ped-item-aux.cod-refer               =   bf-ped-item.it-codigo
                                tt-ped-item-aux.vl-preori               =   bf-ped-item.vl-preori
                                tt-ped-item-aux.vl-preuni               =   bf-ped-item.vl-preuni
                                tt-ped-item-aux.vl-pretab	            =   bf-ped-item.vl-pretab  
                                   
    
                            /*
                                /*tt-ped-item-aux.cod-refer               =   bf-ped-item.cod-refer */
                                
                                tt-ped-item-aux.vl-preori               =   bf-ped-item.vl-preori
                                tt-ped-item-aux.vl-preuni               =   bf-ped-item.vl-preuni
                                tt-ped-item-aux.vl-pretab	            =   bf-ped-item.vl-pretab    
                                tt-ped-item-aux.des-pct-desconto-inform =   bf-ped-item.des-pct-desconto-inform
                                tt-ped-item-aux.dt-entorig              =   bf-ped-item.dt-entorig   
                                tt-ped-item-aux.dt-entrega              =   bf-ped-item.dt-entrega   
                                tt-ped-item-aux.nat-operacao            =   bf-ped-item.nat-operacao 
                                tt-ped-item-aux.tipo-atend              =   bf-ped-item.tipo-atend   
                                tt-ped-item-aux.ind-componen            =   bf-ped-item.ind-componen 
                                tt-ped-item-aux.cod-entrega             =   bf-ped-item.cod-entrega  
                                /* tt-ped-item-aux.cod-refer               =   bf-ped-item.it-codigo */
                                /* tt-ped-item-aux.cod-un                  =   bf-ped-item.cod-un */
                                tt-ped-item-aux.nr-sequencia            =   i-seq-item
                            */
                                .                        
                        
                        EMPTY TEMP-TABLE tt-ped-item.
                        
                        CREATE tt-ped-item.
                        BUFFER-COPY tt-ped-item-aux TO tt-ped-item.
    
                    end.
    
    
    
                end.
    
            end.
    
        end.
    
        /* BO/API para Criar Item */
        find first tt-ped-item
            no-lock no-error.
        if available tt-ped-item then do:
    
            MESSAGE 'aqui'
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
            MESSAGE 'tt-ped-item.Nome-abrev      '  tt-ped-item.Nome-abrev      skip
                    'tt-ped-item.it-codigo       '  tt-ped-item.it-codigo       skip
                    'tt-ped-item.nr-pedcli       '  tt-ped-item.nr-pedcli       skip
                    'tt-ped-item.dt-entorig      '  tt-ped-item.dt-entorig      skip
                    'tt-ped-item.dt-entrega      '  tt-ped-item.dt-entrega      skip
                    'tt-ped-item.qt-pedida       '  tt-ped-item.qt-pedida       skip
                    'tt-ped-item.vl-pretab       '  tt-ped-item.vl-pretab       skip
                    'tt-ped-item.vl-preori       '  tt-ped-item.vl-preori       skip
                    'tt-ped-item.vl-preuni       '  tt-ped-item.vl-preuni       skip
                    'tt-ped-item.nat-operacao    '  tt-ped-item.nat-operacao    skip
                    'tt-ped-item.tipo-atend      '  tt-ped-item.tipo-atend      skip
                    'tt-ped-item.ind-componen    '  tt-ped-item.ind-componen    skip    
                    'tt-ped-item.cod-entrega     '  tt-ped-item.cod-entrega     SKIP
                    'tt-ped-item.nr-sequencia '     tt-ped-item.nr-sequencia        SKIP
                    'tt-ped-item.cod-refer'         tt-ped-item.cod-refer
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
            /*Run inputRowObject in bo-ped-item-criar (  input table tt-ped-item ). */
            /* run createRecord in bo-ped-item-criar (  input table tt-ped-item ). */
    
            run emptyRowErrors in bo-ped-item-criar.
            run setRecord      in bo-ped-item-criar ( input table tt-ped-item ).  
            run createRecord   in bo-ped-item-criar.
    
            if return-value = "nok" then do:
                run getRowErrors in bo-ped-item-criar ( output table RowErrors ).
    
                for each RowErrors
                    no-lock:
                        
                    disp    RowErrors.ErrorNumber           
                            RowErrors.ErrorDescription      format 'x(100)'
                            with 1 col width 300.
    
                end.
    
             end.
    
        end.
    
        /*
    for each tt-erro:
        disp    tt-erro.i-sequen
                tt-erro.cd-erro
                tt-erro.mensagem
                with 1 col width 550.
    end.
    */
    
    delete procedure bo-ped-item-criar.
    
    MESSAGE 'ok'
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    
    Vinicius Gasparini curtiu isso.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página