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:
MATA261
Versão:
12.1.17
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Mensagem do Enviar e-mail Abrir o Perfil do usuário TCHULA 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.
               

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário EMERSON.EN 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 Enviar e-mail Abrir o Perfil do usuário TCHULA 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.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário RPAIVA 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])


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário RPAIVA 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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário EMERSON.EN 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 Enviar e-mail Abrir o Perfil do usuário TCHULA 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

 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