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

При обновлении трансформаций (или если приходится ковырять стандарт) не забывайте явно разделять логику сериализации и десериализации. Чтобы старые теги не ломали чтение и не лезли в новую выгрузку, оборачивайте их в блок <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 от наших госорганов? Делитесь в комментариях!
