abap удалить ведущие нули

Работа с внутренними таблицами. Часть 2 — Работа с данными

Привет,в прошлой статье мы разобрали декларацию внутренних таблиц. Сегодня поговорим об использовании внутренних таблиц: добавление удаление и выборка данных, агрегатные функции и т.д.

Начнем с простейшего заполнения таблицы, для начала заполним таблицу прямо в коде программы:

*Объявляем таблицу
data: begin of itab occurs 0,
field1 ( 50 ) type c,
field2 ( 50 ) type c,
end of itab.

itab — field1 = ‘Запись 1 поле 1’.
itab — field2 = ‘Запись 1 поле 2’.
append itab.

itab — field1 = ‘Запись 2 поле 1’.
itab — field2 = ‘Запись 2 поле 2’.
append itab.

Запускаем программу (не забыв активировать). Пока не будем обрабатывать таблицу, посмотрим в отладчике на результат труда.

abap удалить ведущие нули

Теперь давайте все-таки сделаем по данной таблице цикл и выведем значения на экран.

write: / itab — field1, itab — field2.

abap удалить ведущие нули

Цикл можно организовать и с определенным условием:

loop at itab where field1+7 ( 1 ) = ‘2’.

write: / itab — field1, itab — field2.

Мы задали условие, что цикл должен проходить только по записям, в который у поля field1 8-й символ равен 2. Получаем результат:

abap удалить ведущие нули

Напишем следующий код:

*Объявляем таблицу
data: begin of itab occurs 0,
field1 ( 50 ) type c,
field2 ( 50 ) type c,
end of itab.

itab — field1 = ‘Запись 1 поле 1’.
itab — field2 = ‘Запись 1 поле 2’.
append itab.

itab — field1 = ‘Запись 2 поле 1’.
itab — field2 = ‘Запись 2 поле 2’.
append itab.

write: / ‘До оператора read’.
write: / itab — field1, itab — field2.

read table itab with key field1 = ‘Запись 1 поле 1’.

if sy — subrc = 0.
write: / ‘После оператора read’.
write: / itab — field1, itab — field2.
endif.

abap удалить ведущие нули

Давайте разберем, что делает программа. Сначала, как и прошлый раз, мы объявили и заполнили таблицу. А затем я для наглядности вывел на экран текущее содержимое заголовка таблицы:

write: / ‘До оператора read’.
write: / itab — field1, itab — field2.

Т.к. последние значения, которые мы помещали в заголовок, были:

itab — field1 = ‘Запись 2 поле 1’.
itab — field2 = ‘Запись 2 поле 2’.

То данный оператор вывел нам на экран текст:

abap удалить ведущие нули

abap удалить ведущие нули

Перед тем как выводить текст на экран, я проверил, был ли успешным запрос к таблице при помощи условия if sy — subrc = 0, если бы я этого не сделал, то в случае неудачного за проса, я бы получил опять текст:

abap удалить ведущие нули

Вы, наверное, уже догадались, что оператор read всегда читает из таблицы только одну запись.

Удаление данных из таблицы производится оператором refresh – этот оператор чистит всю таблицу, кроме его заголовка.

В данном примере, мы рассматривали случай, когда рабочая область является частью таблицы, но, как правило, создается отдельная рабочая область с которой идет работа. Давайте рассмотрим аналогичные примеры, но уже с отдельной рабочей областью:

TYPES: begin of s_itab,
field1 ( 50 ) type c,
field2 ( 50 ) type c,
field3 ( 16 ) type p decimals 2,
end of s_itab.
data: itab type table of s_itab.
data: wa_itab type s_itab.

data:
intern type table of alsmex_tabline,
wa_intern type alsmex_tabline,
l_index type i,
l_start_col type i value ‘1’,
l_start_row type i value ‘1’,
l_end_col type i value ‘3’,
l_end_row type i value ‘65536’.

parameter: f_name type rlgrap — filename obligatory.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR f_name.
CALL FUNCTION ‘F4_FILENAME’
EXPORTING
program_name = syst — cprog
dynpro_number = syst — dynnr
field_name = ‘FILE_NM’
IMPORTING
file_name = f_name.

start-of-selection.
* Заполняем таблицу

call function ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
exporting
filename = f_name
i_begin_col = l_start_col
i_begin_row = l_start_row
i_end_col = l_end_col
i_end_row = l_end_row
tables
intern = intern
exceptions
inconsistent_parameters = 1
upload_ole = 2
others = 3.

if sy — subrc > 0.
Write: / ‘Ошибка при открытии файла’.
else.
if intern[] is initial.
write: / ‘Данные не загружены!’.
else.
sort intern by row col.
loop at intern into wa_intern.
CASE wa_intern — col.
WHEN ‘0001’.
wa_itab — field1 = wa_intern — value.
WHEN ‘0002’.
wa_itab — field2 = wa_intern — value.
WHEN ‘0003’.
wa_itab — field3 = wa_intern — value.
APPEND wa_itab TO itab.
endcase.
endloop.
endif.
endif.

clear wa_itab.
loop at itab into wa_itab.

write: / wa_itab — field1, wa_itab — field2, wa_itab — field3.

Результат работы программы:

abap удалить ведущие нули

Теперь давайте разберем данную программу по косточкам, тем более я немного усложнил программу. Для интереса я не стал заполнять таблицу в коде программы, а заранее подготовил файл MS Excel, в которой ввел массив записей (см. ниже). Эти записи программа загрузит из файла и разместит во внутренней таблице.

abap удалить ведущие нули

TYPES: begin of s_itab, » тип для таблицы itab и рабочей области
field1 ( 50 ) type c,
field2 ( 50 ) type c,
field3 ( 16 ) type p decimals 2,
end of s_itab.
data: itab type table of s_itab. » целевая таблица данных
data: wa_itab type s_itab. » рабочая область для таблицы itab

data:
intern type table of alsmex_tabline,
wa_intern type alsmex_tabline,
l_start_col type i value ‘1’,
l_start_row type i value ‘1’,
l_end_col type i value ‘3’,
l_end_row type i value ‘65536’.

parameter: f_name type rlgrap — filename obligatory.

Здесь: s_itab – тип для таблицы itab (нашей таблицы данных),

itab – таблица данный,

wa_itab – рабочая область таблицы данных.

Для загрузки из Excel мы должны приготовить некоторые вспомогательные переменные и таблицы:

Intern – таблица, в которую функция ALSM_EXCEL_TO_INTERNAL_TABLE вернет данные из файла,

wa_intern – рабочая область таблицы intern,

l_start_col – начальный столбец Excel с которого будут загружаться данные,

l_start_row – начальная строка Excel с которой будут загружаться данные,
l_end_col – конечный столбец, т.к. в нашем массиве данных три столбца, то значение этой переменной равно 3,
l_end_row – конечная строка загрузки, сделаем её равной 65536.

Для того, чтобы ввести в программу путь к файлу, задам параметр (при его объявлении при запуске в программе, автоматически создается экран 1000 с параметрами запуска программы-отчета).

parameter: f_name type rlgrap — filename obligatory.

Т.к. удобнее вводить путь не руками, а выбирать через специальный сервис, то я обрабатываю событие кнопки F4 (или нажатие на кнопку вызова справочника справа от поля) для параметра f_name.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR f_name.
CALL FUNCTION ‘F4_FILENAME’
EXPORTING
program_name = syst — cprog
dynpro_number = syst — dynnr
field_name = ‘FILE_NM’
IMPORTING
file_name = f_name.

call function ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
exporting
filename = f_name
i_begin_col = l_start_col
i_begin_row = l_start_row
i_end_col = l_end_col
i_end_row = l_end_row
tables
intern = intern
exceptions
inconsistent_parameters = 1
upload_ole = 2
others = 3.

Функция возвращает нам массив данных в таблицу intern в следующем виде:

abap удалить ведущие нули

Т.е. все значения ячеек прописываются в поле value, при этом в полях ROW и COL прописаны значения номера столбца и строки Excel.

Проверяем отклик функции, если он больше нуля (ну или не равен) значит, данные не загрузились.

if sy — subrc > 0.
Write: / ‘Ошибка при открытии файла’.
else.

if intern[] is initial.
write: / ‘Данные не загружены!’.
else.

На всякий случай сортируем таблицу
intern по записям и столбцам и делаем по ней цикл, помещая значения полей в рабочую область wa_intern.

sort intern by row col.
loop at intern into wa_intern.

Оператор
CASE
помогает нам распределить данные по полям рабочей области wa_itab таблицы itab в зависимости от значения поля wa_intern — col (мы знаем, что первая колонка соответствует полю field1 и т.д.).
CASE wa_intern — col.
WHEN ‘0001’.
wa_itab — field1 = wa_intern — value.
WHEN ‘0002’.
wa_itab — field2 = wa_intern — value.
WHEN ‘0003’.
wa_itab — field3 = wa_intern — value.

Помещаем значение рабочей области в таблицу, после того, как заполнена вся запись, т.е. на каждом третьем цикле.

APPEND wa_itab TO itab.
endcase.
endloop.
endif.
endif.

clear wa_itab.
loop at itab into wa_itab.

write: / wa_itab — field1, wa_itab — field2, wa_itab — field3.

Так у нас будут выглядеть загружаемые данные:

abap удалить ведущие нули

loop at intern into wa_intern.
CASE wa_intern — col.
WHEN ‘0001’.
wa_itab — field1 = wa_intern — value.
WHEN ‘0002’.
wa_itab — field2 = wa_intern — value.
WHEN ‘0003’.
wa_itab — field3 = wa_intern — value.
* APPEND wa_itab TO itab.
Collect wa_itab INTO itab.
endcase.
endloop.

При запуске программы получаем:

abap удалить ведущие нули

Также для работы с внутренними таблицами используются операторы:

Insert – добавляет запись во внутреннюю таблицу (возможно указание определенной позиции вставляемой записи в таблице);

Modify – изменяет запись в таблице по определенному условию, если такой записи нет, то она добавляется;

Delete – удаляет запись из таблицы по определенному условию.

Работа с внутренними таблицами. Часть 2 — Работа с данными : 2 комментария

Отличная статья, написанная простым и понятным языком. Кстати, отличный ресурс по SAP в век дефицита информации. Рекомендую, саперы;) А можно ли как то получить консультацию по классам?

Привет! Сейчас у меня в работе несколько статей, в части ABAP пока продолжаю работать по внутренним таблицам, пишу про эволюцию систем управления, а также статья по проектному управлению.
После них обещаю заняться классами в ABAP, видимо выведу в отдельную рубрику.

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

Стандартные подпрограммы преобразования (рутины), используемые в трансформациях.

Неплохо про конвертацию данных написано на английском языке в блоге на сайте sap.com.

Все программы преобразования имеют свои функциональные модули (ФМ), соответственно их возможно применять в коде, например в программах преобразования в трансформациях.

Для того, что бы узнать ФМ стандартной подпрограммы преобразования, достаточно воспользоваться нижеуказанным шаблоном.

Функциональные модули (ФМ) имеют следующий формат:

CONVERSION_EXIT_”имя преобразования”_OUTPUT or CONVERSION_EXIT_”имя преобразования”_INPUT.

ALPHA.

Преобразование добавляет необходимое количество ведущих нулей в признак.

Например если символьное поле имеет длину 8 символов, то значения будут конвертироваться следующим образом:

Суть в том, что если система интерпретирует значения как цифры, то цифры помещаются в правую часть, а в левую часть устанавливаются нули в необходимом количестве. При выводе этих значений в системе нуле слева игнорируется и отображается корректное значение. Если же не запускать подпрограмму ALPHA, то пространство справа будет оставаться пустым.

Вызов подпрограммы можно осуществить так же из рутины (подпрограммы преобразования), синтаксис следующий:

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = RESULT
IMPORTING
OUTPUT = RESULT

Преобразование ALPHA можно добавить в поле «Exit для преобраз.» в подробных данных правила в трансформации.

PERI6.

Например «12.2017» в «122017».

Данное преобразование можно добавить в поле «Exit для преобраз.» в подробных данных правила в трансформации.

Источник

Abap удалить ведущие нули

abap удалить ведущие нули

For example, the following ABAP report will fail to find an existing Sales Order in VBAK SAP table.
The reason is, VBELN sales document number data type is 10 characters long and requires leading zeros.
REPORT Z_ZERO_PADDING.

DATA :
lv_char10 TYPE char10,
ls_vbak TYPE vbak.

lv_char10 = ‘300841’.
SELECT SINGLE * FROM VBAK INTO ls_vbak WHERE vbeln = lv_char10.
IF sy-subrc = 0.
WRITE ‘SUCCESS’.
ELSE.
WRITE ‘FAIL’.
ENDIF.
This time opposite of removing preceding zeros, ABAP developers requires zero padding or to add leading zero in ABAP.

In this ABAP tutorial, ABAP developers can find an example ABAP report demonstrating how padding leading zeros can be implemented.
Actually, there are numerous methods for zero padding in ABAP.
Here is a few of methods which you can use to add leading zero to ABAP variables.
ABAP developers can use UNPACK command in order to unpack an packed field value into a target variable with adding leading zeros.
The ABAP statement «UNPACK lv_char10 TO lv_vbeln.», unpacks the field value ‘300841’ and places it into lv_vbeln variable.
Since lv_vbeln ABAP variable is in VBELN data type which is 10 characters long, the UNPACK ABAP command will add leading zeros (4 zero in this example).
As you see using UnPack ABAP statement is one of the easiest methods for zero padding in ABAP.
REPORT Z_ZERO_PADDING.

DATA :
lv_char10 TYPE char10,
lv_vbeln TYPE vbeln,
ls_vbak TYPE vbak.

UNPACK lv_char10 TO lv_vbeln.

SELECT SINGLE * FROM VBAK INTO ls_vbak WHERE vbeln = lv_vbeln.
IF sy-subrc = 0.
WRITE ‘SUCCESS’.
ELSE.
WRITE ‘FAIL’.
ENDIF.
Another method for padding zeros is to call function CONVERSION_EXIT_ALPHA_INPUT fm.
If you set the same variable lv_vbeln as Input and Output parameters of ABAP function module CONVERSION_EXIT_ALPHA_INPUT, the variable value will be convert to the desired structure where zero padding is done automatically.
REPORT Z_ZERO_PADDING.

DATA :
lv_char10 TYPE char10,
lv_vbeln TYPE vbeln,
ls_vbak TYPE vbak.

lv_vbeln = lv_char10.
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = lv_vbeln
IMPORTING
OUTPUT = lv_vbeln.

DATA :
lv_char10 TYPE char10,
lv_vbeln TYPE vbeln,
ls_vbak TYPE vbak.

lv_vbeln = lv_char10.
SHIFT lv_vbeln RIGHT DELETING TRAILING SPACE.
OVERLAY lv_vbeln WITH ‘0000000000’.

Источник

Abap удалить ведущие нули

abap удалить ведущие нули

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

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

Специалист
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Сб, сен 03 2011, 08:51
Сообщения: 100
Пол: Мужской

Проблема решилась вот так:

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1957
Откуда: Москва
Пол: Мужской

Проблема решилась вот так:

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1957
Откуда: Москва
Пол: Мужской

Наконец-то я выложил обновление ZWWW 3.03. Ссылка, как всегда, в первом посте данной темы.

Главной особенностью этой версии является возможность формирования отчётов в фоне. Режим запуска в фоне определяется автоматически, файлы сохраняются в «Личные папки» SAP Office (тр.SBWP), в подпапку Temp. Если параметр CLOSE_FORM= (по умолчанию), то пользователю также выдаётся экспресс сообщение с вложенным файлом.
В режиме диалога тоже можно указать сохранение в SAP Office принудительно через параметр FILE_LOCATION=’O’ (буква O). Если параметр CLOSE_FORM=’X’, то экстренное сообщение приходить не будет. Для доступа к сохранённому файлу из ABAP-а нужно получить его ID через метод ZCL_ZWWW=>SAP_OFFICE_GET_FILE_ID, указав уникальное имя файла, соответственно нужно его заранее определить при формировании отчета (параметр FILE_NAME). Далее ID можно использовать в стандартных функциях, например, SO_OLD_DOCUMENT_SEND_API1 для пересылки, или SO_DOCUMENT_READ_API1 для чтения.
Особенностью решения является формирование промежуточного JAR-файла, соответственно требуется наличие JRE на компьютере пользователя. Такой подход продиктован недоступностью MS Office в фоновом режиме и желанием сохранить полную функциональность ZWWW, в частности запуск пользовательских макросов и гладкое открытие формы без сообщений безопасности.

Также сделаны мелкие доработки и исправлены ошибки. Поле VAR_NUM расширено с 5 до 7 знаков, что позволяет выводить более 100тыс. строк Excel.

Начинающий
abap удалить ведущие нули

Зарегистрирован:
Чт, фев 09 2012, 10:01
Сообщения: 1

На прошлой неделе у нас обновили ZWWW_EXCEL до 2.92, после чего перестала работать выгрузка отчетов Excel, когда на вход функциональника подаешь параметр close_form = ‘X’. Т.е. работа одной и той же программы, если этот параметр заполнен, то отчета не будет, если не заполнен, то файл формируется успешно. Может кто сталкивался с подобной проблемой? Экспериментировал и с программой ZWWW_MANY_LIST, если там на вход подать параметр close_form = ‘X’ отчет также не формируется (книга есть, но она пустая).

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1957
Откуда: Москва
Пол: Мужской

На прошлой неделе у нас обновили ZWWW_EXCEL до 2.92, после чего перестала работать выгрузка отчетов Excel, когда на вход функциональника подаешь параметр close_form = ‘X’. Т.е. работа одной и той же программы, если этот параметр заполнен, то отчета не будет, если не заполнен, то файл формируется успешно. Может кто сталкивался с подобной проблемой? Экспериментировал и с программой ZWWW_MANY_LIST, если там на вход подать параметр close_form = ‘X’ отчет также не формируется (книга есть, но она пустая).

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Вт, май 30 2006, 08:34
Сообщения: 1900

_________________
С уважением.

Младший специалист
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Пт, фев 17 2012, 15:37
Сообщения: 71

Добрый день господа ГУРУ.
Скажите пожалуйста с этим ФМ можно создавать и графики? Ну как пример с помощью OLE.?

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1957
Откуда: Москва
Пол: Мужской

Добрый день господа ГУРУ.
Скажите пожалуйста с этим ФМ можно создавать и графики? Ну как пример с помощью OLE.?

Младший специалист
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Пт, фев 17 2012, 15:37
Сообщения: 71

Я при помощь ОЛЕ график создаю

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1957
Откуда: Москва
Пол: Мужской

Я при помощь ОЛЕ график создаю

Младший специалист
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Пт, фев 17 2012, 15:37
Сообщения: 71

Добрый день господа гуру.
Как правильно обновить ФМ.
у нас версия 272.

Не будет проблем при обновлении на 3.03?

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1957
Откуда: Москва
Пол: Мужской

Добрый день господа гуру.
Как правильно обновить ФМ.
у нас версия 272.

Не будет проблем при обновлении на 3.03?

Специалист
abap удалить ведущие нули

Зарегистрирован:
Вт, сен 15 2009, 16:41
Сообщения: 201
Пол: Мужской

Почетный гуру
abap удалить ведущие нули
abap удалить ведущие нули

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1957
Откуда: Москва
Пол: Мужской

Специалист
abap удалить ведущие нули

Зарегистрирован:
Вт, сен 15 2009, 16:41
Сообщения: 201
Пол: Мужской

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

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

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

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

Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *