Коллеги, признавайтесь, у кого «любимая» часть работы — это отслеживать очередные внезапные изменения в электронных счетах-фактурах от КГД?
Недавно ИС ЭСФ преподнесла очередной сюрприз: вместо привычного тега <term> в XML прилетает <payment_form>. К счастью, SAP СНГ/Казахстан обычно оперативно выпускает ноты (3749582), но тут разработчиков подстерегают классические грабли обратной совместимости.
При попытке прочитать или обработать из архива старые ЭСФ, система намертво падает в дамп CX_ST_MATCH_ELEMENT с текстом: «Expected element-end: ‘term’». Или даже просто сформировать PDF по ним. Компилятор Simple Transformation просто отказывается понимать старый XML по новой схеме.
Как лечить?

При обновлении Z-трансформаций (или если приходится ковырять стандарт) не забывайте явно разделять логику сериализации и десериализации. Чтобы старые теги не ломали чтение и не лезли в новую выгрузку, оборачивайте их в блок <tt:deserialize> с проверкой d-check="exist(...)".
|
1 2 3 4 5 6 7 |
<tt:deserialize> <tt:cond d-check="exist(ref('ROOT.DELIVERY_TERM.TERM'))"> <term> <tt:value ref="ROOT.DELIVERY_TERM.TERM"/> </term> </tt:cond> </tt:deserialize> |

А как вы боретесь с «обратной совместимостью» XML от наших госорганов? Делитесь в комментариях!
