cancel
Showing results for 
Search instead for 
Did you mean: 

Como manter tabela SHADOW para registros individuais?

former_member196574
Participant
0 Kudos

Olá,

Estou com um requisito onde existe a necessidade de disponibilizar uma SM30 para algumas tabelas SHADOW do TDF de modo que seja possivel manter os dados das mesmas.

Até aí tudo bem, o problema é que estas tabelas possuem o campo MANDT porém o mesmo faz referência ao campo mandt do sistema de origem dos dados mas as tabelas standard trata o campo como um campo MANDT tradicional, ou seja, como se fosse o campo do mandante do ambiente acessado (TDF neste caso).

Exemplo:

Se o meu ambiente produtivo ECC possui o client '666' e meu TDF possui o client '123' se eu acessar a SM30 de uma tabela SHADOW ao tentar incluir um novo registro ele será automaticamente gerado pelo standard com o client '123' quando o correto seria '666'.

Existe um modo de contornar esta limitação ou será necessário criar um programa 'Z' utilizando o comando CLIENT SPECIFIED para realizar tal manutenção?

Desde já agradeço pela atenção.

Accepted Solutions (1)

Accepted Solutions (1)

LindolfoMartins
Participant

Fabio,

Vi sua questão só hoje, mas já me deparei com esse problema e pra resolver foi criada uma view Z para a tabela standard e os forms GET_DATA, DB_UPD e READ_SINGLE gerados automaticamente para essa view foram editados incluindo a opção CLIENT SPECIFIED no statements SQL.

O inconveniente dessa solução é que se a tabela for alterada incluindo um novo campo por exemplo e esse campo precisar ser tratado na view, a mesma deverá ser regerada e alterada novamente. O ponto forte é que é uma solução rápida que não exige que você crie um programa Z.

No exemplo abaixo criamos a view /VWK/TDFTPSERV para a tabela /TMF/D_IT_TPSERV forçando o mandante '305' .

*---------------------------------------------------------------------*
*    view related FORM routines
*   generation date: 09.06.2018 at 21:49:39
*   view maintenance generator version: #001407#
*---------------------------------------------------------------------*
*...processing: /VWK/TDFTPSERV..................................*
FORM GET_DATA_/VWK/TDFTPSERV.
  PERFORM VIM_FILL_WHERETAB.
*.read data from database.............................................*
  REFRESH TOTAL.
  CLEAR   TOTAL.
* Ajuste para tratar somente MANDANTE 305
  SELECT * FROM /TMF/D_IT_TPSERV CLIENT SPECIFIED WHERE MANDT = '305' AND
(VIM_WHERETAB) .
    CLEAR /VWK/TDFTPSERV .
/VWK/TDFTPSERV-MANDT =
/TMF/D_IT_TPSERV-MANDT .
/VWK/TDFTPSERV-EMPRESA =
/TMF/D_IT_TPSERV-EMPRESA .
/VWK/TDFTPSERV-FILIAL =
/TMF/D_IT_TPSERV-FILIAL .
/VWK/TDFTPSERV-NF_ID =
/TMF/D_IT_TPSERV-NF_ID .
/VWK/TDFTPSERV-TP_SERVICO =
/TMF/D_IT_TPSERV-TP_SERVICO .
/VWK/TDFTPSERV-BASE_IRF =
/TMF/D_IT_TPSERV-BASE_IRF .
/VWK/TDFTPSERV-VLR_IRF =
/TMF/D_IT_TPSERV-VLR_IRF .
/VWK/TDFTPSERV-DT_E_S =
/TMF/D_IT_TPSERV-DT_E_S .
/VWK/TDFTPSERV-VLR_RET_SUB =
/TMF/D_IT_TPSERV-VLR_RET_SUB .
/VWK/TDFTPSERV-VLR_N_RET_PRINC =
/TMF/D_IT_TPSERV-VLR_N_RET_PRINC .
/VWK/TDFTPSERV-VLR_SERVICOS_15 =
/TMF/D_IT_TPSERV-VLR_SERVICOS_15 .
/VWK/TDFTPSERV-VLR_SERVICOS_20 =
/TMF/D_IT_TPSERV-VLR_SERVICOS_20 .
/VWK/TDFTPSERV-VLR_SERVICOS_25 =
/TMF/D_IT_TPSERV-VLR_SERVICOS_25 .
/VWK/TDFTPSERV-VLR_N_RET_ADIC =
/TMF/D_IT_TPSERV-VLR_N_RET_ADIC .
/VWK/TDFTPSERV-MUDAR_IRF =
/TMF/D_IT_TPSERV-MUDAR_IRF .
<VIM_TOTAL_STRUC> = /VWK/TDFTPSERV.
    APPEND TOTAL.
  ENDSELECT.
  SORT TOTAL BY <VIM_XTOTAL_KEY>.
  <STATUS>-ALR_SORTED = 'R'.
*.check dynamic selectoptions (not in DDIC)...........................*
  IF X_HEADER-SELECTION NE SPACE.
    PERFORM CHECK_DYNAMIC_SELECT_OPTIONS.
  ELSEIF X_HEADER-DELMDTFLAG NE SPACE.
    PERFORM BUILD_MAINKEY_TAB.
  ENDIF.
  REFRESH EXTRACT.
ENDFORM.
*---------------------------------------------------------------------*
FORM DB_UPD_/VWK/TDFTPSERV .
*.process data base updates/inserts/deletes.........................*
LOOP AT TOTAL.
  CHECK <ACTION> NE ORIGINAL.
MOVE <VIM_TOTAL_STRUC> TO /VWK/TDFTPSERV.
  IF <ACTION> = UPDATE_GELOESCHT.
    <ACTION> = GELOESCHT.
  ENDIF.
  CASE <ACTION>.
   WHEN NEUER_GELOESCHT.
IF STATUS_/VWK/TDFTPSERV-ST_DELETE EQ GELOESCHT.
     READ TABLE EXTRACT WITH KEY <VIM_XTOTAL_KEY>.
     IF SY-SUBRC EQ 0.
       DELETE EXTRACT INDEX SY-TABIX.
     ENDIF.
    ENDIF.
    DELETE TOTAL.
    IF X_HEADER-DELMDTFLAG NE SPACE.
      PERFORM DELETE_FROM_MAINKEY_TAB.
    ENDIF.
   WHEN GELOESCHT.
* Ajuste para tratar somente MANDANTE 305
  SELECT SINGLE FOR UPDATE * FROM /TMF/D_IT_TPSERV CLIENT SPECIFIED WHERE MANDT = '35' AND
  EMPRESA = /VWK/TDFTPSERV-EMPRESA AND
  FILIAL = /VWK/TDFTPSERV-FILIAL AND
  NF_ID = /VWK/TDFTPSERV-NF_ID AND
  TP_SERVICO = /VWK/TDFTPSERV-TP_SERVICO .
    IF SY-SUBRC = 0.
* Ajuste para tratar somente MANDANTE 305
    DELETE /TMF/D_IT_TPSERV CLIENT SPECIFIED.
    ENDIF.
    IF STATUS-DELETE EQ GELOESCHT.
      READ TABLE EXTRACT WITH KEY <VIM_XTOTAL_KEY> BINARY SEARCH.
      DELETE EXTRACT INDEX SY-TABIX.
    ENDIF.
    DELETE TOTAL.
    IF X_HEADER-DELMDTFLAG NE SPACE.
      PERFORM DELETE_FROM_MAINKEY_TAB.
    ENDIF.
   WHEN OTHERS.
* Ajuste para tratar somente MANDANTE 305
  SELECT SINGLE FOR UPDATE * FROM /TMF/D_IT_TPSERV CLIENT SPECIFIED WHERE MANDT = '35' AND
  EMPRESA = /VWK/TDFTPSERV-EMPRESA AND
  FILIAL = /VWK/TDFTPSERV-FILIAL AND
  NF_ID = /VWK/TDFTPSERV-NF_ID AND
  TP_SERVICO = /VWK/TDFTPSERV-TP_SERVICO .
    IF SY-SUBRC <> 0.   "insert preprocessing: init WA
      CLEAR /TMF/D_IT_TPSERV.
    ENDIF.
/TMF/D_IT_TPSERV-MANDT =
/VWK/TDFTPSERV-MANDT .
/TMF/D_IT_TPSERV-EMPRESA =
/VWK/TDFTPSERV-EMPRESA .
/TMF/D_IT_TPSERV-FILIAL =
/VWK/TDFTPSERV-FILIAL .
/TMF/D_IT_TPSERV-NF_ID =
/VWK/TDFTPSERV-NF_ID .
/TMF/D_IT_TPSERV-TP_SERVICO =
/VWK/TDFTPSERV-TP_SERVICO .
/TMF/D_IT_TPSERV-BASE_IRF =
/VWK/TDFTPSERV-BASE_IRF .
/TMF/D_IT_TPSERV-VLR_IRF =
/VWK/TDFTPSERV-VLR_IRF .
/TMF/D_IT_TPSERV-DT_E_S =
/VWK/TDFTPSERV-DT_E_S .
/TMF/D_IT_TPSERV-VLR_RET_SUB =
/VWK/TDFTPSERV-VLR_RET_SUB .
/TMF/D_IT_TPSERV-VLR_N_RET_PRINC =
/VWK/TDFTPSERV-VLR_N_RET_PRINC .
/TMF/D_IT_TPSERV-VLR_SERVICOS_15 =
/VWK/TDFTPSERV-VLR_SERVICOS_15 .
/TMF/D_IT_TPSERV-VLR_SERVICOS_20 =
/VWK/TDFTPSERV-VLR_SERVICOS_20 .
/TMF/D_IT_TPSERV-VLR_SERVICOS_25 =
/VWK/TDFTPSERV-VLR_SERVICOS_25 .
/TMF/D_IT_TPSERV-VLR_N_RET_ADIC =
/VWK/TDFTPSERV-VLR_N_RET_ADIC .
/TMF/D_IT_TPSERV-MUDAR_IRF =
/VWK/TDFTPSERV-MUDAR_IRF .

* Ajuste para tratar somente MANDANTE 305
/TMF/D_IT_TPSERV-MANDT = '305'.
/VWK/TDFTPSERV-MANDT = '305'.

    IF SY-SUBRC = 0.
* Ajuste para tratar somente MANDANTE 305
    UPDATE /TMF/D_IT_TPSERV CLIENT SPECIFIED.
    ELSE.
* Ajuste para tratar somente MANDANTE 305
    INSERT /TMF/D_IT_TPSERV CLIENT SPECIFIED.
    ENDIF.
    READ TABLE EXTRACT WITH KEY <VIM_XTOTAL_KEY>.
    IF SY-SUBRC EQ 0.
      <XACT> = ORIGINAL.
      MODIFY EXTRACT INDEX SY-TABIX.
    ENDIF.
    <ACTION> = ORIGINAL.
    MODIFY TOTAL.
  ENDCASE.
ENDLOOP.
CLEAR: STATUS_/VWK/TDFTPSERV-UPD_FLAG,
STATUS_/VWK/TDFTPSERV-UPD_CHECKD.
MESSAGE S018(SV).
ENDFORM.
*---------------------------------------------------------------------*
FORM READ_SINGLE_/VWK/TDFTPSERV.
* Ajuste para tratar somente MANDANTE 305
  SELECT SINGLE * FROM /TMF/D_IT_TPSERV CLIENT SPECIFIED WHERE MANDT = '305' AND
EMPRESA = /VWK/TDFTPSERV-EMPRESA AND
FILIAL = /VWK/TDFTPSERV-FILIAL AND
NF_ID = /VWK/TDFTPSERV-NF_ID AND
TP_SERVICO = /VWK/TDFTPSERV-TP_SERVICO .
/VWK/TDFTPSERV-MANDT =
/TMF/D_IT_TPSERV-MANDT .
/VWK/TDFTPSERV-EMPRESA =
/TMF/D_IT_TPSERV-EMPRESA .
/VWK/TDFTPSERV-FILIAL =
/TMF/D_IT_TPSERV-FILIAL .
/VWK/TDFTPSERV-NF_ID =
/TMF/D_IT_TPSERV-NF_ID .
/VWK/TDFTPSERV-TP_SERVICO =
/TMF/D_IT_TPSERV-TP_SERVICO .
/VWK/TDFTPSERV-BASE_IRF =
/TMF/D_IT_TPSERV-BASE_IRF .
/VWK/TDFTPSERV-VLR_IRF =
/TMF/D_IT_TPSERV-VLR_IRF .
/VWK/TDFTPSERV-DT_E_S =
/TMF/D_IT_TPSERV-DT_E_S .
/VWK/TDFTPSERV-VLR_RET_SUB =
/TMF/D_IT_TPSERV-VLR_RET_SUB .
/VWK/TDFTPSERV-VLR_N_RET_PRINC =
/TMF/D_IT_TPSERV-VLR_N_RET_PRINC .
/VWK/TDFTPSERV-VLR_SERVICOS_15 =
/TMF/D_IT_TPSERV-VLR_SERVICOS_15 .
/VWK/TDFTPSERV-VLR_SERVICOS_20 =
/TMF/D_IT_TPSERV-VLR_SERVICOS_20 .
/VWK/TDFTPSERV-VLR_SERVICOS_25 =
/TMF/D_IT_TPSERV-VLR_SERVICOS_25 .
/VWK/TDFTPSERV-VLR_N_RET_ADIC =
/TMF/D_IT_TPSERV-VLR_N_RET_ADIC .
/VWK/TDFTPSERV-MUDAR_IRF =
/TMF/D_IT_TPSERV-MUDAR_IRF .
ENDFORM.

Answers (0)