SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Вопрос по работе с внутренними таблицами бд



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
polkon
Участник
Участник



Joined: 28 Nov 2012
Posts: 14

PostPosted: Fri Dec 14, 2012 9:40 am    Post subject: Вопрос по работе с внутренними таблицами бд Reply with quote

Помогите начинающему abapеру зашел в тупик не могу понять как быть дальше: хочу поместить данные во внутреннюю таблицу

Code:

[b]"эти данные удалось поместить в внутр. табл[/b]

TYPES: BEGIN OF  specification,   
        place_number  TYPE ekpo-ebelp,
        product_code  TYPE ekpo-matnr,
        supplier_code TYPE ekko-llief,
        product_name  TYPE makt-maktx,
        quantity      TYPE ekpo-menge,
        unit          TYPE ekpo-meins,
        price         TYPE ekpo-netpr,
        total         TYPE ekpo-netwr,
        currency      TYPE ekko-waers,
        date          TYPE eket-eindt,
       END OF specification.
TYPES specification_table TYPE TABLE OF specification.

[b]" Хочу эти данные так же поместить во внутр. табл.[/b]
DATA:
       seller              type char100,
       buyer               type char100,
       delivery_place      type char100,
       main_table          type specification_table,

       preorder_number     type ekko-angnr,
       confirmation_number type ekko-ihrez,
       order_data          type ekko-aedat,
       curr                type ekko-waers,
       total_price         type ekpo-netwr,
       nds                 type ekpo-netwr.

[b]"Далее код выглядит так:[/b]

DATA:

      temp_ekko            TYPE ekko,
      temp_ekpo            TYPE ekpo,
      temp_lfa1_adrnr      TYPE lfa1-adrnr,
      temp_addr1_sel       TYPE addr1_sel,
      temp_addr1_val       TYPE addr1_val,
      temp_t001_adrnr      TYPE t001-adrnr,
      temp_t001w_adrnr     TYPE t001w-adrnr.

SELECT * FROM ekko INTO temp_ekko WHERE ebeln = 4500000034.
ENDSELECT.

SELECT adrnr FROM lfa1 INTO temp_lfa1_adrnr WHERE lifnr = temp_ekko-lifnr.
ENDSELECT.
temp_addr1_sel-addrnumber = temp_lfa1_adrnr.
CALL FUNCTION 'ADDR_GET'
  EXPORTING
    address_selection = temp_addr1_sel
  IMPORTING
    address_value     = temp_addr1_val.
CONCATENATE temp_ekko-lifnr temp_addr1_val-name1 temp_addr1_val-name2
            temp_addr1_val-name3 temp_addr1_val-name4 INTO seller SEPARATED BY space.

SELECT adrnr FROM t001 INTO temp_t001_adrnr WHERE bukrs = temp_ekko-bukrs.
ENDSELECT.
temp_addr1_sel-addrnumber = temp_t001_adrnr.
CALL FUNCTION 'ADDR_GET'
  EXPORTING
    address_selection = temp_addr1_sel
  IMPORTING
    address_value     = temp_addr1_val.
CONCATENATE temp_addr1_val-name1 temp_addr1_val-name2
            temp_addr1_val-name3 temp_addr1_val-name4 INTO buyer SEPARATED BY space.

preorder_number = temp_ekko-angnr.

confirmation_number = temp_ekko-ihrez.

order_data = temp_ekko-aedat.

SELECT adrnr FROM t001w INTO temp_t001w_adrnr WHERE werks = temp_ekko-eq_werks.
ENDSELECT.
IF temp_t001w_adrnr = ''.
  SELECT * FROM ekpo INTO temp_ekpo WHERE ebeln = 4500000034.
    SELECT adrnr FROM t001w INTO temp_t001w_adrnr WHERE werks = temp_ekpo-werks
                                                    AND adrnr NE ''.
    ENDSELECT.
  ENDSELECT.
ENDIF.
temp_addr1_sel-addrnumber = temp_t001w_adrnr.
CALL FUNCTION 'ADDR_GET'
  EXPORTING
    address_selection = temp_addr1_sel
  IMPORTING
    address_value     = temp_addr1_val.
CONCATENATE temp_addr1_val-name1 temp_addr1_val-name2
            temp_addr1_val-name3 temp_addr1_val-name4 INTO delivery_place SEPARATED BY space.

DATA tb_line TYPE specification.


Last edited by polkon on Fri Dec 14, 2012 12:51 pm; edited 1 time in total
Back to top
View user's profile Send private message
flex
Специалист
Специалист



Joined: 02 Feb 2011
Posts: 50

PostPosted: Fri Dec 14, 2012 10:43 am    Post subject: Reply with quote

Code:
TYPES: BEGIN OF specification, " Тип
place_number  TYPE ekpo-ebelp,
product_code  TYPE ekpo-matnr,
supplier_code TYPE ekko-llief,
product_name  TYPE makt-maktx,
quantity      TYPE ekpo-menge,
unit          TYPE ekpo-meins,
price         TYPE ekpo-netpr,
total         TYPE ekpo-netwr,
currency      TYPE ekko-waers,
date          TYPE eket-eindt,
END OF specification.

DATA: specification_table TYPE TABLE OF specification WITH HEADER LINE. " Внутренняя таблица

TYPES: BEGIN OF t_table, " Тип
seller          TYPE char100,
buyer          TYPE char100,
delivery_place TYPE char100,
main_table     TYPE specification,
END OF t_table.

DATA: gt_table TYPE TABLE OF t_table WITH HEADER LINE. " Внутренняя таблица


А вообще курс BC400 в руки и в бой.

С селектами у вас тоже беда.

Например:
Code:
SELECT * FROM ekko INTO temp_ekko WHERE ebeln = 4500000034.
ENDSELECT.

Я предполагаю, что вам нужно все данные в таблицу выбрать, а тогда:
Code:
DATA: temp_ekko TYPE TABLE OF ekko.

SELECT * FROM ekko INTO TABLE temp_ekko WHERE ebeln = '4500000034'.
Back to top
View user's profile Send private message
polkon
Участник
Участник



Joined: 28 Nov 2012
Posts: 14

PostPosted: Fri Dec 14, 2012 10:57 am    Post subject: Reply with quote

Пробовал все это делать, при присвоении TYPE стабильно выдает синтаксическую ошибку:
Field 'SELLER' is unknown. It is neither in one of specified tables not defined by "DATA"
statement....

и так же для buyer,delivery_place, main_table и всего что убрано из DATA.
Back to top
View user's profile Send private message
bimit
Специалист
Специалист



Joined: 11 Jul 2011
Posts: 56

PostPosted: Fri Dec 14, 2012 11:42 am    Post subject: Reply with quote

polkon wrote:
Пробовал все это делать, при присвоении TYPE стабильно выдает синтаксическую ошибку:
Field 'SELLER' is unknown. It is neither in one of specified tables not defined by "DATA"
statement....

и так же для buyer,delivery_place, main_table и всего что убрано из DATA.


Ну скорее всего у вас наименование полей расходится с таблицей БД связывайте их через alias ну и за типизацией надо следить, а так правильно написали BC400 ну и другие курсы прочтите Exclamation
Back to top
View user's profile Send private message
polkon
Участник
Участник



Joined: 28 Nov 2012
Posts: 14

PostPosted: Fri Dec 14, 2012 11:51 am    Post subject: Reply with quote

bimit wrote:


Ну скорее всего у вас наименование полей расходится с таблицей БД связывайте их через alias ну и за типизацией надо следить, а так правильно написали BC400 ну и другие курсы прочтите Exclamation


Спасибо за совет, курсы я читаю, просто не могу понять что я делаю не так...
Back to top
View user's profile Send private message
polkon
Участник
Участник



Joined: 28 Nov 2012
Posts: 14

PostPosted: Fri Dec 14, 2012 12:08 pm    Post subject: Reply with quote

flex wrote:
Code:
TYPES: BEGIN OF specification, " Тип
place_number  TYPE ekpo-ebelp,
product_code  TYPE ekpo-matnr,
supplier_code TYPE ekko-llief,
product_name  TYPE makt-maktx,
quantity      TYPE ekpo-menge,
unit          TYPE ekpo-meins,
price         TYPE ekpo-netpr,
total         TYPE ekpo-netwr,
currency      TYPE ekko-waers,
date          TYPE eket-eindt,
END OF specification.

DATA: specification_table TYPE TABLE OF specification WITH HEADER LINE. " Внутренняя таблица

TYPES: BEGIN OF t_table, " Тип
seller          TYPE char100,
buyer          TYPE char100,
delivery_place TYPE char100,
main_table     TYPE specification,
END OF t_table.

DATA: gt_table TYPE TABLE OF t_table WITH HEADER LINE. " Внутренняя таблица


DATA: specification_table TYPE TABLE OF specification WITH HEADER
К чему здесь specification_table если ниже вы его удалили?
Back to top
View user's profile Send private message
bimit
Специалист
Специалист



Joined: 11 Jul 2011
Posts: 56

PostPosted: Fri Dec 14, 2012 12:14 pm    Post subject: Reply with quote

polkon wrote:
Пробовал все это делать, при присвоении TYPE стабильно выдает синтаксическую ошибку:
Field 'SELLER' is unknown. It is neither in one of specified tables not defined by "DATA"
statement....

и так же для buyer,delivery_place, main_table и всего что убрано из DATA.


Код должен быть примерно таким

Code:

TYPES: BEGIN OF specification,
 place_number TYPE ekpo-ebelp,
 product_code TYPE ekpo-matnr,
 supplier_code TYPE ekko-llief,
 product_name TYPE makt-maktx,
 quantity TYPE ekpo-menge,
 unit TYPE ekpo-meins,
 price TYPE ekpo-netpr,
 total TYPE ekpo-netwr,
 currency TYPE ekko-waers,
 date TYPE eket-eindt,
 seller type char100,
 buyer type char100,
 delivery_place type char100,
 preorder_number type ekko-angnr,
 confirmation_number type ekko-ihrez,
 order_data type ekko-aedat,
 curr type ekko-waers,
 total_price type ekpo-netwr,
 nds type ekpo-netwr,

 END OF specification.
* Это тоже непонятно для чего вроде заполнения таблицы в коде нет
 TYPES specification_table TYPE TABLE OF specification.

 DATA: gs_specification_table TYPE specification.
 DATA: gv_werks TYPE werks_d.

  DATA:

   gs_temp_ekko TYPE ekko,
   temp_ekpo TYPE ekpo,
   temp_lfa1_adrnr TYPE lfa1-adrnr,
   temp_addr1_sel TYPE addr1_sel,
   temp_addr1_val TYPE addr1_val,
   temp_t001_adrnr TYPE t001-adrnr,
   temp_t001w_adrnr TYPE t001w-adrnr.

* Здесь правильно выбирать одно поле, уже просто лень такое причесывать
  SELECT SINGLE *
    FROM ekko
    INTO gs_temp_ekko
    WHERE ebeln = '4500000034'.

  SELECT SINGLE adrnr
    FROM lfa1
    INTO temp_addr1_sel-addrnumber
     WHERE lifnr = gs_temp_ekko-lifnr.

  CALL FUNCTION 'ADDR_GET'
    EXPORTING
      address_selection = temp_addr1_sel
    IMPORTING
      address_value     = temp_addr1_val.

  CONCATENATE gs_temp_ekko-lifnr temp_addr1_val-name1 temp_addr1_val-name2
  temp_addr1_val-name3 temp_addr1_val-name4 INTO gs_specification_table-seller SEPARATED BY space.

  SELECT SINGLE adrnr
    FROM t001
    INTO temp_addr1_sel-addrnumber
    WHERE bukrs = gs_temp_ekko-bukrs.


  CALL FUNCTION 'ADDR_GET'
    EXPORTING
      address_selection = temp_addr1_sel
    IMPORTING
      address_value     = temp_addr1_val.
  CONCATENATE temp_addr1_val-name1 temp_addr1_val-name2
  temp_addr1_val-name3 temp_addr1_val-name4 INTO gs_specification_table-buyer SEPARATED BY space.

  gs_specification_table-preorder_number = gs_temp_ekko-angnr.

  gs_specification_table-confirmation_number = gs_temp_ekko-ihrez.

  gs_specification_table-order_data = gs_temp_ekko-aedat.

* Òóò ÷óøü íàïèñàíà
**  SELECT adrnr
**    FROM t001w
**    INTO temp_t001w_adrnr
**    WHERE werks = gs_temp_ekko-eq_werks.


  IF temp_t001w_adrnr = ''.

    CLEAR: gv_werks.
    SELECT SINGLE werks
      FROM ekpo
      INTO gv_werks
      WHERE ebeln = 4500000034.

    IF sy-subrc = 0.
      SELECT SINGLE adrnr
        FROM t001w
        INTO temp_t001w_adrnr
        WHERE werks = gv_werks
         AND adrnr NE ''.
    ENDIF.

  ENDIF.

  CALL FUNCTION 'ADDR_GET'
    EXPORTING
      address_selection = temp_addr1_sel
    IMPORTING
      address_value     = temp_addr1_val.
  CONCATENATE temp_addr1_val-name1 temp_addr1_val-name2
  temp_addr1_val-name3 temp_addr1_val-name4 INTO gs_specification_table-delivery_place SEPARATED BY space.

  DATA tb_line TYPE specification.


Хотя код у вас не очень если честно, и пишите комментарии Wink Very Happy Very Happy
Back to top
View user's profile Send private message
polkon
Участник
Участник



Joined: 28 Nov 2012
Posts: 14

PostPosted: Fri Dec 14, 2012 12:29 pm    Post subject: Reply with quote

bimit wrote:


Хотя код у вас не очень если честно, и пишите комментарии Wink Very Happy Very Happy


Спасибо огромное, буду разбираться, пробовать!
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Fri Dec 14, 2012 12:34 pm    Post subject: Re: Вопрос по работе с внутренними таблицами бд Reply with quote

polkon wrote:
Помогите начинающему abapеру

Пожалуйста, пишите код в сообщении с помощью тега Code.
Code:
data: lv_bkpf type bkpf.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.