- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Pontos de Entrada
- PE - MT103FIM - Set Filter na programação
Perguntas PE - MT103FIM - Set Filter na programação
- Mjuniorfacic
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 119
- Obrigados Recebidos: 0
9 anos 6 meses atrás #28201
por Mjuniorfacic
PE - MT103FIM - Set Filter na programação foi criado por Mjuniorfacic
Boa tarde Galera,
Fiz uma persona para incluir na SA5( Amarração Produto x Fornecedor ) automaticamente que o funcionario der entrada na uma NF-e.
Porem quando chega do Set Filter da uma garrada legal (para por 1 minuto).
Sera que tem algo melhor para ser feito neste pequeno fonte para ajudar no desempenho?
User Function MT103FIM()
Local aArea := GetArea()
Local _Opcao := Paramixb[1]
Local nConfirma := Paramixb[2] // Se o usuario confirmou a operação de gravação da NFE
if nConfirma == 1 .and. _Opcao == 3
lMT100TOK := .F.
If SF1->F1_TIPO == 'N' .AND. ("SD1")->D1_DOC <> ""
dbSelectArea("SD1")
SET FILTER TO ("SD1")->D1_DOC+D1_SERIE+D1_FORNECE+D1_LOJA == SF1->F1_DOC+SF1->F1_SERIE+SF1->F1_FORNECE+SF1->F1_LOJA
dbGoTop()
While ("SD1")->(!EOF())
dbSelectArea("SA5")
dbSetOrder(02)
If !found(dbSeek(xFilial("SA5")+SD1->D1_COD+SA2->A2_COD+SA2->A2_LOJA))
RecLock("SA5",.T.)
REPLACE A5_FILIAL WITH xFilial("SA5")
REPLACE A5_FORNECE WITH AllTrim(SF1->F1_FORNECE)
REPLACE A5_LOJA WITH AllTrim(SF1->F1_LOJA)
REPLACE A5_NOMEFOR WITH AllTrim(POSICIONE("SA2",1,XFILIAL("SA2")+SA2->A2_COD+SA2->A2_LOJA,"A2_NOME"))
REPLACE A5_PRODUTO WITH AllTrim(SD1->D1_COD)
REPLACE A5_NOMPROD WITH AllTrim(POSICIONE("SB1",1,XFILIAL("SB1")+SD1->D1_COD,"B1_DESC"))
REPLACE A5_XULTPRC WITH SD1->D1_VUNIT
REPLACE A5_XDTULCO WITH SF1->F1_DTDIGIT
MsUnlock()
Else
RecLock("SA5",.F.)
REPLACE A5_XULTPRC WITH SD1->D1_VUNIT
REPLACE A5_XDTULCO WITH SF1->F1_DTDIGIT
MsUnlock()
EndIf
("SD1")->(DBSKIP())
ENDDO
EndIf
EndIf
RestArea(aArea)
Return()
Fiz uma persona para incluir na SA5( Amarração Produto x Fornecedor ) automaticamente que o funcionario der entrada na uma NF-e.
Porem quando chega do Set Filter da uma garrada legal (para por 1 minuto).
Sera que tem algo melhor para ser feito neste pequeno fonte para ajudar no desempenho?
User Function MT103FIM()
Local aArea := GetArea()
Local _Opcao := Paramixb[1]
Local nConfirma := Paramixb[2] // Se o usuario confirmou a operação de gravação da NFE
if nConfirma == 1 .and. _Opcao == 3
lMT100TOK := .F.
If SF1->F1_TIPO == 'N' .AND. ("SD1")->D1_DOC <> ""
dbSelectArea("SD1")
SET FILTER TO ("SD1")->D1_DOC+D1_SERIE+D1_FORNECE+D1_LOJA == SF1->F1_DOC+SF1->F1_SERIE+SF1->F1_FORNECE+SF1->F1_LOJA
dbGoTop()
While ("SD1")->(!EOF())
dbSelectArea("SA5")
dbSetOrder(02)
If !found(dbSeek(xFilial("SA5")+SD1->D1_COD+SA2->A2_COD+SA2->A2_LOJA))
RecLock("SA5",.T.)
REPLACE A5_FILIAL WITH xFilial("SA5")
REPLACE A5_FORNECE WITH AllTrim(SF1->F1_FORNECE)
REPLACE A5_LOJA WITH AllTrim(SF1->F1_LOJA)
REPLACE A5_NOMEFOR WITH AllTrim(POSICIONE("SA2",1,XFILIAL("SA2")+SA2->A2_COD+SA2->A2_LOJA,"A2_NOME"))
REPLACE A5_PRODUTO WITH AllTrim(SD1->D1_COD)
REPLACE A5_NOMPROD WITH AllTrim(POSICIONE("SB1",1,XFILIAL("SB1")+SD1->D1_COD,"B1_DESC"))
REPLACE A5_XULTPRC WITH SD1->D1_VUNIT
REPLACE A5_XDTULCO WITH SF1->F1_DTDIGIT
MsUnlock()
Else
RecLock("SA5",.F.)
REPLACE A5_XULTPRC WITH SD1->D1_VUNIT
REPLACE A5_XDTULCO WITH SF1->F1_DTDIGIT
MsUnlock()
EndIf
("SD1")->(DBSKIP())
ENDDO
EndIf
EndIf
RestArea(aArea)
Return()
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
9 anos 5 meses atrás #28232
por kanaamlrr
Respondido por kanaamlrr no tópico PE - MT103FIM - Set Filter na programação
Em vez de usar o set filter já pensou em utilizar um dbseek e adicionar a sua condição de filtro na cláusula do while?
Pode ser que resolva...
Pode ser que resolva...
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Pontos de Entrada
- PE - MT103FIM - Set Filter na programação
Tempo para a criação da página:0.100 segundos