Текущее время: Вт, июл 22 2025, 02:19

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 08:49 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 28 2012, 16:26
Сообщения: 52
Помогите начинающему abapеру зашел в тупик не могу понять как быть дальше: хочу поместить данные во внутреннюю таблицу


"эти данные удалось поместить в внутр. табл
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.

" Хочу эти данные так же поместить во внутр. табл.
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.

"Далее код выглядит так:

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.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 09:10 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 08 2010, 07:35
Сообщения: 42
Пол: Мужской
Здравствуйте!
Попробуйте курс BC400 почитать или книжку Кречмера, там написано как заполнять.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 09:39 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 28 2012, 16:26
Сообщения: 52
в том то и проблема делаю так как указано в книжке Кречмера, выдает синтаксическую ошибку, что не так делаю?

DATA:
* Begin of it_ekko,
preorder_number type ekko-angnr,
confirmation_number type ekko-ihrez,
order_data type ekko-aedat,
curr type ekko-waers,
* End of it_ekko.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 09:49 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 08 2010, 07:35
Сообщения: 42
Пол: Мужской
Цитата:
curr type ekko-waers,

надо "." в конце ставить.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 09:57 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
polkon написал(а):
в том то и проблема делаю так как указано в книжке Кречмера, выдает синтаксическую ошибку, что не так делаю?

DATA:
* Begin of it_ekko,
preorder_number type ekko-angnr,
confirmation_number type ekko-ihrez,
order_data type ekko-aedat,
curr type ekko-waers,
* End of it_ekko.

Что написано в пояснении к ошибке?
Если это последнее определение данных то правильно заметил
alex_sh80 написал:
Цитата:
curr type ekko-waers,

надо "." в конце ставить.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:01 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 28 2012, 16:26
Сообщения: 52
Да нет не в этом проблема я просто кусок из контекста вырезал чтобы показать что я пробовал описанные в книжке методы.
Вот к примеру:

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. " Внутренняя таблица


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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:08 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
polkon написал(а):

при присвоении TYPE стабильно выдает синтаксическую ошибку:

что такое присвоение TYPE?
Т.е.
ошибка указывает на строчку
DATA: gt_table TYPE TABLE OF t_table WITH HEADER LINE. " Внутренняя таблица ?

P.S. программа из приведенного куска кода отлично активируется,
давайте всю программу в студию.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:11 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 08 2010, 07:35
Сообщения: 42
Пол: Мужской
Цитата:
main_table TYPE specification,

а на это не ругается? что-то не видел такого типа в сапе.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:12 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
alex_sh80 написал:
Цитата:
main_table TYPE specification,

а на это не ругается? что-то не видел такого типа в сапе.

тут не на что ругаться. тип объявлен выше


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:13 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 08 2010, 07:35
Сообщения: 42
Пол: Мужской
Цитата:
тут не на что ругаться. тип объявлен выше

не увидел, извиняюсь. :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:14 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 28 2012, 16:26
Сообщения: 52
Поэтому я в самом начале написал последующий код:

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. "и соответственно на эту


ну и далее где встречаются delivery_place, main_table


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:19 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 08 2010, 07:35
Сообщения: 42
Пол: Мужской
polkon написал(а):
Поэтому я в самом начале написал последующий код:

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. "и соответственно на эту


Вы хотите текст записать просто в переменную seller, а она нигде объявлена. Если нужно записать в таблицу, то надо писать CONCATENATE ... into gt_table-seller, и чтобы запись появилась во внутренней таблице, нужно сделать APPEND.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:20 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 28 2012, 16:26
Сообщения: 52
bossjohn написал(а):
polkon написал(а):

при присвоении TYPE стабильно выдает синтаксическую ошибку:

что такое присвоение TYPE?
Т.е.
ошибка указывает на строчку
DATA: gt_table TYPE TABLE OF t_table WITH HEADER LINE. " Внутренняя таблица ?

P.S. программа из приведенного куска кода отлично активируется,
давайте всю программу в студию.


Вот вся прога:

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,

* aedat TYPE ekpo-aedat,
END OF specification.
*TYPES specification_table TYPE TABLE 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,
one_table type specification,
main_table TYPE specification,
END OF t_table.

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

DATA:
* seller type char100,
* buyer type char100,
* delivery_place type char100,
* main_table type specification_table.

DATA:
* Begin of it_ekko,
preorder_number type ekko-angnr,
confirmation_number type ekko-ihrez,
order_data type ekko-aedat,
curr type ekko-waers,
* End of it_ekko,

* Begin of it_ekpo,
total_price type ekpo-netwr,
nds type ekpo-netwr.
* End of it_ekpo.

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.

*total_price = 0.
*NDS = 0.
SELECT * FROM ekpo INTO temp_ekpo WHERE ebeln = 4500000034.
CALL METHOD z_test_class1=>number_TRANSFORM
EXPORTING
input = temp_ekpo-ebelp
flag = ' '
IMPORTING
output = tb_line-place_number.
tb_line-product_code = temp_ekpo-matnr.
* tb_line-supplier_code = temp_ekko-llief.
SELECT maktx FROM makt INTO tb_line-product_name WHERE matnr = temp_ekpo-matnr
AND spras = 'R'.
ENDSELECT.
tb_line-quantity = temp_ekpo-menge.
tb_line-unit = temp_EKPO-MEINS.

* SELECT kbetr FROM konv INTO tb_line-price WHERE knumv = temp_ekko-knumv
* AND kposn = temp_ekpo-ebelp
* AND kschl = 'P001'.
* ENDSELECT.

tb_line-price = temp_ekpo-netpr.
tb_line-total = temp_ekpo-netwr.
total_price = total_price + tb_line-total.
NDS = NDS + TEMP_EKPO-NETWR.
IF temp_ekko-waers = 'RUB'.
tb_line-currency = 'РУБ'.
ELSE.
tb_line-currency = temp_ekko-waers.
ENDIF.

SELECT eindt FROM eket INTO tb_line-date WHERE ebeln = temp_ekko-ebeln.
ENDSELECT.
* DO 5 TIMES.
INSERT tb_line INTO TABLE main_table.
* ENDDO.

ENDSELECT.

CURR = tb_line-currency.


Последний раз редактировалось polkon Пт, дек 14 2012, 10:26, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:25 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Тут у вас должна быть ошибка в строке
main_table type specification_table.
ИБо specification_table не тип.

P.S. зачем закомментировали ?
*TYPES specification_table TYPE TABLE OF specification.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по работе с внутренними таблицами бд
СообщениеДобавлено: Пт, дек 14 2012, 10:28 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 28 2012, 16:26
Сообщения: 52
bossjohn написал(а):
Тут у вас должна быть ошибка в строке
main_table type specification_table.
ИБо specification_table не тип.

P.S. зачем закомментировали ?
*TYPES specification_table TYPE TABLE OF specification.


извиняюсь, этот кусок закоментирован так как он аналогично прописан выше без DATA
*DATA:
* seller type char100,
* buyer type char100,
* delivery_place type char100,
* main_table type specification_table.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB