Текущее время: Пн, июл 21 2025, 17:08

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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