SAP Migration — Data Migration & System Conversion
Related Skills
sap-s4hana-extensibility — Custom objects to migrate in S/4HANA
sap-testing-quality — Migration testing and data validation
sap-cloud-alm — Migration project management and tracking
sap-abap-advanced — Classic ABAP → ABAP Cloud code migration
sap-devops-cicd — Transport management during migration cutover
Quick Start
Choose your migration scenario:
| Scenario |
Approach |
Key Tool |
| New Implementation (Greenfield) |
Fresh S/4HANA, migrate master/transactional data |
Migration Cockpit (LTMC) |
| System Conversion (Brownfield) |
Convert existing ECC to S/4HANA in-place |
SUM (Software Update Manager) |
| Selective Data Transition |
Mix of new + migrated data |
SAP Data Services / SNP CrystalBridge |
| Cloud Migration |
On-premise → S/4HANA Cloud |
Migration Cockpit Cloud |
Migration Cockpit Quick Start:
- Transaction
LTMC → Create Migration Project
- Select Migration Object (e.g., "General Ledger Account")
- Download XML template → Fill with source data
- Upload → Validate → Simulate → Execute
Core Concepts
Migration Phases
Assessment ──► Preparation ──► Realization ──► Testing ──► Cutover ──► Hypercare
│ │ │ │ │ │
Scope & Data Build & Validate Go-live Monitor
Mapping Cleansing Configure & UAT Execute & Fix
Migration Tools Landscape
| Tool |
Use Case |
Data Volume |
Complexity |
| LTMC (Migration Cockpit) |
Standard objects, file upload |
Medium |
Low |
| LTMOM (Migration Object Modeler) |
Custom migration objects |
Medium |
Medium |
| SAP Data Services |
Complex ETL, large volumes |
High |
High |
| LSMW |
Legacy (ECC), batch input/IDoc/BAPI |
Medium |
Medium |
| Custom ABAP Programs |
Non-standard scenarios |
Any |
High |
| SAP Signavio (Process) |
Process migration planning |
N/A |
Medium |
| SUM |
System conversion (brownfield) |
All |
Very High |
Standard Migration Objects (LTMC)
| Domain |
Key Objects |
| Finance |
GL Account, Cost Center, Profit Center, Customer, Vendor, Open Items |
| Materials |
Material Master, BOM, Routing, Batch, Serial Number |
| Sales |
Sales Order, Pricing, Customer-Material Info Record |
| Procurement |
Purchase Order, Source List, Quota Arrangement, Contract |
| Plant Maintenance |
Equipment, Functional Location, Maintenance Plan |
| HR/HCM |
Employee Master, Org Structure, Time Data, Payroll Results |
| Asset Accounting |
Asset Master, Asset Values, Depreciation Areas |
Data Migration Architecture
Source System ──► Extract ──► Transform ──► Load ──► Validate
│ │ │ │ │
ECC/Legacy SAP DS / Mapping & LTMC / Reconcile
Flat files Custom ABAP Cleansing BAPI Reports
3rd party RFC/DB Rules Staging
Common Patterns
Pattern 1: Migration Cockpit — File-Based Migration
<!-- Template structure for Material Master migration -->
<!-- Download from LTMC, fill, re-upload -->
<MigrationObject name="Material">
<HeaderData>
<MATNR>MAT-001</MATNR>
<MAKTX>Laptop Computer 15 inch</MAKTX>
<MTART>FERT</MTART> <!-- Material Type -->
<MBRSH>M</MBRSH> <!-- Industry Sector -->
<MEINS>EA</MEINS> <!-- Base UoM -->
<MATKL>001</MATKL> <!-- Material Group -->
<SPART>01</SPART> <!-- Division -->
<BISMT>OLD-MAT-001</BISMT> <!-- Old Material Number -->
</HeaderData>
<PlantData>
<WERKS>1010</WERKS>
<EKGRP>001</EKGRP> <!-- Purchasing Group -->
<DISMM>PD</DISMM> <!-- MRP Type -->
<DISPO>001</DISPO> <!-- MRP Controller -->
<PLIFZ>5</PLIFZ> <!-- Planned Delivery Time -->
</PlantData>
<StorageLocationData>
<WERKS>1010</WERKS>
<LGORT>0001</LGORT>
</StorageLocationData>
<SalesData>
<VKORG>1010</VKORG>
<VTWEG>10</VTWEG>
<SPART>01</SPART>
</SalesData>
</MigrationObject>
Pattern 2: Custom Migration Object (LTMOM)
" Step 1: Create custom migration object in LTMOM
" Step 2: Implement BAPI/staging table approach
" Migration class for custom object
CLASS zcl_migrate_custom_obj DEFINITION.
PUBLIC SECTION.
METHODS:
validate_data
IMPORTING it_data TYPE ztab_migration_data
RETURNING VALUE(rt_errors) TYPE bapiret2_t,
execute_migration
IMPORTING it_data TYPE ztab_migration_data
RETURNING VALUE(rt_results) TYPE ztab_migration_result.
ENDCLASS.
CLASS zcl_migrate_custom_obj IMPLEMENTATION.
METHOD validate_data.
LOOP AT it_data ASSIGNING FIELD-SYMBOL(<data>).
" Mandatory field checks
IF <data>-field1 IS INITIAL.
APPEND VALUE #(
type = 'E'
id = 'ZMIG'
number = '001'
message_v1 = <data>-key_field
message = |Field1 is mandatory for { <data>-key_field }|
) TO rt_errors.
ENDIF.
" Value mapping check
IF NOT check_value_mapping( <data>-old_value ).
APPEND VALUE #(
type = 'E'
id = 'ZMIG'
number = '002'
message = |No mapping for value { <data>-old_value }|
) TO rt_errors.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD execute_migration.
LOOP AT it_data ASSIGNING FIELD-SYMBOL(<data>).
TRY.
" Call BAPI or direct insert
CALL FUNCTION 'BAPI_CUSTOM_CREATE'
EXPORTING
is_header = map_to_target( <data> )
IMPORTING
ev_number = DATA(lv_number)
TABLES
return = DATA(lt_return).
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
APPEND VALUE #( key = <data>-key_field status = 'E' messages = lt_return ) TO rt_results.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true.
APPEND VALUE #( key = <data>-key_field status = 'S' new_number = lv_number ) TO rt_results.
ENDIF.
CATCH cx_root INTO DATA(lx_error).
APPEND VALUE #( key = <data>-key_field status = 'E'
message = lx_error->get_text( ) ) TO rt_results.
ENDTRY.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
Pattern 3: Value Mapping Table
" Value mapping for legacy → S/4HANA conversion
" Store in custom table ZTAB_VALUE_MAP
TYPES: BEGIN OF ty_value_map,
object_type TYPE char20, " e.g., MATERIAL_TYPE
source_value TYPE char50, " Legacy value
target_value TYPE char50, " S/4HANA value
valid_from TYPE datum,
valid_to TYPE datum,
END OF ty_value_map.
" Usage in migration
METHOD map_value.
SELECT SINGLE target_value FROM ztab_value_map
WHERE object_type = @iv_object_type
AND source_value = @iv_source_value
AND valid_from <= @sy-datum
AND valid_to >= @sy-datum
INTO @rv_target_value.
IF sy-subrc <> 0.
" No mapping found — log warning and use source value
log_warning( |No mapping: { iv_object_type }/{ iv_source_value }| ).
rv_target_value = iv_source_value.
ENDIF.
ENDMETHOD.
Pattern 4: Data Quality Report
-- Pre-migration data quality checks (run on source ECC)
-- Duplicate customer check
SELECT kunnr, name1, COUNT(*) AS cnt
FROM kna1
GROUP BY kunnr, name1
HAVING COUNT(*) > 1;
-- Orphan records (sales orders without customer)
SELECT vbak~vbeln, vbak~kunnr
FROM vbak
LEFT OUTER JOIN kna1 ON vbak~kunnr = kna1~kunnr
WHERE kna1~kunnr IS NULL;
-- Material without valid UoM
SELECT matnr, meins
FROM mara
WHERE meins NOT IN (SELECT msehi FROM t006);
-- Open items with missing clearing info
SELECT bukrs, belnr, gjahr, buzei, dmbtr
FROM bsid -- Open customer items
WHERE augdt IS NULL
AND budat < '20200101'; -- Very old open items
-- Vendor/Customer with incomplete address
SELECT lifnr, name1, stras, ort01, pstlz, land1
FROM lfa1
WHERE stras IS INITIAL OR ort01 IS INITIAL OR land1 IS INITIAL;
Pattern 5: Reconciliation Report
" Post-migration reconciliation
REPORT z_migration_reconcile.
" Compare source vs target record counts
TYPES: BEGIN OF ty_recon,
object_name TYPE char30,
source_count TYPE i,
target_count TYPE i,
difference TYPE i,
status TYPE char10,
END OF ty_recon.
DATA: lt_recon TYPE TABLE OF ty_recon.
" Material Master
SELECT COUNT(*) FROM mara INTO @DATA(lv_target_mat).
" Source count from migration log
SELECT source_count FROM zmig_log
WHERE object = 'MATERIAL' AND run_id = @p_run_id
INTO @DATA(lv_source_mat).
APPEND VALUE #(
object_name = 'Material Master'
source_count = lv_source_mat
target_count = lv_target_mat
difference = lv_target_mat - lv_source_mat
status = COND #( WHEN lv_target_mat = lv_source_mat THEN 'OK'
ELSE 'MISMATCH' )
) TO lt_recon.
" GL Balance reconciliation
" Compare total debit/credit per company code
SELECT bukrs,
SUM( CASE WHEN shkzg = 'S' THEN dmbtr ELSE 0 END ) AS total_debit,
SUM( CASE WHEN shkzg = 'H' THEN dmbtr ELSE 0 END ) AS total_credit
FROM bseg
WHERE gjahr = @p_fiscal_year
GROUP BY bukrs
INTO TABLE @DATA(lt_target_balances).
Pattern 6: Cutover Plan Template
CUTOVER PLAN — Go-Live Weekend
Friday Evening (T-36h):
18:00 Lock source system (stop business transactions)
18:30 Final delta extract from source
19:00 Run data quality checks on delta
20:00 Start delta migration load
Saturday (T-24h):
06:00 Delta load complete — start validation
08:00 Run reconciliation reports
10:00 Fix data issues (correction runs)
12:00 Business validation (key users)
14:00 Go/No-Go decision point #1
15:00 Start integration testing
18:00 Integration testing complete
Sunday (T-12h):
06:00 Final reconciliation
08:00 Go/No-Go decision point #2 (FINAL)
09:00 Open system for business users
09:00 Hypercare team on standby
12:00 First business transactions verified
Rollback triggers:
- Data reconciliation difference > 1%
- Critical business process blocked
- Integration interface failures > threshold
Error Catalog
| Error |
Message |
Root Cause |
Fix |
LTMC: Upload failed |
File format error |
Wrong template version or encoding |
Re-download template from current LTMC version |
LTMC: Conversion error |
Value mapping failed |
Source value not in mapping table |
Add missing mapping; cleanse source data |
BAPI: No authorization |
Authorization check failed |
Migration user missing roles |
Assign S_TCODE + object-specific auth |
Duplicate key |
Record already exists |
Re-run without clearing previous load |
Delete previous test load or use update mode |
Number range exhausted |
No numbers available |
Number range too small for migration volume |
Extend number range via SNRO |
Referential integrity |
Dependent object missing |
Load order wrong (e.g., PO before vendor) |
Follow dependency sequence: master → transactional |
Data truncation |
Field length exceeded |
Source data longer than target field |
Cleanse data or extend custom field length |
SUM: Modification check |
Custom code conflict |
ABAP modifications incompatible with S/4HANA |
Fix with Custom Code Migration Worklist |
Lock timeout |
Enqueue failed |
Parallel migration jobs competing |
Reduce parallelism or partition by org unit |
LTMC: Simulate error |
Business rule violation |
Data doesn't meet S/4HANA validation rules |
Fix source data per validation message |
Performance Tips
- Partition by org unit — Migrate by company code/plant to parallelize and isolate failures
- Disable non-essential exits — Temporarily deactivate BAdIs/user exits during bulk load
- Background processing — Run LTMC in background mode for large volumes (>10K records)
- Number range buffering — Enable buffering for migration-heavy number ranges
- Commit frequency — Commit every 500-1000 records in custom programs; avoid single mega-commit
- Index management — Drop secondary indexes before bulk load, rebuild after
- Load sequence — Always: Config → Master Data → Open Items → Transactional Data
- Test with production volumes — Never test with 100 records if production has 1M; timing differs non-linearly
- Delta strategy — Plan for multiple delta loads; cutover window depends on delta volume
Gotchas
- Business Partner migration: S/4HANA merges Customer + Vendor into Business Partner — plan BP number assignment carefully
- Material number length: S/4HANA supports 40-char material numbers but existing customizing may limit this
- New GL accounting: If migrating from classic GL, open items need conversion to new GL structure
- LTMC template versions: Templates change with S/4HANA releases — always download from target system
- Migration user: Create dedicated migration user with broad auth; don't use dialog user to avoid session limits
- Tax code mapping: Tax codes often differ between source and target — map explicitly, never assume
- Currency conversion: If migrating across currencies, use ECB rates for the exact cutover date
1---2name: sap-migration3description: SAP S/4HANA migration and data conversion skill. Use when migrating data with LTMC/Migration Cockpit, planning cutover, cleansing data, or converting from ECC to S/4HANA. If the user mentions S/4HANA migration, LTMC, data migration, brownfield/greenfield conversion, or cutover planning, use this skill.4license: MIT5---67# SAP Migration — Data Migration & System Conversion89## Related Skills10- `sap-s4hana-extensibility` — Custom objects to migrate in S/4HANA11- `sap-testing-quality` — Migration testing and data validation12- `sap-cloud-alm` — Migration project management and tracking13- `sap-abap-advanced` — Classic ABAP → ABAP Cloud code migration14- `sap-devops-cicd` — Transport management during migration cutover1516## Quick Start1718**Choose your migration scenario:**1920| Scenario | Approach | Key Tool |21|----------|----------|----------|22| **New Implementation (Greenfield)** | Fresh S/4HANA, migrate master/transactional data | Migration Cockpit (LTMC) |23| **System Conversion (Brownfield)** | Convert existing ECC to S/4HANA in-place | SUM (Software Update Manager) |24| **Selective Data Transition** | Mix of new + migrated data | SAP Data Services / SNP CrystalBridge |25| **Cloud Migration** | On-premise → S/4HANA Cloud | Migration Cockpit Cloud |2627**Migration Cockpit Quick Start:**281. Transaction `LTMC` → Create Migration Project292. Select Migration Object (e.g., "General Ledger Account")303. Download XML template → Fill with source data314. Upload → Validate → Simulate → Execute3233## Core Concepts3435### Migration Phases36```37Assessment ──► Preparation ──► Realization ──► Testing ──► Cutover ──► Hypercare38 │ │ │ │ │ │39 Scope & Data Build & Validate Go-live Monitor40 Mapping Cleansing Configure & UAT Execute & Fix41```4243### Migration Tools Landscape44| Tool | Use Case | Data Volume | Complexity |45|------|----------|-------------|------------|46| **LTMC (Migration Cockpit)** | Standard objects, file upload | Medium | Low |47| **LTMOM (Migration Object Modeler)** | Custom migration objects | Medium | Medium |48| **SAP Data Services** | Complex ETL, large volumes | High | High |49| **LSMW** | Legacy (ECC), batch input/IDoc/BAPI | Medium | Medium |50| **Custom ABAP Programs** | Non-standard scenarios | Any | High |51| **SAP Signavio (Process)** | Process migration planning | N/A | Medium |52| **SUM** | System conversion (brownfield) | All | Very High |5354### Standard Migration Objects (LTMC)55| Domain | Key Objects |56|--------|------------|57| **Finance** | GL Account, Cost Center, Profit Center, Customer, Vendor, Open Items |58| **Materials** | Material Master, BOM, Routing, Batch, Serial Number |59| **Sales** | Sales Order, Pricing, Customer-Material Info Record |60| **Procurement** | Purchase Order, Source List, Quota Arrangement, Contract |61| **Plant Maintenance** | Equipment, Functional Location, Maintenance Plan |62| **HR/HCM** | Employee Master, Org Structure, Time Data, Payroll Results |63| **Asset Accounting** | Asset Master, Asset Values, Depreciation Areas |6465### Data Migration Architecture66```67Source System ──► Extract ──► Transform ──► Load ──► Validate68 │ │ │ │ │69 ECC/Legacy SAP DS / Mapping & LTMC / Reconcile70 Flat files Custom ABAP Cleansing BAPI Reports71 3rd party RFC/DB Rules Staging72```7374## Common Patterns7576### Pattern 1: Migration Cockpit — File-Based Migration7778```xml79<!-- Template structure for Material Master migration -->80<!-- Download from LTMC, fill, re-upload -->8182<MigrationObject name="Material">83 <HeaderData>84 <MATNR>MAT-001</MATNR>85 <MAKTX>Laptop Computer 15 inch</MAKTX>86 <MTART>FERT</MTART> <!-- Material Type -->87 <MBRSH>M</MBRSH> <!-- Industry Sector -->88 <MEINS>EA</MEINS> <!-- Base UoM -->89 <MATKL>001</MATKL> <!-- Material Group -->90 <SPART>01</SPART> <!-- Division -->91 <BISMT>OLD-MAT-001</BISMT> <!-- Old Material Number -->92 </HeaderData>93 <PlantData>94 <WERKS>1010</WERKS>95 <EKGRP>001</EKGRP> <!-- Purchasing Group -->96 <DISMM>PD</DISMM> <!-- MRP Type -->97 <DISPO>001</DISPO> <!-- MRP Controller -->98 <PLIFZ>5</PLIFZ> <!-- Planned Delivery Time -->99 </PlantData>100 <StorageLocationData>101 <WERKS>1010</WERKS>102 <LGORT>0001</LGORT>103 </StorageLocationData>104 <SalesData>105 <VKORG>1010</VKORG>106 <VTWEG>10</VTWEG>107 <SPART>01</SPART>108 </SalesData>109</MigrationObject>110```111112### Pattern 2: Custom Migration Object (LTMOM)113114```abap115" Step 1: Create custom migration object in LTMOM116" Step 2: Implement BAPI/staging table approach117118" Migration class for custom object119CLASS zcl_migrate_custom_obj DEFINITION.120 PUBLIC SECTION.121 METHODS:122 validate_data123 IMPORTING it_data TYPE ztab_migration_data124 RETURNING VALUE(rt_errors) TYPE bapiret2_t,125 execute_migration126 IMPORTING it_data TYPE ztab_migration_data127 RETURNING VALUE(rt_results) TYPE ztab_migration_result.128ENDCLASS.129130CLASS zcl_migrate_custom_obj IMPLEMENTATION.131 METHOD validate_data.132 LOOP AT it_data ASSIGNING FIELD-SYMBOL(<data>).133 " Mandatory field checks134 IF <data>-field1 IS INITIAL.135 APPEND VALUE #(136 type = 'E'137 id = 'ZMIG'138 number = '001'139 message_v1 = <data>-key_field140 message = |Field1 is mandatory for { <data>-key_field }|141 ) TO rt_errors.142 ENDIF.143144 " Value mapping check145 IF NOT check_value_mapping( <data>-old_value ).146 APPEND VALUE #(147 type = 'E'148 id = 'ZMIG'149 number = '002'150 message = |No mapping for value { <data>-old_value }|151 ) TO rt_errors.152 ENDIF.153 ENDLOOP.154 ENDMETHOD.155156 METHOD execute_migration.157 LOOP AT it_data ASSIGNING FIELD-SYMBOL(<data>).158 TRY.159 " Call BAPI or direct insert160 CALL FUNCTION 'BAPI_CUSTOM_CREATE'161 EXPORTING162 is_header = map_to_target( <data> )163 IMPORTING164 ev_number = DATA(lv_number)165 TABLES166 return = DATA(lt_return).167168 READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.169 IF sy-subrc = 0.170 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.171 APPEND VALUE #( key = <data>-key_field status = 'E' messages = lt_return ) TO rt_results.172 ELSE.173 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true.174 APPEND VALUE #( key = <data>-key_field status = 'S' new_number = lv_number ) TO rt_results.175 ENDIF.176 CATCH cx_root INTO DATA(lx_error).177 APPEND VALUE #( key = <data>-key_field status = 'E'178 message = lx_error->get_text( ) ) TO rt_results.179 ENDTRY.180 ENDLOOP.181 ENDMETHOD.182ENDCLASS.183```184185### Pattern 3: Value Mapping Table186187```abap188" Value mapping for legacy → S/4HANA conversion189" Store in custom table ZTAB_VALUE_MAP190191TYPES: BEGIN OF ty_value_map,192 object_type TYPE char20, " e.g., MATERIAL_TYPE193 source_value TYPE char50, " Legacy value194 target_value TYPE char50, " S/4HANA value195 valid_from TYPE datum,196 valid_to TYPE datum,197 END OF ty_value_map.198199" Usage in migration200METHOD map_value.201 SELECT SINGLE target_value FROM ztab_value_map202 WHERE object_type = @iv_object_type203 AND source_value = @iv_source_value204 AND valid_from <= @sy-datum205 AND valid_to >= @sy-datum206 INTO @rv_target_value.207 IF sy-subrc <> 0.208 " No mapping found — log warning and use source value209 log_warning( |No mapping: { iv_object_type }/{ iv_source_value }| ).210 rv_target_value = iv_source_value.211 ENDIF.212ENDMETHOD.213```214215### Pattern 4: Data Quality Report216217```sql218-- Pre-migration data quality checks (run on source ECC)219220-- Duplicate customer check221SELECT kunnr, name1, COUNT(*) AS cnt222 FROM kna1223 GROUP BY kunnr, name1224 HAVING COUNT(*) > 1;225226-- Orphan records (sales orders without customer)227SELECT vbak~vbeln, vbak~kunnr228 FROM vbak229 LEFT OUTER JOIN kna1 ON vbak~kunnr = kna1~kunnr230 WHERE kna1~kunnr IS NULL;231232-- Material without valid UoM233SELECT matnr, meins234 FROM mara235 WHERE meins NOT IN (SELECT msehi FROM t006);236237-- Open items with missing clearing info238SELECT bukrs, belnr, gjahr, buzei, dmbtr239 FROM bsid -- Open customer items240 WHERE augdt IS NULL241 AND budat < '20200101'; -- Very old open items242243-- Vendor/Customer with incomplete address244SELECT lifnr, name1, stras, ort01, pstlz, land1245 FROM lfa1246 WHERE stras IS INITIAL OR ort01 IS INITIAL OR land1 IS INITIAL;247```248249### Pattern 5: Reconciliation Report250251```abap252" Post-migration reconciliation253REPORT z_migration_reconcile.254255" Compare source vs target record counts256TYPES: BEGIN OF ty_recon,257 object_name TYPE char30,258 source_count TYPE i,259 target_count TYPE i,260 difference TYPE i,261 status TYPE char10,262 END OF ty_recon.263264DATA: lt_recon TYPE TABLE OF ty_recon.265266" Material Master267SELECT COUNT(*) FROM mara INTO @DATA(lv_target_mat).268" Source count from migration log269SELECT source_count FROM zmig_log270 WHERE object = 'MATERIAL' AND run_id = @p_run_id271 INTO @DATA(lv_source_mat).272273APPEND VALUE #(274 object_name = 'Material Master'275 source_count = lv_source_mat276 target_count = lv_target_mat277 difference = lv_target_mat - lv_source_mat278 status = COND #( WHEN lv_target_mat = lv_source_mat THEN 'OK'279 ELSE 'MISMATCH' )280) TO lt_recon.281282" GL Balance reconciliation283" Compare total debit/credit per company code284SELECT bukrs,285 SUM( CASE WHEN shkzg = 'S' THEN dmbtr ELSE 0 END ) AS total_debit,286 SUM( CASE WHEN shkzg = 'H' THEN dmbtr ELSE 0 END ) AS total_credit287 FROM bseg288 WHERE gjahr = @p_fiscal_year289 GROUP BY bukrs290 INTO TABLE @DATA(lt_target_balances).291```292293### Pattern 6: Cutover Plan Template294295```296CUTOVER PLAN — Go-Live Weekend297298Friday Evening (T-36h):299 18:00 Lock source system (stop business transactions)300 18:30 Final delta extract from source301 19:00 Run data quality checks on delta302 20:00 Start delta migration load303304Saturday (T-24h):305 06:00 Delta load complete — start validation306 08:00 Run reconciliation reports307 10:00 Fix data issues (correction runs)308 12:00 Business validation (key users)309 14:00 Go/No-Go decision point #1310 15:00 Start integration testing311 18:00 Integration testing complete312313Sunday (T-12h):314 06:00 Final reconciliation315 08:00 Go/No-Go decision point #2 (FINAL)316 09:00 Open system for business users317 09:00 Hypercare team on standby318 12:00 First business transactions verified319320Rollback triggers:321 - Data reconciliation difference > 1%322 - Critical business process blocked323 - Integration interface failures > threshold324```325326## Error Catalog327328| Error | Message | Root Cause | Fix |329|-------|---------|------------|-----|330| LTMC: `Upload failed` | File format error | Wrong template version or encoding | Re-download template from current LTMC version |331| LTMC: `Conversion error` | Value mapping failed | Source value not in mapping table | Add missing mapping; cleanse source data |332| BAPI: `No authorization` | Authorization check failed | Migration user missing roles | Assign S_TCODE + object-specific auth |333| `Duplicate key` | Record already exists | Re-run without clearing previous load | Delete previous test load or use update mode |334| `Number range exhausted` | No numbers available | Number range too small for migration volume | Extend number range via SNRO |335| `Referential integrity` | Dependent object missing | Load order wrong (e.g., PO before vendor) | Follow dependency sequence: master → transactional |336| `Data truncation` | Field length exceeded | Source data longer than target field | Cleanse data or extend custom field length |337| SUM: `Modification check` | Custom code conflict | ABAP modifications incompatible with S/4HANA | Fix with Custom Code Migration Worklist |338| `Lock timeout` | Enqueue failed | Parallel migration jobs competing | Reduce parallelism or partition by org unit |339| LTMC: `Simulate error` | Business rule violation | Data doesn't meet S/4HANA validation rules | Fix source data per validation message |340341## Performance Tips3423431. **Partition by org unit** — Migrate by company code/plant to parallelize and isolate failures3442. **Disable non-essential exits** — Temporarily deactivate BAdIs/user exits during bulk load3453. **Background processing** — Run LTMC in background mode for large volumes (>10K records)3464. **Number range buffering** — Enable buffering for migration-heavy number ranges3475. **Commit frequency** — Commit every 500-1000 records in custom programs; avoid single mega-commit3486. **Index management** — Drop secondary indexes before bulk load, rebuild after3497. **Load sequence** — Always: Config → Master Data → Open Items → Transactional Data3508. **Test with production volumes** — Never test with 100 records if production has 1M; timing differs non-linearly3519. **Delta strategy** — Plan for multiple delta loads; cutover window depends on delta volume352353## Gotchas354355- **Business Partner migration**: S/4HANA merges Customer + Vendor into Business Partner — plan BP number assignment carefully356- **Material number length**: S/4HANA supports 40-char material numbers but existing customizing may limit this357- **New GL accounting**: If migrating from classic GL, open items need conversion to new GL structure358- **LTMC template versions**: Templates change with S/4HANA releases — always download from target system359- **Migration user**: Create dedicated migration user with broad auth; don't use dialog user to avoid session limits360- **Tax code mapping**: Tax codes often differ between source and target — map explicitly, never assume361- **Currency conversion**: If migrating across currencies, use ECB rates for the exact cutover date