Многим знакома ситуация: нужно быстро сопоставить данные из нескольких таблиц (например, заголовок документа и его позиции), но старая добрая SE16N умеет работать только с одной. Приходится либо идти в DB02 писать SQL-запрос, либо мучаться с Eclipse.
В системах на базе HANA (включая S/4HANA) есть «секретное оружие» — транзакция SE16H.
В чем её главные фишки?
Table Joins: Вы можете на лету связывать несколько таблиц (Inner/Outer Join).
Агрегация: Можно сразу просуммировать значения или сгруппировать данные прямо в запросе.
Скорость: Она работает напрямую с мощностями HANA.
В предыдущих частях мы проделали путь от осознания необходимости изменения процесса подписания XML-файлов ЭЦП (часть 1) до нахождения рабочего механизма с помощью Egov Mobile(часть 1) и NCALayer (часть 2) для обеспечения соответствия законодательству Республики Казахстан.
Несмотря на работоспособность, решение с NCALayer оказалось не очень удобным при большом количестве подписываемых документов и интенсивной работе с порталом КГД.
В этой заключительной части мы рассмотрим вариант, который устраняет этот недостаток, существенно повышая комфорт пользователя.
Часть 3: Локальный Сервер Подписи — Скорость и Удобство
Этот вариант основан на том же сервере подписи, который входит в комплект разработчика NCALayer, но который функционирует непосредственно на компьютере пользователя.
В первой части мы определились с необходимостью изменения процесса подписания XML-файлов с помощью ЭЦП с целью обеспечения законодательства РК.
Я разработал решение, которое позволяет подписывать XML-файлы в мобильных приложениях Egov Mobile или Egov Business с помощью сервиса Sigex.
Дополнительно я реализовал возможность подписания XML через NCALayer. Этот механизм также может успешно использоваться для работы непосредственно из SAP.
Использование ЭЦП граждан Казахстана — давно не новость, особенно в решениях для работы с электронными документами (ЭСФ, СНТ, Виртуальный склад). Стандартное решение SAP, описанное в ноте 3380565, использует сервер подписи, куда сотрудник должен выложить свой личный сертификат ЭЦП.
Подобный запрос возник и у консультантов HCM для подписания документов перед отправкой в ЭСУТД.
К сожалению, данный подход противоречит закону РК «Об электронном документе и электронной цифровой подписи», согласно которому нельзя передавать закрытые ключи ЭЦП другим лицам. Незаконная передача закрытого ключа электронной цифровой подписи другим лицам влечет штраф на физических лиц в размере десяти, на должностных лиц, субъектов малого предпринимательства или некоммерческие организации – в размере пятнадцати, на субъектов среднего предпринимательства – в размере тридцати, на субъектов крупного предпринимательства – в размере ста пятидесяти МРП.
Я поставил цель найти законное и удобное решение. В качестве альтернативы мною был разработан вариант подписания с использованием приложений Egov Mobile или Egov Business с помощью сервиса Sigex.
В новом интеграционном потоке сообщение содержит только часть данных. Дополнительную информацию надо было запрашивать у системы-источника отдельно. На первый взгляд ничего сложного, однако в продуктивной системе столкнулся с ситуацией, когда система-источник при большой нагрузке сама еще не знает о дополнительных данных. В результате этого сообщение не сохраняется и помечается как Failed.
Сейчас ИИ это очень модная тема и вайб-кодинг в частности. Я решил пробовать использовать ИИ при программировании на Python или PHP в среде VSCode и в целом мне понравилось. Использовался Gemini и код освобождал от рутинные операций.
На мой взгляд VSCode не очень удобен для программирования на ABAP и я хотел попробовать другие инструменты. Недавно SAP проводил презентацию по использованию SAP Joule для программирования, но, насколько я понял, использование доступно только в SAP Cloud. Для on-premise систем нашел только инструменты в Eclipse.
Имелась давно разработанная программа, изменяющая заявки в SAP MM. Измение выполнялось с помощью BAPI BAPI_PR_CHANGE — вроде ничего особенного, но недавно обнаружилась некая странность. Оказывается в документе изменения (в таблице CDHDR) в поле TCODE данная BAPI пишет ME52N
Оказалось, что код транзакции прописывается в стандартном коде, что не совсем корректно