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

В пяти/десятиминутной доступности у меня примерно десять точек, где можно взять стаканчик.

И вот эти все кофейни, каждый во что горазд, придумывают свои маркетинговые ухищрения. У кого-то каждая шестая или седьмая чашка кофе бесплатно, у кого-то считаются только “на вынос”, у кого-то по номеру телефона, у кого-то по последним четырем цифрам, у кого-то надо печати на карту ставить, кто-то держит карточки у себя под стойкой и ставит галочки. У одной сети кофеен в разных точках отдельные базы и счётчики, поэтому бесплатные чашки не переносятся между точками. У кого-то скидка за инстаграм, у кого-то скидка за “свою” чашку, а у кое-кого за одноразовый стакан наоборот добавляют к сумме счёта. Ещё у одной по достижении 60 чашек присваивается другой уровень лояльности, хотя сильно дешевле не становится, на самом-то деле.

Вот новая кофейня решила выделиться, у них каждая пятая чашка бесплатно. Ну ОК.

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

Так вот, причём тут Microsoft казалось бы…

У меня есть подписка Microsoft 365 для семьи, в Казахстане сейчас стоит 38 990 тенге, пролонгируется автоматически и карта привязана. Срок подходит к концу. Ну думаю, что дороговато, пойду в интернете куплю подешевле. Захожу в учётную запись и там есть кнопка “Выключить периодическое выставление счетов”. Ну думаю отключу, чего уж там.

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

Ладно, думаю, уговорил, не буду отключать. И два месяца лишних получу к купленным двенадцати, и всё равно чуть позже куплю в интернете процентов на 20-25 дешевле. Вижу цену 29 990 тенге в одном уважаемом местном магазине.

PS.

У них же ещё есть какая-то программа Microsoft Rewards, можно зарабатывать бонусы и тратить. И можно даже поднять уровень своей лояльности:

To reach Level 2 status in Microsoft Rewards, you need to earn 500 points in a single month. Once you reach Level 2, you can earn up to 5,000 points per month. Level 2 members can earn five times more points on Bing.com, save up to 10% on rewards from Microsoft products and services, and get access to exclusive offers. To maintain your Level 2 status, you need to earn at least 500 points per month. As a Level 2 member, you can earn 10 points per dollar spent, plus bonus points, when you make qualifying digital purchases at the Microsoft Store.

ZDOC_3292

chatGPT

Ну допустим, я показал ему текст некоторой программы:

REPORT y_bc001_text_search.

TABLES: tadir.

SELECT-OPTIONS: s_devc FOR tadir-devclass DEFAULT 'Z*' OPTION CP.
SELECT-OPTIONS: s_objec FOR tadir-object.
SELECT-OPTIONS: s_objnm FOR tadir-obj_name DEFAULT 'Z*' OPTION CP.
PARAMETERS: p_text TYPE string.

START-OF-SELECTION.

  SELECT
    tadir~pgmid,
    tadir~object,
    tadir~obj_name,
    trdir~subc,
    tadir~devclass
    FROM tadir
    LEFT OUTER JOIN trdir ON tadir~object = 'PROG' AND tadir~obj_name = trdir~name
    INTO TABLE @DATA(lt_objects)
   WHERE tadir~devclass IN @s_devc
     AND tadir~object IN @s_objec
     AND tadir~obj_name IN @s_objnm
      AND ( tadir~object = 'PROG' OR tadir~object = 'FUGR' OR tadir~object = 'CLAS' ).

  LOOP AT lt_objects ASSIGNING FIELD-SYMBOL(<object>).
    IF <object>-object = 'PROG'  AND ( <object>-subc = '1' OR <object>-subc = 'M' ).

      DATA: lt_tpool TYPE STANDARD TABLE OF textpool WITH DEFAULT KEY.
      CALL FUNCTION 'RS_TEXTPOOL_READ'
        EXPORTING
          objectname           = <object>-obj_name
          action               = 'READ'
*         AUTHORITY_CHECK      = ' '
          language             = sy-langu
        TABLES
          tpool                = lt_tpool
        EXCEPTIONS
          object_not_found     = 1
          permission_failure   = 2
          invalid_program_type = 3
          error_occured        = 4
          action_cancelled     = 5
          OTHERS               = 6.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      LOOP AT lt_tpool ASSIGNING FIELD-SYMBOL(<tpool>).
        IF <tpool>-id = 'I' AND <tpool>-entry CP p_text.
          WRITE: <object>-obj_name, <tpool>-key, <tpool>-entry.
        ENDIF.
      ENDLOOP.
    ELSEIF <object>-object = 'FUGR'.

      DATA: lv_fugr TYPE rs38m-programm.
      lv_fugr = 'SAPL' && <object>-obj_name.

      CALL FUNCTION 'RS_TEXTPOOL_READ'
        EXPORTING
          objectname           = lv_fugr
          action               = 'READ'
*         AUTHORITY_CHECK      = ' '
          language             = sy-langu
        TABLES
          tpool                = lt_tpool
        EXCEPTIONS
          object_not_found     = 1
          permission_failure   = 2
          invalid_program_type = 3
          error_occured        = 4
          action_cancelled     = 5
          OTHERS               = 6.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      LOOP AT lt_tpool ASSIGNING <tpool>.
        IF <tpool>-id = 'I' AND <tpool>-entry CP p_text.
          WRITE: <object>-obj_name, <tpool>-key, <tpool>-entry.
        ENDIF.
      ENDLOOP.

    ELSEIF <object>-object = 'CLAS'.

      DATA: lv_clas TYPE rs38m-programm.
      lv_clas = <object>-obj_name.

      DATA(lv_eq_count) = 30 - strlen( lv_clas ).
      DO lv_eq_count TIMES.
        lv_clas = lv_clas && '='.
      ENDDO.
      lv_clas = lv_clas && 'CP'.

      CALL FUNCTION 'RS_TEXTPOOL_READ'
        EXPORTING
          objectname           = lv_clas
          action               = 'READ'
*         AUTHORITY_CHECK      = ' '
          language             = sy-langu
        TABLES
          tpool                = lt_tpool
        EXCEPTIONS
          object_not_found     = 1
          permission_failure   = 2
          invalid_program_type = 3
          error_occured        = 4
          action_cancelled     = 5
          OTHERS               = 6.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      LOOP AT lt_tpool ASSIGNING <tpool>.
        IF <tpool>-id = 'I' AND <tpool>-entry CP p_text.
          WRITE: <object>-obj_name, <tpool>-key, <tpool>-entry.
        ENDIF.
      ENDLOOP.
    ENDIF.

  ENDLOOP.

END-OF-SELECTION.

  WRITE: / 'Search completed:', p_text.

Так вот, сервис может пояснить за код, лучше чем я:

(more…)