Imprimi Página | Fechar janela

Ponto de Entrada SB1 para DA1

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=42051
Data da Impressão: sábado, 17 de novembro de 2018 at 20:34


Topico: Ponto de Entrada SB1 para DA1

Postado por: AJJUNIOR
Assunto: Ponto de Entrada SB1 para DA1
Data Postagem: quarta-feira, 11 de julho de 2018 at 09:20

Bom dia, estou com um problema em um ponto de entrada...

Preciso que ao criar um novo produto na SB1 automaticamente vá o produto para DA1... Estou usando o Ponto de Entrada MT010INC, porém estou com uma grande dificuldade para preencher o campo DA1_ITEM, pois trata-se de uma sequencial.

a função está assim:

USER FUNCTION MT010INC()
//////////////////////////////////////////////////////////////////////////
/// Inclusao automatica do SB5 - Andre Luis Almeida - 05/09/2006 ///
/////////////////////////////////////////////////////////////////////////

aAreaSB1 := SB1->(Getarea())
DbSelectArea("DA1")
RecLock("DA1",.t.)       
           
   Wcodseq()
   
     DA1->DA1_FILIAL := xFilial("DA1")
     DA1->DA1_CODPROD := SB1->B1_COD
     DA1->DA1_CODTAB :=
          if dbseek(xfilial("DA1")+cProd)
               while !eof() .and. DA1->DA1_CODPRO == cProd
                    DA1->(dbskip())
               end
          endif

MsUnlock()                         
SB1->(RestArea(aAreaSB1))

////////////////////////////////////////////////////////////////////////////////////////////
Return .t.


Respostas:

Postado Por: JALBERTO
Data Postagem: quarta-feira, 11 de julho de 2018 at 10:23

Que confusa a tua necessidade :(
Tu está dizendo que tem o Produto no item da Tabela de Preço (DA1) mas não tem ele cadastrado na SB1 ?

O que tem a ver o Item da tabela de Preço ?

Jorge Alberto




Postado Por: AJJUNIOR
Data Postagem: quarta-feira, 11 de julho de 2018 at 14:00

O que eu preciso é que quando cadastrar um item novo no cadastro de produto(SB1) automaticamente cadastre na tabela de preço(DA1).



Postado Por: JALBERTO
Data Postagem: quarta-feira, 11 de julho de 2018 at 15:44

Tu pode fazer o execauto para isso

cDescri := "Tabela de Preço padrão"
nItem := 1 // Realizar uma consulta na Tabela de Preço para identificar o maior item e usar a função Soma1() para que o sistema possa somar.

aAdd(aCabec,{"DA0_FILIAL" ,cFilAnt ,Nil})
aAdd(aCabec,{"DA0_DESCRI" ,cDescri ,Nil})

aAdd(aLinha,{"DA1_ITEM" ,StrZero(nItem,4) ,Nil})
aAdd(aLinha,{"DA1_CODPRO" ,SB1->B1_COD,Nil})
aAdd(aLinha,{"DA1_PRCVEN" ,nPreco    ,Nil})
aAdd(aItens,aLinha)
aLinha := {}

MSExecAuto({|x,y,z| Omsa010(x,y,z)},aCabec,aItens,3)

Jorge Alberto




Postado Por: AJJUNIOR
Data Postagem: quinta-feira, 12 de julho de 2018 at 08:16

Mas dessa forma ele pega o ultimo item cadastrado na SB1?

Exemplo:

Hoje meu tenho 3000 cadastrados na SB1 e desse numero apenas uns 500 está na tabela de preço...



O que preciso realmente é que quando houver alguma inclusão de produto na SB1 automaticamente esse produto cadastrado já vá para a tabela de preço mesmo com o preço zerado...






Postado Por: JALBERTO
Data Postagem: quinta-feira, 12 de julho de 2018 at 09:33

O PE MT010INC é chamado no final da Inclusão de um novo produto, então sim o sistema estará posicionado no produto que está sendo incluído no momento.


Jorge Alberto




Postado Por: GRAVATAL
Data Postagem: quinta-feira, 12 de julho de 2018 at 10:44

Cara tu pode usar o que o fonte que o brother citou ai em cima no ponto de entrada A010TOK, nele voce estara posicionado no produto que estara incluindo, dai fara a inclusão na DA1 via execauto nesse ponto de entrada.



Postado Por: JALBERTO
Data Postagem: quinta-feira, 12 de julho de 2018 at 13:30

ATENÇÃO: O PE A010TOK é chamado tanto na inclusão como na alteração para validar se está "tudo ok".

Se tu quiser saber se é inclusão ou alteração terá que usar as variáveis publicas INCLUI e ALTERA para saber o que está sendo feito.


Jorge Alberto



Postado Por: 3FRAIM
Data Postagem: quinta-feira, 12 de julho de 2018 at 13:34

AJJUNIOR,

Da forma como o Jorge passou, todas as vezes que vc incluir um produto, será incluída uma nova tabela de preço para esse novo produto.
Eu penso que essa não seja a sua necessidade.

Para incluir o produto na tabela de preço ( que já está cadastrada ), vc precisa, primeiramente informar o código dessa tabela em algum lugar, ou em um campo customizado na SB1 ou abrindo uma tela para que o usuário informe o código ou até mesmo em um parâmetro (se existir somente uma tabela de preço).

Para identificar a próxima sequencia para incluir o item, execute uma consulta no banco antes de começar a incluir (RecLock). Deve ser feito antes porque não é aconselhado executar o dbskip() na mesma tabela que executou o reclock.

Outra coisa que vc precisa é do preço de venda.

Peso que também seja necessário verificar se aquele produto realmente é um produto para venda. Todos os produtos cadastrados podem ser vendidos? Não existem produtos somente para consumo? Pense nisso e crie uma regra ou por grupo ou por tipo...

Segue abaixo exemplo da consulta para identificar o ultimo item da tabela de preço que deseja incluir o produto.



BEGINSQL ALIAS "TMP1"

SELECT MAX(DA1_ITEM) ULTIMO
FROM %TABLE:DA1%
WHERE
    DA1_FILIAL = %XFILIAL:DA1%
    AND DA1_CODTAB = %EXP:cCodTab%
    AND %NOTDEL%

ENDSQL

If TMP1->(!EOF())
    cProximo := Soma1(TMP1->ULTIMO)
    TMP1->(dbCloseArea())
Else
    MsgAlert("Tabela de preço não encontrada!")
    TMP1->(dbCloseArea())
    return
EndIf


//********************************
// Depois é so executar o Reclock
//********************************

dbSelectArea("DA1")
RecLock("DA1",.t.)

DA1->DA1_FILIAL := xFilial("DA1")
DA1->DA1_ITEM := cProximo
DA1->DA1_CODPROD := SB1->B1_COD
DA1->DA1_CODTAB := cCodTab
DA1->DA1_PRCVEN := nPrcVenda
DA1->DA1_DATVIG := dDataBase
DA1->DA1_ATIVO := ‘1‘ // Sim
DA1->DA1_TPOPER := ‘4‘ // todas as operações
DA1->DA1_QTDLOT := 999999.99
DA1->DA1_INDLOT := STRZERO(999999, TamSx3("DA1_INDLOT")[1]-3 ) + ".99"
DA1->DA1_MOEDA := 1

MsUnLock()



Espero ter ajudado!

Efraim Barros



Postado Por: AJJUNIOR
Data Postagem: quinta-feira, 12 de julho de 2018 at 14:40

Efraim Barros, boa tarde, o que preciso é realmente isso que vc falou, porém estou compilando esse fonte e está dando um erro(em anexo).

Se puderes me dar uma força ou add no skype: ajjunior@quaimar.com



Postado Por: 3FRAIM
Data Postagem: quinta-feira, 12 de julho de 2018 at 16:18

Ajjunior,

Eu não consegui te adicionar no skype.

Mas o erro está ocorrendo porque eu não fiz o fonte completo, porque não tenho todas as informações.

Eu coloquei várias questões na ultima mensagem que você vai precisar tratar no fonte.

Uma delas é com relação ao erro.

vc não preencheu o codigo da tabela de preco na variavel ccodtab.

Dá uma lida na mensagem anterior e faça os ajustes necessários.






Imprimir Página | Fechar Janela