SAP ABAP BDC: Що таке пакетна передача даних?
⚡ Розумний підсумок
SAP ABAP BDC (пакетний обмін даними) передає застарілі дані в R/3, автоматично керуючи стандартними транзакціями. На цій сторінці пояснюються сеанси пакетного введення, класичні методи та методи виклику транзакцій, структура BDCDATA, робочий процес BDC_OPEN_GROUP та реєстратор пакетного введення.

Вступ до пакетного введення
Пакетне введення зазвичай використовується для передачі даних із систем, відмінних від R/3, до систем R/3 або для передачі даних між системами R/3.
Це техніка передачі даних, яка дозволяє автоматично передавати набори даних на екрани, що належать транзакціям, і, таким чином, на SAP система. Пакетне введення контролюється сеансом пакетного введення.
Сеанс пакетного введення
Групує серію викликів транзакцій разом із вхідними даними та діями користувача. Сеанс пакетного введення можна використовувати для виконання діалогової транзакції в пакетному введенні, де деякі або всі екрани обробляються сеансом. Сеанси пакетного введення зберігаються в базі даних як таблиці бази даних і можуть використовуватися в програмі як внутрішні таблиці під час доступу до транзакцій.
Бали, на які слід звернути увагу
- BDI працює в звичайному режимі SAP транзакції так само, як і користувач, але виконує транзакцію автоматично.Усі перевірки екрана та перевірка бізнес-логіки виконуватимуться під час пакетного введення даних.
- Підходить для введення великої кількості даних.
- Ручна дія не потрібна
Методи пакетного введення
SAP забезпечують два основні методи передачі застарілих даних до системи R/3.
- Класичний метод пакетного введення.
- Метод транзакції виклику.
Класичний метод пакетного введення
У цьому методі програма ABAP/4 зчитує зовнішні дані в SAP Система та зберігає в сеансі пакетного введення.
Після створення сеансу ви можете запустити сеанс для виконання SAP трансакція в ньому.
Цей метод використовує функціональні модулі BDC_ OPEN, BDC_INSERT і BDC_CLOSE
Сеанс пакетного введення можна обробляти трьома способами
- На передньому плані
- У фоновому режимі
- Під час обробки з відображенням помилок
Вам слід обробляти сеанси пакетного введення на передньому плані або використовувати відображення помилок, якщо ви хочете перевірити передачу даних.
Якщо ви хочете виконати передачу даних або перевірити її продуктивність, вам слід обробляти сеанси у фоновому режимі.
Варто зауважити про класичний метод пакетного введення
- Syncхронічна обробка
- Передача даних для кількох транзакцій.
- Syncоновлення бази даних hronous.
- Журнал процесу пакетного введення створюється для кожного сеансу.
- Сеанс не може бути створений паралельно.
Метод транзакції виклику.
У цьому методі ABAPПрограма /4 використовує оператор CALL TRANSACTION USING для запуску SAP транзакція.
Весь процес пакетного введення відбувається онлайн у програмі
Примітки:
- Швидша обробка даних
- Асинхронна обробка
- Передача даних для однієї транзакції.
- Журнал обробки пакетного введення не створюється.
Класичне пакетне введення проти транзакції виклику
Ці два методи досягають однієї й тієї ж транзакції, але відрізняються швидкістю, веденням журналу та обробкою помилок. У таблиці нижче показано, коли кожен з них є правильним вибором.
| Критерії | Класичне пакетне введення | Транзакція дзвінків |
|---|---|---|
| Техніка | BDC_ВІДКРИТА_ГРУПА, BDC_ВСТАВКА, BDC_ЗАКРИТА_ГРУПА | ВИКОРИСТАННЯ ТРАНЗАКЦІЇ ДЗВІНКА |
| Обробка | Syncхронічний, запущений пізніше з SM35 | Працює онлайн, у програмі |
| Transactions | Багато транзакцій за один сеанс | Одна транзакція за дзвінок |
| Ввійти | Журнал процесу генерується автоматично для кожного сеансу | Без журналу, програма збирає повідомлення |
| швидкість | Повільніший, але надійний та з можливістю перезавантаження | Швидше |
| Найкраще для | Великі, одноразові застарілі завантаження, які мають бути доступними для аудиту | Інтерактивна або високошвидкісна передача одного документа |
Після порівняння методів, у наступному розділі викладено загальну процедуру, якої дотримується проект.
Процедури пакетного введення
Зазвичай ви дотримуєтеся наступної послідовності кроків, щоб розробити пакетне введення для вашої організації
- Аналіз застарілих даних. Визначте, як дані, які потрібно передати, мають бути зіставлені в SAP Структура. Також зверніть увагу на необхідні типи даних або перетворення довжини даних.
- Генерувати SAP структури даних для використання в програмах експорту.
- Експортуйте дані в послідовний файл. Зауважте, що формат символів є обов’язковим для попередньо визначеного SAP програми пакетного введення.
- Якщо SAP надані програми BDC не використовуються, кодуйте власну програму пакетного введення. Виберіть відповідний метод пакетного введення відповідно до ситуації.
- Обробити дані та додати їх до SAP SYSTEM.
- Проаналізуйте протокол процесу. Для методу CALL TRANSACTION, де не створюється відповідний журнал, використовуйте повідомлення, зібрані вашою програмою.
- За результатами аналізу процесу виправте та повторно обробіть помилкові дані.
Написання програми BDC
Ви можете спостерігати за наведеним нижче процесом написання програми BDC
- Проаналізуйте транзакцію(и) для обробки пакетних вхідних даних.
- Визначте метод пакетного введення.
- Читання даних із послідовного файлу
- Перетворення даних або перевірка помилок.
- Зберігання даних у структурі пакетного введення, BDCDATA.
- Створіть сеанс пакетного введення для класичного пакетного введення або обробіть дані безпосередньо за допомогою оператора CALL TRANSACTION USING.
Структура даних пакетного введення
Оголошення пакетної структури вхідних даних
DATA : BEGIN OF < bdc table> OCCURS <occurs parameters>. INCLUDE STRUCTURE BDCDATA. DATA:END OF <bdc table>.
| Назва поля | тип | довжина | Опис |
|---|---|---|---|
| ПРОГРАМА | CHAR | 8 | Модульний пул |
| DYNPRO | NUMC | 4 | Номер Dynpro |
| DYNBEGIN | CHAR | 1 | Запуск dynpro |
| FNAM | CHAR | 35 | Назва поля |
| FVAL | CHAR | 80 | Значення поля |
Порядок полів у даних для певного екрана не має жодного значення
Бали до примітки
- Під час заповнення даних BDC обов’язково враховуйте налаштування користувача. Це особливо актуально для заповнення полів, які містять числа (наприклад, кількість, сума). Саме налаштування користувача визначають, що є групою.ping символ для чисел Наприклад: число п'ятдесят тисяч можна записати як 50 000,00 або 50 000,00 залежно від налаштувань користувача.
- Згорніть поле FVAL для полів суми та кількості, щоб вони були вирівняні за лівим краєм.
- Зауважте, що всі поля, які ви заповнюєте через BDC, слід розглядати як поля символьного типу під час заповнення таблиці даних BDC.
- На деяких екранах, коли ви заповнюєте значення в елементі керування таблицею за допомогою BDC, вам потрібно зазначити, скільки рядків присутнє на стандартному розмірі екрана, і закодувати стільки рядків. Якщо вам потрібно заповнити більше рядків, тоді вам доведеться закодувати функцію «Page down», як це було б, коли ви заповнюєте елемент керування таблицею вручну.
- Кількість рядків, які з’являться у наведеному вище сценарії, відрізнятиметься залежно від розміру екрана, який використовує користувач. Тому завжди кодуйте стандартний розмір екрана та зробіть так, щоб ваш BDC завжди працював у стандартному розмірі екрана, незалежно від того, яким розміром екрану зберігає користувач.
Створення сеансу пакетного введення
- Відкрийте сеанс сеансу пакетного введення за допомогою функціонального модуля BDC_OPEN_GROUP.
- Для кожної транзакції в сеансі:
- Заповніть BDCDATA значеннями для всіх екранів і полів, оброблених у транзакції.
- Передайте транзакцію до сеансу за допомогою BDC_INSERT.
- Закрийте сеанс пакетного введення за допомогою 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 і розпочніть оприлюднення транзакції.
- Після завершення публікації a SAP Ви можете вибрати «Отримати транзакцію та зберегти», щоб завершити запис, або «Наступна транзакція» та опублікувати іншу транзакцію.
- Після збереження запису ви можете створити сеанс пакетного введення із запису та/або створити програму пакетного введення із запису.
- Сеанс пакетного введення, який ви створили, тепер можна аналізувати так само, як і будь-який інший сеанс пакетного введення.
- Програма, яка генерується функцією запису пакетного введення, є потужним інструментом для програміста інтерфейсу даних. Він забезпечує надійну основу, яку потім можна змінювати відповідно до вимог замовника.
⚠️ Попередження: Запис фіксує послідовність екранів точно так, як вона відбулася, тому екран, який з'являється лише для певних даних, наприклад, спливаюче вікно про незавершеність, не записується. Завжди тестуйте згенеровану програму з даними, які запускають кожен додатковий екран.



