08 рдЕрдХреНрдЯреВре░ 2025┬╖8 рдорд┐рдирдЯ рдкрдврд╝рдиреЗ рдореЗрдВ

рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдФрд░ рдЧреИрдк рдХреЛ рд░реЛрдХрддреА рд╣реИ

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рддрд░реАрдХреЗ рдЬрд╛рдиреЗрдВ рддрд╛рдХрд┐ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕рд╛рде рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдмрдирд╛ рд╕рдХреЗрдВ рдмрд┐рдирд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдпрд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЧреИрдк рдХреЗред

рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдФрд░ рдЧреИрдк рдХреЛ рд░реЛрдХрддреА рд╣реИ

рдЬрдм рджреЛ рд▓реЛрдЧ рдПрдХ рд╣реА рд╕рдордп рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ

рд╕реЛрдЪрд┐рдП рдСрдлрд┐рд╕ рдореЗрдВ рдЪрд╛рд░ рдмрдЬрдХрд░ рдкрдЪрдкрди рдорд┐рдирдЯ (4:55 PM) рд╣реИред рджреЛ рд▓реЛрдЧ рдПрдХ рдЗрдирд╡реЙрдЗрд╕ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ Save рджрдмрд╛рддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ тАЬрдЗрдирд╡реЙрдЗрд╕ #1042тАЭ рджрд┐рдЦрддрд╛ рд╣реИред рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдлреЗрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдмрджрддрд░, рджреЛрдиреЛрдВ рд╣реА рдЙрд╕реА рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рд╕реЗрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдмрд╕реЗ рдЖрдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рд▓реЛрдб рдХреЗ рджреМрд░рд╛рди рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирдВрдмрд░ред

рдЯрд┐рдХрдЯ рднреА рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рджреЛ рдПрдЬреЗрдВрдЯ рдПрдХ рд╣реА рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯрд┐рдХрдЯ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо "рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рдЪреБрдирдиреЗ" рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рдХреЙрд░реНрдб рджреЗрдЦрддрд╛ рд╣реИред рдЕрдЧрд░ рджреЛрдиреЛрдВ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдХрд┐рд╕реА рднреА рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╣реА "рд▓реЗрдЯреЗрд╕реНрдЯ" рд╡реИрд▓реНрдпреВ рдкрдврд╝ рд▓реЗрдВ, рддреЛ рджреЛрдиреЛрдВ рд╣реА рдПрдХ рд╣реА рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдо рд╣реИ: рд╕реНрдХрд┐рдк рд╣реБрдП рдирдВрдмрд░ред рдЖрдк #1042 рдХреЗ рдмрд╛рдж #1044 рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ #1043 рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рдПрд░рд░ рдпрд╛ рд░рд┐рдЯреНрд░рд╛рдИ рдХреЗ рдмрд╛рдж рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдирдВрдмрд░ рд░рд┐рдЬрд╝рд░реНрд╡ рдХрд░ рд▓реЗрддреА рд╣реИ, рдлрд┐рд░ рд╕реЗрд╡ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИтАФрдХреНрдпреЛрдВрдХрд┐ рд╡реИрд▓рд┐рдбреЗрд╢рди рдПрд░рд░, рдЯрд╛рдЗрдордЖрдЙрдЯ, рдпрд╛ рдпреВрдЬрд╝рд░ рдиреЗ рдЯреИрдм рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдпрд╛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдм рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рдж рд░рд┐рдЯреНрд░рд╛рдИ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдирдпрд╛ рдирдВрдмрд░ рд▓реЗ рд▓реЗрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдирдВрдмрд░ рд▓реЗ рдЪреБрдХрд╛ рдерд╛ред

рдЗрдирд╡реЙрдЗрд╕ рдХреЗ рд▓рд┐рдпреЗ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирдВрдмрд░рд┐рдВрдЧ рдЖрдкрдХреЗ рдСрдбрд┐рдЯ рдЯреНрд░реЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЕрдХрд╛рдЙрдВрдЯреЗрдВрдЯ рд╣рд░ рдЗрдирд╡реЙрдЗрд╕ рдХреА рдЕрдиреВрдареА рдкрд╣рдЪрд╛рди рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рднреБрдЧрддрд╛рди рдпрд╛ рд╕рдкреЛрд░реНрдЯ рдИрдореЗрд▓ рдореЗрдВ рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ рд╡рд╣ рд╣реИрдВрдбрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рд░ рдХреЛрдИ рдмрд╛рддрдЪреАрдд, рд░рд┐рдкреЛрд░реНрдЯ рдФрд░ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рднреНрд░рдо рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред рдорд┐рд╕рд┐рдВрдЧ рдирдВрдмрд░ рд░рд┐рд╡реНрдпреВ рдХреЗ рджреМрд░рд╛рди рд╕рд╡рд╛рд▓ рдЙрдард╛рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдХреБрдЫ рдЧрд▓рдд рди рд╣реБрдЖ рд╣реЛред

рдпрд╣рд╛рдБ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдкреЗрдХреНрд╖рд╛ рдкрд╣рд▓реЗ рд╕реЗ рддрдп рдХрд░ рд▓реЗрдВ: рд╣рд░ рдирдВрдмрд░рд┐рдВрдЧ рдореЗрдердб рджреЛрдиреЛрдВтАФрдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЧреИрдк-рд░рд╣рд┐рддтАФрдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдирдВрдмрд░рд┐рдВрдЧ (рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ) рд╣рд╛рд╕рд┐рд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЧреИрдкрд▓реЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рднреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдо рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдХреНрд╕рд░ рдпрд╣ рдбреНрд░рд╛рдлреНрдЯ, рдлреЗрд▓реНрдпрд░ рдФрд░ рдХреИрдВрд╕рд▓реЗрд╢рдВрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдлреНрд░реЗрдо рдХрд░рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рдкреВрдЫрдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдирдВрдмрд░реЛрдВ рд╕реЗ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЧрд╛рд░рдВрдЯреА рдЪрд╛рд╣рд┐рдП:

  • рд╣рдореЗрд╢рд╛ рдЕрдиреВрдард╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпреВрдирд┐рдХ, рд╣рдореЗрд╢рд╛)
  • рдЬреНрдпрд╛рджрд╛рддрд░ рдмрдврд╝рддрд╛ рд╣реБрдЖ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдЪреНрдЫрд╛ рд╣реЛ рддреЛ)
  • рдХрднреА рднреА рд╕реНрдХрд┐рдк рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рд┐рд░реНрдл рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реЛ)

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдирд┐рдпрдо рдЪреБрди рд▓реЗрддреЗ рд╣реИрдВ, рддрдХрдиреАрдХреА рд╕рдорд╛рдзрд╛рди рдЪреБрдирдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдФрд░ рдЧреИрдк рдХреНрдпреЛрдВ рд╣реЛрддреЗ рд╣реИрдВ

рдЕрдзрд┐рдХрд╛рдВрд╢ рдРрдкреНрд╕ рдПрдХ рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ: рдпреВрдЬрд╝рд░ Save рджрдмрд╛рддрд╛ рд╣реИ, рдРрдк рдЕрдЧрд▓рд╛ рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдирдВрдмрд░ рдорд╛рдВрдЧрддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд╣ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдЙрд╕ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЗрдиреНрд╕рд░реНрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдХреЗрд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореБрд╕реАрдмрдд рддрдм рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдЬрдм рджреЛ рд╕реЗрд╡ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рде рд╣реЛрддреА рд╣реИрдВред рджреЛрдиреЛрдВ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ "рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рд▓реЗрдВ" рдЪрд░рдг рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреА рд╣реИрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рднреА рдЗрдиреНрд╕рд░реНрдЯ рдкреВрд░рд╛ рд╣реЛред рдЕрдЧрд░ рджреЛрдиреЛрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА "рдЕрдЧрд▓рд╛" рд╡реИрд▓реНрдпреВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдирдВрдмрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд░реЗрд╕ рдХрдВрдбреАрд╢рди рд╣реИ: рдкрд░рд┐рдгрд╛рдо рдЯрд╛рдЗрдорд┐рдВрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЙрдЬрд┐рдХ рдкрд░ рдирд╣реАрдВред

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

  • рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ A рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рдкрдврд╝рддреА рд╣реИ: 1042
  • рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ B рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рдкрдврд╝рддреА рд╣реИ: 1042
  • рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ A рдЗрдирд╡реЙрдЗрд╕ 1042 рдЗрдиреНрд╕рд░реНрдЯ рдХрд░рддреА рд╣реИ
  • рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ B рдЗрдирд╡реЙрдЗрд╕ 1042 рдЗрдиреНрд╕рд░реНрдЯ рдХрд░рддреА рд╣реИ (рдпрд╛ UNIQUE рдирд┐рдпрдо рдмреНрд▓реЙрдХ рдХрд░ рджреЗ рддреЛ рдлреЗрд▓)

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рджреВрд╕рд░реЗ рдЗрдиреНрд╕рд░реНрдЯ рдХреЛ рдирд╣реАрдВ рд░реЛрдХрддрд╛ред рдЕрдЧрд░ рдЖрдк рдХреЗрд╡рд▓ рдРрдк рдХреЛрдб рдореЗрдВ "рдХреНрдпрд╛ рдпрд╣ рдирдВрдмрд░ рд▓рд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ?" рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рднреА рдЪреЗрдХ рдФрд░ рдЗрдиреНрд╕рд░реНрдЯ рдХреЗ рдмреАрдЪ рд░реЗрд╕ рд╣рд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЧреИрдкреНрд╕ рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИрдВред рд╡реЗ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдХреЛрдИ рдирдВрдмрд░ "рд░рд┐рдЬрд╝рд░реНрд╡" рдХрд░ рджреЗ, рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдЕрд╕рд▓ рдФрд░ рдХрдорд┐рдЯреЗрдб рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдмрдирдХрд░ рд╕рд╛рдордиреЗ рди рдЖрдПред рдЖрдо рдХрд╛рд░рдг рд╣реИрдВ рдлреЗрд▓реНрдб рдкреЗрдореЗрдВрдЯ, рд▓реЗрдЯ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╡реИрд▓рд┐рдбреЗрд╢рди рдПрд░рд░, рдЯрд╛рдЗрдордЖрдЙрдЯ, рдпрд╛ рдпреВрдЬрд╝рд░ рдХрд╛ рдЯреИрдм рдмрдВрдж рдХрд░ рджреЗрдирд╛ред рднрд▓реЗ рд╣реА рдЗрдиреНрд╕рд░реНрдЯ рдлреЗрд▓ рд╣реЛ рдФрд░ рдХреБрдЫ рд╕реЗрд╡ рди рд╣реБрдЖ рд╣реЛ, рдирдВрдмрд░ рдкрд╣рд▓реЗ рд╣реА рдЦрдкрдд рд╣реЛ рдЪреБрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЫрд┐рдкреА рд╣реБрдИ рдХреЙрдирдХрд░реЗрдВрд╕реА рдЗрд╕рдХреЛ рдФрд░ рдмрджрддрд░ рдмрдирд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рд╣реА рд╕рд┐рд░реНрдл "рджреЛ рдЗрдВрд╕рд╛рди Save рдХреНрд▓рд┐рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ" рддрдХ рд╕реАрдорд┐рдд рд░рд╣рддреА рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  • рдкреИрд░реЗрд▓рд▓ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ API рдХреНрд▓рд╛рдЗрдВрдЯ
  • рдмреИрдЪ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдЗрдореНрдкреЛрд░реНрдЯреНрд╕
  • рд░рд╛рдд рдореЗрдВ рдЗрдирд╡реЙрдЗрд╕ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдм
  • рд╕реНрдкреЙрдЯреА рдХрдиреЗрдХреНрд╢рдиреНрд╕ рд╡рд╛рд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдРрдкреНрд╕ рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдЯреНрд░рд╛рдИ

рддреЛ рдореВрд▓ рдХрд╛рд░рдг рд╣реИрдВ: (1) рдХрдИ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдХреЗ рдПрдХ рд╣реА рдХрд╛рдЙрдВрдЯрд░ рд╡реИрд▓реНрдпреВ рдкрдврд╝рдиреЗ рдкрд░ рдЯрд╛рдЗрдорд┐рдВрдЧ рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯ, рдФрд░ (2) рдирдВрдмрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдВ рдХрд┐ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рднреА рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдирдВрдмрд░рд┐рдВрдЧ рдкреНрд▓рд╛рди рдХреЛ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХреМрди рд╕рд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд╣рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ, рдХреЛрдИ рдЧреИрдк рдирд╣реАрдВ, рдпрд╛ рджреЛрдиреЛрдВтАФрдФрд░ рдХрд┐рди рдШрдЯрдирд╛рдУрдВ рдХреЗ рджреМрд░рд╛рди (рдбреНрд░рд╛рдлреНрдЯ, рд░рд┐рдЯреНрд░рд╛рдИ, рдХреИрдВрд╕рд┐рд▓)ред

рд╕рдорд╛рдзрд╛рди рдЪреБрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ рдирдВрдмрд░рд┐рдВрдЧ рдирд┐рдпрдо рддрдп рдХрд░реЗрдВ

рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдирдВрдмрд░ рдХрд╛ рдмрд┐рдЬрд╝рдиреЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдЖрдо рдЧрд▓рддреА рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рддрдХрдиреАрдХреА рддрд░реАрдХрд╛ рдЪреБрди рд▓рд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдЕрдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдпрд╛ рдХрд╛рдиреВрдиреА рдирд┐рдпрдо рдХреБрдЫ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

рд╢реБрд░реВ рдХрд░реЗрдВ рдЗрди рджреЛ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рдХреЗ рдЬреЛ рдЕрдХреНрд╕рд░ рдорд┐рдХреНрд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ:

  • рдпреВрдирд┐рдХ: рдХреЛрдИ рднреА рджреЛ рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдХрднреА рдПрдХ рд╣реА рдирдВрдмрд░ рд╕рд╛рдЭрд╛ рди рдХрд░реЗрдВред
  • рдЧреИрдкрд▓реЗрд╕: рдирдВрдмрд░ рдпреВрдирд┐рдХ рд╣реЛрдВ рдФрд░ рд╕рд╛рде рд╣реА рдХрдбрд╝рд┐рдпрд╛рдБ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрдВ (рдХреЛрдИ рдЧрд╛рдпрдм рдирд╣реАрдВ)ред

рдХрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдХреЗрд╡рд▓ рдпреВрдирд┐рдХ-рдУрдирд▓реА рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЧреИрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рдЧреИрдк рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдпреВрдЬрд╝рд░ рдбреНрд░рд╛рдлреНрдЯ рдЫреЛрдбрд╝ рджреЗ, рдкреЗрдореЗрдВрдЯ рд░рд┐рдЬреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдП, рдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдХрд░ рд╡реЙрдпрдб рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПред рд╣реЗрд▓реНрдкрдбреЗрд╕реНрдХ рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреИрдк рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддреЗред рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдЗрдирд╡реЙрдЗрд╕ рдХреЗ рд▓рд┐рдП рднреА рдХрдИ рдЯреАрдореЗрдВ рдЧреИрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрддреА рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдЙрдиреНрд╣реЗрдВ рдСрдбрд┐рдЯ рдЯреНрд░реЗрд▓ (voided, canceled, test, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛ рд╕рдХреЗрдВред рдЧреИрдкрд▓реЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реИ, рдкрд░ рдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдо рдереЛрдкрддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд░реБрдХрд╛рд╡рдЯ рд▓рд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕реНрдХреЛрдк рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдВред рдЫреЛрдЯреЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЕрдВрддрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдмрд╣реБрдд рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:

  • рд╕рдмрдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд▓реЛрдмрд▓ рд╕реАрдХреНрд╡реЗрдВрд╕, рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкрдиреА/рдЯреЗрдиреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдХреНрд╡реЗрдВрд╕?
  • рд╣рд░ рд╕рд╛рд▓ рд░реАрд╕реЗрдЯ (2026-000123) рдпрд╛ рдХрднреА рд░реАрд╕реЗрдЯ рди рдХрд░реЗрдВ?
  • рдЗрдирд╡реЙрдЗрд╕ vs рдХреНрд░реЗрдбрд┐рдЯ рдиреЛрдЯ vs рдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реАрд░реАрдЬ?
  • рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╣реНрдпреВрдорди-рдлрд╝реНрд░реЗрдВрдбрд▓реА рдлреЙрд░реНрдореЗрдЯ рдЪрд╛рд╣рд┐рдП (рдкреНрд░рд┐рдлрд┐рдХреНрд╕, рд╕реЗрдкрд░реЗрдЯрд░), рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЗрдВрдЯрд░рдирд▓ рдирдВрдмрд░?

рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг: рдПрдХ SaaS рдкреНрд░реЛрдбрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдВрдкрдирд┐рдпрд╛рдБ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░ рд╣рд░ рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХ рдФрд░ рдХреИрд▓реЗрдВрдбрд░ рд╡рд░реНрд╖ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реАрд╕реЗрдЯ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдЯрд┐рдХрдЯ рдЧреНрд▓реЛрдмрд▓реА рдпреВрдирд┐рдХ рд╣реЛрдВ рдФрд░ рдХрднреА рд░реАрд╕реЗрдЯ рди рд╣реЛрдВред рдпреЗ рджреЛ рдЕрд▓рдЧ рдХрд╛рдЙрдВрдЯрд░ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдЕрд▓рдЧ рдирд┐рдпрдо рд╣реЛрдВрдЧреЗ, рднрд▓реЗ рд╣реА UI рд╕рдорд╛рди рд▓рдЧреЗред

рдЕрдЧрд░ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрдкрд▓реЗрд╕ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдПрдВ рдХрд┐ рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреМрди-рдХреМрди рд╕реА рдШрдЯрдирд╛рдПрдБ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЗрдирд╡реЙрдЗрд╕ рдХреЛ delete рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреЗрд╡рд▓ canceled рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпреВрдЬрд╝рд░ рдбреНрд░рд╛рдлреНрдЯ рд╕реЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ рдирдВрдмрд░ рдХреЗ рдФрд░ рдирдВрдмрд░ рд╕рд┐рд░реНрдл рдлрд╛рдЗрдирд▓ рдЕрдкреНрдкреНрд░реЛрд╡рд▓ рдкрд░ рдЕрд╕рд╛рдЗрди рд╣реЛрдЧрд╛? рдпреЗ рд╡рд┐рдХрд▓реНрдк рдЕрдХреНрд╕рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХрдиреАрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВред

рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрдкреЗрдХ рд▓рд┐рдЦреЗрдВ:

  • рдХреМрди рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдЯрд╛рдЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ?
  • рдХрдм рдирдВрдмрд░ "рдпреВрдЬрд╝реНрдб" рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ (рдбреНрд░рд╛рдлреНрдЯ, рд╕реЗрдВрдЯ, рдкреЗрдб)?
  • рд╕реНрдХреЛрдк рдХреНрдпрд╛ рд╣реИ (рдЧреНрд▓реЛрдмрд▓, рдкреНрд░рддрд┐ рдХрдВрдкрдиреА, рдкреНрд░рддрд┐ рд╡рд░реНрд╖, рдкреНрд░рддрд┐ рд╕реАрд░реАрдЬрд╝)?
  • рд╡реЙрдЗрдбреНрд╕ рдФрд░ рдХрд░реЗрдХреНрд╢рдВрд╕ рдХреЛ рдЖрдк рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░реЗрдВрдЧреЗ?

AppMaster рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рдпрдо рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдФрд░ рдмрд┐рдЬрд╝рдиреЗрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдлрд╝реНрд▓реЛ рдХреЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЯреАрдо API, рд╡реЗрдм UI рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗ рдмрд┐рдирд╛ рд╕рд░рдкреНрд░рд╛рдЗрдЬрд╝ рдХреЗред

рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдФрд░ рд╣рд░ рдПрдХ рдХреА рдЧрд╛рд░рдВрдЯреА

рдЬрдм рд▓реЛрдЧ "рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ" рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЕрдХреНрд╕рд░ рджреЛ рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп рдорд┐рдХреНрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ: (1) рдХрднреА рднреА рд╡рд╣реА рдирдВрдмрд░ рджреЛ рдмрд╛рд░ рди рдЬрдирд░реЗрдЯ рд╣реЛрдирд╛, рдФрд░ (2) рдХрднреА рдЧреИрдк рди рд╣реЛрдирд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд┐рд╕реНрдЯрдо рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧреИрдк рдХрд┐рд╕реА рднреА рд╕рдордп рджрд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдлреЗрд▓ рд╣реЛ, рдбреНрд░рд╛рдлреНрдЯ рдЫреЛрдбрд╝рд╛ рдЬрд╛рдП, рдпрд╛ рд░рд┐рдХреЙрд░реНрдб рд╡реЙрдпрдб рд╣реЛред

рддрд░реАрдХрд╛ 1: рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реАрдХреНрд╡реЗрдВрд╕ (рддреЗрдЬрд╝ рдпреВрдирд┐рдХрдиреЗрд╕)

PostgreSQL рд╕реАрдХреНрд╡реЗрдВрд╕ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ рдпреВрдирд┐рдХ, рдмрдврд╝рддреЗ рд╣реБрдП рдирдВрдмрд░ рдкрд╛рдиреЗ рдХрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╕реНрдХреЗрд▓ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реАрдХреНрд╡реЗрдВрд╕ рд╡реИрд▓реНрдпреВрдЬрд╝ рддреЗрдЬреА рд╕реЗ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВред

рдЖрдк рдХреНрдпрд╛ рдкрд╛рддреЗ рд╣реИрдВ: рдпреВрдирд┐рдХрдиреЗрд╕ рдФрд░ рдХреНрд░рдо (рдЬреНрдпрд╛рджрд╛рддрд░ рдмрдврд╝рддрд╛ рд╣реБрдЖ)ред рдЖрдк рдЬреЛ рдирд╣реАрдВ рдкрд╛рддреЗ: рдЧреИрдкрд▓реЗрд╕ рдирдВрдмрд░рд┐рдВрдЧред рдЕрдЧрд░ рдЗрдиреНрд╕рд░реНрдЯ рдлреЗрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рдирдВрдмрд░ "рдмрд░реНрди" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЧреИрдк рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рддрд░реАрдХрд╛ 2: рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдкреНрд▓рд╕ рд░рд┐рдЯреНрд░рд╛рдИ (рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдирд┐рд░реНрдгрдп рджреЗрдВ)

рдпрд╣рд╛рдВ рдЖрдк рдРрдк рд▓реЙрдЬрд┐рдХ рд╕реЗ рдПрдХ рдХреИрдВрдбрд┐рдбреЗрдЯ рдирдВрдмрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдИ UNIQUE рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рд░рд┐рдЬреЗрдХреНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЕрдЧрд░ рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЖрдк рдирдпрд╛ рдирдВрдмрд░ рд▓реЗрдХрд░ рд░рд┐рдЯреНрд░рд╛рдИ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкрд░ рдЙрдЪреНрдЪ рдХреЙрдирдХрд░реЗрдВрд╕реА рдореЗрдВ рдпрд╣ рд╢реЛрд░ рдкреИрджрд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд░рд┐рдЯреНрд░рд╛рдИ, рдЕрдзрд┐рдХ рдлреЗрд▓реНрдб рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдВрд╕ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╕реНрдкрд╛рдЗрдХреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддрдм рднреА рдЧреИрдкрд▓реЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рдирд╣реАрдВ рджреЗрддрд╛ рдЬрдм рддрдХ рдЖрдк рд╕рдЦреНрдд рд░рд┐рдЬрд╝рд░реНрд╡реЗрд╢рди рд░реВрд▓реНрд╕ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред

рддрд░реАрдХрд╛ 3: рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рдХреЗ рд╕рд╛рде рд▓реЙрдХрд┐рдВрдЧ (рдЧреИрдкрд▓реЗрд╕ рдХреЗ рд▓рд┐рдП)

рдЕрдЧрд░ рдЖрдкрдХреЛ рд╕рдЪрдореБрдЪ рдЧреИрдкрд▓реЗрд╕ рдирдВрдмрд░ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдХрд╛рдЙрдВрдЯрд░ рдЯреЗрдмрд▓ рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреЛрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЛ)ред рдЖрдк рдЙрд╕ рд░реЛ рдХреЛ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдореЗрдВ рд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдирдпрд╛ рд╡реИрд▓реНрдпреВ рд▓реЗрддреЗ рд╣реИрдВред

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рддрд░реАрдХрд╛ рд╣реИ рдЧреИрдкрд▓реЗрд╕ рдкрд╛рдиреЗ рдХрд╛, рдкрд░ рдЗрд╕рдХреА рдХреАрдордд рд╣реИ: рдпрд╣ рдПрдХ "рд╣реЙрдЯ рд╕реНрдкреЙрдЯ" рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╕рднреА рд░рд╛рдЗрдЯрд░ рд╡реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдСрдкрд░реЗрд╢рдирд▓ рдЧрд▓рддрд┐рдпреЛрдВ (рд▓рдВрдмреЗ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдВрд╕, рдЯрд╛рдЗрдордЖрдЙрдЯ, рдбреЗрдбрд▓реЙрдХреНрд╕) рдХреЗ рд▓рд┐рдП рдЬреЛрдЦрд┐рдо рднреА рдмрдврд╝рд╛рддрд╛ рд╣реИред

рддрд░реАрдХрд╛ 4: рдЕрд▓рдЧ рд░рд┐рдЬрд╝рд░реНрд╡реЗрд╢рди рд╕рд░реНрд╡рд┐рд╕ (рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП)

рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди "рдирдВрдмрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд┐рд╕" рдХрдИ рдРрдкреНрд╕ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд┐рдпрдо рдХреЗрдВрджреНрд░реАрдХреГрдд рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣ рддрдм рд╣реА рд╡рд░реНрдердЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рд╕рд┐рд╕реНрдЯрдо рдирдВрдмрд░ рдЬрд╛рд░реА рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдФрд░ рдЖрдк рд▓рд┐рдЦрдиреЗ рдХреЛ рдХрдВрд╕реЙрд▓рд┐рдбреЗрдЯ рди рдХрд░ рд╕рдХреЗрдВред

рдЯреНрд░реЗрдбрдСрдлрд╝ рдСрдкрд░реЗрд╢рдирд▓ рд░рд┐рд╕реНрдХ рд╣реИ: рдЖрдкрдиреЗ рдПрдХ рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдЬреЛрдбрд╝ рджреА рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╣реА, рд╣рд╛рдИрд▓реА рдЕрд╡реЗрд▓реЗрдмрд▓ рдФрд░ рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧрд╛рд░рдВрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реЛрдЪреЗрдВ:

  • рд╕реАрдХреНрд╡реЗрдВрд╕: рдпреВрдирд┐рдХ, рддреЗрдЬ, рдЧреИрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ
  • рдпреВрдирд┐рдХ + рд░рд┐рдЯреНрд░рд╛рдИ: рдпреВрдирд┐рдХ, рдХрдо рд▓реЛрдб рдкрд░ рд╕рд░рд▓, рдЙрдЪреНрдЪ рд▓реЛрдб рдкрд░ рдереНрд░реИрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • рд▓реЙрдХреНрдб рдХрд╛рдЙрдВрдЯрд░ рд░реЛ: рдЧреИрдкрд▓реЗрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рднрд╛рд░реА рдХреЙрдирдХрд░реЗрдВрд╕реА рдкрд░ рдзреАрдорд╛
  • рдЕрд▓рдЧ рд╕рд░реНрд╡рд┐рд╕: рд╕рд┐рд╕реНрдЯрдореНрд╕ рдХреЗ рдкрд╛рд░ рдлреНрд▓реЗрдХреНрд╕рд┐рдмрд┐рд▓рд┐рдЯреА, рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдФрд░ рдЕрдзрд┐рдХ рдлреЗрд▓реНрдпреЛрд░ рдореЛрдб

рдЕрдЧрд░ рдЖрдк рдпрд╣ AppMaster рдЬреИрд╕реЗ рдиреЛ-рдХреЛрдб рдЯреВрд▓ рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рд╣реА рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ: рдбреЗрдЯрд╛рдмреЗрд╕ correctness рдХрд╛ рд╕реНрд░реЛрдд рд╣реИред рдРрдк рд▓реЙрдЬрд┐рдХ рд░рд┐рдЯреНрд░рд╛рдИ рдФрд░ рдХреНрд▓рд┐рдпрд░ рдПрд░рд░ рдореИрд╕реЗрдЬ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкрд░ рдЕрдВрддрд┐рдо рдЧрд╛рд░рдВрдЯреА рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдФрд░ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдВрд╕ рд╕реЗ рдЖрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕реНрдЯреЗрдк-рдмрд╛рдп-рд╕реНрдЯреЗрдк: рд╕реАрдХреНрд╡реЗрдВрд╕ рдФрд░ рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░реЛрдХреЗрдВ

рдирдВрдмрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░рдЦреЗрдВ
рдирдВрдмрд░ UI рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЗрдиреНрд╕рд░реНрдЯ рдХреЗ рд╕рдордп рдмрд┐рдЬрд╝рдиреЗрд╕ рдкреНрд░реЛрд╕реЗрд╕ рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред
AppMaster рдЖрдЬрд╝рдорд╛рдПрдБ

рдЕрдЧрд░ рдЖрдкрдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░реЛрдХрдирд╛ рд╣реИ (рдЧреИрдкреНрд╕ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдирд╣реАрдВ рдХрд░рдирд╛), рддреЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рднрд░реЛрд╕реЗрдордВрдж рдкреИрдЯрд░реНрди рдпрд╣ рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ рдЖрдВрддрд░рд┐рдХ ID рдЬреЗрдирд░реЗрдЯ рдХрд░реЗ, рдФрд░ рдХрд╕реНрдЯрдорд░-рдлреЗрд╕рд┐рдВрдЧ рдирдВрдмрд░ рдкрд░ рдпреВрдирд┐рдХрдиреЗрд╕ рд▓рд╛рдЧреВ рд╣реЛред

рджреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рд░рдЦреЗрдВред рдЬреЙрдЗрдиреНрд╕, рдПрдбрд┐рдЯреНрд╕ рдФрд░ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕-рдЬрдирд░реЗрдЯреЗрдб рд╡реИрд▓реНрдпреВ (identity/sequence) рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред invoice_no рдпрд╛ ticket_no рдХреЛ рдЕрд▓рдЧ рдХреЙрд▓рдо рд░рдЦреЗрдВ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

PostgreSQL рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реЗрдЯрдЕрдк

рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп PostgreSQL рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ "рдиреЗрдХреНрд╕реНрдЯ рдирдВрдмрд░" рд▓реЙрдЬрд┐рдХ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ рд░рдЦрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдХреЙрдирдХрд░реЗрдВрд╕реА рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓реА рдЬрд╛рддреА рд╣реИред

-- Internal, never-shown primary key
create table invoices (
  id bigint generated always as identity primary key,
  invoice_no text not null,
  created_at timestamptz not null default now()
);

-- Business-facing uniqueness guarantee
create unique index invoices_invoice_no_uniq on invoices (invoice_no);

-- Sequence for the visible number
create sequence invoice_no_seq;

рдЕрдм рдбрд┐рд╕реНрдкреНрд▓реЗ рдирдВрдмрд░ рдЗрдиреНрд╕рд░реНрдЯ рдХреЗ рд╕рдордп рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ (рди рдХрд┐ select max(invoice_no) + 1 рдХрд░рдХреЗ)ред рдПрдХ рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдпрд╣ рд╣реИ рдХрд┐ INSERT рдХреЗ рдЕрдВрджрд░ рд╣реА рд╕реАрдХреНрд╡реЗрдВрд╕ рд╡реИрд▓реНрдпреВ рдХреЛ рдлрд╝реЙрд░реНрдореИрдЯ рдХрд░реЗрдВ:

insert into invoices (invoice_no)
values (
  'INV-' || lpad(nextval('invoice_no_seq')::text, 8, '0')
)
returning id, invoice_no;

рдпрджрд┐ 50 рдпреВрдЬрд╝рд░реНрд╕ рдПрдХ рд╕рд╛рде "Create invoice" рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рд╣рд░ рдЗрдиреНрд╕рд░реНрдЯ рдЕрд▓рдЧ рд╕реАрдХреНрд╡реЗрдВрд╕ рд╡реИрд▓реНрдпреВ рдкрд╛рддрд╛ рд╣реИ, рдФрд░ рдпреВрдирд┐рдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд┐рд╕реА рднреА рдЖрдХрд╕реНрдорд┐рдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдХреЙрд▓реЗрдЬрд╝рди рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рдХрд░реЗрдВ

рд╕рд╛рджреЗ рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЗ рд╕рд╛рде, рдХреЙрд▓реЗрдЬрд╝рди рджреБрд░реНрд▓рдн рд╣реЛрддреЗ рд╣реИрдВред рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк "рдкреНрд░рддрд┐ рд╡рд░реНрд╖ рд░реАрд╕реЗрдЯ", "рдкреНрд░рддрд┐ рдЯреЗрдиреЗрдиреНрдЯ" рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдбрд┐рдЯреЗрдмрд▓ рдирдВрдмрд░ рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдЕрднреА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░ рдкрд░ рдпреВрдирд┐рдХ-рд╡рд╛рдпрд▓реЗрд╢рди рдПрд░рд░ рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рд░рд┐рдЯреНрд░рд╛рдИ рд▓реВрдк рдХреЗ рд╕рд╛рде рд╣реИрдВрдбрд▓ рдХрд░реЗрдВред рдЗрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдФрд░ рд╕реАрдорд┐рдд рд░рдЦреЗрдВ:

  • рдЗрдиреНрд╕рд░реНрдЯ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ
  • рдЕрдЧрд░ invoice_no рдкрд░ рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдПрд░рд░ рдорд┐рд▓реЗ, рддреЛ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ
  • рд╕реАрдорд┐рдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж рд╕рд╛рдлрд╝ рдПрд░рд░ рджрд┐рдЦрд╛рдПрдБ

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдЯреНрд░рд╛рдИ рдХреЗрд╡рд▓ рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдВрдЧреЗ рдЬрдм рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИтАФрдЬреИрд╕реЗ рджреЛ рдЕрд▓рдЧ рдХреЛрдб рдкрд╛рдереНрд╕ рдПрдХ рд╣реА рдлрд╝реЙрд░реНрдореИрдЯреЗрдб рдирдВрдмрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВред

рд░реЗрд╕ рд╡рд┐рдВрдбреЛ рдЫреЛрдЯрд╛ рд░рдЦреЗрдВ

рдирдВрдмрд░ рдХреЛ UI рдореЗрдВ рди рдмрдирд╛рдПрдВ, рдФрд░ рди рд╣реА рдкрд╣рд▓реЗ рд░реАрдб рдХрд░рдХреЗ рдмрд╛рдж рдореЗрдВ рд░рд┐рдЬрд╝рд░реНрд╡ рдХрд░реЗрдВред рдЗрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд░рд╛рдЗрдЯ рдХреЗ рдЬрд┐рддрдирд╛ рдкрд╛рд╕ рд╣реЛ рд╕рдХреЗ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк AppMaster рдХреЗ рд╕рд╛рде PostgreSQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ id рдХреЛ Data Designer рдореЗрдВ identity primary key рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓ рдХрд░реЗрдВ, invoice_no рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ create рдлрд╝реНрд▓реЛ рдХреЗ рджреМрд░рд╛рди invoice_no рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЗрдиреНрд╕рд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕рд╛рде рд╣реЛред рдЗрд╕ рддрд░рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рддреНрдпрддрд╛ рдХрд╛ рд╕реНрд░реЛрдд рдмрдиреЗ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдХреЙрдирдХрд░реЗрдВрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдБ рд╡рд╣реАрдВ рд░рд╣рддреА рд╣реИрдВ рдЬрд╣рд╛рдБ PostgreSQL рд╕рдмрд╕реЗ рдордЬрдмреВрдд рд╣реИред

рд╕реНрдЯреЗрдк-рдмрд╛рдп-рд╕реНрдЯреЗрдк: рд░реЛ рд▓реЙрдХрд┐рдВрдЧ рд╕реЗ рдЧреИрдкрд▓реЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдирд╛

рдирд┐рдпрдореЛрдВ рдХреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдмрджрд▓реЗрдВ
рд╕реНрдкрд╖реНрдЯ, рдСрдбрд┐рдЯреЗрдмрд▓ рд╕реНрдЯреЗрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдирд╡реЙрдЗрд╕ рдХреНрд░рд┐рдПрд╢рди, рд░рд┐рдЯреНрд░рд╛рдИ рдФрд░ рд╕реНрдЯреЗрдЯрд╕ рдмрджрд▓рд╛рд╡ рдСрдЯреЛрдореЗрдЯ рдХрд░реЗрдВред
рд╢реБрд░реВ рдХрд░реЗрдВ

рдЕрдЧрд░ рдЖрдкрдХреЛ рд╕рдЪрдореБрдЪ рдЧреИрдкрд▓реЗрд╕ рдирдВрдмрд░ рдЪрд╛рд╣рд┐рдП (рдХреЛрдИ рдорд┐рд╕рд┐рдВрдЧ рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдирдВрдмрд░ рдирд╣реАрдВ), рддреЛ рдЖрдк рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдирд▓ рдХрд╛рдЙрдВрдЯрд░ рдЯреЗрдмрд▓ рдФрд░ рд░реЛ рд▓реЙрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдзрд╛рд░рдг рд╣реИ: рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рд╣реА рдХрд┐рд╕реА рджрд┐рдП рд╣реБрдП рд╕реНрдХреЛрдк рдХреЗ рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирдВрдмрд░ рдХреНрд░рдо рдореЗрдВ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рдЕрдкрдирд╛ рд╕реНрдХреЛрдк рддрдп рдХрд░реЗрдВред рдХрдИ рдЯреАрдореЗрдВ рдкреНрд░рддрд┐ рдХрдВрдкрдиреА, рдкреНрд░рддрд┐ рд╡рд░реНрд╖, рдпрд╛ рдкреНрд░рддрд┐ рд╕реАрд░реАрдЬрд╝ рдЕрд▓рдЧ рд╕реАрдХреНрд╡реЗрдВрд╕ рдЪрд╛рд╣рддреА рд╣реИрдВред рдХрд╛рдЙрдВрдЯрд░ рдЯреЗрдмрд▓ рд╣рд░ рд╕реНрдХреЛрдк рдХреЗ рд▓рд┐рдП рдЖрдЦрд╝рд┐рд░реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдВрдмрд░ рд╕реНрдЯреЛрд░ рдХрд░рддреА рд╣реИред

рдпрд╣рд╛рдБ PostgreSQL рд░реЛ рд▓реЙрдХ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдирдВрдмрд░рд┐рдВрдЧ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреИрдЯрд░реНрди рд╣реИ:

  1. рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ, рдЬреИрд╕реЗ number_counters, рдЬрд┐рд╕рдореЗрдВ company_id, year, series, last_number рдЬреИрд╕реА рдХреЙрд▓рдо рд╣реЛрдВ рдФрд░ (company_id, year, series) рдкрд░ рдпреВрдирд┐рдХ рдХреА рд╣реЛред
  2. рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВред
  3. рдЕрдкрдиреЗ рд╕реНрдХреЛрдк рдХреЗ рд▓рд┐рдП рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рдХреЛ SELECT last_number FROM number_counters WHERE ... FOR UPDATE рд╕реЗ рд▓реЙрдХ рдХрд░реЗрдВред
  4. next_number = last_number + 1 рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рдХреЛ last_number = next_number рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
  5. рдЕрдЧрд▓реЗ рдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдЗрдиреНрд╕рд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рдХрдорд┐рдЯ рдХрд░реЗрдВред

рдХреБрдВрдЬреА FOR UPDATE рд╣реИред рд▓реЛрдб рдореЗрдВ, рдЖрдкрдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдорд┐рд▓рддреЗред рдЖрдк рдпрд╣ рднреА рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ "рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдПрдХ рд╣реА рдирдВрдмрд░ рд▓рд┐рдпрд╛", рдХреНрдпреЛрдВрдХрд┐ рджреВрд╕рд░реА рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдкрд╣рд▓реЗ рдХреЗ рдХрдорд┐рдЯ (рдпрд╛ рд░реЛрд▓рдмреИрдХ) рддрдХ рд╡рд╣реА рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреАред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рджреВрд╕рд░реА рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдереЛрдбрд╝реА рджреЗрд░ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реЗрдЧреАред рдпрд╣ рд╡реЗрдЯ рдЧреИрдкрд▓реЗрд╕ рд╣реЛрдиреЗ рдХреА рдХреАрдордд рд╣реИред

рдирдП рд╕реНрдХреЛрдк рдХреА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реЗрдЯрдЕрдк

рдпрд╣ рднреА рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдирдпрд╛ рд╕реНрдХреЛрдк рдЖрдП (рдирдИ рдХрдВрдкрдиреА, рдирдпрд╛ рд╡рд░реНрд╖, рдирдИ рд╕реАрд░реАрдЬрд╝) рддреЛ рдЖрдк рдЙрд╕рдХрд╛ рдпреЛрдЬрдирд╛ рд░рдЦреЗрдВред рджреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк:

  • рдкрд╣рд▓реЗ рд╕реЗ рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рдмрдирд╛рдХрд░ рд░рдЦреЗрдВ (рдЙрджрд╛рд╣рд░рдг: рджрд┐рд╕рдВрдмрд░ рдореЗрдВ рдЕрдЧрд▓реЗ рд╡рд░реНрд╖ рдХреА рд░реЛ рдмрдирд╛рдПрдВ)ред
  • рдбрд┐рдорд╛рдВрдб рдкрд░ рдмрдирд╛рдПрдБ: рдХрд╛рдЙрдВрдЯрд░ рд░реЛ last_number = 0 рдХреЗ рд╕рд╛рде рдЗрдиреНрд╕рд░реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рддреЛ рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдХ-рдПрдВрдб-рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдлреНрд▓реЛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБред

рдпрджрд┐ рдЖрдк рдпрд╣ рдХреЛрдИ-рдХреЛрдб рдЯреВрд▓ рдЬреИрд╕реЗ AppMaster рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреВрд░рд╛ "рд▓реЙрдХ, рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ, рдЗрдиреНрд╕рд░реНрдЯ" рд╕реАрдХреНрд╡реЗрдВрд╕ рдПрдХ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд░рдЦреЗрдВ, рддрд╛рдХрд┐ рдпрд╣ рд╕рдм рдпрд╛ рддреЛ рд╣реЛ рдпрд╛ рдХреБрдЫ рднреА рди рд╣реЛред

рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ: рдбреНрд░рд╛рдлреНрдЯ, рдлреЗрд▓реНрдб рд╕реЗрд╡, рдХреИрдВрд╕рд┐рд▓реЗрд╢рди рдФрд░ рдПрдбрд┐рдЯреНрд╕

рдЕрдзрд┐рдХрд╛рдВрд╢ рдирдВрдмрд░рд┐рдВрдЧ рдмрдЧ рдЧрдВрджреА рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рджрд┐рдЦрддреЗ рд╣реИрдВ: рдбреНрд░рд╛рдлреНрдЯ рдЬреЛ рдХрднреА рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ, рд╕реЗрд╡ рдЬреЛ рдлреЗрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдЗрдирд╡реЙрдЗрд╕ рдЬреЛ рд╡реЙрдпрдб рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдЬреЛ рддрдм рдПрдбрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рдирдВрдмрд░ рджреЗрдЦ рд▓рд┐рдпрд╛ рд╣реЛред рдпрджрд┐ рдЖрдк рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдирдВрдмрд░рд┐рдВрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдо рдЪрд╛рд╣рд┐рдП рдХрд┐ рдирдВрдмрд░ рдХрдм "рд░рд┐рдпрд▓" рдмрдирддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдирд┐рд░реНрдгрдп рдЯрд╛рдЗрдорд┐рдВрдЧ рд╣реИред рдЕрдЧрд░ рдЖрдк рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╣реА рдХреЛрдИ "New invoice" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдбреНрд░рд╛рдлреНрдЯ рдЫреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдЧреИрдк рдорд┐рд▓реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рддрднреА рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЗрдирд╡реЙрдЗрд╕ рдлрд╛рдЗрдирд▓ рд╣реЛ (posted, issued, sentтАФрдЬреЛ рднреА рдЖрдкрдХреЗ рдмрд┐рдЬрд╝рдиреЗрд╕ рдореЗрдВ "рдлрд╛рдЗрдирд▓" рдмреЛрд▓реЗ), рддреЛ рдирдВрдмрд░ рдЕрдзрд┐рдХ рдХрдбрд╝реЗ рдФрд░ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд░рд╣рддреЗ рд╣реИрдВред

рдлреЗрд▓реНрдб рд╕реЗрд╡ рдФрд░ рд░реЛрд▓рдмреИрдХ рд╡реЗ рдЬрдЧрд╣реЗрдВ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЕрдкреЗрдХреНрд╖рд╛рдПрдБ рдЕрдХреНрд╕рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЯрдХрд░рд╛рддреА рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЗ рд╕рд╛рде, рдПрдХ рдмрд╛рд░ рдирдВрдмрд░ рд▓рд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рддреЛ рд╡рд╣ рд▓рд┐рдпрд╛ рд╣реА рдЧрдпрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдмрд╛рдж рдореЗрдВ рдлреЗрд▓ рд╣реЛ рдЬрд╛рдПред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдкрд░ рдЧреИрдк рдмрдирддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреА рдкреЙрд▓рд┐рд╕реА рдЧреИрдкрд▓реЗрд╕ рдорд╛рдВрдЧрддреА рд╣реИ, рддреЛ рдирдВрдмрд░ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдЪрд░рдг рдкрд░ рдФрд░ рдХреЗрд╡рд▓ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдХрдорд┐рдЯ рд╣реЛрдиреЗ рдкрд░ рдЕрд╕рд╛рдЗрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдкреНрд░рд╛рдпрдГ рдПрдХрд▓ рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рд▓реЙрдХ рдХрд░рдХреЗ, рдЕрдВрддрд┐рдо рдирдВрдмрд░ рд▓рд┐рдЦрдХрд░ рдФрд░ рдХрдорд┐рдЯ рдХрд░рдирд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рд╕реНрдЯреЗрдк рдлреЗрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рднреА рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рд╣реЛрддрд╛ред

рдХреИрдВрд╕рд┐рд▓реЗрд╢рди рдФрд░ рд╡реЙрдпрдбреНрд╕ рдХрднреА рднреА рдирдВрдмрд░ "рд░реАрдпреВрд╕" рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирдВрдмрд░ рд░рдЦреЗрдВ рдФрд░ рд╕реНрдЯреЗрдЯрд╕ рдмрджрд▓ рджреЗрдВред рдСрдбрд┐рдЯрд░реНрд╕ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрддрд┐рд╣рд╛рд╕ рд╕реНрдерд┐рд░ рд░рд╣реЗ, рднрд▓реЗ рд╣реА рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред

рдПрдбрд┐рдЯреНрд╕ рд╕рд░рд▓ рд╣реИрдВ: рдПрдХ рдмрд╛рд░ рдЬрдм рдирдВрдмрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд╣рд░ рджрд┐рдЦрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдП, рддреЛ рдЙрд╕реЗ рд╕реНрдерд╛рдпреА рдорд╛рдиреЗрдВред рд╢реЗрдпрд░, рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдпрд╛ рдкреНрд░рд┐рдВрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдХрд╛ рдирдВрдмрд░ рдХрднреА рди рдмрджрд▓реЗрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд░реЗрдХреНрд╢рди рдЪрд╛рд╣рд┐рдП, рддреЛ рдирдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдПрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдВ (рдЬреИрд╕реЗ рдХреНрд░реЗрдбрд┐рдЯ рдиреЛрдЯ рдпрд╛ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдЯрд┐рдХрдЯ), рдкрд░ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рди рд▓рд┐рдЦреЗрдВред

рдХрдИ рдЯреАрдореЗрдВ рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рдпрдо рдЕрдкрдирд╛рддреА рд╣реИрдВ:

  • рдбреНрд░рд╛рдлреНрдЯ рдХрд╛ рдХреЛрдИ рдлрд╛рдЗрдирд▓ рдирдВрдмрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ (рдЗрдВрдЯрд░реНрдирд▓ ID рдпрд╛ "DRAFT" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)ред
  • рдирдВрдмрд░ рдХреЗрд╡рд▓ "рдкреЛрд╕реНрдЯ/рдЗрд╢реВ" рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рдФрд░ рд╡рд╣ рднреА рдЙрд╕реА рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдореЗрдВ рдЬрдм рд╕реНрдЯреЗрдЯрд╕ рдмрджрд▓реЗред
  • рд╡реЙрдЗрдбреНрд╕ рдФрд░ рдХреИрдВрд╕рд┐рд▓реЗрд╢рди рдирдВрдмрд░ рд░рдЦрддреЗ рд╣реИрдВ, рдкрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрдЯреЗрдЯрд╕ рдФрд░ рдХрд╛рд░рдг рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдкреНрд░рд┐рдВрдЯ/рдИрдореЗрд▓ рдХрд┐рдП рдЧрдП рдирдВрдмрд░ рдХрднреА рдмрджрд▓рддреЗ рдирд╣реАрдВред
  • рдЗрдореНрдкреЛрд░реНрдЯреНрд╕ рдореМрд▓рд┐рдХ рдирдВрдмрд░реЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦреЗрдВ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрддрдо рдорд╛рди рдХреЗ рдмрд╛рдж рд╕реЗрдЯ рдХрд░реЗрдВред

рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдФрд░ рдЗрдореНрдкреЛрд░реНрдЯреНрд╕ рд╡рд┐рд╢реЗрд╖ рджреЗрдЦрднрд╛рд▓ рдорд╛рдВрдЧрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рджреВрд╕рд░реЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореМрдЬреВрджрд╛ рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░ рдЙрд╕реА рддрд░рд╣ рд▓рд╛рдПрдБ, рдлрд┐рд░ рдЕрдкрдирд╛ рдХрд╛рдЙрдВрдЯрд░ рдЙрд╕ рдЕрдзрд┐рдХрддрдо рдЗрдореНрдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╡реИрд▓реНрдпреВ рдХреЗ рдмрд╛рдж рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рд╡рд┐рднрд┐рдиреНрди рдлрд╝реЙрд░реНрдореИрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ (рдЬреИрд╕реЗ рд╕рд╛рд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧ рдкреНрд░рд┐рдлрд┐рдХреНрд╕) рдпрд╣ рднреА рддрдп рдХрд░реЗрдВред рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЖрдк рдбрд┐рд╕реНрдкреНрд▓реЗ рдирдВрдмрд░ рдХреЛ рд╡реИрд╕рд╛ рд╣реА рд░рдЦреЗрдВ рдЬреИрд╕рд╛ рдерд╛, рдФрд░ рдЕрд▓рдЧ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╛рдЗрдорд░реА рдХреА рд░рдЦреЗрдВред

рдЙрджрд╛рд╣рд░рдг: рдПрдХ рд╣реЗрд▓реНрдкрдбреЗрд╕реНрдХ рддреЗрдЬрд╝реА рд╕реЗ рдЯрд┐рдХрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдкрд░ рдХрдИ рдбреНрд░рд╛рдлреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдЯрд┐рдХрдЯ рдирдВрдмрд░ рдХреЗрд╡рд▓ рддрдм рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдЬрдм рдПрдЬреЗрдВрдЯ "Send to customer" рдХреНрд▓рд┐рдХ рдХрд░реЗред рдЗрд╕рд╕реЗ рдбреНрд░рд╛рдлреНрдЯ рдкрд░ рдирдВрдмрд░ рдмрд░реНрди рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ рдФрд░ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╕реАрдХреНрд╡реЗрдВрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рд╛рд╣рдХ рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рд░рд╣рддрд╛ рд╣реИред AppMaster рдЬреИрд╕реЗ рдиреЛ-рдХреЛрдб рдЯреВрд▓ рдореЗрдВ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ: рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирдВрдмрд░ рди рд░рдЦреЗрдВ, рдФрд░ "submit" рдмрд┐рдЬрд╝рдиреЗрд╕ рдкреНрд░реЛрд╕реЗрд╕ рд╕реНрдЯреЗрдк рдХреЗ рджреМрд░рд╛рди рд╣реА рдлрд╛рдЗрдирд▓ рдирдВрдмрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ рдЬреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрдорд┐рдЯ рд╣реЛред

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдпрд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЧреИрдк рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпрд╛рдБ

рдпреВрдирд┐рдХрдиреЗрд╕ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
PostgreSQL рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓реА рдореЙрдбрд▓ рдХрд░реЗрдВ, рдореИрдиреНрдпреБрдЕрд▓ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ред
рдЕрдм рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ

рдЕрдзрд┐рдХрд╛рдВрд╢ рдирдВрдмрд░рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдПрдБ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЖрддреА рд╣реИрдВ: рдирдВрдмрд░ рдХреЛ рдПрдХ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╡реИрд▓реНрдпреВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдмрдЬрд╛рдп рд╕рд╛рдЭрд╛ рд╕реНрдЯреЗрдЯ рдХреА рддрд░рд╣ред рдЬрдм рдХрдИ рд▓реЛрдЧ рдПрдХ рд╕рд╛рде рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдЧрд▓реЗ рдирдВрдмрд░ рдХрд╛ рдирд┐рд░реНрдгрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЬрдЧрд╣ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдо рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЧрд▓рддреА рд╣реИ SELECT MAX(number) + 1 рдХрд╛ рдРрдк рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧред рдпрд╣ рдПрдХрд▓-рдпреВрдЬрд╝рд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ, рдкрд░ рджреЛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рджреЛрдиреЛрдВ MAX рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдХрдорд┐рдЯ рдХрд░реЗред рджреЛрдиреЛрдВ рдЕрдЧрд▓рд╛ рд╡реИрд▓реНрдпреВ рдЬреЗрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЖрдк "рдЪреЗрдХ рдлрд┐рд░ рд░рд┐рдЯреНрд░рд╛рдИ" рдЬреЛрдбрд╝ рджреЗрдВ, рдкрд┐рдХ рдкреАрдХ рдХреЗ рджреМрд░рд╛рди рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЛрдб рдФрд░ рдЕрдЬреАрдм рд╕реНрдкрд╛рдЗрдХреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд╛ рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд░реЛрдд рд╣реИ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдирдВрдмрд░ рдЬрдирд░реЗрд╢рди (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдореЛрдмрд╛рдЗрд▓) рд╕реЗрд╡ рд╕реЗ рдкрд╣рд▓реЗред рдХреНрд▓рд╛рдЗрдВрдЯ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЕрдиреНрдп рдпреВрдЬрд╝рд░реНрд╕ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╕реЗрд╡ рдлреЗрд▓ рд╣реЛ рдЬрд╛рдП рддреЛ рд╡рд╣ рдирдВрдмрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рдЬрд╝рд░реНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ-рдЬреЗрдирд░реЗрдЯреЗрдб рдирдВрдмрд░ рдЕрд╕реНрдерд╛рдпреА рд▓реЗрдмрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВ рдЬреИрд╕реЗ "Draft 12", рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ IDs рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдЧреИрдкреНрд╕ рдЙрди рдЯреАрдореЛрдВ рдХреЛ рдЪреМрдВрдХрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реАрдХреНрд╡реЗрдВрд╕ рдЧреИрдкрд▓реЗрд╕ рд╣реЛрддреЗ рд╣реИрдВред PostgreSQL рдореЗрдВ, рд╕реАрдХреНрд╡реЗрдВрд╕ рдпреВрдирд┐рдХрдиреЗрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдкрд░ рдкрд░рдлреЗрдХреНрдЯ рдХрдВрдЯрд┐рдиреНрдпреВрдЯреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдПрдХ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рд░реЛрд▓рдмреИрдХ рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдкреНрд░реАрдлреЗрдЪ IDs рдХрд░рддреЗ рд╕рдордп, рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдкрд░ рд╡реИрд▓реНрдпреВрдЬрд╝ рд╕реНрдХрд┐рдк рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХрд╛ рдЕрд╕рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ "рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ" рд╣реИрдВ, рддреЛ рд╕реАрдХреНрд╡реЗрдВрд╕ + рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рд╕рд╣реА рдЬрд╡рд╛рдм рд╣реИред рдЕрдЧрд░ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ "рдЧреИрдкрд▓реЗрд╕ рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░" рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрд▓рдЧ рдкреИрдЯрд░реНрди (рдЖрдо рддреМрд░ рдкрд░ рд░реЛ рд▓реЙрдХрд┐рдВрдЧ) рдФрд░ рдереНрд░реВрдкреБрдЯ рдореЗрдВ рдЯреНрд░реЗрдбрдСрдлрд╝ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред

рд▓реЙрдХрд┐рдВрдЧ рддрдм рднреА рдмреИрдХрдлрд╛рдпрд░ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрдм рдпрд╣ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реЛред рдПрдХ рдЧреНрд▓реЛрдмрд▓ рд╢реЗрдпрд░ рд▓реЙрдХ рд╕рднреА рдХреНрд░рд┐рдПрдЯ рдПрдХреНрд╢рдиреНрд╕ рдХреЛ рд▓рд╛рдЗрди рдореЗрдВ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдХрдВрдкрдиреА, рд▓реЛрдХреЗрд╢рди, рдпрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдЯрд╛рдЗрдк рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХреЗрдВред рдЗрд╕рд╕реЗ рдкреВрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпреВрдЬрд╝рд░реНрд╕ рдХреЛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рд╕реЗрд╡ "рдЕрдЪрд╛рдирдХ" рдлрдБрд╕ рдЬрд╛рддрд╛ рд╣реИред

рдЬрд╛рдБрдЪ рдХреЗ рдпреЛрдЧреНрдп рдЧрд▓рддрд┐рдпрд╛рдБ:

  • MAX + 1 (рдпрд╛ "find last number") рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕-рд▓реЗрд╡рд▓ рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдХреЗред
  • рдЕрдВрддрд┐рдо рдирдВрдмрд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛, рдлрд┐рд░ "рдХреЙрдирдлреНрд▓рд┐рдХреНрдЯреНрд╕ рдХреЛ рдмрд╛рдж рдореЗрдВ рдареАрдХ рдХрд░рдирд╛"ред
  • PostgreSQL рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЛ рдЧреИрдкрд▓реЗрд╕ рдорд╛рдирдирд╛ рдФрд░ рдЧреИрдк рдХреЛ рдПрд░рд░ рдХреА рддрд░рд╣ рдЯреНрд░реАрдЯ рдХрд░рдирд╛ред
  • рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдЭрд╛ рдХрд╛рдЙрдВрдЯрд░ рд▓реЙрдХ рдХрд░рдирд╛, рдмрдЬрд╛рдп рдЙрдЪрд┐рдд рдкрд╛рд░реНрдЯрд┐рд╢рдирд┐рдВрдЧ рдХреЗред
  • рдХреЗрд╡рд▓ рдПрдХ рдпреВрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛, рддрд╛рдХрд┐ рд░реЗрд╕ рдХрдВрдбреАрд╢рдВрд╕ рд▓реЙрдиреНрдЪ рддрдХ рд╕рд╛рдордиреЗ рди рдЖрдПрдБред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЯреЗрд╕реНрдЯ рдЯрд┐рдк: 100 рд╕реЗ 1,000 рд░рд┐рдХреЙрд░реНрдб рдкреИрд░реЗрд▓рд▓ рдореЗрдВ рдмрдирд╛рдХрд░ рдПрдХ рд╕рд░рд▓ рдХреЙрдирдХрд░реЗрдВрд╕реА рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдПрдБ рдФрд░ рдлрд┐рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рд╡ рдЕрдирдЕрдкреЗрдХреНрд╖рд┐рдд рдЧреИрдкреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк AppMaster рдЬреИрд╕реЗ рдиреЛ-рдХреЛрдб рдЯреВрд▓ рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рд╣реА рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ: рдЕрдВрддрд┐рдо рдирдВрдмрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдПрдХрд▓ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЕрд╕рд╛рдЗрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, UI рдлреНрд▓реЛ рдореЗрдВ рдирд╣реАрдВред

рд╢рд┐рдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд▓реНрджреА рдЬрд╛рдБрдЪреЗрдВ

рдЬрд╣рд╛рдБ рдЬрд╝рд░реВрд░реА рд╣реЛ рдЧреИрдк-рд░рд╣рд┐рдд рдмрдиреЗрдВ
рд╕рд┐рдВрдЧрд▓ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдлреНрд▓реЛ рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рдФрд░ FOR UPDATE рд▓реЙрдХрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдРрдк рдмрдирд╛рдПрдВ

рдЗрдирд╡реЙрдЗрд╕ рдпрд╛ рдЯрд┐рдХрдЯ рдирдВрдмрд░рд┐рдВрдЧ рд░реЛрд▓рдЖрдЙрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рддреЗрдЬрд╝реА рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдЕрд╕рд▓реА рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рдЕрдХреНрд╕рд░ рдлреЗрд▓ рд╣реЛрддреЗ рд╣реИрдВред рд▓рдХреНрд╖реНрдп рд╕рд░рд▓ рд╣реИ: рд╣рд░ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдареАрдХ рдПрдХ рдмрд┐рдЬрд╝рдиреЗрд╕ рдирдВрдмрд░ рдорд┐рд▓реЗ, рдФрд░ рдЖрдкрдХреЗ рдирд┐рдпрдо 50 рд▓реЛрдЧреЛрдВ рдХреЗ рдПрдХ рд╕рд╛рде "Create" рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рднреА рд╕рдЪ рд░рд╣реЗрдВред

рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдкреНрд░реА-рд╢рд┐рдк рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рд╣реИ:

  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдмрд┐рдЬрд╝рдиреЗрд╕ рдирдВрдмрд░ рдлрд╝реАрд▓реНрдб рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рд╣реИ (рдХреЗрд╡рд▓ UI рдЪреЗрдХ рдирд╣реАрдВ)ред рдпрд╣ рдЖрдЦрд╝рд┐рд░реА рд░рдХреНрд╖рд╛ рд▓рд╛рдЗрди рд╣реИ рдЕрдЧрд░ рджреЛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЯрдХрд░рд╛рдПрдВред
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдирдВрдмрд░ рдЙрд╕реА рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЕрд╕рд╛рдЗрди рд╣реЛ рдЬреЛ рд░рд┐рдХреЙрд░реНрдб рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдирдВрдмрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдФрд░ рд╕реЗрд╡ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╣реИрдВ, рддреЛ рдЕрдВрддрддрдГ рдЖрдкрдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рджрд┐рдЦреЗрдВрдЧреЗред
  • рдЕрдЧрд░ рдЖрдкрдХреЛ рдЧреИрдкрд▓реЗрд╕ рдЪрд╛рд╣рд┐рдП, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдлрд╛рдЗрдирд▓ рд╣реЛрдиреЗ рдкрд░ рд╣реА рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг: рдЬрдм рдЗрдирд╡реЙрдЗрд╕ рдЬрд╛рд░реА рд╣реЛ, рди рдХрд┐ рдбреНрд░рд╛рдлреНрдЯ рдмрдирддреЗ рд╕рдордп)ред рдбреНрд░рд╛рдлреНрдЯ, рдЫреЛрдбрд╝реЗ рдЧрдП рдлреЙрд░реНрдо рдФрд░ рдлреЗрд▓реНрдб рдкреЗрдореЗрдВрдЯ рд╕рдмрд╕реЗ рдЖрдо рдЧреИрдк рд╕реНрд░реЛрдд рд╣реИрдВред
  • рджреБрд░реНрд▓рдн рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд░рд┐рдЯреНрд░рд╛рдИ рд░рдгрдиреАрддрд┐ рдЬреЛрдбрд╝реЗрдВред рд░реЛ рд▓реЙрдХрд┐рдВрдЧ рдпрд╛ рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЗ рд╕рд╛рде рднреА рдЖрдк рдХрднреА-рдХрднреА serialization error, deadlock, рдпрд╛ рдпреВрдирд┐рдХ рд╡рд╛рдпрд▓реЗрд╢рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЫреЛрдЯреЗ рдмреИрдХрдСрдл рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд░рд┐рдЯреНрд░рд╛рдИ рдЕрдХреНрд╕рд░ рдХрд╛рдлреА рд╣реИред
  • UI, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ API рдФрд░ рдмрд▓реНрдХ рдЗрдореНрдкреЛрд░реНрдЯ рдЬреИрд╕реЗ рд╕рднреА рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯреНрд╕ рдкрд░ 20 рд╕реЗ 100 рд╕рдордХрд╛рд▓рд┐рдХ рдХреНрд░рд┐рдПрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реЗрд╕ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВред рд░реАрдпрд▓рд┐рд╕реНрдЯрд┐рдХ рдорд┐рдХреНрд╕реЗрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдЬреИрд╕реЗ рдмрд░реНрд╕реНрдЯ, рдзреАрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ, рдФрд░ рдбрдмрд▓ рд╕рдмрдорд┐рдЯреНрд╕ред

рдПрдХ рддреЗрдЬрд╝ рд╡реИрд░рд┐рдлрд┐рдХреЗрд╢рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрдпрд╕реНрдд рд╣реЗрд▓реНрдкрдбреЗрд╕реНрдХ рдХреНрд╖рдг рдХрд╛ рд╕рд┐рдореБрд▓реЗрд╢рди рдХрд░реЗрдВ: рджреЛ рдПрдЬреЗрдВрдЯ "New ticket" рдлреЙрд░реНрдо рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдПрдХ рд╡реЗрдм рдРрдк рд╕реЗ рд╕рдмрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдПрдХ рдЗрдореНрдкреЛрд░реНрдЯ рдЬреЙрдм рдИрдореЗрд▓ рдЗрдирдмреЙрдХреНрд╕ рд╕реЗ рдЯрд┐рдХрдЯреНрд╕ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реЛред рд░рди рдХреЗ рдмрд╛рдж рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдирдВрдмрд░ рдпреВрдирд┐рдХ рд╣реИрдВ, рд╕рд╣реА рдлреЙрд░реНрдореИрдЯ рдореЗрдВ рд╣реИрдВ, рдФрд░ рдлреЗрд▓реНрдпрд░ рдЖрдзрд╛-рд╕реЗрд╡ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдЫреЛрдбрд╝рддреЗред

рдпрджрд┐ рдЖрдк рдлреНрд▓реЛ AppMaster рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ: рдирдВрдмрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдореЗрдВ рд░рдЦреЗрдВ, PostgreSQL рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ, рдФрд░ UI рдПрдХреНрд╢рдВрд╕ рддрдерд╛ API рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рджреЛрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдЬреЛ рдПрдХ рд╣реА рдПрдВрдЯрд┐рдЯреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдХрдИ рдЯреАрдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рдЯреЗрд╕реНрдЯ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░рддреА рд╣реИрдВ рдкрд░ рдЕрд╕рд▓реА рдпреВрдЬрд╝рд░реНрд╕ рдХреЗ рдЖрдиреЗ рдкрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрддреА рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг: рд╡реНрдпрд╕реНрдд рд╣реЗрд▓реНрдкрдбреЗрд╕реНрдХ рдЯрд┐рдХрдЯреНрд╕ рдФрд░ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░реЗрдВ

рд╕реЛрдЪрд┐рдП рдПрдХ рд╕рдкреЛрд░реНрдЯ рдбреЗрд╕реНрдХ рдЬрд╣рд╛рдБ рдПрдЬреЗрдВрдЯ рджрд┐рди рднрд░ рд╡реЗрдм рдРрдк рдореЗрдВ рдЯрд┐рдХрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдПрдХ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЪреИрдЯ рдЯреВрд▓ рдФрд░ рдИрдореЗрд▓ рд╕реЗ рднреА рдЯрд┐рдХрдЯ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд░ рдХреЛрдИ рдЯрд┐рдХрдЯ рдирдВрдмрд░ рдЬреИрд╕реЗ T-2026-000123 рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдирдВрдмрд░ рдареАрдХ рдПрдХ рдЯрд┐рдХрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛред

рдПрдХ рднреЛрд▓рд╛ рддрд░реАрдХрд╛ рд╣реИ: "рд▓реЗрдЯреЗрд╕реНрдЯ рдЯрд┐рдХрдЯ рдирдВрдмрд░ рдкрдврд╝реЛ", 1 рдЬреЛрдбрд╝реЛ, рдирдпрд╛ рдЯрд┐рдХрдЯ рд╕реЗрд╡ рдХрд░реЛред рд▓реЛрдб рдореЗрдВ, рджреЛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдПрдХ рд╣реА "рд▓реЗрдЯреЗрд╕реНрдЯ рдирдВрдмрд░" рдкрдврд╝ рд╕рдХрддреА рд╣реИрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рд╕реЗрд╡ рдХрд░реЗред рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рдлреЗрд▓ рдкрд░ рд░рд┐рдЯреНрд░рд╛рдИ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдХреНрд╕рд░ рдмрд┐рдирд╛ рдорддрд▓рдм рдХреЗ рдЧреИрдк рдмрди рдЬрд╛рддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛рдмреЗрд╕ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ рднрд▓реЗ рд╣реА рдЖрдкрдХрд╛ рдРрдк рдХреЛрдб рднреЛрд▓рд╛ рд╣реЛред ticket_number рдХреЙрд▓рдо рдкрд░ рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВред рдлрд┐рд░ рдЬрдм рджреЛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рдПрдХ рд╣реА рдирдВрдмрд░ рдЯреНрд░рд╛рдп рдХрд░реЗрдВрдЧреА, рдПрдХ рдЗрдиреНрд╕рд░реНрдЯ рдлреЗрд▓ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдк рд╕рдлрд╛рдИ рд╕реЗ рд░рд┐рдЯреНрд░рд╛рдИ рдХрд░ рд╕рдХреЗрдВрдЧреЗред рдпрд╣реА рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рдХреА рдЬрдбрд╝ рд╣реИ: рдпреВрдирд┐рдХрдиреЗрд╕ рдХреЛ UI рдкрд░ рдирд╣реАрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВред

рдЧреИрдкрд▓реЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрджрд▓ рджреЗрддреА рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рдЧреИрдкрд▓реЗрд╕ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдЕрдВрддрд┐рдо рдирдВрдмрд░ рдЯрд┐рдХрдЯ рдмрдирдиреЗ рдкрд░ рд╣реА рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдбреНрд░рд╛рдлреНрдЯ рдкрд░ рдирд╣реАрдВ)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЯрд┐рдХрдЯ рдХреЛ Draft рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВ рдФрд░ ticket_number NULL рд░рдЦреЗрдВред рдирдВрдмрд░ рдХреЗрд╡рд▓ рдлрд╛рдЗрдирд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдлреЗрд▓реНрдб рд╕реЗрд╡ рдФрд░ рдЫреЛрдбрд╝реЗ рдЧрдП рдбреНрд░рд╛рдлреНрдЯ рдирдВрдмрд░ "рдмрд░реНрди" рди рдХрд░реЗрдВред

рдПрдХ рд╕рд░рд▓ рдЯреЗрдмрд▓ рдбрд┐рдЬрд╛рдЗрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  • tickets: id, created_at, status (Draft, Open, Closed), ticket_number (nullable), finalized_at
  • ticket_counters: key (рдЙрджрд╛. "tickets_2026"), next_number

AppMaster рдореЗрдВ рдЖрдк рдЗрд╕реЗ Data Designer рдореЗрдВ рдореЙрдбрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ Business Process Editor рдореЗрдВ рд▓реЙрдЬрд┐рдХ рдмрдирд╛рдПрдБ:

  • Create Ticket: ticket insert рдХрд░реЗрдВ status=Draft рдФрд░ рдХреЛрдИ ticket_number рди рд░рдЦреЗрдВ
  • Finalize Ticket: рдПрдХ рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВ, рдХрд╛рдЙрдВрдЯрд░ рд░реЛ рд▓реЙрдХ рдХрд░реЗрдВ, ticket_number рд╕реЗрдЯ рдХрд░реЗрдВ, next_number рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдХрд░реЗрдВ, рдХрдорд┐рдЯ рдХрд░реЗрдВ
  • Test: рдПрдХ рд╕рд╛рде рджреЛ "Finalize" рдХреНрд░рд┐рдпрд╛рдПрдБ рдЪрд▓рд╛рдПрдБ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрднреА рдирд╣реАрдВ рдЖрддреЗ

рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░реЗрдВ: рдЕрдкрдиреЗ рдирд┐рдпрдо рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ (рд╕рд┐рд░реНрдл рдпреВрдирд┐рдХ рдмрдирд╛рдо рд╕рдЪрдореБрдЪ рдЧреИрдкрд▓реЗрд╕)ред рдЕрдЧрд░ рдЖрдк рдЧреИрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реАрдХреНрд╡реЗрдВрд╕ + рдпреВрдирд┐рдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдВрдЯ рдЖрдорддреМрд░ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдлреНрд▓реЛ рд╕рд░рд▓ рд░рд╣рддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рдЧреИрдкрд▓реЗрд╕ рдЪрд╛рд╣рд┐рдП, рддреЛ рдирдВрдмрд░рд┐рдВрдЧ рдХреЛ рдлрд╛рдЗрдирд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрдЯреЗрдк рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдБ рдФрд░ "рдбреНрд░рд╛рдлреНрдЯ" рдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рджрд░реНрдЬрд╛ рджреЗрдВред рдлрд┐рд░ рдорд▓реНрдЯреАрдкрд▓ рдПрдЬреЗрдВрдЯреНрд╕ рдФрд░ API рдмрд░реНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд▓реЛрдб-рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд░рд┐рдпрд▓ рдпреВрдЬрд╝рд░реНрд╕ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рджрд┐рдЦ рдЬрд╛рдПред

рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╕рд╛рди
рдХреБрдЫ рдмрдирд╛рдПрдВ рдЕрджреНрднреБрдд

рдлреНрд░реА рдкреНрд▓рд╛рди рдХреЗ рд╕рд╛рде рдРрдкрдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред
рдЬрдм рдЖрдк рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗ рддрдм рдЖрдк рдЙрдЪрд┐рдд рд╕рджрд╕реНрдпрддрд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред

рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ
рдХреЙрдирдХрд░реЗрдВрд╕реА-рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдирд╡реЙрдЗрд╕ рдирдВрдмрд░рд┐рдВрдЧ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдФрд░ рдЧреИрдк рдХреЛ рд░реЛрдХрддреА рд╣реИ | AppMaster