Nesse vídeo demonstraremos em como estornar liberações de pedido de venda na SC9 através da função a460Estorna.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe021 Exemplo de função para estornar a liberação de um pedido de venda @type Function @author Atilio @since 26/11/2022 @obs Função a460Estorna Parâmetros + Identifica se o programa chamador é o pedido de venda + Indica se deve atualizar os empenhos + Valor a ser adicionado no limite de crédito + Tipo da liberação (igual o C5_TIPLIB = "1" por itens e "2" por pedido) Retorno + Define se o estorno foi executado com sucesso (.T.) ou não (.F.) **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe021() Local aArea := FWGetArea() Local cNumPedido := "000003" DbSelectArea("SC5") SC5->(DbSetOrder(1)) // C5_FILIAL + C5_NUM DbSelectArea('SC6') SC6->(DbSetOrder(1)) // C6_FILIAL + C6_NUM + C6_ITEM + C6_PRODUTO DbSelectArea('SC9') SC9->(DbSetOrder(1)) // C9_FILIAL + C9_PEDIDO + C9_ITEM + C9_SEQUEN + C9_PRODUTO + C9_BLEST + C9_BLCRED //Somente se encontrar o pedido If SC5->(MsSeek(FWxFilial("SC5") + cNumPedido)) //Posiciona no item do pedido If SC6->( MsSeek( SC5->C5_FILIAL + SC5->C5_NUM ) ) //Percorre todos os itens do pedido de venda While ! SC6->(EoF()) .And. SC6->C6_FILIAL == SC5->C5_FILIAL .And. SC6->C6_NUM == SC5->C5_NUM //Posiciona na liberação do item do pedido e enquanto houver dados estorna a liberação SC9->(MsSeek(FWxFilial('SC9') + SC6->C6_NUM + SC6->C6_ITEM)) While ! SC9->(EoF()) .And. SC9->(C9_FILIAL + C9_PEDIDO + C9_ITEM) == FWxFilial('SC9') + SC6->(C6_NUM + C6_ITEM) SC9->(a460Estorna(.T.)) SC9->(DbSkip()) EndDo SC6->(DbSkip()) EndDo EndIf EndIf FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Bom dia, tudo bem Atilio.
Muito interessante este material.
Fiquei com uma duvida, se o pedido tiver 5 itens distintos, eu posso estornar apenas um item ou tenho que estornar o pedido inteiro sempre.
Bom dia Renato, tudo joia graças a Deus e você?
Sim, você pode estornar apenas uma liberação da SC9, ao invés de While conforme no exemplo, você só estorna a que você quer, estando posicionado nela.
Um grande abraço.