PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Ponto de Entrada SB1 para DA1
Versão:
12.1.8
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
Novo Documento de Texto.txt (anexo)
3.PNG (anexo)
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário AJJUNIOR AJJUNIOR em 11/07/2018, 09:20 h
Local: PE  Registro: 27/11/2017  Postagens: 14
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.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário JALBERTO JALBERTO em 11/07/2018, 10:23 h
Local: RS  Registro: 20/08/2009  Postagens: 167
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário AJJUNIOR AJJUNIOR em 11/07/2018, 14:00 h
Local: PE  Registro: 27/11/2017  Postagens: 14
O que eu preciso é que quando cadastrar um item novo no cadastro de produto(SB1) automaticamente cadastre na tabela de preço(DA1).

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário JALBERTO JALBERTO em 11/07/2018, 15:44 h
Local: RS  Registro: 20/08/2009  Postagens: 167
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário AJJUNIOR AJJUNIOR em 12/07/2018, 08:16 h
Local: PE  Registro: 27/11/2017  Postagens: 14
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...



Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário JALBERTO JALBERTO em 12/07/2018, 09:33 h
Local: RS  Registro: 20/08/2009  Postagens: 167
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GRAVATAL GRAVATAL em 12/07/2018, 10:44 h
Local: SP  Registro: 14/02/2012  Postagens: 3
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.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário JALBERTO JALBERTO em 12/07/2018, 13:30 h
Local: RS  Registro: 20/08/2009  Postagens: 167
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário 3FRAIM 3FRAIM em 12/07/2018, 13:34 h
Local: GO  Registro: 05/01/2011  Postagens: 24
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário AJJUNIOR AJJUNIOR em 12/07/2018, 14:40 h
Local: PE  Registro: 27/11/2017  Postagens: 14
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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário 3FRAIM 3FRAIM em 12/07/2018, 16:18 h
Local: GO  Registro: 05/01/2011  Postagens: 24
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.


Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal