Monday, April 28, 2025

HR guides

Информация для основы:

HR305 - Конфигурация основных данных
HR505 - Оргменеджмент

Не обязательно но желательно:
HR506 - Оргменеджмент дополнительные аспекты
HR940 - Полномочия в HR

Если писать будешь для зарплаты и/или оценки времени:
HR400 - Расчет з/п
HR310 - Оценка времени

Ну и собственно программирование в HR (желательно в последнюю очередь)
HR350 - Программирование в HR

Wednesday, April 23, 2025

Saturday, April 19, 2025

Thursday, April 17, 2025

Where hr_abs_att_times_at_entry

 FH5AHF40

FH5AHF75
LEHA22PBSF01
LHRTIM00BAPIABSATTF01
LHRTIM00_BLPATTABSADAPTERU01
LPTACF01
LRHEIU33
MP042440
MP057340
MP057341
MP2NNN40
MPPERS01
PCCVRVE0
PCMSTNZ1
RPCABS99_CALC_1DAY_ABSENCE_WIT
RPCLLDQ0_PBS
RPCUEMJ1

Saturday, April 12, 2025

validation of screen's fields

 if u want to do some validation in PBO use.

At selection-screen output event

if u want to do some validation in PAI use.

At selection screen-event.



CHAIN and ENDCHAIN in Module Pool in ABAP: In ABAP module pool programming, CHAIN and ENDCHAIN are used to group multiple input fields for validation or modification together in screen processing logic. This ensures that the specified fields are processed as a unit, which is helpful for scenarios where changes in one field impact others or when validating multiple fields together. Key Points 1. CHAIN: - Groups multiple screen fields. - Executes the specified module for all fields in the chain. 2. ENDCHAIN: - Marks the end of the CHAIN block. 3. Where Used: - Field Validation: Validate several fields simultaneously. - Error Handling: Highlight errors for all grouped fields at once. Syntax : CHAIN.  FIELD <field1>.  FIELD <field2>.  MODULE <module_name>. ENDCHAIN. 1. FIELD: Lists the fields to be grouped. 2. MODULE: Specifies the module to handle these fields (e.g., for validation or updates). Simple Example :- Scenario: Validating Two Fields (MATNR and WERKS) Screen Fields: - MATNR (Material Number) - WERKS (Plant) Requirement: - Validate that both fields are not empty. - Show an error if either field is blank. CHAIN.  FIELD matnr.  FIELD werks.  MODULE validate_fields. ENDCHAIN. MODULE validate_fields INPUT.  IF matnr IS INITIAL.   MESSAGE 'Material number is required' TYPE 'E' DISPLAY LIKE 'I'.  ENDIF.     IF werks IS INITIAL.   MESSAGE 'Plant is required' TYPE 'E' DISPLAY LIKE 'I'.  ENDIF. ENDMODULE. How It Works 1. When the user presses Enter or triggers an event (e.g., a button click): - The system checks the fields listed in the CHAIN block. - If either MATNR or WERKS is modified, the validate_fields module runs. 2. If any validation fails (e.g., MATNR is blank), the system: - Displays the error message. - Keeps the cursor on the problematic field. Think of CHAIN as a rule applied to a group of input boxes on screen. Instead of validating each box one by one, you define a rule for the whole group, making the logic cleaner and more efficient.

good interactive template

 REPORT ZSAPN_INTERACTIVE_REPORT LINE-COUNT 33(3) NO STANDARD PAGE HEADING. "leave some pages for footer and hide standard heading

DATA : IT_MARA TYPE TABLE OF MARA, "mara internal table
       WA_MARA TYPE MARA, "mara work area
       IT_MARC TYPE TABLE OF MARC, "marc internal table
       WA_MARC TYPE MARC. "marc work area
AT SELECTION-SCREEN. "at selection screen event to validate inputs
  PERFORM VALIDATE_INPUT. "Subroutine to validate input

START-OF-SELECTION.
  PERFORM GET_MATERIAL_DATA.
  PERFORM DISPLAY_MATERIALS.

TOP-OF-PAGE.
  PERFORM DISPLAY_HEADER.

END-OF-PAGE.
  PERFORM DISPLAY_FOOTER.

AT LINE-SELECTION.
  PERFORM GET_PLANT_DATA.
  PERFORM DISPLAY_PLANT_DATA.

TOP-OF-PAGE DURING LINE-SELECTION.
  PERFORM DISPLAY_LIST_HEADER.
FORM VALIDATE_INPUT .
  IF P_MTART IS INITIAL.
    MESSAGE 'Please enter input' TYPE 'E'.
  ENDIF.
ENDFORM.                    " VALIDATE_INPUT

FORM GET_MATERIAL_DATA .
  SELECT * FROM MARA
    INTO TABLE IT_MARA
    UP TO 50 ROWS
    WHERE MTART = P_MTART .
ENDFORM.                    " GET_MATERIAL_DATA
FORM DISPLAY_MATERIALS .
  LOOP AT IT_MARA INTO WA_MARA.
    WRITE:/ WA_MARA-MATNR, WA_MARA-MTART, WA_MARA-MATKL, WA_MARA-MBRSH.
    HIDE WA_MARA. "store line details in HIDE area
  ENDLOOP.
ENDFORM.                    " DISPLAY_MATERIALS
FORM DISPLAY_HEADER .
WRITE : 'Material Basic Details' COLOR 5.
ENDFORM.                    " DISPLAY_HEADER

FORM DISPLAY_FOOTER .
  WRITE: 'Report Generated at:', SY-DATUM COLOR 1.
ENDFORM.                    " DISPLAY_FOOTER
FORM GET_PLANT_DATA .
  SELECT * FROM MARC
    INTO TABLE IT_MARC
    WHERE MATNR = WA_MARA-MATNR.
ENDFORM.                    " GET_PLANT_DATA
FORM DISPLAY_PLANT_DATA .
  LOOP AT IT_MARC INTO WA_MARC.
WRITE :/ WA_MARC-MATNR, WA_MARC-WERKS.
  ENDLOOP.
ENDFORM.                    " DISPLAY_PLANT_DATA

FORM DISPLAY_LIST_HEADER .
  WRITE: 'List of Plants for material:', WA_MARA-MATNR COLOR 6.
ENDFORM.                    " DISPLAY_LIST_HEADER

check valid date

 https://sapcodes.com/2016/11/30/fm-to-check-sap-internal-format-date-is-valid-or-invalid/

FROM SAPCODES : REPORT WITH TOP-OF -PAGE & END-OF-PAGE EVENTS*

 


REPORT  ZREP_001  no standard page heading line-count 20(2).

data : it_flight type table of sflight,

       wa_flight type sflight.

select-options : s_carrid for wa_flight-carrid.

*select-options : s_carrid for wa_flight-carrid no-extension.

* select-options : s_carrid for wa_flight-carrid no intervals.

initialization.

s_carrid-low = ‘AA’.

s_carrid-high = ‘ZZ’.

append s_carrid.

start-of-selection.

select * from sflight into table it_flight where carrid in s_carrid.

end-of-selection.

loop at it_flight into wa_flight.

write : /1 wa_flight-carrid,

          10 wa_flight-connid,

          30  wa_flight-fldate,

          50 wa_flight-price left-justified.

endloop.

top-of-page.

write : ‘Carrid’, 10 ‘connid’, 30 ‘flight date’ , 50 ‘ticket price’..

uline.

end-of-page.

write : ‘jet airline flight details for the month december’.

Monday, April 7, 2025

Not good example of HR_ABS_ATT_TIMES_AT_ENTRY

 

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

https://ysychov.wordpress.com/2019/02/17/hr_abs_att_times_at_entry/

*&---------------------------------------------------------------------*
*& Report ZYS_TIMES
* Не все параметры переданы внутрь
* Функции, поэтому sy-subrc=3,
* Error occured.
Передавать все (смотр. интерфейс
функционального модуля в Построителе
Функций).
*&---------------------------------------------------------------------*
*& Расчет отсутствия(ИТ 2001)/присутствия(ИТ 2002) сотрудника
*&---------------------------------------------------------------------*
REPORT zys_times.
 
DATA: l_abwtg TYPE abwtg,
      l_kaltg TYPE kaltg,
      l_beguz TYPE beguz,
      l_enduz TYPE enduz,
      l_vtken LIKE p2001-vtken,
      l_stdaz LIKE p2001-stdaz,
      l_abrtg LIKE p2001-abrtg,
      l_abrst LIKE p2001-abrst,
 
      lt_0000 TYPE TABLE OF p0000,
      lt_0001 TYPE TABLE OF p0001,
      lt_0002 TYPE TABLE OF p0002,
      lt_0007 TYPE TABLE OF p0007,
      lt_2001 TYPE TABLE OF p2001,
      lt_2002 TYPE TABLE OF p2002,
      lt_2003 TYPE TABLE OF p2003,
      lt_pws  TYPE TABLE OF ptpsp,
      lt_tpd  TYPE TABLE OF ptm_times_per_day.
 
PARAMETERS: p_pernr TYPE persno OBLIGATORY,
            p_awart TYPE awart OBLIGATORY,
            p_begda TYPE begda OBLIGATORY,
            p_endda TYPE endda OBLIGATORY.
 
PERFORM calc.
 
WRITE: / l_kaltg, ' - календарные дни'.
WRITE: / l_abwtg, ' - рабочие дни'.
WRITE: / l_abrst, ' - рабочие часы'.
WRITE: / l_abrtg, ' - дни лимита'.
 
FORM calc.
 
  SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_0000
  FROM pa0000
  WHERE pernr = p_pernr.
 
  SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_0001
  FROM pa0001
  WHERE pernr = p_pernr.
 
  SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_0007
  FROM pa0007
  WHERE pernr = p_pernr.
 
  CALL FUNCTION 'HR_ABS_ATT_TIMES_AT_ENTRY'
    EXPORTING
      pernr             = p_pernr
      awart             = p_awart
      begda             = p_begda
      endda             = p_endda
    IMPORTING
      abwtg             = l_abwtg
      abrtg             = l_abrtg
      abrst             = l_abrst
      kaltg             = l_kaltg
    TABLES
      m0000             = lt_0000
      m0001             = lt_0001
      m0002             = lt_0002
      m0007             = lt_0007
      m2001             = lt_2001
      m2002             = lt_2002
      m2003             = lt_2003
      pws               = lt_pws "расшифровка графика рабочего времени за каждый день
      times_per_day     = lt_tpd "расшифровка всех временных данных за каждый день
    CHANGING
      beguz             = l_beguz
      enduz             = l_enduz
      vtken             = l_vtken
      stdaz             = l_stdaz
*     BREAKS            =
*     NXDFL             =
*     START_BEF_ZERO    =
*     CV_ABSATT_NEXT_DAY = ABAP_FALSE
    EXCEPTIONS
      it0001_missing    = 1
      customizing_error = 2
      error_occurred    = 3
      end_before_begin  = 4
      OTHERS            = 5.
 
ENDFORM.

Dbf не чіпаємо, маніпуляції тільки з itab

 1. Dbf tab містить ВСІ 67-68 полів,  Ztab - тільки ті 25-45 полів що використовуються в продовженні ресурсів, їх і копіюємо Dbf не редагува...