Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗВІТ.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
323 Кб
Скачать
☆

Технічна частина

Використовуючи АВАР-редактор (рис. 1), розрабити програму, я виводить приватні відпустки до 6 років, для співробітників підприємства «Мотор Січ».

Рис. 1

Рис. 2 Головна форма програми

Рис. 3 Приклад використання програми

Рис. 4 Результат виконання програми

Рис. 5 Результат виконання програми з помилками

В програмі для підприємства «Мотор Січ» я використала повну інформацію про співробітників, але для збереження секретності даних у своєму звіті я використаю лише ініціали.

Для виконання роботи я використала такі таблиці (Рис. 6.1- 6.4):

  • РА0000 – статус зайнятості співробітника (у працуючих – 3, не працуючих - 0)

  • РА0001 – організаційне присвоєння (цех, посада, умови праці, все що стосується робочого місця)

  • РА0002 – персональні дані

  • РА0218 – накази (01 – прийняття на роботу, 10 – звільнення з роботи, 18 – приватна відпустка)

  • РА2001 – причини відсутності (відпустка, лікарняний лист, і тд., )

Рис. 6.1

Рис. 6.2

Рис. 6.3

Рис. 6.4

Код програми:

REPORT ZPHR1292_6 NO STANDARD PAGE HEADING LINE-SIZE 150.

* Личные отпуска до 6 лет.

TABLES: PA0001, PA0002, PA0298, PA2001.

DATA: BEGIN OF TAB_1 OCCURS 0,

PERNR LIKE PA0001-PERNR,

BEGDA LIKE PA0001-BEGDA,

ENDDA LIKE PA0001-ENDDA,

DAT_1 LIKE PA0001-ENDDA,

WERKS LIKE PA0001-WERKS,

ORDDT LIKE PA0298-ORDDT,

ORDNU LIKE PA0298-ORDNU,

NAME2 LIKE PA0002-NAME2,

INITS LIKE PA0002-INITS,

* rufnm like pa0002-rufnm,

* cname like pa0002-cname,

PERID LIKE PA0002-PERID,

PRIZN TYPE I,

DNI TYPE I,

TEKST(25) TYPE C,

END OF TAB_1.

DATA TAB_2001 LIKE PA2001 OCCURS 1000 WITH HEADER LINE.

* Входные параметры

SELECTION-SCREEN BEGIN OF BLOCK FRM1 WITH FRAME TITLE TEXT-E01.

SELECT-OPTIONS DAT FOR PA0001-BEGDA OBLIGATORY.

SELECT-OPTIONS CEX FOR PA0001-WERKS OBLIGATORY.

* parameters cex like pa0001-werks obligatory.

SELECTION-SCREEN END OF BLOCK FRM1.

SELECTION-SCREEN BEGIN OF BLOCK 6 WITH FRAME TITLE TEXT-010.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 25.

PARAMETERS PECH_1 RADIOBUTTON GROUP R1.

SELECTION-SCREEN: COMMENT 27(44) TEXT-011.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN POSITION 25.

PARAMETERS PECH_2 RADIOBUTTON GROUP R1.

SELECTION-SCREEN: COMMENT 27(54) TEXT-012.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK 6.

IF DAT-HIGH EQ 0.

DAT-HIGH = DAT-LOW.

ENDIF.

IF CEX-HIGH EQ 0.

CEX-HIGH = CEX-LOW.

ENDIF.

************************************************************************

* 2001-отсутствия(0121-л/о по уходу до 6 лет)

SELECT * FROM PA2001 INTO TABLE TAB_2001

WHERE SUBTY = '0121'

* and pernr = '01329377'

AND SPRPS = ' '

AND ENDDA >= DAT-LOW

AND BEGDA <= DAT-HIGH.

LOOP AT TAB_2001.

TAB_1-PERNR = TAB_2001-PERNR.

TAB_1-BEGDA = TAB_2001-BEGDA.

TAB_1-ENDDA = TAB_2001-ENDDA.

TAB_1-DNI = TAB_1-ENDDA - TAB_1-BEGDA.

TAB_1-PRIZN = 0.

* Ф.И.О.

SELECT SINGLE * FROM PA0002 WHERE PERNR = TAB_1-PERNR

AND ENDDA = '99991231'.

IF SY-SUBRC = 0.

TAB_1-NAME2 = PA0002-NAME2.

TAB_1-INITS = PA0002-INITS.

* tab_1-rufnm = pa0002-rufnm.

* tab_1-cname = pa0002-cname.

TAB_1-PERID = PA0002-PERID.

ELSE.

TAB_1-NAME2 = ' '.

TAB_1-INITS = ' '.

* tab_1-rufnm = ' '.

* tab_1-cname = ' '.

TAB_1-PERID = ' '.

ENDIF.

* цех

SELECT SINGLE * FROM PA0001 WHERE PERNR = TAB_1-PERNR

AND BEGDA <= DAT-LOW

AND ENDDA >= DAT-LOW.

IF SY-SUBRC = 0.

TAB_1-WERKS = PA0001-WERKS.

ENDIF.

* поиск приказа о предоставлении л/отпуска до 6 лет

TAB_1-PRIZN = 0.

TAB_1-TEKST = ' '.

SELECT * FROM PA0298

WHERE PERNR = TAB_1-PERNR

AND MASSN = '18'

AND SPRPS = ' '

AND BEGDA >= TAB_1-BEGDA

AND ENDDA <= TAB_1-ENDDA.

IF SY-SUBRC = 0.

TAB_1-PRIZN = TAB_1-PRIZN + 1.

TAB_1-ORDNU = PA0298-ORDNU.

TAB_1-ORDDT = PA0298-ORDDT.

IF PA0298-BEGDA <> PA0298-ENDDA.

TAB_1-PRIZN = 9.

TAB_1-TEKST = 'Разные даты приказа. '.

ENDIF.

APPEND TAB_1.

ENDIF.

ENDSELECT.

IF SY-SUBRC <> 0.

TAB_1-ORDNU = ' '.

TAB_1-ORDDT = ' '.

TAB_1-PRIZN = 9.

TAB_1-TEKST = 'Нет приказа (до 6 лет)'.

APPEND TAB_1.

ENDIF.

IF TAB_1-PRIZN >= 2 AND TAB_1-PRIZN < 9.

DELETE TAB_1 WHERE PERNR = TAB_1-PERNR.

TAB_1-ORDNU = '??? '.

TAB_1-ORDDT = ' '.

TAB_1-TEKST = 'Несколько приказов. '.

APPEND TAB_1.

ENDIF.

*****

IF TAB_1-BEGDA < DAT-LOW.

TAB_1-BEGDA = DAT-LOW.

TAB_1-DAT_1 = DAT-LOW.

ENDIF.

IF TAB_1-ENDDA > DAT-HIGH.

TAB_1-ENDDA = DAT-HIGH.

ENDIF.

ENDLOOP.

***

*--------- Проверка полномочий -----------------

PERFORM PRAVA.

***

* вывод данных

SORT TAB_1 BY WERKS PRIZN PERNR BEGDA.

READ TABLE TAB_1 INDEX 1.

ULINE (140).

WRITE:/ 'Цех |Таб.ном.|Фамилия |И.О.|'

NO-GAP,

'Приказ, дата приказа |Даты личного отпуска | Текст ошибки '

NO-GAP,

' |Дни '.

ULINE (140).

LOOP AT TAB_1.

IF TAB_1-WERKS IN CEX.

IF PECH_1 = 'X' OR ( PECH_2 = 'X' AND TAB_1-PRIZN <> 1 ).

IF TAB_1-DNI > 185.

WRITE:/ TAB_1-WERKS,

TAB_1-PERNR,

TAB_1-NAME2(15),

TAB_1-INITS(4),

* tab_1-rufnm(10),

* tab_1-cname(15),

TAB_1-ORDNU(10),

'от',

TAB_1-ORDDT,

TAB_1-BEGDA,

TAB_1-ENDDA,

TAB_1-TEKST,

(3)TAB_1-DNI COLOR 1.

ELSE.

WRITE:/ TAB_1-WERKS,

TAB_1-PERNR,

TAB_1-NAME2(15),

TAB_1-INITS(4),

* tab_1-rufnm(10),

* tab_1-cname(15),

TAB_1-ORDNU(10),

'от',

TAB_1-ORDDT,

TAB_1-BEGDA,

TAB_1-ENDDA,

TAB_1-TEKST,

(3)TAB_1-DNI.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

************************************************************************

FORM PRAVA.

DATA: CHECK(3).

*--------- Проверка полномочий -----------------

AUTHORITY-CHECK OBJECT 'P_ORGIN'

ID 'INFTY' DUMMY

ID 'SUBTY' DUMMY

ID 'AUTHC' DUMMY

ID 'PERSA' FIELD '*'

ID 'PERSG' DUMMY

ID 'PERSK' DUMMY

ID 'VDSK1' DUMMY.

IF SY-SUBRC = 0.

CHECK = 'ALL'.

ENDIF.

*--------- Проверка полномочий -----------------

*--- Проверка записей на соответствие полномочий -----

IF CHECK <> 'ALL'.

LOOP AT TAB_1.

AUTHORITY-CHECK OBJECT 'P_ORGIN'

ID 'INFTY' DUMMY

ID 'SUBTY' DUMMY

ID 'AUTHC' DUMMY

ID 'PERSA' FIELD TAB_1-WERKS

ID 'PERSG' DUMMY

ID 'PERSK' DUMMY

ID 'VDSK1' DUMMY.

IF SY-SUBRC <> 0.

DELETE TAB_1.

ENDIF.

ENDLOOP.

ENDIF.

ENDFORM.

************************************************************************