No artigo de hoje, vamos demonstrar em como gravar as informações do orçamento de venda (SCJ e SCK) no pedido de venda (SC5 e SC6) via ponto de entrada.
Se você já teve a necessidade de criar campos customizados no orçamento e levar essa informação para o pedido, você pode usar algum dos pontos abaixo:
- MTA416PV: Durante a gravação da SC5 e do aCols da SC6
- MT416FIM: Após gravar a SC5 e SC6
Para esse exemplo então, nós vamos utilizar o primeiro, que dá para manipular a SC5 e o aCols que vai para a SC6.
Abaixo os campos que nós vamos gravar:
- Vendedor: C5_VEND1 com o customizado CJ_X_VEND
- Observações no Item: C6_X_OBS com o customizado CK_X_OBS
Segue como ficou o código fonte:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zTstSBM
Ponto de entrada ao gerar o pedido de venda via orçamento
@author Atilio
@since 06/07/2023
@version 1.0
@type function
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6784395
@obs Utilizar as variáveis _aHeader e _aCols para manipular as informações da SC6
/*/
User Function MTA416PV()
Local aArea := FWGetArea()
Local aAreaSCK := SCK->(FWGetArea())
Local nLinhaSC6 := 0
Local nPosItem := GDFieldPos("C6_ITEM", _aHeader)
Local nPosProd := GDFieldPos("C6_PRODUTO", _aHeader)
Local nPosObs := GDFieldPos("C6_X_OBS", _aHeader)
//Atualizando campos da SC5 (cabeçalho do pedido) com a SCJ (cabeçalho do orçamento)
M->C5_VEND1 := SCJ_X_VEND
DbSelectArea("SCK")
SCK->(DbSetOrder(1)) // CK_FILIAL + CK_NUM + CK_ITEM + CK_PRODUTO
//Percorre as linhas que irão para os itens do pedido de venda na SC6
For nLinhaSC6 := 1 to Len(_aCols)
//Tenta posicionar na SCK
If SCK->( MsSeek(xFilial("SCK") + SCJ->CJ_NUM + _aCols[nLinhaSC6][nPosItem] + _aCols[nLinhaSC6][nPosProd]) )
//Atualiza os campos da SC6 conforme a SCK
_aCols[nLinhaSC6][nPosObs] := SCK->CK_X_OBS
EndIf
Next
FWRestArea(aAreaSCK)
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.