ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ — Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΡΠ°ΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΡΡΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΡ ΡΠ²ΡΠ·Π΅ΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² Π½Π° Π²ΡΠ΅Ρ ΡΡΠΎΠ²Π½ΡΡ . ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π΄Π΅ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° ΠΠ’ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΈ ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ°Π» ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π΅-ΡΠ°ΠΊΡΠΎ Π² ΠΌΠΈΡΠ΅ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠ’-ΡΠ»ΡΠΆΠ±Ρ ΠΊΠ°ΠΊ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
- Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ
- ΠΡΠ°ΡΠΊΠΎΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ
- ΠΠΎΠ΄Π΅Π»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ
- ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ±ΠΎΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
- ΠΠΈΡΡΠΈΠ½Π³ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
- ΠΠ»ΠΎΡΡΠ°ΡΠΈΠΉ
- ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
- Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ (ΠΠ’), ΠΌΠ½ΠΎΠ³ΠΎ. Π§Π°ΡΡΡ ΠΈΠ· Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΠ’. ΠΠ°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡΡ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΡΠΎΠΊ ΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ Π±ΡΠ΄ΠΆΠ΅ΡΠΎΠ². ΠΠΎ Π΄Π°ΠΆΠ΅ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΠ’, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΡΠΎΡΠΌΠΈΡΡΡΡ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π±ΠΎΡΡ ΠΠ’:
Β· Π ΠΊΠΎΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ?
Β· Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π΅ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ ΠΠ’ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΌΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ?
Β· ΠΠ»Π°Π½Ρ ΡΡΠ΅Π±ΡΡΡ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΠ³Π΄Π° ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ?
Β· ΠΡΠ΄Π° ΡΡ ΠΎΠ΄ΡΡ ΡΠ΅ΡΡΡΡΡ, Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π½Π° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ? ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ?
Β· ΠΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π΄Π΅ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° ΠΠ’ Π² ΠΏΡΠ΅Π΄Π΄Π²Π΅ΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ?
Π ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ — Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΡΠ°ΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΡΡΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΡ ΡΠ²ΡΠ·Π΅ΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² Π½Π° Π²ΡΠ΅Ρ ΡΡΠΎΠ²Π½ΡΡ . ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π΄Π΅ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° ΠΠ’ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΈ ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΡΠ°Π» ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ Π΄Π΅-ΡΠ°ΠΊΡΠΎ Π² ΠΌΠΈΡΠ΅ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠ’-ΡΠ»ΡΠΆΠ±Ρ ΠΊΠ°ΠΊ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ Π΄Π΅ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½Π°ΡΠ΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΡ ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠΏΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ ΠΊΠ°ΠΊ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ , ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΊΡΡΠΏΠ½ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ΠΈ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π»ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΠ’ Π½Π° Π°ΡΡΡΠΎΡΡΠΈΠ½Π³ ΠΈΠ»ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΡΠΈΠ»Π°ΠΌΠΈ. ΠΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΠ’-Π΄Π΅ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ — ΡΡΠΎ Π·Π°Π΄Π°ΡΠ°, ΡΡΠ°Π²ΡΠ°Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΡΡΠΈΠΉΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ.
Π‘ ΡΠΎΡΡΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΎΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΡΠ°ΡΡΡΡ ΠΈ ΡΡΠ΅ΡΠ±, Π½Π°Π½ΠΎΡΠΈΠΌΡΠΉ Π±ΠΈΠ·Π½Π΅ΡΡ ΠΏΡΠΎΡΡΠΎΡΠΌΠΈ ΠΈ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ ΠΠ’-ΡΡΠ»ΡΠ³. ΠΡΠΎΡΠ΅ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°ΡΠ²ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΈΠ·Π²Π°Π½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΊΠΎΡΠ΅ΠΉΡΠ΅Π΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠ’-ΡΡΠ»ΡΠ³ Π½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π·Π°ΡΠ²ΠΎΠΊ, ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌ (ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ°ΠΌ), Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΈ ΡΠ΅ΠΌΠΎΠ½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΠ’-ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π°ΡΠ²ΠΊΠ°Ρ ΡΠ°ΡΡΠΎ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ ΠΊ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΡ ΡΡΠ»ΡΠ³ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡ ΡΡ Ρ ΡΡΡΠ΄Π½ΠΎΡΡΡΠΌΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠΌ ΠΠ’-ΡΡΠ»ΡΠ³ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΡΡ ΡΠ»ΡΠΆΠ±Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ — Service Desk.
ΠΠΎ Π΄Π°Π½Π½ΡΠΌ Π·Π°ΡΡΠ±Π΅ΠΆΠ½ΡΡ ΠΠ’-Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠ², 45% ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΎΠ² ΡΡΠ΅Π±ΡΡΡ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ° Π½Π° ΠΌΠ΅ΡΡΠΎ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ° Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΠΌΡΡΠ΅ΡΡΠ²Π΅, Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ ΠΊ ΡΠ΅ΡΠΈ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΠΠ ΠΈ Ρ. ΠΏ. ΠΡΠ»ΠΈ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ ΡΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΠ°, ΡΠΎ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ° ΡΠΎΠΊΡΠ°ΡΠ°ΡΡΡΡ Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ Π½Π° 25%.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ:
Π¨ΡΠ°Ρ ΠΠ’-ΡΠ»ΡΠΆΠ±Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ 30 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ
Π‘ΡΠ΅Π΄Π½ΡΡ Π·Π°ΡΠ°Π±ΠΎΡΠ½Π°Ρ ΠΏΠ»Π°ΡΠ° ΠΠ’-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ° 21 000 ΡΡΠ±Π»Π΅ΠΉ
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ΡΡ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ 1500
Π‘ΡΠ΅Π΄Π½Π΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΡΠ²ΠΎΠΊ ΠΏΠΎ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ°ΠΌ 760
Π‘ΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ, Π·Π°ΡΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠΌ Π½Π° Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ° — 4 ΡΠ°ΡΠ° Π’ΠΎΠ³Π΄Π°:
Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ 1 ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΡΠ° Π² ΠΌΠ΅ΡΡΡ: (30×21 000)/1500=420 ΡΡΠ±Π»Π΅ΠΉ ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΡΠ²ΠΎΠΊ, ΡΡΠ΅Π±ΡΡΡΠΈΡ Π²ΡΡ ΠΎΠ΄Π° Π½Π° ΠΌΠ΅ΡΡΠΎ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ°: 760×0,45=342
ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ Service Desk Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ°: 4×0,25=1 ΡΠ°Ρ ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ°ΠΌ Π·Π° ΠΌΠ΅ΡΡΡ: 342×1=342 ΡΠ°ΡΠ° Π§Π°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ° ΡΡΠΎΠΈΡ: 21 000/22/8=120 ΡΡΠ±Π»Π΅ΠΉ ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π° ΠΌΠ΅ΡΡΡ 120*342=41 040 ΡΡΠ±Π»Π΅ΠΉ, Π·Π° Π³ΠΎΠ΄ 41 040×12=492 480 ΡΡΠ±Π»Π΅ΠΉ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΡΠΎΠ΅Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΈ ΡΡΠ΅Π΄Π½Π΅ΠΉ Π·Π°ΡΠ°Π±ΠΎΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ 15 000 ΡΡΠ±Π»Π΅ΠΉ 342 ΡΠ°ΡΠ° ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ Π² ΠΌΠ΅ΡΡΡ Π½Π° ΠΏΡΠΎΡΡΠΎΡΡ Π²ΡΡΠ°ΠΆΠ°ΡΡΡΡ ΡΡΠΌΠΌΠΎΠΉ Π² (15 000/22/8)Ρ 342×12=349 773 ΡΡΠ±Π»Ρ Π² Π³ΠΎΠ΄.
Π‘ΡΠΌΠΌΠ°ΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ 842 253 ΡΡΠ±Π»Ρ Π² Π³ΠΎΠ΄ ΠΠ°Π½Π½ΡΠΉ ΡΠ°ΡΡΡΡ Π²Π΅ΡΡΠΌΠ° Π³ΡΡΠ±ΡΠΉ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ Π»ΠΈΡΡ Π·Π°ΡΠ°Π±ΠΎΡΠ½ΡΡ ΠΏΠ»Π°ΡΡ ΠΈ Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ², Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°ΡΡΠΈΡ Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΡΠΈΡΡΡ.
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ»Π½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΡΠ»ΡΠ³ (Π±Π°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ ΠΏΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌ). Π’Π°ΠΊΠΎΠ΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΎΠ² ΠΈ ΠΏΡΠΎΡΡΠΎΠ΅Π² ΠΏΠΎ ΠΈΡ Π²ΠΈΠ½Π΅. ΠΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π³Π΅Π½ΡΡΡΠ²Π° Giga Information Group Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΎΠ² Π½Π° ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π° 30−40%
ΠΡΠ°ΡΠΊΠΎΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΠΠ‘Π’ 34.601−90, Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ (ΠΠ‘), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄Π°Ρ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ. ΠΏ.), Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ , ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡ ΠΈ Π½Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΡΡ (Π΄Π°Π»Π΅Π΅ — ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ ).
Π‘ΡΠ°Π½Π΄Π°ΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΡΠ°Π΄ΠΈΠΈ ΠΈ ΡΡΠ°ΠΏΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΠ‘.
Π‘ΡΠ°Π΄ΠΈΠΈ ΠΈ ΡΡΠ°ΠΏΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΠ‘ Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΡ ΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ. Π Π°Π±ΠΎΡΡ ΠΏΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΠ‘ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΠΎ ΡΡΠ°Π΄ΠΈΡΠΌ ΠΈ ΡΡΠ°ΠΏΠ°ΠΌ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΠ‘. Π‘ΠΎΡΡΠ°Π² ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π½Π°ΡΡΠΎΡΡΠΈΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ΡΡΠ°Π΄ΠΈΡΡ ΠΈ ΡΡΠ°ΠΏΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΉ, ΡΡΠ°ΡΡΠ²ΡΡΡΠΈΡ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π²ΠΈΠ΄ΠΎΠ² ΠΠ‘.
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ:
Π¦Π΅Π»ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π·Π°ΡΠ²ΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΊΠΎΡΠ΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠ΅ΠΉ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΡΠ΅Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² (ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ²) Π³ΡΡΠΏΠΏΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ², Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΡ ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°ΡΠ²ΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΡΠΈΡΡΠ΅ΠΌΡ:
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡΡ Π·Π°ΡΠ²ΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² IT-ΠΎΡΠ΄Π΅Π», Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠΌ.
ΠΠ°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠΈΡ Π·Π°ΡΠ²ΠΊΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Ρ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² (ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ), Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ, Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ΅ΡΠ° ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°ΡΠ²ΠΎΠΊ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌΠΈ (ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°ΠΌΠΈ).
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΡ Π·Π°ΡΠ²ΠΊΠ°Ρ , ΠΈΡ ΡΡΠ°ΡΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ , Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ Π·Π°ΡΠ²ΠΊΠ°ΠΌΠΈ, Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΡΡΡΠΎΠ² ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΊΠ°ΠΊ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΈ Π²ΡΠ΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»Π° Π·Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄.
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ° ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅ΠΉ Π·Π°ΡΠ²ΠΊΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π΅Π³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ (ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°), ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΅Π³ΠΎ Π·Π°ΡΠ²ΠΊΠ° ΠΏΡΠΈΠ½ΡΡΠ° Π½Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ Π²ΡΠ΅Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡΡ Π·Π°ΡΠ²ΠΊΠΈ.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ Π²ΠΈΠ΄Π°ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ — ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌΡ, ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌΡ, ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎΠΌΡ:
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ ΠΊ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΌΡ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅ΡΠΈ (ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ, ΡΠ΅ΡΠΌΠΈΠ½Π°Π», ΠΏΠ»Π°Π½ΡΠ΅Ρ, ΠΊΠΏΠΊ, ΡΠΎΡΠΎΠ²ΡΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½). Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π²ΠΎΠ΄Π° (Π²ΡΠ±ΠΎΡ ΠΈΠ· Π³ΠΎΡΠΎΠ²ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ², ΠΏΠΎΠ΄Π±ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π²ΡΠ±ΠΎΡΠ° Π·Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΈ Ρ. Π΄.)
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»Ρ:
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ Π·Π½Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Windows, ΡΠΌΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ, Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π½Π°Π²ΡΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ Ρ ΠΠ.
Π‘ΠΎΡΡΠ°Π² ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ:
1. ΠΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ
2. ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ
3. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
4. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ:
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ, Π·Π°ΡΠ²ΠΊΠΈ, ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΡ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ
Π ΠΈΡ. 1 ΠΠΎΠ΄Π΅Π»Ρ IDEF0 ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ
Π ΠΈΡ. 2 ΠΡΠΎΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΠ ΠΡ)
ΠΠΎΠ΄Π΅Π»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ
Π ΠΈΡ. 3 ER-Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΡΠ²ΠΎΠΊ
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
ΠΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ Π½Π°ΡΡΠ½ΡΡ ΠΎΡΠ½ΠΎΠ²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½ HCI. HCI — ΡΡΠΎ Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΠ° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ Human-Computer Interaction, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ «Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°». ΠΠ° ΠΠ°ΠΏΠ°Π΄Π΅ HCI — ΡΡΠΎ ΡΠ΅Π»Π°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡ, Π΅ΠΉ ΠΎΠ±ΡΡΠ°ΡΡ Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°Ρ , Π²ΡΠ΄Π°Π²Π°Ρ Π΄ΠΈΠΏΠ»ΠΎΠΌΡ «Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡ ΠΏΠΎ HCI». ΠΠ·Π΄Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Web-ΡΠ°ΠΉΡΠΎΠ². Π Π ΠΎΡΡΠΈΠΈ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠ° Π½Π°ΡΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Π½Π°ΡΡΠΎΡΡΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΏΠΎ HCI ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΠ°ΡΡ ΠΏΠΎ ΠΏΠ°Π»ΡΡΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΊΠΈ.
ΠΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΡΠΎΡΡΠ°Π²Π½ΡΠΌΠΈ ΡΠ°ΡΡΡΠΌΠΈ HCI ΡΠ²Π»ΡΡΡΡΡ:
Β· Β· ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ (ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ)
Β· Β· ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ
Β· Β· ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (Π°Π½Π³Π». user interface, UI) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΡΠΌ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠΌ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°.
ΠΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ — ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΏΠΎΡΡΠΈ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΡ Π΅Π³ΠΎ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΌΡΡΠ»ΡΡΡ, ΠΊΠ°ΠΊΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π½Π°ΠΆΠ°ΡΡ ΠΈΠ»ΠΈ Π³Π΄Π΅ ΡΠ΅Π»ΠΊΠ½ΡΡΡ ΠΌΡΡΡΡ. Π’Π°ΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌ — ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ°ΠΊ Π±Ρ ΡΠΌΠΎΡΡΠΈΡ ΡΠΊΠ²ΠΎΠ·Ρ Π½Π΅Π³ΠΎ Π½Π° ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π» Π±Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΏΡΠΈΡΡΠ½ΠΎΠΉ, Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ΄ΡΡ ΡΠ΅ΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»Π΅Π³ΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π½ΡΠΆΠ΄, Π²Π΅Π΄Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ, Π½ΠΎ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Π½Π΅Π΅ Π³Π»Π°Π·Π°ΠΌΠΈ Π΅Π΅ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΠΈ.
ΠΠ³ΡΠΎΠΌΠ½ΡΡ ΡΠΎΠ»Ρ ΠΈΠ³ΡΠ°Π΅Ρ ΠΈΠ½ΡΡΠΈΡΠΈΡ — Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ°ΠΌ ΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅ ΠΈ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΡΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΡΠ²ΡΡΠ²ΠΎΠ²Π°ΡΡ, Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½ΡΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅ΡΡ Ρ ΡΠ΄ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΠΊΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠ΄Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΊΡΠ°ΡΠΎΡΡ ΠΈ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΠ°ΠΏΠ°Π΄Π½ΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ HCI ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ°ΠΊ ΠΈ Π² Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π½Π°ΡΠΊΠ΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊ ΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΊΠ½ΠΈΠ³Π°Ρ ΠΏΠΎ HCI, Π²ΡΠΏΡΡΠ΅Π½Π½ΡΡ Π·Π° ΡΡΠ±Π΅ΠΆΠΎΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π° ΠΈΠ½ΠΎΡΡΡΠ°Π½Π½ΡΡ Web-ΡΠ°ΠΉΡΠ°Ρ .
Π ΠΈΡ 4 Π‘Ρ Π΅ΠΌΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ±ΠΎΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ASP.NET MVC — ΡΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡ Microsoft, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΈ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΡΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ «ΠΌΠΎΠ΄Π΅Π»Ρ-ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅-ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ», Π½ΠΎΠ²Π΅ΠΉΡΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ ΠΈ ΠΏΡΠΈΠ΅ΠΌΡ Π³ΠΈΠ±ΠΊΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅ Π»ΡΡΡΠ΅Π΅ ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ASP.NET. ΠΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ASP.NET Web Forms, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΊΡΠΎΠΌΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ . ΠΠΎΠ²Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ASP.NET MVC ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ»Π° ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΄Π²ΠΈΠ³ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π²Π΅Π± — ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Microsoft. Π Π½Π΅ΠΉ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠΏΠΎΡ Π½Π° ΡΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ, ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΡΠΎΠΊΡΡΡΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π΅Π±-ΡΡΠ΅Π΄Π°.
Π’Π΅ΡΠΌΠΈΠ½ ΠΌΠΎΠ΄Π΅Π»Ρ — ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ — ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ (model — view — controller) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ° 70-Ρ Π³Π³. ΠΏΡΠΎΡΠ»ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π΅ΡΠΈΡ. ΠΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠ²ΠΈΠ»Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° Smalltalk Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Xerox, Π³Π΄Π΅ ΠΎΠ½Π° Π±ΡΠ»Π° Π·Π°Π΄ΡΠΌΠ°Π½Π° ΠΊΠ°ΠΊ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ· ΡΠ°Π½Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΡΠ°Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ MVC Π±ΡΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΠΌΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΌΠΈ Π΄Π»Ρ Smalltalk, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΡΠΊΡΠ°Π½Ρ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ, ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΄Π»Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ [5, Ρ. 63].
ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ MVC ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MVC Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π½Π° ΡΡΠΈ ΡΠ°ΡΡΠΈ (ΡΠΈΡΡΠ½ΠΎΠΊ 5).
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ Π·Π°ΡΠ²ΠΊΠ°
Π ΠΈΡΡΠ½ΠΎΠΊ 5 — Π‘ΡΡΡΠΊΡΡΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π° MVC
ΠΠΎΠ΄Π΅Π»ΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ; ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π±ΠΈΠ·Π½Π΅Ρ — Π΄Π°Π½Π½ΡΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π MVC ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° System. Web. Mvc. Controller. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ public Π² ΠΊΠ»Π°ΡΡΠ΅, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° Controller, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ASP.NET ΡΠ²ΡΠ·Π°Π½ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΡΠΌ URL. ΠΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠΎΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ URL, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌΡ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ, ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 6
Π ΠΈΡΡΠ½ΠΎΠΊ 6 — ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ, ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ
ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π±ΡΠ»Π° Π²ΡΠ±ΡΠ°Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ASP.NET MVC 3 ΠΈ ΡΠ·ΡΠΊ C#, ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.NET, ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ASP.NET MVC 3:
— ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π° MVC.
— Π Π°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° MVC ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΡΠΈΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² — ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.NET ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°Π±ΡΠΈΠΊΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ, Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
— ΠΠ΅ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ HTML ΠΈ HTTP. Π ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ASP.NET MVC ΡΡΡΠ΅Π½Π° Π²Π°ΠΆΠ½ΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ ΠΊΠΎΠ΄Π° ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ. ΠΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ HTML ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ Π²ΡΠ²ΠΎΠ΄, Π½ΠΎ Π² Π½Π΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΠΎΠ΅ ΡΠΈΠ»ΠΎΡΠΎΡΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Web Forms. ΠΠΌΠ΅ΡΡΠΎ Π³ΡΠΎΠΌΠ°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ°, ΡΡΡΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π΄Π°ΡΡΠ΅Π³ΠΎΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ HTML-ΠΊΠΎΠ΄Π°, ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° MVC ΡΡΠΈΠΌΡΠ»ΠΈΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΡ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΡ , ΡΡΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CSS ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
— Π’Π΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π·Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΡΠ°ΡΡΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ MVC. ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΡΠΎΠΈΡΡ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ ASP.NET MVC Π½Π° ΡΡΠΎΠΌ Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ»ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΠ΅Π΄ΡΡΠ² ΠΌΠ°ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ IDE Π±ΡΠ»Π° Π²ΡΠ±ΡΠ°Π½Π° Visual Studio 2010 — ΡΡΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Microsoft (IDE), ΡΠ²Π»ΡΡΡΠ΅ΠΉΡΡ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ IDE Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.NET.
ΠΠ»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»Π° Π²ΡΠ±ΡΠ°Π½Π° Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π² Visual Studio 2010 ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π½ΠΈΡΡΡΡ Π½Π΅ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΠ², Π° ΡΠ΅ΡΠ½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ IDE ΡΡΠ°Π²ΠΈΡ Π΅Ρ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ.
ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½Π° Π‘Π£ΠΠ SQL Server 2008 R2 ΠΎΡ Microsoft. ΠΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ Π‘Π£ΠΠ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π²ΡΠ±ΡΠ°Π½Π° Π‘Π£ΠΠ MS SQL Server, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π²ΡΠ΅ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠ·ΡΠΊΠ° SQL.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
Π ΠΈΡ. 7 ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π ΠΈΡ. 8 Π€ΠΎΡΠΌΠ° Π΄Π»Ρ ΠΏΠΎΠ΄Π°ΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ
ΠΠΈΡΡΠΈΠ½Π³ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
using System;
using System.Collections.Generic;
using System. Linq;
using System.Runtime.Serialization;
using System. ServiceModel;
using System.ServiceModel.Web;
using System. Text;
using System. Timers;
using PlanningService. DataClasses;
using System. Diagnostics;
namespace PlanningService
{
public class RequestComparer: IComparer
{
public int Compare (Request x, Request y)
{
if (x.CurrentStatus < y. CurrentStatus)
{
return -1;
}
else if (x.CurrentStatus > y. CurrentStatus)
{
return 1;
}
else
{
if (x.CurrentStatus == Status. WaitingOpen_StatusCode && y. CurrentStatus == Status. WaitingOpen_StatusCode && x. Type == y. Type && x. PlanningTime < 10 && y. PlanningTime < 10)
{
return 0;
}
else
{
if (y.Priority==1)
{
return 1;
}
else if (x.Priority==1)
{
return -1;
}
else
{
if (x.PlanningOnDate < y. PlanningOnDate)
{
return -1;
}
else if (x.PlanningOnDate > y. PlanningOnDate)
{
return 1;
}
else
{
return 0;
}
}
}
}
}
}
public class UserRequestComparer: IEqualityComparer
{
#region IEqualityComparer Members
public bool Equals (Request x, Request y)
{
if (x.ReqID == y. ReqID)
{
if (x.CurrentStatus == y. CurrentStatus && x. ExecutorID == y. ExecutorID && x. PlanningOnDate == y. PlanningOnDate && x. PlanningCompleteDate==y.PlanningCompleteDate)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
public int GetHashCode (Request obj)
{
return obj. GetHashCode ();
}
#endregion
}
[ServiceBehavior (InstanceContextMode=InstanceContextMode.Single)]
public class PlanningService: IService1
{
private ServiceResponse Response =null;
private List UserList = null;
private static linqDataContext dc = null;
private static ViolationsDataContext vdc= null;
private RequestComparer ReqComparer = null;
public PlanningService ()
{
Response = new ServiceResponse (false, «»);
UserList = new List ();
dc = new linqDataContext ();
vdc = new ViolationsDataContext ();
ReqComparer = new RequestComparer ();
SOTRUD user = null;
foreach (Sessions session in dc. Sessions)
{
user = dc.SOTRUD.SingleOrDefault (s => s. ID == session. EmployeeID);
if (user ≠ null)
{
if (user.ID_SOTRUD_DOLG.HasValue)
{
SetWorkDay (user.ID, user. ID_SOTRUD_DOLG.Value, false, session. DuringTime);
}
private static UsersList ContainerToUser (UserContainer uc)
{
SOTRUD CurrentSotr = dc.SOTRUD.Single (s=>s.ID==uc.UserID);
return new UsersList { ID = CurrentSotr. ID, name = CurrentSotr. FIO, position = CurrentSotr. SOTRUD_DOLG.SOTRUD_DOLG1, BeginTime = uc.ComeTime.ToString (@" hh: mm:ss") };
}
private void AddViolation (Guid ReqID, string Type)
{
Violations V = new Violations{ Data=DateTime.Now, Request=ReqID, Type=Type };
vdc.Violations.InsertOnSubmit (V);
vdc.SubmitChanges ();
}
public bool SetWorkDay (int id, int posID, bool itIsEnd, int minutes = 0)
{
if (!itIsEnd)
UserContainer CurrentContainer = UserList. SingleOrDefault (s => s. UserID == id);
if (CurrentContainer == null)
{
UserContainer NewContainer = new UserContainer (id, posID, dc);
NewContainer.ComeTime = NewContainer.ComeTime.Subtract (new TimeSpan (0, minutes, 0));
try
{
foreach (Request r in NewContainer.ReqList.FindAll (r=>r.CurrentStatus>Status.Opened_StatusCode && r.PlanningOnDate.Date<=DateTime.Now.Date && !r.PlannedRequest))
{
int ind = NewContainer.ReqList.IndexOf®;
if (ind == 0)
{
r.PlanningOnDate = DateTime. Parse (GetPlanningTime (r.CreatorID, r. IsCycle, r. Type, r.Executor.LocationID.Value, false, r. ExecutorID));
}
else
{
r.PlanningOnDate = NewContainer. ReqList[ind — 1]. PlanningCompleteDate.Value.AddMinutes (5);
}
r.PlanningCompleteDate = r.PlanningOnDate.AddMinutes (r.PlanningTime);
}
dc.SubmitChanges ();
UserList.Capacity++;
UserList.Add (NewContainer);
CheckForCyclicRequests ();
return true;
}
catch
{
return false;
}
}
else
{
return false;
}
}
else
{
UserContainer Current = UserList. Single (s=>s.UserID==id);
int DepID = dc.SOTRUD.Single (s=>s.ID==id).ID_OTD;
Current.ReqList.ForEach (ListRequestHandlers.SetMinutesLeft);
dc.SubmitChanges ();
List lreq = dc.Request.Where (r=>r.PlanningOnDate.Date==DateTime.Now.Date && r. ExecutorID==Current.UserID).ToList ();
TimeSpan WorkedTime = DateTime.Now.TimeOfDay.Subtract (Current.ComeTime);
int RequestsPlanning = lreq. Count;
int RequestsExecuted = lreq. Where (r=>r.CurrentStatus>=Status.Completed_StatusCode).Count ();
List forgrade = lreq. Where (r=>r.grade.HasValue).ToList ();
int ViolCount = vdc.Violations.Where (r => r.Re.PlanningOnDate.Date == DateTime.Now.Date && r.Re.ExecutorID == Current. UserID).Count ();
double AvgGrade = 0;
if (forgrade.Count > 0)
{
AvgGrade = forgrade. Average (a => a.grade.Value);
}
Tabel tab = new Tabel
{
BeginWorkTime = DateTime.Now.Subtract (WorkedTime),
EndWorkTime = DateTime. Now,
ExecutorID = Current. UserID,
TimeOnBreak = Current. TimeInBreak,
RequestsAssigned = RequestsPlanning,
RequestsExecuted = RequestsExecuted,
AverageGrade = Convert. ToDecimal (AvgGrade),
ViolationsCount = ViolCount,
ViolationsPercent = RequestsExecuted ≠ 0? ViolCount / RequestsExecuted: 0,
DepID= DepID
};
vdc.Tabel.InsertOnSubmit (tab);
vdc.SubmitChanges ();
bool Deleted = UserList. Remove (Current);
return false;
}
}
private void DeleteSession (int uid)
{
try
{
Sessions session = dc.Sessions.SingleOrDefault (s => s. EmployeeID == uid);
if (session ≠ null)
{
dc.Sessions.DeleteOnSubmit (session);
dc.SubmitChanges ();
}
}
catch
{
}
}
private void WriteSession (int uid, int minutes)
{
try
{
Sessions session = dc.Sessions.SingleOrDefault (s => s. EmployeeID == uid);
if (session == null)
{
session = new Sessions { DuringTime = minutes, ID = Guid. NewGuid (), EmployeeID = uid };
dc.Sessions.InsertOnSubmit (session);
}
else
{
session.DuringTime = minutes;
}
dc.SubmitChanges ();
}
catch
{
}
}
public bool ToggleBreak (int UID)
{
UserContainer Current = UserList. SingleOrDefault (s => s. UserID == UID);
if (Current ≠ null)
{
int index = UserList. IndexOf (Current);
UserList[index]. IsOnBreak = !Current.IsOnBreak;
if (UserList[index]. IsOnBreak)
{
UserList[index]. TimeInLastBreak = 0;
UserList[index]. BreakTimer. Start ();
UserList[index]. PauseTimer. Stop ();
}
else
{
UserList[index]. BreakTimer. Stop ();
UserList[index]. MovePlanningCompleteTime (0, Convert. ToDouble (UserList[index]. TimeInLastBreak));
}
}
return true;
}
public Request GetRequest (int userID, string reqID)
{
Guid outGID;
Request req = null;
if (Guid.TryParse (reqID, out outGID))
{
req = dc.Request.SingleOrDefault (r => r. ReqID == outGID);
}
return req;
}
public void ResetReplannedFlag (int id)
{
UserContainer uc = GetUserContainer (id);
if (uc≠null)UserList[UserList.IndexOf (uc)]. IsReplanned=false;
}
public void SetPlannedFlag (Guid RID, bool value)
{
Request r = dc.Request.SingleOrDefault (s => s. ReqID == RID);
if (r ≠ null)
{
UserContainer ul = UserList. SingleOrDefault (a => a. UserID == r. ExecutorID);
if (ul ≠ null) ul. IsReplanned = true;
r.PlannedRequest = value;
dc.SubmitChanges ();
}
}
public void SetPlanningTime (Guid RID, DateTime On, DateTime Complete)
{
Request r = dc.Request.SingleOrDefault (s => s. ReqID == RID);
if (r ≠ null)
{
UserContainer ul = UserList. SingleOrDefault (a => a. UserID == r. ExecutorID);
if (ul ≠ null) ul. IsReplanned = true;
r.PlanningOnDate = On;
r.PlanningCompleteDate = Complete;
dc.SubmitChanges ();
}
}
public bool CheckForListEquality (IEnumerable OldList, int UID)
{
IEnumerable newList = GetUserRequests (UID);
return OldList. SequenceEqual (newList, new UserRequestComparer ());
}
private void AddCommentToRequest (Guid RID, int CommentType, string comment, int CreatorID)
{
if (comment.Trim ()≠string.Empty)
{
if (comment.Length > 998)
{
comment = «ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠ΅Π» Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΠ» ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ» ;
}
try
{
ReqComment rc = new ReqComment { CommentID = Guid. NewGuid (), UID = CreatorID, EnterDate = DateTime. Now, CommentType = CommentType, Comment = comment, ReqID = RID };
dc.ReqComment.InsertOnSubmit (rc);
dc.SubmitChanges ();
}
catch (Exception ex)
{
Trace.Write («ΠΡΠΈΠ±ΠΊΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ AddCommentToRequest «+ ex. Message);
}
}
}
private ServiceResponse SetErrorMessage (string message)
{
Response.IsError = true;
Response.ErrorMessage = message;
return Response;
}
public ServiceResponse CreateRequest (string intCreatorUID, string gidReqType, string dtmPlanningOnDate, string strcomment, string intCount, string LocationID, bool Cyclic, bool HighestPriority, string HostName, bool NeedReconcile, int? ExecutorID)
{
byte StatusID = NeedReconcile? Status. Reconciling_StatusCode: Status. WaitingOpen_StatusCode;
return this. CreateRequestWithCurrentStatus (intCreatorUID, gidReqType, dtmPlanningOnDate, strcomment, intCount, LocationID, Cyclic, HighestPriority, HostName, StatusID, ExecutorID);
}
public ServiceResponse CreateRequestWithCurrentStatus (string intCreatorUID, string gidReqType, string dtmPlanningOnDate, string strcomment, string intCount, string LocationID, bool Cyclic, bool HighestPriority, string HostName, byte StatusID, int? ExecutorID)
{
int CreatorUID;
if (!int.TryParse (intCreatorUID, out CreatorUID))
{
return SetErrorMessage («ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ ID ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΎΡΠ°»);
}
int locationID;
if (!int.TryParse (LocationID, out locationID))
{
locationID = GetLocID (CreatorUID);
}
Guid ReqType;
if (!Guid.TryParse (gidReqType, out ReqType))
{
return SetErrorMessage («ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠΈΠΏ Π·Π°ΡΠ²ΠΊΠΈ»);
}
DateTime PlanningOnDate;
if (!DateTime.TryParse (dtmPlanningOnDate, out PlanningOnDate))
{
return SetErrorMessage («ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Π΄Π°ΡΠ° Π½Π°ΡΠ°Π»Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΎΡΠΌΠ°Ρ Π΄Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ: Π΄Π΄ ΠΌΠΌ Π³Π³Π³Π³ ΡΡ: ΠΌΠΌ»);
}
int Count;
if (!int.TryParse (intCount, out Count))
{
return SetErrorMessage («ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΡΠ²ΠΎΠΊ»);
}
//ΠΡΠ»ΠΈ ΠΏΠ»Π°Π½Π½ΠΈΠ½Π³ Π΄Π΅Π½Ρ Π½Π΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠΎΠ³Π΄Π° ΠΏΠΈΡΠ΅ΠΌ Π·Π°ΡΠ²ΠΊΡ Π² Π±Π°Π·Ρ, ΠΈ Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ Π² ΡΠ·Π΅ΡΠ»ΠΈΡΡ
if (PlanningOnDate.DayOfYear < DateTime.Now.DayOfYear)
{
return SetErrorMessage («ΠΡΠΈΠ±ΠΊΠ° ΠΠ»Π°Π½ΠΈΡΡΠ΅ΠΌΠ°Ρ Π΄Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠΈ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½Π΅ΠΉ»);
}
try
{
WorkClassificator wclass = dc.WorkClassificator.SingleOrDefault (s => s. ID == ReqType);
if (wclass ≠ null) dc. Refresh (System.Data.Linq.RefreshMode.OverwriteCurrentValues, wclass);
}
catch
{
Trace.TraceWarning («An error in function CreateRequest, workcls refresh»);
}
UserContainer ExecutorContainer = null;
if (ExecutorID.HasValue)
{
ExecutorContainer = UserList. SingleOrDefault (s => s. UserID == ExecutorID. Value);
}
else
{
ExecutorContainer = FindUser (ReqType, CreatorUID, locationID);
ExecutorID = ExecutorContainer ≠ null? ExecutorContainer. UserID: FindExecutorByReqType (ReqType, CreatorUID, locationID);
}
if (ExecutorID < 0 || !ExecutorID.HasValue)
{
return SetErrorMessage («ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ»);
Request NewReq = new Request { ReqID = Guid. NewGuid (), CreationDate = DateTime. Now, PlanningOnDate = PlanningOnDate, CreatorID = CreatorUID, ExecutorID = ExecutorID. Value, CurrentStatus = StatusID, Type = ReqType, IsCycle = Cyclic };
if (HostName is string)
{
if (HostName.Length > 1) NewReq. HostName = HostName;
}
NewReq.Priorities = SetRequestPriority (NewReq.IsCycle, CreatorUID, HighestPriority);
try
{
dc.Request.InsertOnSubmit (NewReq);
dc.SubmitChanges ();
}
catch (Exception ex)
{
return SetErrorMessage («ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ «+ ex. Message);
}
NewReq.PlanningTime = NewReq.WorkClassificator.PlanningTime.HasValue? NewReq.WorkClassificator.PlanningTime.Value * Count: 0;
NewReq.PlanningCompleteDate = NewReq.PlanningOnDate.AddMinutes (Convert.ToDouble (NewReq.PlanningTime));
dc.SubmitChanges ();
AddCommentToRequest (NewReq.ReqID, ReqCommentTypes. Open_CommentType, strcomment, CreatorUID);
if (ExecutorContainer ≠ null && NewReq.PlanningOnDate.Date >= DateTime.Now.Date && NewReq.PlanningOnDate.Date <= DateTime.Now.Date.AddDays (5) && StatusID ≠ Status. Reconciling_StatusCode)
{
int indexContainer = UserList. IndexOf (ExecutorContainer);
UserList[indexContainer]. IsReplanned = true;
UserList[indexContainer]. ReqList. Add (NewReq);
UserList[indexContainer]. ReqList. Sort (ReqComparer);
double minInterval = NewReq.PlanningOnDate.Subtract (DateTime.Now).TotalMinutes;
if (UserList[indexContainer]. ReqList. Count == 1 && minInterval < 10) UserList[indexContainer]. StartRequest ();
}
if (StatusID ≠ Status. Reconciling_StatusCode)
{
OTD Department = dc.OTD.SingleOrDefault (s => s. ID == NewReq.WorkClassificator.DepartmentID);
long? AccEmailId = null;
if (Department ≠ null)
{
AccEmailId = Department. ID_EmailAccount;
}
UserContainer.NotificateUser (ExecutorID.Value, CreatorUID, «ΠΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π·Π°ΡΠ²ΠΊΠΈ», «ΠΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° «+ NewReq.WorkClassificator.TitleRow + «Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π°. ΠΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ «+ NewReq.Executor.FIO + «. ΠΠ»Π°Π½ΠΈΡΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΊΡΡΡΠΈΡ — «+ NewReq.PlanningCompleteDate.Value.ToString (), AccEmailId);
UserContainer.NotificateUser (ExecutorID.Value, ExecutorID. Value, «ΠΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΡΠ²ΠΊΠ΅», «ΠΠ°ΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π½ΠΎΠ²Π°Ρ Π·Π°ΡΠ²ΠΊΠ°: «+ NewReq.WorkClassificator.TitleRow + «ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ «+ NewReq.Creator.FIO, AccEmailId);
}
Response.IsError = false;
Response.ReturnObject = NewReq.ReqID.ToString ();
return Response;
}
public int GetCurrentRequestTime (UserContainer Container)
{
Request CurrentReq = Container.ReqList.FirstOrDefault (s => s. CurrentStatus == Status. Opened_StatusCode);
int CurrentRequestRemaining = 0;
if (CurrentReq ≠ null)
{
CurrentRequestRemaining = Convert. ToInt32(CurrentReq.PlanningCompleteDate.Value.Subtract (DateTime.Now).TotalMinutes);
}
return CurrentRequestRemaining;
}
public void CreateGroupRequest (string intCreatorUID, string gidReqType, string dtmPlanningOnDate, string strcomment, string intCount, string LocationID, bool Cyclic, bool Highest, int? ExecutorID)
{
int countReq = int. Parse (intCount);
for (int i = 0; i < countReq; i++)
{
string planDate = GetPlanningTime (int.Parse (intCreatorUID), false, Guid. Parse (gidReqType), int. Parse (LocationID), Highest, null);
CreateRequest (intCreatorUID, gidReqType, planDate, strcomment, «1», LocationID, false, Highest, null, false, ExecutorID);
public string GetPlanningTime (int CreatorID, bool ReqIsCycle, Guid ReqType, int LocationID, bool HighestPriority, int? ExecutorID)
{
Priorities PriorityEntity = SetRequestPriority (ReqIsCycle, CreatorID, HighestPriority);
int Priority = PriorityEntity. ID;
dc.Refresh (System.Data.Linq.RefreshMode.OverwriteCurrentValues, dc. WorkClassificator);
WorkClassificator Class = dc.WorkClassificator.Single (s => s. ID == ReqType);
int pause = 5;
int CurrentExecutor;
int TimeNeedToRequest = Class.PlanningTime.Value + (pause * 2);
UserContainer ExecutorContainer = !ExecutorID.HasValue? FindUser (ReqType, CreatorID, LocationID): UserList. SingleOrDefault (s => s. UserID == ExecutorID. Value);
List reversed;
if (ExecutorContainer ≠ null)
{
reversed = ExecutorContainer.ReqList.Where (r=>r.Priority<=Priority && r. CurrentStatus r.PlanningOnDate).ToList ();
CurrentExecutor = ExecutorContainer. UserID;
}
else
{
int OfflineExecutor = !ExecutorID.HasValue? FindExecutorByReqType (ReqType, CreatorID, LocationID): ExecutorID. Value;
reversed = (from r in dc. Request where r.PlanningOnDate.Date == DateTime.Now.Date && r. ExecutorID == OfflineExecutor && r. Priority <= Priority && r. CurrentStatus < Status. Excluded_StatusCode orderby r. PlanningOnDate select r).ToList ();
CurrentExecutor = OfflineExecutor;
}
int currentIndex=-1;
Request Next;
foreach (Request req in reversed)
{
currentIndex = reversed. IndexOf (req);
Next = reversed. ElementAtOrDefault (currentIndex + 1);
if (Next ≠ null)
{
if (Next.PlanningOnDate.TimeOfDay.Subtract (req.PlanningCompleteDate.Value.TimeOfDay).TotalMinutes >= TimeNeedToRequest)
{
//Π΅ΡΠ»ΠΈ Π½Π°ΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΡΠΎ Π²ΡΡΠΊΠ°Π΅ΠΌ ΡΡΠ΄Π°.
if (DateTime.Now.CompareTo (req.PlanningCompleteDate.Value) > 0) continue;
return req.PlanningCompleteDate.Value.AddMinutes (Convert.ToDouble (pause)).ToString («dd MM yyyy HH: mm:ss»);
}
}
else
{
if (DateTime.Now.CompareTo (req.PlanningCompleteDate.Value) > 0)
{
return DateTime.Now.ToString («dd MM yyyy HH: mm:ss»);
}
else
{
return req.PlanningCompleteDate.Value.AddMinutes (Convert.ToDouble (pause)).ToString («dd MM yyyy HH: mm:ss»);
}
}
}
Request LastOpenedReq = dc.Request.Where (r => r. CurrentStatus <= Status. Opened_StatusCode && r.PlanningCompleteDate.HasValue && r. ExecutorID==CurrentExecutor).OrderByDescending (r=>r.PlanningCompleteDate).FirstOrDefault ();
if (LastOpenedReq ≠ null && DateTime.Now.CompareTo (LastOpenedReq.PlanningCompleteDate.Value) < 0)
{
return LastOpenedReq.PlanningCompleteDate.Value.AddMinutes (Convert.ToDouble (pause)).ToString («dd MM yyyy HH: mm:ss»);
}
else
{
return DateTime.Now.ToString («dd MM yyyy HH: mm:ss»);
}
}
//ΠΡΠΎΡ Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ Π² Π»ΠΈΡΡΠ΅, ΠΏΠΎΡΠΎΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ — Π² Π±Π°Π·Π΅
public bool ReopenRequest (int UID, Guid ReqID, string comment)
{
UserContainer Current = UserList. SingleOrDefault (s => s. UserID == UID);
Request ReqObj = dc.Request.Single (s => s. ReqID == ReqID);
ReqObj.Status = dc.Status.Single (s => s. ID == Status. WaitForResponse_StatusCode);
if (Current≠null)
{
ReqObj.PlanningOnDate = DateTime. Parse (GetPlanningTime (UID, ReqObj. IsCycle, ReqObj. Type, ReqObj.Executor.LocationID.Value, false, ReqObj. ExecutorID));
ReqObj.PlanningCompleteDate = ReqObj.PlanningOnDate.AddMinutes (Convert.ToDouble (ReqObj.PlanningTime));
int index = UserList. IndexOf (Current);
UserList[index]. ReqList. Sort (new RequestComparer ());
UserList[index]. IsReplanned= true;
}
try
{
dc.SubmitChanges ();
AddCommentToRequest (ReqID, ReqCommentTypes. Reopen_CommentType, comment, ReqObj. CreatorID);
return true;
}
catch
{
return false;
}
}
public bool CloseRequest (int UID, Guid ReqID, string comment="", int grade=0)
{
UserContainer Current = UserList. SingleOrDefault (s => s. UserID == UID);
Request ReqObj = dc.Request.Single (s => s. ReqID == ReqID);
ReqObj.CloseDate = DateTime. Now;
ReqObj.Status = dc.Status.Single (s => s. ID == Status. Closed_StatusCode);
ReqObj.grade = grade;
if (grade > 0 && grade < 3)
{
AddViolation (ReqObj.ReqID, Violations. BadGradeViolation);
}
try
{
dc.SubmitChanges ();
if (Current ≠ null)
{
int currindex = UserList. IndexOf (Current);
UserList[currindex]. IsReplanned = true;
UserList[currindex]. ReqList. Remove (ReqObj);
}
if (!string.IsNullOrEmpty (comment))
{
this.AddCommentToRequest (ReqObj.ReqID, ReqCommentTypes. UserClose_CommentType, comment, ReqObj. ExecutorID);
}
return true;
}
catch
{
return false;
}
}
public bool CancelRequest (int UID, Guid ReqID, string comment = «», int grade = 0)
{
UserContainer Current = UserList. SingleOrDefault (s => s. UserID == UID);
Request ReqObj = dc.Request.Single (s => s. ReqID == ReqID);
ReqObj.CloseDate = DateTime. Now;
ReqObj.Status = dc.Status.Single (s => s. ID == Status. Cancelled_StatusCode);
ReqObj.grade = grade;
if (grade > 0 && grade < 3)
{
AddViolation (ReqObj.ReqID, Violations. BadGradeViolation);
}
try
{
dc.SubmitChanges ();
if (Current ≠ null)
{
int currindex = UserList. IndexOf (Current);
UserList[currindex]. IsReplanned = true;
UserList[currindex]. ReqList. Remove (ReqObj);
}
if (!string.IsNullOrEmpty (comment))
{
this.AddCommentToRequest (ReqObj.ReqID, ReqCommentTypes. UserClose_CommentType, comment, ReqObj. ExecutorID);
}
return true;
}
catch
{
return false;
}
private void CheckForCyclicRequests ()
{
DateTime Now = DateTime. Now;
IEnumerable CRList = (from creq in dc. CyclicRequests
join req in dc. Request
on new { creq. CreatorID, creq. Type }
equals
new { req. CreatorID, req. Type }
where creq. BeginDateTime <= Now
&& creq. EndDate > Now
&& creq.BeginDateTime.TimeOfDay <= Now. TimeOfDay
&& creq. isActive==true
&& req. IsCycle==true
&& req.PlanningOnDate.Date == Now. Date
select creq);
List CycleList = (from c in dc. CyclicRequests where c. BeginDateTime <= Now && c. EndDate > Now && c. isActive == true select c).ToList ();
CycleList.RemoveAll (c => CRList. Contains (c));
bool AddToRequests;
string CombinedTime;
foreach (CyclicRequests CycleReq in CycleList)
{
AddToRequests=false;
switch (CycleReq.ScheduleType)
{
case Schedule. DailyScheduleType:
AddToRequests = true;
break;
case Schedule. WeeklyScheduleType:
if (CycleReq.RunDays.Contains (DateTime.Now.DayOfWeek.ToString ()))
{
AddToRequests = true;
}
break;
case Schedule. MonthlyScheduleType:
if (CycleReq.RunWeeks.Contains (Service.GetWeekOfMonth (DateTime.Now).ToString ()) && CycleReq.RunDays.Contains (DateTime.Now.DayOfWeek.ToString ()))
{
AddToRequests = true;
}
break;
}
if (AddToRequests)
{
string LocID = GetLocID (CycleReq.CreatorID).ToString ();
CombinedTime = DateTime.Now.ToString («dd MM yyyy «)+CycleReq.Time;
CreateRequest (CycleReq.CreatorID.ToString (), CycleReq.Type.ToString (), CombinedTime, CycleReq. comment, «1», LocID, true, false, null, false, null);
}
}
return;
public string Validate (string[] str)
{
return «» ;
public string CreateCycleRequest (string dtBeginDT, string dtEndDT, string intCrID, string comment, string gdType, string SchedType, string ReqTime, string RunDays=null, string RunWeeks=null)
{
int CreatorUID;
if (!int.TryParse (intCrID, out CreatorUID))
{
return «ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ ID ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΎΡΠ°» ;
}
Guid ReqType;
if (!Guid.TryParse (gdType, out ReqType))
{
return «ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠΈΠΏ Π·Π°ΡΠ²ΠΊΠΈ» ;
}
if (ReqTime.Trim () == String. Empty)
{
return «ΠΡΠΈΠ±ΠΊΠ° ΠΡΠ΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ» ;
}
DateTime BeginDate;
if (!DateTime.TryParse (dtBeginDT, out BeginDate))
{
return «ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Π΄Π°ΡΠ° Π½Π°ΡΠ°Π»Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΎΡΠΌΠ°Ρ Π΄Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ: Π΄Π΄ ΠΌΠΌ Π³Π³Π³Π³ ΡΡ: ΠΌΠΌ» ;
DateTime EndDate;
if (!DateTime.TryParse (dtEndDT, out EndDate))
{
return «ΠΡΠΈΠ±ΠΊΠ° ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Π΄Π°ΡΠ° ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΎΡΠΌΠ°Ρ Π΄Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ: Π΄Π΄ ΠΌΠΌ Π³Π³Π³Π³ ΡΡ: ΠΌΠΌ» ;
CyclicRequests CReq = new CyclicRequests { BeginDateTime = BeginDate, EndDate = EndDate, ID = Guid. NewGuid (), isActive = true, CreatorID = CreatorUID, RunDays = RunDays, Type = ReqType, comment = comment, Time=ReqTime, ScheduleType=SchedType, RunWeeks=RunWeeks };
try
{
dc.CyclicRequests.InsertOnSubmit (CReq);
dc.SubmitChanges ();
return «» ;
}
catch (Exception ex)
{
return «ΠΡΠΈΠ±ΠΊΠ° Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π·Π°ΡΠ²ΠΊΡ «+ex.Message ;
}
}
public bool SetRequestCompleted (int Uid, Guid ReqID)
{
UserContainer Current = UserList. SingleOrDefault (c => c. UserID == Uid);
if (Current ≠ null)
{
int CurrIndex = UserList. IndexOf (Current);
Request RObj = dc.Request.SingleOrDefault (c => c. ReqID == ReqID);
if (RObj ≠ null)
{
RObj.Status = dc.Status.First (s => s. ID == Status. Completed_StatusCode);
RObj.CompleteDate = DateTime. Now;
if (RObj.PlanningCompleteDate.Value.CompareTo (RObj.CompleteDate) < 0)
{
AddViolation (RObj.ReqID, Violations. BreakTimeViolation);
}
try
{
dc.SubmitChanges ();//ΠΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΡΠ΄Π°Π»ΡΡΡ Π΅Π΅ ΠΈΠ· Π»ΠΈΡΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π±Π°Π·Ρ (ΡΠ½Π°ΡΠ°Π»Π° Π² Π±Π°Π·Ρ ΠΏΠΎΡΠΎΠΌ ΡΠ΄Π°Π»ΡΡΡ)
UserList[CurrIndex]. IsReplanned = true;
UserList[CurrIndex]. PauseTimer. Start ();
CheckForCyclicRequests ();
UserList[CurrIndex]. ReqList. Sort (ReqComparer);
OTD Department = dc.OTD.SingleOrDefault (s => s. ID == RObj.WorkClassificator.DepartmentID);
long? AccEmailId = null;
if (Department ≠ null)
{
AccEmailId = Department. ID_EmailAccount;
}
UserContainer.NotificateUser (RObj.ExecutorID, RObj. CreatorID, «ΠΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π·Π°ΠΊΡΡΡΠΈΠΈ Π·Π°ΡΠ²ΠΊΠΈ», «ΠΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° «+ RObj.WorkClassificator.TitleRow + «Π·Π°Π²Π΅ΡΡΠ΅Π½Π° ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΌ «+ RObj.Executor.FIO + «. ΠΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΠ΅ Π΅Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ», AccEmailId);
UserList[CurrIndex]. ReqList. Remove (RObj);
return true;
}
catch
{
return false;
}
}
}
return false;
}
public void StartFirst (int id)
{
UserContainer Current = UserList. SingleOrDefault (c => c. UserID == id);
if (Current ≠ null)
{
int CurrIndex = UserList. IndexOf (Current);
UserList[CurrIndex]. PauseTimer. Stop ();
UserList[CurrIndex]. StartRequest ();
}
}
public IEnumerable GetUserRequests (int CreatorID)
{
List IReq = (from cr in dc. Request where cr. CreatorID == CreatorID && cr. CurrentStatus ≠ Status. Closed_StatusCode select cr).ToList ();
IReq.Sort (new RequestComparer ());
return IReq. AsEnumerable ();
}
private Priorities SetRequestPriority (bool isCycle, int CreatorID, bool HighestPriority)
{
if (!HighestPriority)
{
SOTRUD Creator = dc.SOTRUD.Single (s => s. ID == CreatorID);
dc.Refresh (System.Data.Linq.RefreshMode.OverwriteCurrentValues, Creator);
return Creator. Priorities;
}
else
{
return dc.Priorities.Single (e => e. ID == 1);
}
public void TransmitRequest (string RID, int FromUID, int ToUID, string comment, bool isOffline)
{
Request Current = dc.Request.SingleOrDefault (s => s. ReqID == Guid. Parse (RID));
if (Current ≠ null)
{
if (this.UserIsHere (FromUID))
{
int indexFrom = UserList. IndexOf (UserList.Single (u => u. UserID == FromUID));
UserContainer uc = UserList[indexFrom];
if (Current ≠ null && uc.ReqList.Contains (Current))
{
UserList[indexFrom]. ReqList. Remove (Current);
UserList[indexFrom]. ReqList. Sort (new RequestComparer ());
UserList[indexFrom]. IsReplanned = true;
}
}
AddCommentToRequest (Guid.Parse (RID), ReqCommentTypes. Redirect_CommentType, comment, FromUID);
if (Current.CurrentStatus ≠ Status. onRegistration_StatusCode)
{
Current.Status = dc.Status.Single (i => i. ID == Status. WaitingOpen_StatusCode);
Current.Executor = dc.SOTRUD.Single (s => s. ID == ToUID);
Current.PlanningOnDate = DateTime. Parse (GetPlanningTime (Current.CreatorID, Current. IsCycle, Current. Type, Current.Executor.LocationID.Value, false, ToUID));
dc.SubmitChanges ();
OTD Department = dc.OTD.SingleOrDefault (s => s. ID == Current.WorkClassificator.DepartmentID);
long? AccEmailId = null;
if (Department ≠ null)
{
AccEmailId = Department. ID_EmailAccount;
}
UserContainer.NotificateUser (Current.ExecutorID, Current. CreatorID, «ΠΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ», «ΠΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° «+ Current.WorkClassificator.TitleRow + «ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π΄ΡΡΠ³ΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ. ΠΠ°Ρ Π½ΠΎΠ²ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ «+ Current.Executor.FIO + «. ΠΠ»Π°Π½ΠΈΡΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΊΡΡΡΠΈΡ — «+ Current.PlanningCompleteDate.Value.ToString (), AccEmailId);
UserContainer.NotificateUser (Current.CreatorID, Current. ExecutorID, «ΠΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ», «ΠΠ°ΠΌ Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π·Π°ΡΠ²ΠΊΠ° «+ Current.WorkClassificator.TitleRow + «. ΠΠ½ΠΈΡΠΈΠ°ΡΠΎΡ Π·Π°ΡΠ²ΠΊΠΈ «+ Current.Creator.FIO + «. ΠΠ»Π°Π½ΠΈΡΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΊΡΡΡΠΈΡ — «+ Current.PlanningCompleteDate.Value.ToString (), AccEmailId);
if (!isOffline)
{
int indexTo = UserList. IndexOf (UserList.Single (u => u. UserID == ToUID));
UserList[indexTo]. ReqList. Add (Current);
UserList[indexTo]. ReqList. Sort (new RequestComparer ());
UserList[indexTo]. IsReplanned = true;
}
}
}
public void EditPlanningTime (string RID, int UID, string NewTime, string comment)
{
int index = UserList. IndexOf (UserList.Single (u => u. UserID == UID));
DateTime NewT = DateTime. Parse (NewTime);
double MinutesToMove=0;
Request Current = UserList[index]. ReqList. Single (r => r. ReqID == Guid. Parse (RID));
int ReqIndex = UserList[index]. ReqList. IndexOf (Current);
AddCommentToRequest (Guid.Parse (RID), ReqCommentTypes. ChangeData_CommentType, comment, UID);
if (NewT.Date==DateTime.Now.Date)
{
MinutesToMove= NewT. Subtract (UserList[index]. ReqList[ReqIndex].PlanningCompleteDate.Value).TotalMinutes;
}
UserList[index]. ReqList[ReqIndex].PlanningCompleteDate = NewT;
UserList[index]. ReqList[ReqIndex].PlanningOnDate = UserList[index]. ReqList[ReqIndex].PlanningCompleteDate.Value.Subtract (new TimeSpan (0, Current. PlanningTime, 0));
//}
if (UserList[index]. ReqList[ReqIndex].CurrentStatus<=Status.Opened_StatusCode)
{
UserList[index]. ReqList[ReqIndex].Status = dc.Status.Single (s => s. ID == Status. WaitingOpen_StatusCode);
UserList[index]. ReqList. Sort (new RequestComparer ());
dc.SubmitChanges ();
ReqIndex = UserList[index]. ReqList. IndexOf (Current);
UserList[index]. MovePlanningCompleteTime (ReqIndex, MinutesToMove);
UserList[index]. IsReplanned = true;
AddViolation (Current.ReqID, Violations. ChangeTimeViolation);
private UserContainer FindUser (Guid TypeReq, int creatorID, int CreatorLocationID)
{
/*ΠΡΠ»ΠΈ ΡΠ·Π΅Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ — Π½Π°ΠΉΡΠΈ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ, Π΅ΡΠ»ΠΈ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ΄Π΅ΠΌ Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ Π²ΡΡΠ΅ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΡΠΎΡΡ
ΠΡΠ»ΠΈ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ = Π²ΠΎΠ·Π²ΡΠ°Ρ -1*/
WorkClassificator ClassObj = dc.WorkClassificator.SingleOrDefault (r => r. ID == TypeReq && r.responsibleDolgID.HasValue);
UserContainer User = UserList. Find (r => (r.PositionID == ClassObj.responsibleDolgID.Value || ClassObj. SOTRUD_DOLG.MainPost.Count (a=>a.ID==r.PositionID)>0) && GetLocID (r.UserID)==CreatorLocationID);
if (User ≠ null)
{
return User;
}
else
User = UserList. Find (r => (r.PositionID == ClassObj.AssistantDolgID.Value
if (User ≠ null)
{
return User;
}
else
{
if (ClassObj.ParentUID.HasValue)
{
FindUser (ClassObj.ParentUID.Value, creatorID, CreatorLocationID);
}
}
if (User == null)
{
return UserList. SingleOrDefault (s => s. UserID == 104);
}
return User;
}
private int GetLocID (int id)
{
SOTRUD sotr = dc.SOTRUD.Single (s => s. ID == id);
if (sotr.LocationID.HasValue)
{
return sotr.LocationID.Value;
}
else
{
return 1;
}
}
public int FindExecutorByReqType (Guid TypeReq, int CreatorID, int CreatorLocationID)
{
WorkClassificator ClassObj = dc.WorkClassificator.Single (r => r. ID == TypeReq);
SOTRUD User = dc.SOTRUD.FirstOrDefault (r => (r.SOTRUD_DOLG.ID == ClassObj.responsibleDolgID.Value || ClassObj. SOTRUD_DOLG.MainPost.Contains (r.SOTRUD_DOLG)) && r. LocationID == CreatorLocationID && r. DATA_YVOL.HasValue == false);
if (User == null)
{
User = dc.SOTRUD.FirstOrDefault (r => (r.SOTRUD_DOLG.ID == ClassObj.AssistantDolgID.Value || ClassObj. SOTRUD_DOLG1.MainPost.Contains (r.SOTRUD_DOLG)) && r. LocationID == CreatorLocationID && r. DATA_YVOL.HasValue == false);
if (User == null)
{
return ClassObj.ParentUID.HasValue== true? FindExecutorByReqType (ClassObj.ParentUID.Value, CreatorID, CreatorLocationID): 104;
return User. ID;
public UserContainer GetUserContainer (int id)
{
UserContainer uc = UserList. SingleOrDefault (u => u. UserID == id);
if (uc ≠ null)
{
uc.ReqList.Sort (ReqComparer);
}
return uc;
}
public bool UserIsHere (int id)
{
return (UserList.Find (f => f. UserID == id) ≠ null);
}
public List GetActiveUsers ()
{
try
List ul = UserList. ConvertAll (new Converter (ContainerToUser));
return ul;
}
catch
{
List ul = UserList. ConvertAll (new Converter (ContainerToUser));
return ul;
}
private void SetHighestPriority (Request Req, UserContainer user)
{
//Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ == 1
if (user.ReqList.Contains (Req) && !Req.PlannedRequest)
{
Req.Priorities = dc.Priorities.SingleOrDefault (p => p. ID == 1);
Request LastOpen = user.ReqList.FindLast (e=>e.CurrentStatus==Status.Opened_StatusCode);
if (LastOpen ≠ null)
{
Req.PlanningOnDate = LastOpen.PlanningCompleteDate.Value;
}
else
{
Req.PlanningOnDate = DateTime. Now;
}
Req.PlanningCompleteDate = Req.PlanningOnDate.AddMinutes (Req.PlanningTime);
dc.SubmitChanges ();
user.ReqList.Sort (ReqComparer);
user.ReplanAll (user.ReqList.IndexOf (Req) + 1, Req.PlanningCompleteDate.Value);
}
//ΠΠ΅ΡΠ΅ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ
}
private void MoveUp (Request Req, UserContainer user)
{
if (user.ReqList.Contains (Req) && !Req.PlannedRequest)
{
int CurrentIndex = user.ReqList.IndexOf (Req);
if (CurrentIndex > 0)
{
Req.PlanningOnDate = user. ReqList[CurrentIndex — 1]. PlanningOnDate;
Req.PlanningCompleteDate = Req.PlanningOnDate.AddMinutes (Req.PlanningTime);
user.ReqList[CurrentIndex — 1]. PlanningOnDate = Req.PlanningCompleteDate.Value.AddMinutes (5);
user.ReqList[CurrentIndex — 1]. PlanningCompleteDate=user.ReqList[CurrentIndex — 1]. PlanningOnDate. AddMinutes (user.ReqList[CurrentIndex — 1]. PlanningTime);
}
private void MoveDown (Request Req, UserContainer user)
{
if (user.ReqList.Contains (Req) && !Req.PlannedRequest)
int CurrentIndex = user.ReqList.IndexOf (Req);
if (CurrentIndex < user.ReqList.Count-1)
{
Req.PlanningOnDate = user. ReqList[CurrentIndex + 1]. PlanningOnDate;
Req.PlanningCompleteDate = Req.PlanningOnDate.AddMinutes (Req.PlanningTime);
user.ReqList[CurrentIndex + 1]. PlanningCompleteDate = Req.PlanningOnDate.AddMinutes (-5);
user.ReqList[CurrentIndex + 1]. PlanningOnDate = user. ReqList[CurrentIndex + 1]. PlanningCompleteDate.Value.AddMinutes (user.ReqList[CurrentIndex + 1]. PlanningTime * -1);
public void ManagerContextAction (string ActCode, string ReqID)
{
Guid gReqID;
if (Guid.TryParse (ReqID, out gReqID))
{
Request Req = dc.Request.SingleOrDefault (s => s. ReqID == gReqID);
if (Req ≠ null)
{
UserContainer container = UserList. SingleOrDefault (s => s. UserID == Req. ExecutorID);
if ((Req.CurrentStatus < Status. Completed_StatusCode) && container≠null)
{
switch (ActCode)
{
case ContextAction. SetHighestPriority:
SetHighestPriority (Req, container);
break;
case ContextAction. MoveUp:
MoveUp (Req, container);
break;
case ContextAction. MoveDown:
MoveDown (Req, container);
break;
case ContextAction. IncludeToQueue:
IncludeToQueue (Req, container);
break;
case ContextAction. ExcludeFromQueue:
ExcludeFromQueue (Req, container);
break;
case ContextAction. CloseRequest:
SetRequestCompleted (container.UserID, Req. ReqID);
break;
default:
break;
}
try
{
dc.SubmitChanges ();
container.IsReplanned = true;
container.ReqList.Sort (ReqComparer);
}
catch
{
}
}
}
}
}
private void ExcludeFromQueue (Request Req, UserContainer container)
{
Req.Status = dc.Status.Single (s => s. ID == Status. Excluded_StatusCode);