Прокси-сервер в ABAP

Если вы из программы на ABAP пытаетесь получить веб-контент через HTTP, то соединение будет производиться не с компьютера клиента, а с сервера приложений. В зависимости от конфигурации локальной сети вам может понадобиться пробираться через прокси-сервер (иначе потребуется прямая видимость сервера или NAT).

При оформлении HTTP запроса можно непосредственно указать прокси-сервер:

Пример вызова HTTP

Однако здесь есть пара моментов. Во-первых: “прошитость” настройки в коде (не приветствуется), а во-вторых: нет авторизации.

Глобальную настройку HTTP-прокси можно обнаружить в транзакции SM59:

Прокси в транзакции SM59

И там уже в появившемся окошечке можно указать не только сервер/порт, но также и логин/пароль для авторизации.

Почему исходники ABAP в скриншотах

Если вы тут регулярно посматриваете, то могли заметить, что основная масса исходного кода показана скриншотами. Это не защита от копирования. Связано это с тем, что инструменты для публикации иногда очень вольно могут коверкать эти исходники (не только при подготовке публикации, но и потом — при редактировании).

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

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

Скриншоты же делаются проще, и с ними почти ничего не происходит — и голова не болит. Если вдруг подберу удачный инструмент или подход — то ситуация изменится.

Проверки при создании контрагента

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

Самая примитивная проверка – проверка на дублирование через уникальный налоговый номер (ИНН, РНН …). Обычно для этого используется поле типа STCD1.

Для реализации у нас есть в CMOD пара очень тривиальных расширений:

SAPMF02D — Программы пользователя: основные данные дебиторов
SAPMF02K — Программы пользователей: основные данные кредиторов

Вот примерный кусок кода (для кредиторов) который нужно вставить:

Пример расширения проверки

Надеюсь в этом коде даже объяснять ничего не надо…

Для дебиторов – почти то же самое, только имена полей/таблиц чуточку подправить…

Торрента полезна в хозяйстве

Сложилась такая ситуация: сотруднику в командировке понадобилось получить большой объём данных, и чем раньше – тем лучше.

Дано: объём данных 10гб. Входящий канал – 200к, есть некоторые ограничения. В офисе исходящий канал 50к, ограничений нет. На крайний случай есть домашний канал – 100к исходящего канала.

Решение первое: порезать по частям и заливать на бесплатные файлопомойки.

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

Решение второе: порезать по частям и поднять файлы на локальном http/ftp сервере.

Если необходимо разделить файлы на два исходящих канала – требуются дополнительные движения извилин и мониторинг.

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

Решение третье: торрента и p2p-соединения.

1. На исходящем канале поднимается торрента (в виде мю-торрента, легковесного клиента).

2. В мю-торренте подбирается исходящий порт, видимый для клиента. В случае ограничения можно выбрать “полезные” порты: 80, 8080, 443 и подобные. Если требуется, порт необходимо открыть(прокинуть) на мопеде через “порт-форвардинг”. Порт тестируется (получателем) через браузер до достижения успешного результата в виде “инвалид реквест”.

3. В качестве вспомогательного инструмента можно воспользоваться сервисом типа динднс, это безусловно полезно если провайдер интернета  даёт динамический айпи-адрес. Да и вообще динднс в хозяйстве может пригодиться.

4. Создаётся торрент-файл для целевой папки. Треккер в него прописывать не надо (впрочем можно копнуть сюда). Добавляем веб-сиды для “раздающих”.

5. Торрент-файл отправляем (по почте) получателю и подкладываем в мю-торрент, перехешируем и запускаем.

6. На входящем канале получатель также ставит мю-торренту и добавляет торрент файл. Сразу всё может и не зафырчит, следует вручную добавить раздающего на закладке Пиры. Требуется указать его в виде ip-адрес:порт (см пункты 2 и 3).

7. Затем с файлами и торрент-файлом перемещаемся к домашней точке раздачи. Пробегаемся по пунктам 1-2-3-5.

Результат – достигается суммарная исходящая скорость 50к+100к, нет особой возни с балансировкой, томами и файлами, контроль целостности достигается микроблоками и легко исправляется. Архивация не требуется в целях контроля целостности, только для сжатия данных. Папка с тучей файлов или один большой файл – также особого значения не имеет.

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

Сумма прописью. Нюанс

Есть совершенно несекретный функциональный модуль SPELL_AMOUNT, который позволяет получить необходимую для печатных вещей “сумму прописью”:

Пример вызова SPELL_AMOUNT

Методом проб было найдено, что для рублей пишутся слова “ХХ копеек”, хотя для остальных валют подобного эффекта не наблюдается.

(далее…)

Мелкие трюки в кассовой книге

Стандартная кассовая книга хоть и хороша собой, однако имеет ряд нюансов:

  1. Нет возможности управлять нумерацией создаваемых документов
  2. Нет возможности заместить печатную форму
  3. Имеется ненужная пользователю вкладка “Поступления чеков”
  4. Нет возможности менять контрольный счёт контрагента на альтернативный

(далее…)

Кэширование данных отчёта – тривиальная реализация

Предположим, что у нас есть отчёт в виде Z-разработки.

Кэширование данных отчёта нам может пригодиться в нескольких случаях, например:

  1. Отчёт часто требуется, но долго выполняется; при этом от результатов особой оперативности не требуется;
  2. Результат выполнения данного отчёта требуется отразить в другом отчёте (сводном); но при этом рассчитывать в сводном отчёте множество под-отчётов не хочется;

Для начала допустим, что:

  • отчёт имеет простые и стабильные параметры;
  • процедуры сбора и показа данных строго разделены;
  • данные отчёта находятся в одной внутренней таблице.

(далее…)

Телевизор — это …

Переслушиваю читанный давно роман. Пелевин. Чапаев и Пустота.

– А вот скажите, – заговорил он, – чего хочет человек, вернувшийся домой из опасного путешествия, после того как утолит жажду и голод?
– Не знаю, – сказал Сердюк. – У нас обычно телевизор включают.
– Не-е-е, – сказал Кавабата. – Мы в Японии производим лучшие телевизоры в мире, но это не мешает нам осознавать, что телевизор – это просто маленькое прозрачное окошко в трубе духовного мусоропровода. Я не имел в виду тех несчастных, которые всю жизнь загипнотизированно смотрят на бесконечный поток помоев, ощущая себя живыми только тогда, когда узнают банку от знакомых консервов. Речь идет о тех людях, которые достойны упоминания в нашей беседе.

   – Так как же ты, Петька, дошел до такой жизни, что спрашиваешь меня, своего боевого командира, всегда ли то, что происходит у тебя в голове, – это то, что происходит у тебя в голове, или не всегда?

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

 

Александр Скляр в качестве чтеца — силён, бесспорно.

Удивительные алгоритмы

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

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

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

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

Реально работает!

Результат алгоритма Маркова

Пример кода выложил отдельно в виде SLNK.