Мои шаловливые ручки зачесались и написали маленькую программку на ABAP. Программка оказалась кривенькой, но с интересным результатом. Я выгрузил все адреса проживания сотрудников и отобразил их на Google Maps. Ниже лишь пример из тестовой системы. 

Для этого мне пришлось сходить на сайт гугла, получить там уникальный ключик API (https://cloud.google.com/maps-platform/#get-started) , чтобы заплатить денежки за такие шикарные запросы.

Имея такой способ визуализации под рукой, а также накладывая слоями сверху социальные бонусы, которые некоторые компании могут предложить, можно получить интересные данные для размышления отделам C&B. Например, как далеко от работы проживают работники? Если офис перенести ближе, то не будет ли это продуктивнее для компании? 

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

Идей много. Ниже моя кривенькая реализация. На эффективность кода не смотрим, это Proof of Concept за два часа работы. Помните, что каждое обращение стоит денег. Разумнее кэшировать такие запросы, чтобы не вылететь в трубу вместе со списком адресов 🙂 

*&---------------------------------------------------------------------*
*& Report ZHR_GOOGLE_MAPS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZHR_GOOGLE_MAPS.

infotypes 0006.
tables: pernr.

data:
  lt_p0006 type table of p0006,
  ls_p0006 type p0006,
  ls_addr type string.

DATA: SIZE type I.

types: BEGIN OF wa_doc,
    line(225), "this will contain the html
END OF wa_doc.

data: CONTENT_TABLE TYPE TABLE OF wa_doc.

define al.
  append &1 && CL_ABAP_CHAR_UTILITIES=>cr_lf to content_table.
  size = size + strlen( &1 ) + strlen( CL_ABAP_CHAR_UTILITIES=>cr_lf ).
end-OF-DEFINITION.

GET PERNR.
  PROVIDE * FROM P0006 BETWEEN PN-BEGDA AND PN-ENDDA.
  append p0006 to lt_p0006.
  ENDPROVIDE.

END-OF-SELECTION.

DESCRIBE TABLE lt_p0006 LINES size.

if size = 0.
  write: 'No addresses'.
  exit.
endif.

perform build_html.

CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
*   BIN_FILESIZE                    =
    FILENAME                        = 'c:\temp\gm.html'
  TABLES
    DATA_TAB                        = content_table

CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE
  EXPORTING
    DOCUMENT               = 'c:\temp\gm.html'

form build_html.
al '<!DOCTYPE html> '.
al '<html> ' .
al '<head> '.
al '  <meta charset="utf-8">  ' .
al '  <meta name="viewport" content="width=device-width, initial-scale=1">'.
al ' <title>Google Maps APIs</title>  '.
al '  <style>  '.
al '  html,  '.
al 'body {  '.
al '  height: 100%;  '.
al '  margin: 0;  '.
al '  padding: 0;  '.
al '}  ' .
al '#map {  ' .
al '  height: 100%;  '.
al '}  '.
al '  </style>  '.
al '</head>  '.
al   '<body>  '.
al   '  <div id="map"></div>  '.
al  '   <script>  '.
al  '      var map;  '.
al  '	  var addresses;  '.
al  '	  var geocoder;  '.
al  '      function initMap() { '.
al '        map = new google.maps.Map(document.getElementById("map"), { '.
al  '          zoom: 1, '.
al  '          center: new google.maps.LatLng(0, 0), '.
al  '          mapTypeId: "terrain" '.
al  '        }); '.
al  '   geocoder = new google.maps.Geocoder(); '.

  loop at lt_p0006 into ls_p0006.
    CONCATENATE 'codeAddress("' ls_p0006-STRAS ', ' ls_p0006-ORT01 ', ' ls_p0006-STATE '.' ls_p0006-PSTLZ
    '");' into ls_addr.
    al ls_addr.
  endloop.

al  '	} '.
al  '	  function codeAddress( address ) { '.
al  '   geocoder.geocode( { "address": address}, function(results, status) { '.
al  '     if (status == google.maps.GeocoderStatus.OK) { '.
al  '     console.log(address + " = " + results[0].geometry.location); '.
al  '     var marker = new google.maps.Marker({ '.
al  '       map: map, '.
al  '       position: results[0].geometry.location '.
al  '     }); '.
al  '     } else { '.
al  '     console.log("Error: " + status); '.
al  '     } '.
al  '   }); '.
al  '	  } '.
al  '   </script> '.
al  '	<script async defer '.
al  '         src="https://maps.googleapis.com/maps/api/js?key=ТУТ_ДОЛЖЕН_БЫТЬ_ВАШ_КЛЮЧИК&callback=initMap"></script> '.
al  '</body> '.
al  '</html>'.
endform.