SAP ABAP BDC: Что такое пакетная передача данных?

⚡ Умное резюме

SAP ABAP BDC (пакетная передача данных) переносит устаревшие данные в R/3, автоматически запуская стандартные транзакции. На этой странице описаны сеансы пакетного ввода, классический и вызов транзакционных методов, структура BDCDATA, рабочий процесс BDC_OPEN_GROUP и регистратор пакетного ввода.

  • 🔄 Основная цель: BDC автоматически передает наборы данных на экраны транзакции, выполняя каждый экран и проверку бизнес-логики так же, как это делал бы пользователь.
  • 🧾 Сеанс пакетного ввода: В рамках сессии осуществляется группировка вызовов транзакций с входными данными, и группа сохраняется в базе данных до момента выполнения.
  • 🇧🇷 Два метода: Классический пакетный ввод использует функции BDC_OPEN_GROUP, BDC_INSERT и BDC_CLOSE_GROUP, тогда как метод вызова транзакции использует CALL TRANSACTION USING.
  • Выбор метода: Классический пакетный ввод данных осуществляется синхронно с ведением журнала, а вызов транзакции происходит быстрее, асинхронно и обрабатывает одну транзакцию.
  • 🇧🇷 Структура BDCDATA: Поля PROGRAM, DYNPRO, DYNBEGIN, FNAM и FVAL описывают экран, поле и значение для каждого шага.
  • 🇧🇷 Recorder: Регистратор пакетного ввода фиксирует транзакцию, выполненную вручную, и генерирует сессию или готовую программу BDC, которая запускается позже в транзакции SM35.

SAP ABAP BDC Пакетная передача данных

Введение в пакетный ввод

Пакетный ввод обычно используется для передачи данных из систем, отличных от R/3, в системы R/3 или для передачи данных между системами R/3.

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

Сеанс пакетного ввода

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

На заметку

  • BDI работает, выполняя обычные SAP транзакции так же, как это сделал бы пользователь, но транзакция выполняется автоматически.Все проверки экрана и проверка бизнес-логики будут выполняться при использовании пакетного ввода данных.
  • Подходит для ввода большого количества данных.
  • Никакого ручного взаимодействия не требуется

Методы пакетного ввода

SAP предоставляют два основных метода переноса устаревших данных в систему R/3.

  1. Классический метод пакетного ввода.
  2. Вызов метода транзакции.

Классический метод пакетного ввода

В этом методе программа ABAP/4 считывает внешние данные в SAP Система и сохраняет в сеансе пакетного ввода.

После создания сеанса вы можете запустить сеанс для выполнения SAP сделка в нем.

Этот метод использует функциональные модули BDC_OPEN, BDC_INSERT и BDC_CLOSE.

Сеанс пакетного ввода может быть обработан тремя способами.

  1. На переднем плане
  2. на заднем фоне
  3. Во время обработки, с отображением ошибки

Если вы хотите протестировать передачу данных, вам следует обрабатывать сеансы пакетного ввода на переднем плане или использовать отображение ошибок.

Если вы хотите выполнить передачу данных или проверить ее производительность, вам следует обрабатывать сеансы в фоновом режиме.

На что следует обратить внимание при использовании классического метода пакетного ввода

  • Syncхроническая обработка
  • Передача данных для нескольких транзакций.
  • Syncсинхронное обновление базы данных.
  • Журнал процесса пакетного ввода создается для каждого сеанса.
  • Сеанс не может быть создан параллельно.

Вызов метода транзакции.

В этом методе ABAP/4 программа использует оператор CALL TRANSACTION USING для запуска SAP сделка.

Весь процесс пакетного ввода происходит онлайн в программе.

Метод транзакции вызова

Указывает на Примечание:

  • Более быстрая обработка данных
  • Асинхронная обработка
  • Передача данных для одной транзакции.
  • Журнал обработки пакетного ввода не создается.

Классический пакетный ввод против транзакций вызовов

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

Критерии Классический пакетный ввод Транзакция вызова
Техника BDC_OPEN_GROUP, BDC_INSERT, BDC_CLOSE_GROUP ВЫЗОВ ТРАНЗАКЦИИ С ИСПОЛЬЗОВАНИЕМ
Переработка Syncхронический, позже вылетел из SM35 Запускается онлайн, в рамках программы.
Сделки Множество транзакций за одну сессию Одна транзакция за звонок
Журнал Для каждой сессии автоматически генерируется журнал процесса. Журнал событий отсутствует, программа собирает сообщения.
Скорость Более медленный, но надежный и с возможностью перезапуска. Быстрее
лучше всего для Крупные, разовые, устаревшие данные, подлежащие аудиту. Интерактивная или высокоскоростная передача одного документа.

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

Процедуры пакетного ввода

Процедуры пакетного ввода

Обычно вы будете соблюдать следующую последовательность шагов для разработки пакетного ввода для вашей организации.

  1. Анализ устаревших данных. Определите, как передаваемые данные должны быть отображены в SAP Структура. Также обратите внимание на необходимые преобразования типа данных или длины данных.
  2. Создать SAP структуры данных для использования в программах экспорта.
  3. Экспортируйте данные в последовательный файл. Обратите внимание, что формат символов требуется для предопределенных SAP программы пакетного ввода.
  4. Если же линия индикатора SAP Поставляемые программы BDC не используются, создайте собственную программу пакетного ввода. Выберите подходящий метод пакетного ввода в зависимости от ситуации.
  5. Обработайте данные и добавьте их в SAP Система.
  6. Проанализируйте журнал процесса. Для метода CALL TRANSACTION, при котором соответствующий журнал не создается, используйте сообщения, собранные вашей программой.
  7. По результатам анализа процесса исправить и переобработать ошибочные данные.

Написание программы BDC

Вы можете наблюдать следующий процесс написания программы BDC.

  1. Проанализируйте транзакцию(и) для обработки пакетных входных данных.
  2. Определите, какой метод пакетного ввода использовать.
  3. Чтение данных из последовательного файла
  4. Выполните преобразование данных или проверку ошибок.
  5. Сохранение данных в структуре пакетного ввода BDCDATA.
  6. Создайте сеанс пакетного ввода для классического пакетного ввода или обработайте данные напрямую с помощью оператора CALL TRANSACTION USING.

Структура данных пакетного ввода

Объявление структуры пакетных входных данных

DATA : BEGIN OF < bdc table>

OCCURS <occurs parameters>.

INCLUDE STRUCTURE BDCDATA.

DATA:END OF <bdc table>.
имя поля Тип Длина Описание
ПРОГРАММА CHAR 8 Пул модулей
ДИНПРО НУМК 4 Номер Динпро
ДИНБЕГИН CHAR 1 Запуск динпро
ФНАМ CHAR 35 имя поля
ФВАЛ CHAR 80 Значение поля

Порядок полей в данных для конкретного экрана не имеет никакого значения.

Очки для заметок

  • При заполнении данных BDC обязательно учитывайте пользовательские настройки. Это особенно важно для полей, содержащих числа (например, количество, сумма). Именно пользовательские настройки определяют, к какой группе относятся данные.ping Символ для обозначения чисел. Например: число пятьдесят тысяч может быть записано как 50,000.00 или 50.000,00 в зависимости от настроек пользователя.
  • Уплотните поле FVAL для полей суммы и количества, чтобы они были выровнены по левому краю.
  • Обратите внимание, что все поля, которые вы заполняете через BDC, при заполнении таблицы данных BDC следует рассматривать как поля символьного типа.
  • На некоторых экранах, когда вы заполняете значения в элементе управления «Таблица» с помощью BDC, вам необходимо отметить, сколько строк присутствует в размере экрана по умолчанию, и кодировать такое количество строк. Если вам нужно заполнить больше строк, вам придется запрограммировать функцию «Page Down», как если бы вы заполняли элемент управления «Таблица» вручную.
  • Количество строк, которые появятся в приведенном выше сценарии, будет зависеть от размера экрана, который использует пользователь. Поэтому всегда кодируйте стандартный размер экрана и заставляйте свой BDC всегда работать со стандартным размером экрана, независимо от того, какой размер экрана сохраняет пользователь.

Создание сеанса пакетного ввода

  1. Откройте сеанс сеанса пакетного ввода с помощью функционального модуля BDC_OPEN_GROUP.
  2. Для каждой транзакции в сеансе:
  3. Заполните BDCDATA значениями для всех экранов и полей, обработанных в транзакции.
  4. Перенесите транзакцию в сеанс с BDC_INSERT.
  5. Закройте сеанс пакетного ввода с помощью BDC_CLOSE_GROUP.

Пример: BDC с использованием транзакции вызова

Приведенная ниже программа демонстрирует сквозной процесс вызова транзакции. Она создает таблицу BDCDATA для двух экранов транзакции и запускает ее в режиме N (без отображения) с таблицей ошибок, чтобы можно было сообщать о сбоях.

REPORT z_bdc_call_transaction.

DATA: lt_bdcdata TYPE STANDARD TABLE OF bdcdata,
      ls_bdcdata TYPE bdcdata,
      lt_messages TYPE STANDARD TABLE OF bdcmsgcoll.

* Helper that appends one BDCDATA line
FORM bdc_field USING p_fnam p_fval.
  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = p_fnam.
  ls_bdcdata-fval = p_fval.
  APPEND ls_bdcdata TO lt_bdcdata.
ENDFORM.

* Screen 1: start the dynpro, then fill the fields
CLEAR ls_bdcdata.
ls_bdcdata-program  = 'SAPMV45A'.
ls_bdcdata-dynpro   = '0101'.
ls_bdcdata-dynbegin = 'X'.
APPEND ls_bdcdata TO lt_bdcdata.

PERFORM bdc_field USING 'VBAK-AUART' 'OR'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.

* Run the transaction: mode N = no display, update S = synchronous
CALL TRANSACTION 'VA01'
  USING         lt_bdcdata
  MODE          'N'
  UPDATE        'S'
  MESSAGES INTO lt_messages.

IF sy-subrc <> 0.
  * Read lt_messages to report the errors that occurred
ENDIF.

💡 Совет: Параметр MODE управляет отображением: A отображает все экраны, E останавливается только при ошибке, а N работает в фоновом режиме. Используйте E во время тестирования, а N — при производственной нагрузке.

Регистратор пакетного ввода

Регистратор пакетного ввода (Система > Службы > Пакетный ввод > Регистратор) записывает транзакции, введенные вручную, и создает сеанс пакетного ввода, который можно выполнить позже с помощью SM35.

Регистратор пакетного ввода

  • Запустите регистратор пакетного ввода, выбрав кнопку «Запись» на начальном экране пакетного ввода.
  • Имя записи определяется пользователем и может совпадать с именем сеанса пакетного ввода, которое можно создать на основе записи.
  • Введите SAP транзакцию и начать публикацию транзакции.
  • После того, как вы завершили публикацию SAP транзакции, вы либо выбираете «Получить транзакцию» и «Сохранить», чтобы завершить запись, либо «Следующая транзакция» и опубликовать другую транзакцию.
  • После сохранения записи вы можете создать сеанс пакетного ввода из записи и/или создать программу пакетного ввода из записи.
  • Созданный вами сеанс пакетного ввода теперь можно анализировать так же, как и любой другой сеанс пакетного ввода.
  • Программа, созданная с помощью функции записи пакетного ввода, является мощным инструментом для программиста интерфейса данных. Он обеспечивает прочную основу, которую затем можно изменить в соответствии с требованиями заказчика.

⚠️ Предупреждение: Запись точно фиксирует последовательность событий на экране, поэтому экран, появляющийся только при отображении определенных данных, например, всплывающее окно с сообщением о незавершенном выполнении, не записывается. Всегда тестируйте сгенерированную программу с данными, которые запускают каждый необязательный экран.

Часто задаваемые вопросы (FAQ)

В переменной BDC_OKCODE содержится код функции, которую пользователь активирует с помощью кнопки или клавиши, например, /00 для Enter или =SAVE для сохранения. Она указывает экрану, какое действие следует выполнить после заполнения полей.

SM35 — это монитор пакетного ввода. Он отображает список сессий, созданных классическим пакетным вводом, запускает их в фоновом или переднем плане и показывает журнал процессов, чтобы можно было проанализировать и повторно обработать неудачные транзакции.

BDC по-прежнему используется там, где отсутствует BAPI, поскольку он повторно использует проверки экрана транзакции. LSMW объединяет BDC, записи и BAPI в одном инструменте миграции, и BAPI Предпочтительно использовать такой подход, если доступен стабильный API.

Да. Искусственный интеллект-ассистенты в инструментах разработки ABAP берут запись или список экранных данных и создают шаблон для заполнения BDCDATA, блока CALL TRANSACTION и обработки сообщений. Разработчик сопоставляет исходный файл и тестирует загрузку.

Инструменты искусственного интеллекта анализируют устаревший файл, выявляют отсутствующие обязательные поля и несоответствия формата перед загрузкой, а затем обобщают журнал пакетной обработки, чтобы ошибочные записи можно было быстрее исправить и повторно обработать.

Подведем итог этой публикации следующим образом: