О самолётах и насущном

Во-первых, наткнулся на информацию о новых рейсах:

Кроме того, Air Astana планирует с октября текущего года по февраль 2011 года открыть авиарейсы из аэропорта Алматы  в Ташкент и Душанбе. Об этом в среду агентству КазТАГ сообщил президент авиакомпании Питер Фостер. «Все эти рейсы будут открываться с октября (2010 года) по февраль следующего года. Это все зависит от планирования воздушных судов…Первыми рейсами будут Ташкент и Душанбе», – сказал он.

На текущий момент рейсы по маршруту “Алматы – Ташкент” выполняют две компании: узбекская монополистическая “Хаво Йуллари” и казахская малобюджетная “Скат”. Поживём-увидим. По ценам новый рейс должен быть дороже конкурирующих, но и желающих летать предостаточно – сейчас маловероятно купить билеты на ближайшие дни. В субботу утром ближайшие доступные билеты были только на четверг. И это при семи рейсах в неделю.

Во-вторых, обнаружил сомнительные методы в электрописьмах клубной рассылки Air Astana.

Следящая ссылка

Это следящая ссылка, по которой “они” могут определить: открывал ли получатель письмо.

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

 

О составлении расписаний для учебных заведений

Товарищ подошёл и спросил: есть одна веб-ориентированная разработка касательно составления расписаний – можно ли её продать и как.

Мысль первая: продавать на условиях аренды, икс денег в месяц за аккаунт.

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

Мысль третья: институты, школы и расписания не в этом веке придуманы, и каждый год появляются новые попытки автоматизировать этот  “бизнес-процесс”. Подавляющее большинство из них скорее являются или шлаком, или результатом собственной “тренировки”.

В тему: В одной из статей наткнулся на мысль, о том что “изобретение велосипеда” просто необходимо для собственного развития. Использовать фреймворк, библиотеку, базу данных, готовый продукт — легко и продуктивно, но не даёт глубокого опыта. А вот написать своё – хороший опыт.

Понимания только того, что на поверхности не достаточно, чтобы выявить скрытые в толще опасности. Незнание глубоких вещей в разработке будет ограничивать вашу способность создавать действительно блестящие работы.
Изобрести велосипед с квадратными колёсами более ценно, чем сразу же получить его идеальным. Есть уроки, извлеченные из проб и ошибок, с эмоциональной составляющей в них, которые просто невозможно получить читая техническую книгу!

http://www.rusdoc.ru/articles/izobretajte_velosiped_chasto/19605/

И моя мысль понеслась дальше.

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

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

Головоломка Эйнштейна

И задача составления расписания лежит примерно в той же плоскости. Начальные данные получить можно: карта, отправные точки, наборы, подсказки и приоритеты. Карта имеет другую модель (посложнее квадратной матрицы); наборы, подсказки и приоритеты понавороченней; отсутствие однозначного решения – вот основные отличия реальной жизни от простой игры.

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

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

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

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

Есть переменные 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

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