Задачка по программированию на любом языке

Просто к слову вспомнили задачку для начинающих.

Есть переменные A и B – целые числа.

Требуется поменять их местами, не прибегая к помощи других переменных и специальных методов. Перекладываю на язык ABAP:

Задачка по обмену значениями

Вот и требуется вписать в серединку несколько строчек.

Ответ давать и не буду, задачка решается и в уме.

“Порадовали” переводчики SAP

Вообще перевод на русский язык в системе оставляет желать много лучшего. Много непереведённого, нет контекстной справки и описания ошибок, много орфографических ошибок и прочее.

Как и в любой около-денежной системе в SAP есть справочник валют.

Сделал небольшой отчётик по курсам валют:

Курсы валют

Пару минут втуплял, что же за такая непредусмотренная колонка “Всего”, и откуда в ней ещё какое-то маленькое значение.

 

(далее…)

Использование двоеточий и запятых в ABAP

Вообще подход к двоеточиям и запятым в ABAP достаточно странный (если сравнивать с другими языками программирования). И я, как правило, использовал его или для определения данных DATA, или в операторах write.

Но вот сегодня ковырялся в чужих исходниках и обнаружил код с двоеточиями и запятыми, о котором просто раньше не догадывался.

Пример повтояющегося perform

Первый, второй и третий блоки выполняют одинаковое действие.

Трассировка транзакций и поиск провалов производительности

Если вдруг какая-то транзакция (отчёт) сильно притормаживает или даже виснет, то далеко не каждый администратор, консультант или продвинутый пользователь способен разобраться в этой проблеме.

С одной стороны администратор – это человек которому ничего не говорят транзакции и объекты бизнес-процессов, а с другой стороны консультанты и пользователи ничего не смыслят в базисе и программировании.

Есть несколько разных способов, пригодных для решения этой проблемы.

Самое главное – это выбрать достаточно точные шаги по многоразовому воспроизведению проблемы.

Один из основных – это динамический анализ (транзакция SE30).

(далее…)

Индикатор прогресса при обработке больших объёмов

Достаточно неприлично выглядит, если выполняется достаточно долгая обработка (от 10 секунд и больше) и при этом пользователю не показан ход процесса.

Пользователь начинает переживать, а не зависла ли программа, а также сколько времени ещё ждать. Иногда начинает бояться, что программа упадёт с ошибкой по таймауту.

Вот как раз для этих целей и используются индикаторы прогресса. В SAP для этого обычно используется статусная строка с закрашиваемой иконкой секундомера.

Этот индикатор можно вызвать и самому – функциональный модуль SAPGUI_PROGRESS_INDICATOR, в котором нет ничего сложного – передаётся рассчитанный процент и текст.

Маленькая тонкость: если вызывать его слишком часто, то:

  • Обновляется некрасиво и неразборчиво
  • Увеличивается обмен информацией между клиентом и сервером

(далее…)

Определение расширений BAPI

Переодически забываю этот метод. Запишу себе в блокнотик, чтоб не забывать.

Транзакция: se80

Класс: CL_EXITHANDLER

Метод: GET_INSTANCE

Точка прерывания: на первой строке CALL METHOD cl_exithandler=>get_class_name_by_interface

Имя искомого BADI: в переменной exit_name

Ставится точка прерывания и запускается нужная транзакция. В переменной exit_name будут всплывать имена подключаемых BADI.

Забавное использование стратегии деривации – в качестве хранилища данных

Транзакция FMDERIVE может использоваться как хранилище данных настроек.

    В первую очередь для того, чтобы не плодить Z-таблицы. Причем можно использовать и в целях не связанных с модулем FM.

В качестве минусов, конечно, можно отметить:

  • Нецелевое использование функциональности
  • Сложность распределения прав

В ней очень удобно хранить некоторые данные – полей в структуре достаточно много, разрешены диапазоны, сроки действия, выстроена система переноса.

Примеры использования:

  • Соответствие МВЗ и счетов затрат
  • Список допустимых комбинаций Счет + МВЗ + Заказ
    Для этого заходим в транзакцию FMDERIVE и создаём там новую стратегию:

(далее…)

Разбор вложенных структур

Проблемка и решение

Есть одна достаточно полезная подпрограмма для чтения данных из Excel. Даёшь ей файл, параметры и внутреннюю таблицу. И получаешь заполненную внутреннюю таблицу.

Там в кишках слепок таблицы Excel перекладывается в целевую таблицу.

image

Дальше перекладываются значения в зависимости от типов колонок.

Проблемы начались после того, как я в целевой таблице стал использовать вложенные структуры.

image

Соответственно ASSIGN COMPONENT стал вести не на целевое поле, а на структуру со всеми вытекающими неприятными последствиями.

И вот сделал такую переборку внутренних вложенных структур:

image

Тип “u” это как раз вложенные структуры (плоские).

Ну решение простое, можно конечно ещё извернуться с рекурсией и типом “v” (это уже посложнее – deep structure). Но это пока не требуется.

Вот так и использование DESCRIBE FIELD помогает.

Между делом

Вообще использование вложенных структур сильно может помочь. Основные преимущества подхода:

  • Возможность сравнения подструктур
  • Возможность использование move-corresponding в подструктурах

В моём случае подструктуры – это блоки дебета и кредита бухгалтерской проводки.

Можно сильно сократить объём кода и его понятность в некоторых местах, например:

image

Может также использоваться для пар старых-новых значений, или для сравнения данных (источник-назначение).

От Экселя до Шахмат

ABAP2XLSX

Началось всё с осмотра одной разработки – abap2xlsx. Ещё один движок экспорта данных в Excel. Движок как движок – есть преимущества и недостатки.

Фишки:

  • Экспорт происходит через  обработку XML.  Никаких OLE, CSV, HTML, макросов и прочих костылей
  • Теоретически – самый быстрый вариант при большом количестве данных
  • Теоретически доступны все возможности, если написать к ним верные обёртки – они не все написаны, но кое-что планируется по roadmap
  • Клиент не участвует в обработке – файл полностью генерируется на сервере

Недостатки:

  • Пока только развивается – ещё не совсем понятно, что из этого выйдет
  • До поддержки шаблонного подхода похоже ещё очень далеко – ещё несколько мажорных версий по roadmap (если я правильно понимаю фразу “v.3.0 — Add xlsx reader”

Выводы:

  • уже можно использовать в качестве замены чистому OLE-подходу
  • не годится для Excel 2003 в общем случае – требуется установка адд-она на клиентскую машину

Ничего особенно удивительного, но это погрузило меня в другое – целую кучу другого.

http://code.google.com/p/abap2xlsx/

Google Code

 

http://code.google.com/

Больше напомнило, чем удивило. Goole Code является альтернативой старому SourceForge. Просто и доступно, как и всё что Гугл делает. Что там есть:

  • страница проекта
  • документация в стиле Wiki
  • раздел файлов для загрузки
  • баготреккер
  • репозитарий на базе SVN

А что ещё нужно для коллективной работы над исходниками?

Google Wave

 

http://wave.google.com/

Данный способ колаборации анонсирован уже давно, но открыт публично совсем недавно. Однако его вполне можно использовать и для обсуждения моментов вокруг проектов. Волны -  как заменитель тредов на форуме или чата. Почему бы и нет.

 

ZSAPLINK

 

http://code.google.com/p/saplink/

ZSAPLINK – это движок, через который можно обмениваться разработками. Интересный проект со своими заморочками.

Основная задача: формировать что-то вроде запросов – некоторый файл в формате XML, в котором лежат объекты разработки (отчёты, классы, таблицы, группы функций и так далее).

Этот файл можно получить из одной системы и развернуть на другой системе.

Как альтернатива файлам запросов имеет некоторые преимущества:

  • не требует деблокирования
  • не требует вмешательства администатора системы и транспортной системы
  • работает также и с локальными объектами
  • прозрачность файла-контейнера – формат XML
  • контейнер можно нормально класть в репозитарий (SVN) со всеми вытекающими
  • контейнер дополняем

В качестве заморочек можно отметить, что движку неизвестны все типы объектов разработки. К основным единицам разработки сделаны “плагины”, а к остальным плагины пока никто не написал – к таким можно отнести например объекты авторизации, диапазоны номеров и другие мелочные штучки.

Ещё из заморочек можно упомянуть необходимость ручной активации всех перенесённых объектов.

Тем не менее — полезная штука.

Есть к ней и альтернатива ZAPLINK – что-то похожее, но со своими заморочками.

Шахматы – ZSAPChess

 

http://code.google.com/p/sapchess/

Реализованы шахматы как таковые. Игрок-против-компьютера, Игрок-против-игрока, три уровня сложности. Реально работает на голом ABAP-коде. Интерфейс пользователя построен на ABAP-списках. Работает достаточно удобно, однако самым нехорошим моментом являются слабые различия фигур. Вот кратенький скриншот:

image

Я уже нашел местечко в исходном коде, где можно исправлять внешний вид фигур в символьной части, а вот цветовая раскраска, вероятно, потребует большей вдумчивости. Я сначала попробовал воспользоваться псевдографикой, однако некоторые символы почему-то становятся толще стандартных моноширинных, и доска ползёт и коверкается.

На низком уровне сложности выигрывается теоретически на раз-два-три, но есть какие-то глюки, в результате которых меня выбрасывает в дамп во второй половине игры. Скорее всего, какие-то хитрости при смене очередности хода – там достаточно замудрёно сделано. Так что выиграть не удалось пока.

SAP-Commander

 

http://code.google.com/p/sapcommander/

Двух-панельный файловый интерфейс с базовой функциональностью – F5-F6-F7-F8.

Панели могут показывать как локальный компьютер, так и сервер приложений. Админам должно быть полезно – например, перегонять файлы запросов на удалённый сервер. Только вот опасная штука – обычным людям рулить на сервере приложений лучше не давать.

ZAKE

А это просто штука, которая позволяет работать с SVN-клиентом. Работает в паре с ZSAPLink.

В самом ABAP необходимости в SVN/CVS необходимости нет, потому что:

  • Исходный код и прочие объекты репозитария уже централизованно хранятся на сервере, а не локально
  • имеется версионный контроль
  • имеется система переносов

А пригодиться это может в двух случаях:

  • если ввязаться в какой-то проект на том же Google Code
  • если есть несколько систем с большим перечнем общих разработок универсального характера – тут синхронизация через SVN поможет
    Пока такой необходимости нет.

ABAP Report Wizard

 

http://code.google.com/p/abap-report-wizard/

Забавный генератор отчетов в виде мастера.

Основные шаги:

  1. С помощью визуального редактора добавляются таблицы и выстраиваются связи между ними
  2. Галочками отмечаются поля, которые необходимо вынести на селективный экран
  3. Галочками отмечаются поля, которые надо вынести на экран

В результате работы этого мастера в исходный код вставляется заготовка, которая работает практически без доработки напильником – выводит достаточно приличный ALV-отчет.

Заготовка содержит:

  • Селективный экран
  • Описание внутренней таблицы
  • Выборку данных (select … inner join …)
  • Подготовку и вывод ALV-grid

Ну а затем можно уже и напильником.

Впрочем, существуют и стандартные средства получения отчетов без программирования. Однако и в качестве примера тоже польза есть, например: реализация мастера, реализация вставки модели в исходный код, реализация редактора диаграммы.

Есть к нему ещё более специализированная штука (ABAP Join Wizard), которая только выдаёт заготовку сложной выборки – описание внутренней таблицы и соответствующий оператор select.

Вот такая забавная штука.

Таки есть случайные числа в ABAP

Нашлась случайно фишка по получению случайного числа:

Random

* Create a random number generator to return random
* numbers in the range of 1..{String Length}:
CALL METHOD cl_abap_random_int=>create
    EXPORTING
        seed = CO_SEED
        min = lv_min
        max = lv_max
    RECEIVING
        prng = lo_prng.

 

По большей части забава для написания примитивных игр на АБАПе, но может быть использована в алгоритмах криптования и рядом с ними.

А нашлась такая цитатка в книге “ABAP Cookbook, Programming Recipes for Everyday Solutions” за авторством некоего James Wood.

В остальном в бесплатной главе не нашел ничего особенного.

Купить PDF-версию за 70 долларов меня лично жаба душит. Вообще их политика, когда PDF стоит как и бумажный эквивалент, мне совсем не нравится. Вернее там даже не PDF, а какая-то странная веб-версия (с защитой от копирования и всё такое).

А возможно там есть кое-что интересное, очень хотелось бы полистать вот это:

3.3 Introspection with ABAP Run Time Type Services …………………… 98
3.3.1 ABAP RTTS System Classes ………………………………………. 99
3.3.2 Working with Type Objects …………………………………….. 100
3.3.3 Defining Custom Data Types Dynamically …………………… 102
3.3.4 Case Study: RTTS Usage in the ALV Object Model ……….. 104

 

7.2 Transaction Processing with SAP LUWs … 235
7.2.1 Introduction to SAP Logical Units of Work … 235
7.2.2 Bundling Database Changes in Update Function Modules … 239
7.2.3 Bundling Database Changes in Subroutines … 242
7.2.4 Performing Local Updates … 244
7.2.5 Dealing with Exceptions in the Update Task … 245

 

7.5 Tracking Changes with Change Documents ……………………………. 268
7.5.1 What Are Change Documents? …………………………………. 269
7.5.2 Creating Change Document Objects ………………………….. 269
7.5.3 Configuring Change-Relevant Fields ………………………….. 273
7.5.4 Programming with Change Documents ……………………… 274

М-м-м…