Управление версиями при разработке ABAP программ
В этой заметке я хочу провести небольшой обзор работы с инструментом управления версиями при разработке ABAP программ.
Как уже стало ясно, речь далее пойдет про термин «контроль версий» (version control), который часто встречается при разработке программного обеспечения, сложных веб-порталов, а также других массивов структурированных данных, для которых важным критерием является сохранение версионности, ну или быстрый поиск ответа на вопросы «кто все испортил», и «как откатиться на предыдущую версию».
См. Version control
A component of software configuration management, version control, also known as revision control or source control, is the management of changes to documents, computer programs, large web sites, and other collections of information. Changes are usually identified by a number or letter code, termed the «revision number», «revision level», or simply «revision». For example, an initial set of files is «revision 1». When the first change is made, the resulting set is «revision 2», and so on. Each revision is associated with a timestamp and the person making the change.
Revisions can be compared, restored, and with some types of files, merged.
В системе SAP есть встроенный механизм отслеживания изменений, применяемый в ABAP разработке.
С чего начинается контроль версий?
Контроль версий в ABAP разработке начинается с момента сохранения выполненных вами изменений в исходном коде программы. Допустим, вы только создали программу в транзакции SE38

Выберите в контекстном меню Utilities -> Versions -> Version Management

Под двумя версиями программы подразумевается:

- Активная версия (activ) — исходный код вашей программы пустой, за исключением строки REPORT имя_программы;
- Корректируемая версия (modif) — версия программы, которая будет наполняться вашими корректировками. Данная версия становится активной сразу после генерации вновь внесенных изменений
Стоит вам дополнить программу хотя бы одной строкой, и выполнить сохранение, изменения будут записаны в корректируемую (modif) версию программы. Допустим, изменения носят косметический характер
На следующем видеофрагменте представлена следующая последовательность действий:
- Просмотр двух сгенерированных версий новой программы;
- Сравнение двух версий новой программы;
Стоит активировать изменения в программе, как версия (modif) перекочевывает в активную (activ).
О чем не мешало бы помнить?
Допустим, что вы не хотите испортить чьей-нибудь разработки, а внести корректировки ну очень как нужно. На такой случай, вам следует создать новую версию программы, прежде чем вносить какие-то изменения.
Например, у вас есть все та же программа с активной версией изменений (см. предыдущий видеофрагмент). Прежде чем вносить изменения в исходный код программы, создайте ее новую версию, выбрав в контекстном меню Utilities -> Versions -> Generate Version
В новую версию вы вносите свои изменения, выполняете активацию. Теперь активной является вновь созданная версия программы.
Что дает создание новой версии программы?
Возможность вернуться к предыдущей версии, а также выполнить сравнение «что было» с тем «что стало». Следующий видеофрагмент как раз об этом.
Ну и напоследок.
Если вдруг какой-то несносный кю решил удалить программу, и сделал это не качественно, у вас есть возможность выполнить ее восстановление. На следующем видеофрагменте представлена соответствующая последовательность действий
Источник: signatov.com
Аудит клиента, использующего SAP s4/hana
Коллеги, может кто поделиться ценным опытом? Вы когда-нибудь проверяли клиентов, ведущих учет в этой «замечательнейшей и удобнейшей» программе? Пытаюсь сделать что-то похожее на те выгрузки, что делали из 1с (осв в целом, осв по счету, анализ счета, журнал проводок) и что-то пока не очень получается. Очень душат матюги, прям очень. Может, вы смогли для себя найти несколько универсальных отчетов, которые пригодятся аудитору для обработки информации, без проваливания в каждый отдельный документ, чтобы увидеть аналитику?
Пока что в ступоре, если без мата.
fiori нет и неизвестно, будет ли. То есть, то, что есть сейчас, вообще ни в каком виде не юзерфрендли. Бухгалтерия тоже ничего посоветовать не может, так как сами в полном афиге. Пока что сформировали силами SAP баланс и ОФР, как будут делать пояснения — ни сном, ни духом.

Торт
ведущих учет в этой «замечательнейшей и удобнейшей» программе?
Очень душат матюги, прям очень.
Пока что в ступоре, если без мата.
fiori нет и неизвестно, будет ли. То есть, то, что есть сейчас, вообще ни в каком виде не юзерфрендли. Бухгалтерия тоже ничего посоветовать не может, так как сами в полном афиге. Пока что сформировали силами SAP баланс и ОФР, как будут делать пояснения — ни сном, ни духом.
Я работала. Давно. Жесть. нет двойной записи. Проверить ничего нельзя. Управленческий учет.
Торт , был как-то опыт.
Но там бухгалтерия давно в этом чуде варилась, и «технический специалист» был под рукой, помогающий делать запросы.
Результат запросов закачивали в Эксель и составляли кучу таблиц.
PS Отчетность делалась при этом из обычной 1с, в которую данные чуть ли не вручную заносились.
Наберите в гугле основные транзакции SAP. И пробуйте их сформировать. Насколько помню, самые удобные для аудита: fbl3n (журнал операций по счету), fs10n. Двойная запись, конечно, есть. Просто надо настроить в отчете (fbl3n) вывод соответствующего столбца.
Но если корреспондирующий счет-счет учета расчетов, то в данном столбце укажется код контрагента, а не корсчет.
А надо запрашивать дополнительные расшифровки с корреспонденцией. По ним просить выгрузки операций. Муторно, но клиенты все на счету.1С для малых и средних. А консолидация вся на иных программах.

Людмила
А надо запрашивать дополнительные расшифровки с корреспонденцией. По ним просить выгрузки операций. Муторно, но клиенты все на счету.1С для малых и средних. А консолидация вся на иных программах.
Не надо дополнительных расшифровок. В отчете (fbl3n) надо настроить вывод столбца «кСчет» что ли он называется. Бухгалтера довольно часто плохо владеют САПом сами, так в одной организации главбух утверждала мне, что корсчет вывести невозможно. Пришлось заставить пустить меня за ее компьютер и настроить вывод корсчета самой.

Следопыт
В отчете (fbl3n) надо настроить вывод столбца «кСчет» что ли он называется.
Ну если вам доступ дадут и минимум пару недель на аудит, тогда да. А когда выгрузки представляют — тогда нет.
Спасибо за названия отчетов. Осталось разобраться, как их на пользу себе применить. Все-таки фиг догадаешься, что за какой настройкой скрывается.

Людмила
Ну если вам доступ дадут и минимум пару недель на аудит, тогда да. А когда выгрузки представляют — тогда нет.
Я пока всего лишь пытаюсь определиться с запросами внешних подтверждений. Полдня уже потратил — толку ноль. У этого клиента раньше на эту работу от силы час тратил с разными украшательствами.

Торт
Спасибо за названия отчетов. Осталось разобраться, как их на пользу себе применить. Все-таки фиг догадаешься, что за какой настройкой скрывается.
Я еще полазила в своих рабдоках. Еще мы использовали отчет fbl1n-журнал операций по счетам учета расчетов, насколько помню. Fs10n помесячные обороты по счету (динамику можно посмотреть), из fbl3n можно сделать анализ счета (с корреспонденцией или с наименованием поставщиков/покупателей), выбрать операции. Это обычный журнал операций по счету. Но с формулами экселя да, придется поупражняться по-любому, даже если выгрузки дадут

Людмила

Следопыт
В отчете (fbl3n) надо настроить вывод столбца «кСчет» что ли он называется.
Ну если вам доступ дадут и минимум пару недель на аудит, тогда да. А когда выгрузки представляют — тогда нет.
Выгрузки САПа все равно придется обрабатывать формулами экселя. Отчетов в САПе не так много (многие отчеты платные и компании просто не платят за них), так что лучше доступ иметь.
Следопыт , огромное Вам спасибо. С привлечением помощи со всех сторон, вроде бы дело сдвинулось с мертвой точки.
У САПа есть надстройка к Экселю, и весьма удобная. Посмотрите, может эта надстройка умеет работать с hana. Например, в мою давнюю бытность такая надстройка отлично работала с SAP BPC.
Все указанные вопросы задаются ИТ-поддержке. Запускать неведомые транзакции по короткому коду и делать из них какие-то выводы — нарушение методики аудита. (И кстати вообще плохая практика для не-специалиста, обычный пользователь должен запускать транзакции из профилированного меню).
Уместно напомнить про обязательную процедуру понимание контрольной среды. В вашем случае исходя из описанного (бухгалтерия не знает как пользоваться системой) риски высокие. Придётся реагировать, увеличивая объём процедур по существу. Но в общекомпьютерных контролях разобраться необходимо. Скорее всего там тоже есть проблемы.
Первый год после внедрения — всегда очень много вопросов и высокие риски. Цена аудита должна быть выше обычной, это нормальная практика в таких случаях.

Escapist
Цена аудита должна быть выше обычной, это нормальная практика в таких случаях
Съесть-то он съесть, да кто ему дасть?

Людмила

Escapist
Цена аудита должна быть выше обычной, это нормальная практика в таких случаях
Съесть-то он съесть, да кто ему дасть?
Речь про действующего аудитора и устаканившуюся стоимость, то есть сценарий «при прочих равных»

Escapist
В вашем случае исходя из описанного (бухгалтерия не знает как пользоваться системой) риски высокие.
Они пользуются очень ограниченным перечнем отчетов, которые мне не очень подходят. Все-таки мы на информацию смотрим с разных уровней: аудитор — «сверху», бухгалтерия — условно, «снизу».

Escapist
И кстати вообще плохая практика для не-специалиста, обычный пользователь должен запускать транзакции из профилированного меню
Это тоже учитываю, предпочтение отдается тем отчетам, которые являются стандартными, не зависящими от конкретного юрлица — пользователя SAP. Плюс, несколько «общих» глобальных выгрузок мне всё же дали, все свои выгрузки по оборотам — остаткам сверяю с ними. Я всё же контрол-фрик ))).

Escapist
Цена аудита должна быть выше обычной, это нормальная практика в таких случаях.
Это тоже учли, хотя, как мне кажется, цену можно было повысить значительнее, чем мы это сделали.
Вообще, так совпало, что я как раз в SAP и планирую переходить И просто ооочень повезло, что у меня есть друг, который является коонсультантом SAP. Без его советов было бы гораздо сложнее.
Более долбанной программы, чем SAP, я не видел. Видимо, не зря её русское произношение совпадает с популярной лошадиной болезнью.
SAP под угрозой расстрела спускают во все крупные организации, где собственники иностранцы. Бухгалтера стонут. Аудиторам на поиски «концов» приходится тратить уйму времени. Сама бухгалтерия вынуждена вести «параллельный учёт», чтобы хоть как-то разбираться в это чаче. Проще ручные регистры учёта разбирать, чем эту конскую болезнь с гнилого Запада.
так консолидацию в ней делают, а кто делает? Тот и навязывает — у нихже все автоматизировано.
САП самая лучшая программа для учета из тех, что я видела. В ней очень хорошо реализованы контрольные функции. Например, склад отражает поступление товара в разрезе номенклатур, количества, стоимости. Бухгалтерия тоже отражает это же поступление только по стоимости. Если кто-то ошибся, то это сразу будет видно, так же как и то, что кто-то из этих двух служб еще не отразил поступление.
Еще одна незаменимая функция-то, что каждой проводке в САП присваивается уникальный номер. Нам это однажды позволило осуществить проект по созданию электронного архива документов группы компании за 4 года. А вот за пятый было очень сложно, т.к. до САПа учет велся в 1С.
Отчеты САП способен делать такие, что 1С даже и не снилось. У одного клиента был отчет по ОС, в котором было просто все: дата ввода в эксплуатацию, первоначальная стоимость в БУ и в НУ, амортизация, переоценка, временные разницы, данные для расчета налога на имущество и т.д. Формировался, правда, отчет очень долго. Но в настройках можно было выбрать только те данные, которые нужны сейчас.
Следопыт , я смог вывести своего рода отчет по проводкам, благо, их на этом предприятии не так много, и вывел в этот отчет ВСЕ дополнительные колонки (то есть, всю возможную аналитику). Аналитики там действительно очень много. Осталось только научиться правильно строить отчеты непосредственно в самом SAPе. Исходя из количества аналитики, предполагаю, что, потенциально, — да, можно сделать отчеты гораздо круче, чем в 1с. Но это явно задача не для «среднего» пользователя-бухгалтера.
Но вот интерфейс. Похоже, замечательный конструктор для тех, кто умеет этим конструктором пользоваться.
Источник: www.audit-it.ru
Типы RFC в SAP

Remote Function Call (RFC) – стандартный интерфейс связи между SAP системами. RFC функцию можно выполнить в другой системе.
Существует несколько видов RFC функций.
sRFC
sRFC – синхронные RFC. Данный вид RFC выполняется на принципах синхронной связи. Т.е. целевая система должна быть доступна в данный момент, а система из которой вызывается RFC ожидает выполнения. Применение данных RFC целесообразно когда требуется получить данные из целевой системы. Например, при работе в ERP требуется чтение данных какой-либо таблицы в HR системе.
ФМ должен иметь тип выполнения – “Дистанционный модуль”.
Используется следующий синтаксис:
CALL FUNCTION func_name DESTINATION dest parameter list.
Где dest – имя RFC соединения (транзакция SM59). Такжe вместо можно указать
– ‘NONE’ – Произойдет вызов модуля в текущей системе, но в отдельном LUW.
– ‘BACK’ – Дополнение используется в вызванном RFC модуле для выполнения ФМ в вызывающей системе. Своеобразный сон во сне. Злоупотреблять не стоит, т.к. отладка потом взрывает мозг.
CALL FUNCTION ‘RFC_READ_TABLE’ DESTINATION ‘TEST_HRSYS100’
query _ table = ‘DEVACCESS’
options = lt _ options
fields = lt _ fields
data = lt _ data
EXCEPTIONS
table _ not _ available = 1
table _ without _ data = 2
option _ not _ valid = 3
field _ not _ valid = 4
not _ authorized = 5
data _ buffer _ exceeded = 6
IF sy — subrc < >0.
* Implement suitable error handling here
aRFC
aRFC – асинхронные RFC. Если придираться к терминологии, то асинхронные RFC в сапе не асинхронны в полной мере. Их асинхронность по большому счету только в том, что программа может не ждать их выполнения. В остальном это те же самые синхронные RFC, т.к. система должна быть доступна при их запуске.
Используется следующий синтаксис для вызова:
CALL FUNCTION Remotefunction STARTING NEW TASK Taskname
DESTINATION . . .
EXCEPTIONS . . .
Т.к. работа происходит асинхронно, получение данных отличается от обычного ФМ. При вызове следует указать подпрограмму или метод вызываемый по завершению функционального модуля. Существует дополнение RECEIVE RESULTS FROM FUNCTION для получения данных из выполненного ФМ
DATA : gv _ end1 ,
gv _ result type i .
FORM rfc _ results USING taskname .
DATA lv _ res TYPE i .
CASE taskname .
WHEN ‘Z_ARFC1’ .
gv _ flag1 = abap _ true .
WHEN ‘Z_ARFC2’ .
gv _ flag2 = abap _ true .
» Обязательно необходимо вызвать получение результата работы aRFC
RECEIVE RESULTS FROM FUNCTION ‘ZZ_ARFC_TEST’
result = lv _ res «Вот здесь мы и получаем данные
EXCEPTIONS
system _ failure = 1
wrong _ input = 2.
gv _ result = gv _ result + lv _ res
CALL FUNCTION ‘ZZ_ARFC_TEST’
STARTING NEW TASK ‘Z_ARFC1’
PERFORMING rfc _ results ON END OF TASK
EXCEPTIONS
communication _ failure = 1
system _ failure = 2
resource _ failure = 3.
CALL FUNCTION ‘ZZ_ARFC_TEST’
STARTING NEW TASK ‘Z_ARFC2’
PERFORMING rfc _ results ON END OF TASK
EXCEPTIONS
communication _ failure = 1
system _ failure = 2
resource _ failure = 3.
WAIT UNTIL gv _ end1 = abap _ true AND gv _ end2 = abap _ true .
IF sy — subrc = 0.
Сам ФМ имеет такую структуру:
FUNCTION ZZ _ ARFC _ TEST .
*»*»Локальный интерфейс:
*» VALUE(COUNT) TYPE I
*» VALUE(RESULT) TYPE I
ENDFUNCTION .
дополнение PERFORMING rfc_results ON END OF TASK означает, что подпрограмма rfc_results будет вызвана после выполнения каждого из ФМ.
Вместо дополнения PERFORMING … ON END OF TASK можно использовать CALLING method ON END OF TASK для указания метода.
CLASS lcl _ rfc _ call DEFINITION .
PUBLIC SECTION .
CLASS-METHODS : rfc _ response IMPORTING p _ task TYPE clike .
mv _ result TYPE i .
CLASS lcl _ rfc _ call IMPLEMENTATION .
METHOD rfc _ response .
DATA lv _ result TYPE i .
RECEIVE RESULTS FROM FUNCTION ‘ZZ_ARFC_TEST’
result = lv _ result
EXCEPTIONS
system _ failure = 1
wrong _ input = 2.
mv _ result = mv _ result + lv _ result .
CALL FUNCTION ‘ZZ_ARFC_TEST’ DESTINATION ‘NONE’
STARTING NEW TASK ‘Z_TASK’ CALLING lcl _ rfc _ call = > rfc _ response ON END OF TASK
iv _ num = 1
EXCEPTIONS
communication _ failure = 1
system _ failure = 2.
Распараллеливание при помощи aRFC
Дополнение DESTINATION IN GROUP позволяет запускать RFC в группе (настройка групп производится в транзакции RZ12). При указании SPACE или DEFAULT группа будет выбрана автоматически. Перед запуском RFC необходимо проинициализировать группу ФМ-ом ‘SPBT_INITIALIZE‘ он покажет общее количество процессов и число доступных на данный момент.
Приведу пример программы из документации, все достаточно понятно, единственное, что в реальной задаче стоит подумать об ограничении максимального количества занимаемых процессов, чтобы не занять все.
DATA : group LIKE rzllitab — classname VALUE ‘ ‘ ,
«Parallel processing group.
«SPACE = group default (all
wp _ available TYPE i , «Number of dialog work processes
«available for parallel processing
«(free work processes)
wp _ total TYPE i , «Total number of dialog work
«processes in the group
msg ( 80 ) VALUE space , «Container for error message in
«case of remote RFC exception.
info LIKE rfcsi , c , «Message text
jobs TYPE i VALUE 10 , «Number of parallel jobs
snd _ jobs TYPE i VALUE 1 , «Work packets sent for processing
rcv _ jobs TYPE i VALUE 1 , «Work packet replies received
excp_flag ( 1 ) TYPE c , «Number of RESOURCE_FAILUREs
taskname ( 4 ) TYPE n VALUE ‘0001’ , «Task name (name of
«parallel processing work unit)
BEGIN OF tasklist OCCURS 10 , «Task administration
taskname ( 4 ) TYPE c ,
rfcdest LIKE rfcsi — rfcdest ,
rfchost LIKE rfcsi — rfchost ,
END OF tasklist .
* Optional call to SBPT_INITIALIZE to check the
* group in which parallel processing is to take place.
* Could be used to optimize sizing of work packets
* work / WP_AVAILABLE).
CALL FUNCTION ‘SPBT_INITIALIZE’
group _ name = group
«Name of group to check
max _ pbt _ wps = wp _ total
«Total number of dialog work
«processes available in group
«for parallel processing
free _ pbt _ wps = wp _ available
«Number of work processes
«available in group for
«parallel processing at this
EXCEPTIONS
invalid _ group _ name = 1
«Incorrect group name; RFC
«group not defined.
See
«transaction RZ12
internal _ error = 2
«SAP system error; see the
«system log (transaction
«SM21) for diagnostic info
pbt _ env _ already _ initialized = 3
«Function module may be
«called only once; is called
«automatically by the SAP system if you
«do not call before starting
«parallel processing
currently _ no _ resources _ avail = 4
«No dialog work processes
«in the group are available;
«they are busy or server load
«is too high
no _ pbt _ resources _ found = 5
«No servers in the group
«met the criteria of >
«two work processes
cant _ init _ different _ pbt _ groups = 6
«You have already initialized
«one group and have now tried
«initialize a different group.
CASE sy — subrc .
«Everything’s ok.
Optionally set up for optimizing size of
«work packets.
«Non-existent group name. Stop report.
MESSAGE e836 . «Group not defined.
«System error. Stop and check system log for error
«Programming error. Stop and correct program.
MESSAGE e833 . «PBT environment was already initialized.
«No resources: this may be a temporary problem. You
«may wish to pause briefly and repeat the call. Otherwise
«check your RFC group administration: Group defined
«in accordance with your requirements?
MESSAGE e837 . «All servers currently busy.
«Check your servers, network, operation modes.
* Do parallel processing. Use CALL FUNCTION STARTING NEW TASK
* DESTINATION IN GROUP to call the function module that does the
* work. Make a call for each record that is to be processed, or
* divide the records into work packets. In each case, provide the
* set of records as an internal table in the CALL FUNCTION
* keyword (EXPORT, TABLES arguments).
CALL FUNCTION ‘RFC_SYSTEM_INFO’ «Function module to perform
«in parallel
STARTING NEW TASK taskname «Name for identifying this
DESTINATION IN GROUP group «Name of group of servers to
«use for parallel processing.
«Enter group name exactly
«as it appears in transaction
«RZ12 (all caps). You may
«use only one group name in a
«particular ABAP program.
PERFORMING return _ info ON END OF TASK
«This form is called when the
«RFC call completes. It can
«collect IMPORT and TABLES
«parameters from the called
«function with RECEIVE.
EXCEPTIONS
communication _ failure = 1 MESSAGE msg
«Destination server not
«reached or communication
«interrupted. MESSAGE msg
«captures any message
«returned with this
«exception (E or A messages
«from the called FM, for
«example. After exception
«1 or 2, instead of aborting
«your program, you could use
«SPBT_GET_PP_DESTINATION and
«SPBT_DO_NOT_USE_SERVER to
«exclude this server from
«further parallel processing.
«You could then re-try this
«call using a different
system _ failure = 2 MESSAGE msg
«Program or other internal
«SAP error. MESSAGE msg
«captures any message
«returned with this
resource _ failure = 3. «No work processes are
«currently available. Your
«program MUST handle this
your _ exceptions = x . «Add exceptions generated by
«the called function module
«here. Exceptions are
«returned to you and you can
«respond to them here.
CASE sy — subrc .
«Administration of asynchronous RFC tasks
«Save name of task.
tasklist — taskname = taskname .
«. and get server that is performing RFC call.
CALL FUNCTION ‘SPBT_GET_PP_DESTINATION’
rfcdest = tasklist — rfcdest
EXCEPTIONS
APPEND tasklist .
WRITE : / ‘Started task: ‘ , tasklist — taskname COLOR 2.
taskname = taskname + 1.
snd _ jobs = snd _ jobs + 1.
«Mechanism for determining when to leave the loop. Here, a
«simple counter of the number of parallel processing tasks.
«In production use, you would end the loop when you have
«finished dispatching the data that is to be processed.
jobs = jobs — 1. «Number of existing jobs
IF jobs = 0.
EXIT . «Job processing finished
WHEN 1 OR 2.
«Handle communication and system failure.
Your program must
«catch these exceptions and arrange for a recoverable
«termination of the background processing job.
«Recommendation: Log the data that has been processed when
«an RFC task is started and when it returns, so that the
«job can be restarted with unprocessed data.
«Remove server from further consideration for
«parallel processing tasks in this program.
«Get name of server just called.
CALL FUNCTION ‘SPBT_GET_PP_DESTINATION’
rfcdest = tasklist — rfcdest
EXCEPTIONS
«Then remove from list of available servers.
CALL FUNCTION ‘SPBT_DO_NOT_USE_SERVER’
servername = tasklist — rfcdest
EXCEPTIONS
invalid _ server _ name = 1
no _ more _ resources _ left = 2
«No servers left in group.
pbt _ env _ not _ initialized _ yet = 3
«No resources (dialog work processes) available at
«present. You need to handle this exception, waiting
«and repeating the CALL FUNCTION until processing
«can continue or it is apparent that there is a
«problem that prevents continuation.
MESSAGE i837 . «All servers currently busy.
«Wait for replies to asynchronous RFC calls.
Each
«reply should make a dialog work process available again.
IF excp _ flag = space .
excp _ flag = ‘X’ .
«First attempt at RESOURCE_FAILURE handling. Wait
«until all RFC calls have returned or up to 1 second.
«Then repeat CALL FUNCTION.
WAIT UNTIL rcv _ jobs >= snd _ jobs UP TO ‘1’ SECONDS .
«Second attempt at RESOURCE_FAILURE handling
WAIT UNTIL rcv _ jobs >= snd _ jobs UP TO ‘5’ SECONDS .
«SY-SUBRC 0 from WAIT shows that replies have returned.
«The resource problem was therefore probably temporary
«and due to the workload. A non-zero RC suggests that
«no RFC calls have been completed, and there may be
IF sy — subrc = 0.
CLEAR excp _ flag .
ELSE . «No replies
«Endless loop handling
* Wait for end of job: replies from all RFC tasks.
* Receive remaining asynchronous replies
WAIT UNTIL rcv _ jobs >= snd _ jobs .
LOOP AT tasklist .
WRITE : / ‘Received task:’ , tasklist — taskname COLOR 1 ,
30 ‘Destination: ‘ , tasklist — rfcdest COLOR 1.
* This routine is triggered when an RFC call completes and
* returns. The routine uses RECEIVE to collect IMPORT and TABLE
* data from the RFC function module.
* Note that the WRITE keyword is not supported in asynchronous
* RFC. If you need to generate a list, then your RFC function
* module should return the list data in an internal table. You
* can then collect this data and output the list at the conclusion
* of processing.
FORM return _ info USING taskname .
DATA : info _ rfcdest LIKE tasklist — rfcdest .
RECEIVE RESULTS FROM FUNCTION ‘RFC_SYSTEM_INFO’
IMPORTING rfcsi _ export = info
EXCEPTIONS
communication _ failure = 1
system _ failure = 2.
rcv _ jobs = rcv _ jobs + 1. «Receiving data
IF sy — subrc NE 0.
* handle communication and system failure
READ TABLE tasklist WITH KEY taskname = taskname .
IF sy — subrc = 0. «Register data
tasklist — rfchost = info _ rfchost .
MODIFY tasklist INDEX sy — tabix .
Хотя, если уж говорить о реальных задачах распараллеливания, стоит посмотреть в сторону SPTA_PARA_PROCESS_START_2 или поддержать отечественного производителя c его zconcurrency_api.
tRFC
tRFC – транзакционные RFC. Настоящие асинхронные RFC, которые позволяют вызывать RFC при недоступной системе выполнения RFC. tRFC сохраняет вызываемую функцию с соответствующими параметрами в базе данных под уникальным идентификатором транзакции (TID)
Если вызов отправлен, а принимающая система не работает, вызов остается в локальной очереди до более позднего времени. Вызывающая программа может продолжать работу, не дожидаясь отклика от вызванного ФМ. Если принимающая система не становится активной в течение определенного периода времени, вызов планируется в пакетном режиме.
tRFC запускаются в одном LUW, т.е. случае ошибки происходит откат для всех ФМ.
Получить результат выполнения подобных ФМ напрямую как в случае c aRFC или sRFC невозможно.
tRFC вызываются при помощи дополнения IN BACKGROUND TASK и будут отработаны после оператора COMMIT WORK. Для запуска tRFC до COMMIT WORK можно использовать ФМ START_OF_BACKGROUNDTASK.
Источник: sapcode.ru
Sap ахд что это за программа
на базе цифровой платформы SAP Extended Warehouse Management

Вместе с нами вы сможете

Провести комплексную автоматизацию управления складом для точного прогнозирования запасов

Добиться оптимизации перемещений и транспортировки

Оптимально использовать складские помещения

Достичь слаженной работы всех подразделений, связанных с доставкой, транспортировкой, перемещениями и складированием товара
Результаты для бизнеса

Экономия затрат за счет оптимизации использования складского пространства и эффективного использования ресурсов склада

Повышение скорости операций и увеличение пропускной способности склада

Увеличение уровня складского сервиса и повышение удовлетворенности клиентов

Снижение уровня возвратов и претензионных издержек
Основные функции
Комплексная автоматизация входящих, внутренних, исходящих и вспомогательных бизнес-процессов склада для распределительных центров, производственного складов, транзитного склада, центров консолидации и прочих типов хранения
Встроенные функции оптимизации для управления циклическими нагрузками, комплектованием, размещением и упаковкой
Инструменты оптимизации использования персонала и ресурсов склада для повышения эффективности труда
Возможность учитывать время выполнения и другие характеристики (вес, объём, количество, пройденное расстояние) каждой операции
Ведение норм и тарификации операций как для 3PL-клиента, так и для расчёта сдельной заработной платы линейного персонала склада
06. Поддержка технологий pick-by-voice
Полная автоматизация расчета складских операций и выдачи заданий на RF-терминалы для исполнения
Возможность интеграции с различным автоматизированным складским оборудованием
Преднастроенное решение
Novardis EWM
Novardis EWM
Novardis EWM
Преднастроенное решение
Novardis EWM– это преднастроенное решение на базе SAP Extended Warehouse Management для автоматизации управления складом для розничных сетей, оптовых организаций и дистрибуторов, логистических операторов и производителей ТНП.
Основная функциональность SAP EWM дополнена настройками с учетом специфики российского рынка.
Это позволяет упростить этап проектирования и сократить время на конфигурацию бизнес-процессов, универсальных для всех складов. Кроме того, в системе предусмотрены дополнительные настройки для автоматизации складской деятельности предприятий различных отраслей.
В результате ваша компания получит полнофункциональную систему управления складами и распределительными центрами в кратчайшие сроки и при фиксированных инвестиционных затратах на проект.
Источник: novardis.com