Lesson 2 of 6
Syntax and semantic differences that break models
11 min
Listen to this lesson
Most of an LO-VC model copies across to AVC without edits. The trouble is the part that copies cleanly but behaves differently. Syntax errors are easy: the check fails and someone fixes the dependency. Semantic differences are dangerous: the dependency compiles in both engines, but a value that was optional becomes restricted, or a procedure that stopped early now carries on. This lesson lists the differences SAP documents, explains each with a Contoso example, and turns them into a test checklist.
Differences SAP documents
| Area | LO-VC | AVC | Risk when transforming |
|---|---|---|---|
| Restrictable indicator | Constraints narrow only characteristics flagged restrictable | Not needed; any characteristic can be restricted | Domains may narrow where they never did before |
| INFERENCES part of a constraint | Lists the characteristics the constraint may infer | Not needed; all characteristics are inferred | More values derived automatically than in classic |
| CONDITION part of a constraint | Not restrictive | Not restrictive (same as classic) | Low; behaves as before |
| IF condition in the RESTRICTIONS part | Not restrictive | Restrictive | A rule that used to be a hint now removes values |
| EXIT in a procedure | Stops the procedure where a non-executable statement is reached | Skips only the non-executable assignment; the rest still runs | Later statements now set values they used to skip |
| Actions | Existing actions still run; no new ones (simplification item) | Not supported | Must be rebuilt as procedures or constraints |
| Procedures on BOM items | Can set characteristic values | Run in low-level explosion but cannot set characteristic values | Values that BOM procedures set go missing |
| Variant tables | Classic table access | Processing mode Classic, Mixed or Advanced per table | Wrong mode gives different lookups or none |
Documented differences between classic and advanced dependency processing (SAP Learning, Configuring Variant Configuration in SAP S/4HANA). Check the documentation for your release; AVC syntax keeps growing.
Two of these deserve a worked example, because they cause most surprises. First, the IF in the restrictions part. Chicago's constraint for the CMC-ALT-900 family says, in effect, "restrict pulley type to the 8-groove serpentine pulley if output is 240 A." In LO-VC, that IF was not restrictive in the way many modelers assumed: depending on how the constraint was written, the pulley domain was not narrowed until output had a value. In AVC, the IF in the restrictions part is restrictive. The result can be a configuration screen that now offers fewer pulley values, earlier, than it did yesterday. That might be what the business always wanted, or it might block a combination that sells.
Second, EXIT in procedures. Chicago has a procedure that sets the regulator type and the fan type, with an EXIT after the regulator assignment for the case where the voltage is not yet known. In LO-VC, the procedure stops at that point and the fan type stays empty until the voltage is entered. In AVC, only the non-executable assignment is skipped and the fan type assignment still runs, possibly with a default that nobody intended. SAP documents a way to reproduce classic behavior in AVC: specify the termination conditions for the rest of the procedure after the value assignments.
New syntax worth knowing
SET_PRICING_FACTOR: constraints can now drive pricing factors, so surcharges no longer need a procedure workaround.MINandMAX: return the minimum and maximum allowed value of a restricted range.$DEL_USER_VAL: deletes a value the user assigned, leaving defaults and other valuations untouched.- String functions such as substring, and
ASSIGNED_VALS/NO_OF_ASSIGNED_VALSfor multi-value characteristics. - Floating-point characteristic values and rounding for more precise calculations.
- Negative variant tables: list the combinations that are not allowed instead of every allowed one.
New syntax is not a transformation risk by itself, because classic models do not use it. It matters for the design decision: after transformation, should the team keep the copied classic logic, or rewrite parts of it with the new elements? Contoso decides to transform like for like first, prove equivalence, release, and only then simplify, so that every change is tested against a stable baseline.
Outside the dependencies
What would you do?
After copying the CMC-ALT-900 model to AVC, the AVC check reports no errors. Priya's team runs 30 typical configurations, and all look correct on screen. Theo, filling in as test reviewer, wants to approve. What is the gap?
What goes wrong in testing
| Pitfall | What it looks like | Prevention |
|---|---|---|
| Clean check read as proof | The AVC object check is green, so the team stops testing | Treat checks as syntax evidence only; semantics need cases |
| Typical cases only | Thirty common configurations pass; EXIT branches never run | One case per entry in the semantic risk register |
| Silent defaults | A procedure now sets a value that used to stay empty | Compare derived values, not just user-entered ones |
| Redesign during transformation | New syntax added while copying, so differences cannot be traced | Copy like for like, release, then simplify in a separate change |
Common test failures when checking syntax and semantics.
- Syntax errors are found by checks; semantic differences compile cleanly and must be found by tests.
- Watch the restrictable flag, INFERENCES, restrictive IFs, EXIT, BOM-item procedures, actions and variant table modes.
- Interface designs are not transformed; characteristic groups are built by hand.
- Transform like for like, prove equivalence, then simplify with new syntax.
Check your understanding · not graded
Lesson check
1. How does an IF condition in the RESTRICTIONS part of a constraint behave in AVC?
2. An LO-VC procedure reaches an EXIT. What does AVC do with the same procedure?
3. Which classic object has no AVC equivalent and must be rebuilt?
4. Why does Contoso transform like for like before using new AVC syntax?
5. What happens to LO-VC interface designs during transformation?