|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
MATA261 |
|
Versão: |
12.1.17 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
TCHULA
em 21/05/2019, 12:33 h
Local: SP Registro: 02/10/2014 Postagens: 38 |
Estou com a inconsistência abaixo no meu fonte alguem pode me ajuda r muito obrigado.
aAdd(_aTransfer,{ SD7->D7_PRODUTO ,; //Prod.Orig. D3_COD
SB1->B1_DESC ,; //Desc.Orig. D3_DESCRI
SB1->B1_UM ,; //UM Orig. D3_UM
SB1->B1_LOCPAD ,; //Armazem Or D3_LOCAL
Space(15) ,; //Endereco O D3_LOCALIZ
SD7->D7_PRODUTO ,; //Prod.Desti D3_COD
SB1->B1_DESC ,; //Desc.Desti D3_DESCRI
SB1->B1_UM ,; //UM Destino D3_UM
_cLocal ,; //Armazem De D3_LOCAL
Space(15) ,; //Endereco D D3_LOCALIZ
Space(20) ,; //Numero Ser D3_NUMSERI
SD7->D7_LOTECTL ,; //Lote D3_LOTECTL
SD7->D7_NUMLOTE ,; //Sub-Lote D3_NUMLOTE
SD7->D7_DTVALID ,; //Validade D3_DTVALID
SD7->D7_POTENCI ,; //Potencia D3_POTENCI
_nQtde ,; //Quantidade D3_QUANT
0 ,; //Qt 2aUM D3_QTSEGUM
CriaVar(‘D3_ESTORNO‘) ,; //Estornado D3_ESTORNO
CriaVar(‘D3_NUMSEQ‘) ,; //Sequencia D3_NUMSEQ
_cProxLote ,; //Lote Desti D3_LOTECTL
_dNewVAlid ,; //Validade D D3_DTVALID
CriaVar(‘D3_ITEMGRD‘) ,; //Item Grade D3_ITEMGRD
CriaVar(‘D3_IDDCF‘) ,; //Id DCF D3_IDDCF
CriaVar(‘D3_OBSERVA‘) }) //Observação D3_OBSERVA
Inconsistencia
AJUDA:OCORRENCIA
A ocorrência informada não foi encontrada no cadastro de ocorrências.
Array aheader com inconsistencia de dados.Favor verificar o layout do array enviado
O Campos necessarios sao:
Titulo Campo Tipo Tamanho Decimal
---------- ---------- ---- ------- -------
Prod.Orig. D3_COD C 15 0
Desc.Orig. D3_DESCRI C 60 0
UM Orig. D3_UM C 2 0
Armazem Or D3_LOCAL C 2 0
Endereco O D3_LOCALIZ C 15 0
Prod.Desti D3_COD C 15 0
Desc.Desti D3_DESCRI C 60 0
UM Destino D3_UM C 2 0
Armazem De D3_LOCAL C 2 0
Endereco D D3_LOCALIZ C 15 0
Numero Ser D3_NUMSERI C 20 0
Lote D3_LOTECTL C 20 0
Sub-Lote D3_NUMLOTE C 6 0
Validade D3_DTVALID D 8 0
Potencia D3_POTENCI N 6 2
Quantidade D3_QUANT N 12 2
Qt 2aUM D3_QTSEGUM N 12 2
Estornado D3_ESTORNO C 1 0
Sequencia D3_NUMSEQ C 6 0
Lote Desti D3_LOTECTL C 20 0
Validade D D3_DTVALID D 8 0
Item Grade D3_ITEMGRD C 3 0
Observação D3_OBSERVA C 30 0
Desde já agradeço.
|
|
|
Mensagem do
EMERSON.EN
em 21/05/2019, 14:20 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
se o array é para um ExecAuto, está errado. É preciso indicar o campo que será preenchido, e não somente o conteúdo.
segue exemplo para a MATA261 no TDN:
http://tdn.totvs.com/pages/releaseview.action?pageId=379292916
|
|
|
Mensagem do
TCHULA
em 21/05/2019, 14:50 h
Local: SP Registro: 02/10/2014 Postagens: 38 |
Emerson obrigado pelo retrono mas sou miovato no advpl e não estou encontardo onde esta o erro..
Segue o fonte completo.
Local _nPosTipo := 0
Local _nPosQtde := 0
Local _nPosLocal := 0
Local _nQtde := 0
Local _cLocal := ""
Local _nTipo := 0
_nPosQtde := aScan(aHeader,{|X| Upper(Alltrim(x[2]))== "D7_QTDE" })
_nPosLocal:= aScan(aHeader,{|X| Upper(Alltrim(x[2]))== "D7_LOCDEST" })
_nPosTipo := aScan(aHeader,{|X| Upper(Alltrim(x[2]))== "D7_TIPO" }) //1=LIBERA - 2=REJEITA
_nQtde := acols[len(acols)][_nPOsQtde]
_cLocal := acols[len(acols)][_nPosLocal]
_nTipo := acols[len(acols)][_nPosTipo]
If lEstorno
Return(.t.)
Endif
If _nTipo = 1 //1=LIBERA - 2=REJEITA
_cEmpFrac := GetMv(‘PQ_EMPFRAC‘,.F.,‘02‘)
If SM0->M0_CODIGO $ _cEmpFrac
If Empty(SD7->D7_XORDEM)
//Após Baixa de CQ, Gera LOTE Pharma
//PS-999999/2015
// Tentativa de buscar lote do Parâmetro PQ_PROXLOT
_nProxLote := GetMV(‘PQ_PROXLOT‘,.F.,‘‘)
// Caso não encontre o parâmetro, verifica o ultimo lote utilizado no SB8
If Empty(_nProxLote)
_cQuery := "Select Max(B8_LOTECTL) PROXLOTE From "+RetSqlName(‘SB8‘)+" Where Left(B8_LOTECTL,3) = ‘PS-‘ And D_E_L_E_T_ = ‘‘"
DbUseArea(.T.,"TOPCONN",TCGENQRY(,,_cQuery),"_SB8",.F.,.T.)
_cProxSB8 := _SB8->PROXLOTE
_SB8->(DbCloseArea())
If Empty(_cProxSB8)
_cProxLote := ‘PS-000001/‘+StrZero(Year(dDataBase),4)
Else
_cProxLote := ‘PS-‘+StrZero(Val(Substr(_cProxSB8,4,6))+1,6)+‘/‘+Right(StrZero(Year(dDataBase),4),2)
EndIf
Else
_cProxLote := ‘PS-‘+StrZero(_nProxLote+1,6)+‘/‘+Right(StrZero(Year(dDataBase),4),2)
PutMV(‘PQ_PROXLOT‘, _nProxLote+1)
EndIf
//Meliora/Gustavo - Rastreia data de validade do documento de entrada
_dNewVAlid := xDtValidD1()
Else
_cProxLote := Alltrim(SD7->D7_LOTECTL)
_dNewVAlid := SD7->D7_DTVALID
Endif
_aTransfer := {{SD7->D7_NUMSEQ, dDataBase}}
lMSErroAuto:= .F.
SB1->(DbSeek(xFilial(‘SB1‘)+SD7->D7_PRODUTO))
//
// Em funcao da FCI foi necessario a criacao do if abaixo, dependdo do parametros o mata261 passa a ter colunas a mais.
//
If GETMV(‘MV_FCICALC‘) == 1
aAdd(_aTransfer,{ SD7->D7_PRODUTO ,;
SB1->B1_DESC ,;
SB1->B1_UM ,;
SB1->B1_LOCPAD ,;
Space(15) ,;
SD7->D7_PRODUTO ,;
SB1->B1_DESC ,;
SB1->B1_UM ,;
_cLocal ,;
Space(15) ,;
Space(20) ,;
SD7->D7_LOTECTL ,;
SD7->D7_NUMLOTE ,;
SD7->D7_DTVALID ,;
SD7->D7_POTENCI ,;
_nQtde ,;
0 ,;
CriaVar(‘D3_ESTORNO‘) ,;
CriaVar(‘D3_NUMSEQ‘) ,;
_cProxLote ,;
_dNewVAlid ,;
CriaVar(‘D3_ITEMGRD‘) ,;
CriaVar(‘D3_IDDCF‘) ,;
CriaVar(‘D3_OBSERVA‘) })
Else
//u_TRANSFER()
aAdd(_aTransfer,{ SD7->D7_PRODUTO ,; //Prod.Orig. D3_COD
SB1->B1_DESC ,; //Desc.Orig. D3_DESCRI
SB1->B1_UM ,; //UM Orig. D3_UM
SB1->B1_LOCPAD ,; //Armazem Or D3_LOCAL
Space(15) ,; //Endereco O D3_LOCALIZ
SD7->D7_PRODUTO ,; //Prod.Desti D3_COD
SB1->B1_DESC ,; //Desc.Desti D3_DESCRI
SB1->B1_UM ,; //UM Destino D3_UM
_cLocal ,; //Armazem De D3_LOCAL
Space(15) ,; //Endereco D D3_LOCALIZ
Space(20) ,; //Numero Ser D3_NUMSERI
SD7->D7_LOTECTL ,; //Lote D3_LOTECTL
SD7->D7_NUMLOTE ,; //Sub-Lote D3_NUMLOTE
SD7->D7_DTVALID ,; //Validade D3_DTVALID
SD7->D7_POTENCI ,; //Potencia D3_POTENCI
_nQtde ,; //Quantidade D3_QUANT
0 ,; //Qt 2aUM D3_QTSEGUM
CriaVar(‘D3_ESTORNO‘) ,; //Estornado D3_ESTORNO
CriaVar(‘D3_NUMSEQ‘) ,; //Sequencia D3_NUMSEQ
_cProxLote ,; //Lote Desti D3_LOTECTL
_dNewVAlid ,; //Validade D D3_DTVALID
CriaVar(‘D3_ITEMGRD‘) ,; //Item Grade D3_ITEMGRD
CriaVar(‘D3_IDDCF‘) ,; //Id DCF D3_IDDCF
CriaVar(‘D3_OBSERVA‘) }) //Observação D3_OBSERVA
Endif
FwMsgRun(,{|| MsExecAuto({|x,y| mata261(x,y)},_aTransfer,3) }, ‘Ajuste de Lote PharmaSpecial‘, "Aguarde, ajustando lote "+_cProxLote)
If lMsErroAuto
//Aviso(‘Ajuste de Lote PharmaSpecial‘,‘Erro ao transferir para o lote ‘+_cProxLote+‘. Contate o Administrador.‘,{‘Abandonar‘})
MostraErro()
Else
// Registra Lote interno (novo Lote) na tabela SD7 para impressão no laudo
_cUpdate := "Update "+RetSqlName(‘SD7‘)+" Set D7_XLOTEIN = ‘"+_cProxLote+"‘ Where D7_PRODUTO = ‘"+SD7->D7_PRODUTO+"‘ And D7_NUMERO = ‘"+SD7->D7_NUMERO+"‘ And D_E_L_E_T_ = ‘‘"
TcSqlExec(_cUpdate)
ENDIF
EndIf
Endif
Return .T. |
|
|
Mensagem do
RPAIVA
em 21/05/2019, 16:53 h
Local: MG Registro: 26/01/2014 Postagens: 8 |
Tenta usar: PadR(ALLTRIM(SD7->D7_PRODUTO), tamsx3(‘D3_COD‘) [1])
|
|
|
Mensagem do
RPAIVA
em 21/05/2019, 16:55 h
Local: MG Registro: 26/01/2014 Postagens: 8 |
Outra coisa, dependendo da versao do seu RPO esse campo D3_IDDCF nao deve estar no execauto |
|
|
Mensagem do
EMERSON.EN
em 21/05/2019, 16:59 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
Tente assim:
Local _nPosTipo := 0
Local _nPosQtde := 0
Local _nPosLocal := 0
Local _nQtde := 0
Local _cLocal := ""
Local _nTipo := 0
_nPosQtde := aScan(aHeader,{|X| Upper(Alltrim(x[2]))== "D7_QTDE" })
_nPosLocal := aScan(aHeader,{|X| Upper(Alltrim(x[2]))== "D7_LOCDEST" })
_nPosTipo := aScan(aHeader,{|X| Upper(Alltrim(x[2]))== "D7_TIPO" }) //1=LIBERA - 2=REJEITA
_nQtde := acols[len(acols)][_nPOsQtde]
_cLocal := acols[len(acols)][_nPosLocal]
_nTipo := acols[len(acols)][_nPosTipo]
If lEstorno
Return(.t.)
Endif
If _nTipo = 1 //1=LIBERA - 2=REJEITA
_cEmpFrac := GetMv(‘PQ_EMPFRAC‘,.F.,‘02‘)
If SM0->M0_CODIGO $ _cEmpFrac
If Empty(SD7->D7_XORDEM)
//Após Baixa de CQ, Gera LOTE Pharma
//PS-999999/2015
// Tentativa de buscar lote do Parâmetro PQ_PROXLOT
_nProxLote := GetMV(‘PQ_PROXLOT‘,.F.,‘‘)
// Caso não encontre o parâmetro, verifica o ultimo lote utilizado no SB8
If Empty(_nProxLote)
_cQuery := "Select Max(B8_LOTECTL) PROXLOTE From "+RetSqlName(‘SB8‘)+" Where Left(B8_LOTECTL,3) = ‘PS-‘ And D_E_L_E_T_ = ‘‘"
dbUseArea(.T.,"TOPCONN",TCGENQRY(,,_cQuery),"_SB8",.F.,.T.)
_cProxSB8 := _SB8->PROXLOTE
_SB8->(DbCloseArea())
// *********************************************************************************
// ISTO AQUI ESTÁ CERTO??? DEPENDENDO DA CONDICAO O ANO PODE TER 2 OU 4 DÍGITOS???
// *********************************************************************************
If Empty(_cProxSB8)
_cProxLote := ‘PS-000001/‘+StrZero(Year(dDataBase),4) // ANO COM 4 DIGITOS
Else
_cProxLote := ‘PS-‘+Soma1(Substr(_cProxSB8,4,6))+‘/‘+Right(StrZero(Year(dDataBase),4),2) // ANO COM 2 DIGITOS
EndIf
Else
_cProxLote := ‘PS-‘+StrZero(_nProxLote+1,6)+‘/‘+Right(StrZero(Year(dDataBase),4),2)
PutMV(‘PQ_PROXLOT‘, _nProxLote+1)
EndIf
//Melhoria/Gustavo - Rastreia data de validade do documento de entrada
_dNewVAlid := xDtValidD1()
Else
_cProxLote := Alltrim(SD7->D7_LOTECTL)
_dNewVAlid := SD7->D7_DTVALID
Endif
//cabecalho da transferência
_aTransfer := {{SD7->D7_NUMSEQ, dDataBase}}
SB1->(DbSeek(xFilial(‘SB1‘)+SD7->D7_PRODUTO))
aItem := {} // dados do item que será transferido
aAdd(aItem,{"ITEM",‘001‘,Nil})
// dados do produto origem
aAdd(aItem,{"D3_COD", SD7->D7_PRODUTO, Nil}) //codigo
aAdd(aItem,{"D3_DESCRI", SB1->B1_DESC, Nil}) //descricao
aAdd(aItem,{"D3_UM", SB1->B1_UM, Nil}) //unidade medida
aAdd(aItem,{"D3_LOCAL", SB1->B1_LOCPAD, Nil}) //armazem
aAdd(aItem,{"D3_LOCALIZ", space(tamsx3(‘D3_LOCALIZ‘)[1]),Nil}) //endereco
// dados do produto destino
aAdd(aItem,{"D3_COD", SB1->B1_COD, Nil}) //codigo
aAdd(aItem,{"D3_DESCRI", SB1->B1_DESC, Nil}) //descricao
aAdd(aItem,{"D3_UM", SB1->B1_UM, Nil}) //unidade medida
aAdd(aItem,{"D3_LOCAL", _cLocal, Nil}) //armazem
aAdd(aItem,{"D3_LOCALIZ", space(tamsx3(‘D3_LOCALIZ‘)[1]),Nil}) //endereco
// rastreabilidade origem
aAdd(aItem,{"D3_NUMSERI", "", Nil}) //serie
aAdd(aItem,{"D3_LOTECTL", SD7->D7_LOTECTL, Nil}) //lote
aAdd(aItem,{"D3_NUMLOTE", SD7->D7_NUMLOTE, Nil}) //sublote
aAdd(aItem,{"D3_DTVALID", SD7->D7_DTVALID, Nil}) //data validade
aAdd(aItem,{"D3_POTENCI", SD7->D7_POTENCI, Nil}) //potencia
// dados da transferencia
aAdd(aItem,{"D3_QUANT", _nQtde, Nil}) //quantidade
aAdd(aItem,{"D3_QTSEGUM", 0, Nil}) //2a. unidade medida
aAdd(aItem,{"D3_ESTORNO", "", Nil}) //estorno?
aAdd(aItem,{"D3_NUMSEQ", "", Nil}) //sequencia D3_NUMSEQ
// rastreabilidade destino
aAdd(aItem,{"D3_LOTECTL", _cProxLote, Nil}) //lote
aAdd(aItem,{"D3_NUMLOTE", "", Nil}) //sublote
aAdd(aItem,{"D3_DTVALID", _dNewVAlid, Nil}) //validade lote
aAdd(aItem,{"D3_ITEMGRD", "", Nil}) //item Grade
// codigos Cat83
aAdd(aItem,{"D3_CODLAN", "", Nil}) //origem
aAdd(aItem,{"D3_CODLAN", "", Nil}) //destino
// adiciona o item à lista de transferências
aAdd(_aTransfer, aItem)
// executa a transferência
lMSErroAuto:= .F.
nOpcAuto := 3 //inclusao
FwMsgRun(,{|| MSExecAuto({|x,y| mata261(x,y)},_aTransfer,nOpcAuto) }, ‘Ajuste de Lote PharmaSpecial‘, ‘Aguarde, ajustando lote ‘+_cProxLote)
If lMsErroAuto
//Aviso(‘Ajuste de Lote PharmaSpecial‘,‘Erro ao transferir para o lote ‘+_cProxLote+‘. Contate o Administrador.‘,{‘Abandonar‘})
MostraErro()
Else
// Registra Lote interno (novo Lote) na tabela SD7 para impressão no laudo
_cUpdate := "Update "+RetSqlName(‘SD7‘)+" Set D7_XLOTEIN = ‘"+_cProxLote+"‘ Where D7_PRODUTO = ‘"+SD7->D7_PRODUTO+"‘ And D7_NUMERO = ‘"+SD7->D7_NUMERO+"‘ And D_E_L_E_T_ = ‘‘"
TcSqlExec(_cUpdate)
endif
EndIf
Endif
Return .T.
|
|
|
Mensagem do
TCHULA
em 21/05/2019, 17:51 h
Local: SP Registro: 02/10/2014 Postagens: 38 |
Emerson obrigado mesmo deu certo a sua solução, aquele seu comentário esta correto sim tá, e desta forma que funciona.. |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|