рдпреВрдИрдПрдлрдП рджреЗрд╢ рдЕрдиреБрдкрд╛рдд рдЧрдгрдирд╛

рдЫрд╡рд┐

рдлреБрдЯрдмреЙрд▓ рдореЗрдВ рджреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рд╣реИрдВ: рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ рдФрд░ рдпреВрд░реЛрдкрд╛ рд▓реАрдЧред рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдлреБрдЯрдмреЙрд▓ рд╕рдВрдШреЛрдВ рдХреА рддрдерд╛рдХрдерд┐рдд рд░реЗрдЯрд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреЗрд╢ рдХреА рдХрд┐рддрдиреА рдЯреАрдореЗрдВ рдмрд╛рдж рдХреЗ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреАред

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

рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб рдореЗрдВ рд▓рдЧрднрдЧ 300 рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреАред

рдбреЛрдореЗрди рддрд░реНрдХ


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

  • рдЯреВрд░реНрдирд╛рдореЗрдВрдЯред рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ рдпрд╛ рдпреВрд░реЛрдкрд╛ рд▓реАрдЧред
  • рд╕реАрдЬрд╝рди ред 2018-2019 / 2017-2018 рдЖрджрд┐ред
  • рдЧреЛрд▓ ред рдлрд╛рдЗрдирд▓, рд╕реЗрдореАрдлрд╛рдЗрдирд▓, рдЧреНрд░реБрдк рд╕реНрдЯреЗрдЬ рдЖрджрд┐ред рдЗрд╕реЗ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд╛рдпрд╛ред
  • рджреЗрд╢ред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреБрдЯрдмреЙрд▓ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдирд╛рдХреЛ рдХрд╛ рдХреНрд▓рдм рдореЛрдирд╛рдХреЛ рдХреЗ рджреЗрд╢ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдлреНрд░реЗрдВрдЪ рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк рдореЗрдВ рдЦреЗрд▓рддрд╛ рд╣реИред
  • рдХреНрд▓рдмред рдмрд╛рд░реНрд╕рд┐рд▓реЛрдирд╛, рд░рд┐рдпрд▓ рдореИрдбреНрд░рд┐рдб, рдореИрдирдЪреЗрд╕реНрдЯрд░ рдпреВрдирд╛рдЗрдЯреЗрдб рдЖрджрд┐ред

рдЪреВрдВрдХрд┐ lsFusion рдЙрдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдореЗрдЯрд╛рдХреЛрдб (рдпрд╛ рдХреЛрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ) рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реНрдХ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:

рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдШреЛрд╖рдгрд╛ рдореЗрдЯрд╛рдХреЛрдб
META defineMasterObject(object, caption, captions, nameLength)
CLASS ### object caption;

id '' = DATA INTEGER ( ### object);
object ( INTEGER id) = GROUP AGGR ### object o BY id(o); //

name '' = DATA ISTRING ( ### object) CHARWIDTH nameLength;
object ( ISTRING name) = GROUP AGGR ### object o BY name(o); //

FORM object caption
OBJECTS o = ### object PANEL
PROPERTIES (o) id, name

EDIT ### object OBJECT o
;

FORM object ## s captions
OBJECTS o = ### object
PROPERTIES (o) READONLY id, name
PROPERTIES (o) NEWSESSION NEW , EDIT , DELETE
;

FORM dialog ### object ## s captions
OBJECTS o = ### object
PROPERTIES (o) READONLY id, name

LIST ### object OBJECT o
;

NAVIGATOR {
NEW object ## s;
}
END


рд╡рд╣ рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ:

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

рдореЗрдЯрд╛рдХреЛрдб рдХреЛ рдЪрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:

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

рдмрдирд╛рдП рдЧрдП рдореЗрдЯрд╛рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкрд╛рдВрдЪ рдЗрдХрд╛рдЗрдпрд╛рдВ рдЬреЛрдбрд╝реЗрдВ:
@defineMasterObject (tournament, '' , '' , 20 );
@defineMasterObject (season, '' , '' , 5 );
@defineMasterObject (round, '' , '' , 15 );
@defineMasterObject (country, '' , '' , 10 );
@defineMasterObject (team, '' , '' , 20 );


рдПрдХ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрдиреНрди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
CLASS Tournament '' ;

id '' = DATA INTEGER (Tournament);
tournament ( INTEGER id) = GROUP AGGR Tournament o BY id(o);

name '' = DATA ISTRING (Tournament) CHARWIDTH 20 ;
tournament ( ISTRING name) = GROUP AGGR Tournament o BY name(o);

FORM tournament ''
OBJECTS o = Tournament PANEL
PROPERTIES (o) id, name

EDIT Tournament OBJECT o
;

FORM tournaments ''
OBJECTS o = Tournament
PROPERTIES (o) READONLY id, name
PROPERTIES (o) NEWSESSION NEW , EDIT , DELETE
;

FORM dialogTournaments ''
OBJECTS o = Tournament
PROPERTIES (o) READONLY id, name

LIST Tournament OBJECT o
;

NAVIGATOR {
NEW tournaments;
}

рдЬрдирд░реЗрдЯ рдХреНрд▓рдм рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рджреЗрд╢ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЙрдкрд░реНрдЯреА рдмрдирд╛рдПрдВ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреНрд▓рдм рдХреЗ рд╕рдВрдкрд╛рджрди рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд░реВрдкреЛрдВ рдкрд░ рдбрд╛рд▓реЗрдВ:
country = DATA Country (Team);
nameCountry '' (Team t) = name(country(t));

EXTEND FORM team PROPERTIES (o) nameCountry;
EXTEND FORM teams PROPERTIES (o) READONLY nameCountry;

рд╣рдордиреЗ рд╕рднреА рдмрдирд╛рдП рдЧрдП рд▓реЙрдЬрд┐рдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдорд╛рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ (рдлрд╝рд╛рдЗрд▓ Master.lsf) рдореЗрдВ рд░рдЦрд╛ рд╣реИред

рдЕрдм рдПрдХ рдЗрдХрд╛рдИ рд▓реАрдЧ рдмрдирд╛рдПрдБред рд╡рд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рддреНрд░ рдХреЗ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ 2017-18 рдпрд╛ рдпреВрд░реЛрдкрд╛ рд▓реАрдЧ 2018-19ред рд▓реАрдЧ рдореЗрдВ рдПрдХ рдирд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдФрд░ рд╕реАрдЬрд╝рди рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд┐рдЫрд▓реЗ рдореЗрдЯрд╛рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рд╣реА рддрд░реНрдХ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдирдП рд▓реАрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдбрд╛рд▓реЗрдВрдЧреЗ:
MODULE League;

REQUIRE Master;

CLASS League '' ;

id '' = DATA INTEGER (League);
league ( INTEGER id) = GROUP AGGR League o BY id(o);

tournament = DATA Tournament (League);
nameTournament '' (League l)= name(tournament(l));

season = DATA Season(League);
nameSeason '' (League l)= name(season(l));

FORM league ''
OBJECTS o = League PANEL
PROPERTIES (o) id, nameTournament, nameSeason

EDIT League OBJECT o
;

FORM leagues ''
OBJECTS o = League
PROPERTIES (o) READONLY id, nameTournament, nameSeason
PROPERTIES (o) NEWSESSION NEW , EDIT , DELETE
;

FORM dialogLeagues ''
OBJECTS o = League
PROPERTIES (o) READONLY id, nameTournament, nameSeason

LIST League OBJECT o
;

NAVIGATOR {
NEW leagues;
}

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдЪреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рд╕ рдореИрдЪ рдмрдирд╛рдПрдВ, рдЬреЛ рд▓реАрдЧ рдФрд░ рд░рд╛рдЙрдВрдб рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рдм рдФрд░ рдкрд░рд┐рдгрд╛рдо рднреА рдкреВрдЫрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдордиреЗ рдпрд╣ рд╕рдм рдПрдХ рдЕрд▓рдЧ рдорд┐рд▓рд╛рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рд╣реИ:
MODULE Match;

REQUIRE League;

CLASS Match '' ;

id '' = DATA INTEGER (Match);
match ( INTEGER id) = GROUP AGGR Match o BY id(o);

dateTime '' = DATA DATETIME (Match);

league = DATA League (Match);

tournament (Match m) = tournament(league(m));
nameTournament '' (Match m) = name(tournament(m));

season(Match m) = season(league(m));
nameSeason '' (Match m) = name(season(m));

round = DATA Round (Match);
nameRound '' (Match m) = name(round(m));

homeTeam = DATA Team (Match);
nameHomeTeam '' (Match m) = name(homeTeam(m));

awayTeam = DATA Team (Match);
nameAwayTeam '' (Match m) = name(awayTeam(m));

goalsHome ' ()' = DATA INTEGER (Match);
goalsAway ' ()' = DATA INTEGER (Match);

FORM match ''
OBJECTS o = Match PANEL
PROPERTIES (o) id, dateTime, nameTournament, nameSeason, nameRound,
nameHomeTeam, goalsHome, goalsAway, nameAwayTeam

EDIT Match OBJECT o
;

FORM matches ''
OBJECTS o = Match
PROPERTIES (o) READONLY id, dateTime, nameTournament, nameSeason, nameRound,
nameHomeTeam, goalsHome, goalsAway, nameAwayTeam
PROPERTIES (o) NEWSESSION NEW , EDIT , DELETE

LIST Match OBJECT o
;

NAVIGATOR {
NEW matches;
}


рдбреЗрдЯрд╛ рдЖрдпрд╛рдд


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

  • 2016 рддрдХ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИрдВред
  • 2018 рддрдХ рдпреВрд░реЛрдкрд╛ рд▓реАрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдпреЛрдЧреНрдпрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдбреЗрдЯрд╛ рдореЗрдВ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд░рд┐рддреНрд╢ рдкрд╛рд╡рд▓реЛрджрд░ рд░реВрд╕ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреНрд▓рдм рдХрдЬрд╛рдХрд┐рд╕реНрддрд╛рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпреВрд░реЛрдкрд╛ рдПрдлрд╕реА рдЬрд┐рдмреНрд░рд╛рд▓реНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкреЗрди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред


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

рд╣рдореЗрдВ рдЬрд┐рд╕ рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕реЗ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ url рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕реА рддрд░реНрдХ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
host = 'api-football-v1.p.rapidapi.com' ;
key ' API Football' = DATA STRING () CHARWIDTH 50 ;

url = 'https://' + host() + '/v2' ;

headers( TEXT name) = CASE
WHEN name = 'x-rapidapi-host' THEN host()
WHEN name = 'x-rapidapi-key' THEN key();

рд╕рднреА рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рд▓реАрдЧ рдлреЙрд░реНрдо рдкрд░ рд░рдЦреА рдЬрд╛рдПрдВрдЧреАред рд╡рд╣рд╛рдВ рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдХреЛ рд▓реАрдЧ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВрдЧреЗ:
EXTEND FORM leagues
PROPERTIES () key DRAW o TOOLBAR
;


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

рдЬрд╡рд╛рдм рд╣реИ
 { "api":{ "results":2, "leagues":[ { "league_id":1, "name":"2018 Russia World Cup", "country":"World", "country_code":null, "season":2018, "season_start":"2018-06-14", "season_end":"2018-07-15", "logo":"https://www.api-football.com/public/leagues/1.png", "flag":null, "standings":0, "is_current":1 }, { "league_id":2, "name":"Premier League", "country":"England", "country_code":"GB", "season":2018, "season_start":"2018-08-10", "season_end":"2019-05-12", "logo":"https://www.api-football.com/public/leagues/2.png", "flag":"https://www.api-football.com/public/flags/gb.svg", "standings":1, "is_current":1 } ] } } 


рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ GET рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
LOCAL result = FILE ();
EXTERNAL HTTP GET url() + '/leagues' HEADERS headers TO result;

рдпрд╣ рдЯрд╛рдЗрдк FILE рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рдгрд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрддрд╛ рд╣реИред

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

рдЫрд╡рд┐

рдЙрдкрд░реЛрдХреНрдд JSON рдХреЗ рд▓рд┐рдП, рдлреЙрд░реНрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ (рдХреЗрд╡рд▓ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛):
GROUP api;

tournamentName = DATA LOCAL STRING ( INTEGER );
seasonName = DATA LOCAL STRING ( INTEGER );
leagueId = DATA LOCAL INTEGER ( INTEGER );

FORM importLeagues
OBJECTS leagues = INTEGER IN api
PROPERTIES (leagues) name = tournamentName, season = seasonName, league_id = leagueId
;

рдЖрдпрд╛рдд рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ JSON рдкрд░рд┐рдгрд╛рдо рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд╕реАрдзреЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
IMPORT importLeagues JSON FROM result();

рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, JSON рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рдХреЛ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯрдирд╛рдо , рд╕реАрдЬрд╝рдирдирд╛рдо рдФрд░ рд▓реАрдЧ рдЖрдИрдбреА рдЧреБрдгреЛрдВ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛:

рдЫрд╡рд┐

рдпрд╣реА рд╣реИ, рдЯреВрд░реНрдирд╛рдореЗрдВрдЯрдирд╛рдо (0) рдХреЗ рд▓рд┐рдП рдорд╛рди "рд╡рд┐рд╢реНрд╡ рдХрдк" рд╣реЛрдЧрд╛, рдФрд░ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯрдирд╛рдо (1) рдореЗрдВ рдпрд╣ "рдкреНрд░реАрдорд┐рдпрд░ рд▓реАрдЧ" рд╣реЛрдЧрд╛ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдкреАрдЖрдИ рдлреБрдЯрдмреЙрд▓ рдореЗрдВ рдПрдХ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдЗрдХрд╛рдИ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред рд╕рднреА рд▓реАрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдирд╛рдо рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рддреНрд░реЛрдВ рд╕реЗ рдПрдХ рд╣реА рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рд▓реАрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдпрд╛рдд рдореЗрдВ, рдкрд╣рд▓реЗ рд╣рдо рдЖрдпрд╛рддрд┐рдд рд▓реАрдЧ рдХреЗ рд╕рднреА рдирд╛рдореЛрдВ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдирдП рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдмрдирд╛рдПрдВ:
FOR [ GROUP SUM 1 BY tournamentName( INTEGER i)]( STRING tn) AND NOT tournament(tn) DO NEW t = Tournament {
name(t) <- tn;
}

рд╕реАрдЬрд╝рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЛрдб рднреА рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд▓реАрдЧ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рд╛рдкрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж, рд▓реАрдЧ рдХреЛ рд╕реАрдзреЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдФрд░ рд╕реАрдЬрд╝рди рдХреЛ рдЧреНрд░реБрдк рдПрдЬреАрдЬреАрдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрдорд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рдирд╛рдо рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ:
FOR leagueId( INTEGER i) AND NOT league(leagueId(i)) DO NEW l = League {
id(l) <- leagueId(i);
tournament(l) <- tournament(tournamentName(i));
season(l) <- season(seasonName(i));
}

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

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдпрд╛рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓реАрдЧ рд╕реВрдЪреА рдлреЙрд░реНрдо рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
EXTEND FORM leagues
PROPERTIES () importLeagues DRAW o TOOLBAR
;

рдЗрд╕реА рддрд░рд╣, рд╣рдо рдХреНрд▓рдм рдФрд░ рдореИрдЪ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ API рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реАрдЧ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓реАрдЧ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдХреНрд▓рдм рдФрд░ рдореИрдЪ рдЖрдпрд╛рдд рдХрд░реЗрдВ
//
teamId = DATA LOCAL INTEGER ( INTEGER );
teamName = DATA LOCAL STRING ( INTEGER );
countryName = DATA LOCAL STRING ( INTEGER );

FORM importTeams
OBJECTS teams = INTEGER IN api
PROPERTIES (teams) team_id = teamId, name = teamName, country = countryName
;

importTeams ' ' (League l) {
LOCAL result = FILE ();
EXTERNAL HTTP GET url() + '/teams/league/' + id(l) HEADERS headers TO result;

IMPORT importTeams JSON FROM result();
FOR [ GROUP SUM 1 BY countryName( INTEGER i)]( STRING cn) AND NOT country(cn) DO NEW c = Country {
name(c) <- cn;
}

FOR teamId( INTEGER i) AND NOT team(teamId(i)) DO NEW t = Team {
id(t) <- teamId(i);
name(t) <- teamName(i);
country(t) <- country(countryName(i));
}
}

//

matchId = DATA LOCAL INTEGER ( INTEGER );
dateTime = DATA LOCAL STRING ( INTEGER );
roundName = DATA LOCAL STRING ( INTEGER );

GROUP homeTeam;
homeTeamId = DATA LOCAL INTEGER ( INTEGER );

GROUP awayTeam;
awayTeamId = DATA LOCAL INTEGER ( INTEGER );

goalsHome = DATA LOCAL INTEGER ( INTEGER );
goalsAway = DATA LOCAL INTEGER ( INTEGER );

FORM importMatches
OBJECTS fixtures = INTEGER IN api
PROPERTIES (fixtures) fixture_id = matchId, league_id = leagueId, event_date = dateTime, round = roundName,
homeTeamId IN homeTeam EXTID 'team_id' ,
awayTeamId IN awayTeam EXTID 'team_id' ,
goalsHomeTeam = goalsHome, goalsAwayTeam = goalsAway
;

importMatches ' ' (League l) {
LOCAL result = FILE ();
EXTERNAL HTTP GET url() + '/fixtures/league/' + id(l) HEADERS headers TO result;

IMPORT importMatches JSON FROM result();
FOR [ GROUP SUM 1 BY awayTeamId( INTEGER i)]( INTEGER id) AND NOT team(id) DO {
MESSAGE ' ' + id;
RETURN ;
}

FOR [ GROUP SUM 1 BY awayTeamId( INTEGER i)]( INTEGER id) AND NOT team(id) DO {
MESSAGE ' ' + id;
RETURN ;
}

FOR [ GROUP SUM 1 BY roundName( INTEGER i)]( STRING rn) AND NOT round(rn) DO NEW r = Round {
name(r) <- rn;
}

FOR matchId( INTEGER i) AND NOT match(matchId(i)) DO NEW m = Match {
id(m) <- matchId(i);
dateTime(m) <- toDateTimeFormat(left(dateTime(i), 19 ), 'yyyy-MM-ddThh24:mi:ss' );
league(m) <- league(leagueId(i));
round(m) <- round(roundName(i));
homeTeam(m) <- team(homeTeamId(i));
awayTeam(m) <- team(awayTeamId(i));
goalsHome(m) <- goalsHome(i);
goalsAway(m) <- goalsAway(i);
}
}

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

рд╕рднреА рдЖрдпрд╛рддреЛрдВ рдХреЛ рдПрдХ рд╣реА рд░реВрдк рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЪреВрдВрдХрд┐ рд╡реЗ рд▓реАрдЧ рд╕реЗ рдмрдВрдзреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рд╕рднреА рдХреЛ рдЙрд╕реА рд░реВрдк рдореЗрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдлреЙрд░реНрдо рдореЗрдВ рдЯреАрдореЛрдВ рдФрд░ рдореИрдЪреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдмрдЪрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
EXTEND FORM leagues
OBJECTS t = Team
PROPERTIES (t) READONLY id, name

PROPERTIES importTeams(o) DRAW t TOOLBAR

OBJECTS m = Match
PROPERTIES (m) READONLY id, dateTime, nameRound, nameHomeTeam, goalsHome, goalsAway, nameAwayTeam
FILTERS league(m) = o

PROPERTIES importMatches(o) DRAW m TOOLBAR
;

DESIGN leagues {
OBJECTS {
NEW leagueDetails {
fill = 2 ;
type = SPLITH ;
MOVE BOX (t);
MOVE BOX (m);
}
}
}


рдкрд░рд┐рдгрд╛рдореА рд░реВрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
рдЫрд╡рд┐

рд╕рднреА рдЖрдпрд╛рддреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ APIFootball рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЧреБрдгрд╛рдВрдХ рдЧрдгрдирд╛


рд╣рдо рдпреВрдИрдПрдлрдП рджреЗрд╢ рдЧреБрдгрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдпреВрдИрдПрдлрдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рднреА рдХреЛрдб рдбрд╛рд▓рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдлреБрдЯрдмреЙрд▓ рдПрдкреАрдЖрдИ рд╕рднреА рдореИрдЪреЛрдВ рдХреЗ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдпреВрд░реЛрдХрдкред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпреВрд░реЛрдХрдк рдореИрдЪреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЧреБрдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╣рдореЗрд╢рд╛ рдмрд╛рдХреА рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):
isCL (Tournament t) = name(t) = 'Champions League' ;
isEL (Tournament t) = name(t) = 'Europa League' ;

isUL (Tournament t) = isCL(t) OR isEL(t);
isUL (Match m) = isUL(tournament(m));

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рдм рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореИрдЪреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдЬрди рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди, рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ:
рдЬреАрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 2 рдЕрдВрдХ;
рдПрдХ рдЯрд╛рдИ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 1 рдЕрдВрдХред
1999 рдХреЗ рдмрд╛рдж рд╕реЗ, рдЗрди рдЕрдВрдХреЛрдВ рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рдпреЛрдЧреНрдпрддрд╛ рд░рд╛рдЙрдВрдб рдореЗрдВ рдЕрд░реНрдЬрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣реИ:
рдЬреАрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 1 рдЕрдВрдХ;
рдПрдХ рдЯрд╛рдИ рдХреЗ рд▓рд┐рдП 0.5 рдЕрдВрдХред


рд╕рд╣рд╛рдпрдХ рдЧреБрдг рдмрдирд╛рдПрдБ рдЬреЛ рдореИрдЪ рдФрд░ рдХреНрд▓рдм рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
played (Team t, Match m) = homeTeam(m) = t OR awayTeam(m) = t;
won (Team t, Match m) = (homeTeam(m) = t AND goalsHome(m) > goalsAway(m)) OR (awayTeam(m) = t AND goalsHome(m) < goalsAway(m));
draw (Team t, Match m) = played(t, m) AND goalsHome(m) = goalsAway(m);

рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореИрдЪ рдореЗрдВ рдХрд┐рддрдиреЗ рдЕрдВрдХ рд╣реИрдВ, рд╣рдо рд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдореНрди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреА:
dataMatchCoeff = DATA NUMERIC [ 10 , 1 ] (Round);
matchCoeff ' ' (Round r) = OVERRIDE dataMatchCoeff(r), 1.0 ;

рдлрд┐рд░ рд╣рдо рдЬреАрдд рдФрд░ рдбреНрд░реЙ рдХреЗ рд▓рд┐рдП рдЕрдВрдХ рдЧрд┐рдирддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
wonPoints ' ' (Season s, Team t) =
GROUP SUM 2 * matchCoeff(round(Match m)) IF won(t, m) AND season(m) = s AND isUL(m);
drawPoints ' ' (Season s, Team t) =
GROUP SUM 1 * matchCoeff(round(Match m)) IF draw(t, m) AND season(m) = s AND isUL(m);
matchPoints ' ' (Season s, Team t) = wonPoints(s, t) (+) drawPoints(s, t) MATERIALIZED ;

рдореИрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрдХ рдХреЛ MATERIALIZED рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдЧрдгрдирд╛ рди рдХреА рдЬрд╛рдПред

рдЕрдм рдЖрдкрдХреЛ рдмреЛрдирд╕ рдЕрдВрдХ рдЧрд┐рдирдиреЗ рд╣реЛрдВрдЧреЗ:
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреЛрдирд╕ рдЕрдВрдХ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
1 рдЕрдВрдХ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЯреАрдо рдХреНрд╡рд╛рд░реНрдЯрд░ рдлрд╝рд╛рдЗрдирд▓, рд╕реЗрдореАрдлрд╝рд╛рдЗрдирд▓ рдФрд░ рдлрд╝рд╛рдЗрдирд▓ рдореЗрдВ рдпреВрд░реЛрдкреАрдп рдХрдк рдореЗрдВ рдкрд╣реБрдБрдЪрддреА рд╣реИ;
рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ рдХреЗ рд╕рдореВрд╣ рдЪрд░рдг рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 4 рдЕрдВрдХ (1996 рддрдХ - 2 рдЕрдВрдХ, 1997 рд╕реЗ 2003 рддрдХ - 1 рдмрд┐рдВрджреБ, 2004 рд╕реЗ 2008 - 3 рдЕрдВрдХ рддрдХ);
рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ (2008 рд╕реЗ рдкрд╣рд▓реЗ - 1 рдЕрдВрдХ) рдХреЗ 1/8 рдлрд╝рд╛рдЗрдирд▓ рдХреЗ рд▓рд┐рдП рд░рд╡рд╛рдирд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЯреАрдо рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ 5 рдЕрдВрдХред
рдХреЗрд╡рд▓ рдЦреЗрд▓реЗ рдЧрдП рдореИрдЪреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рддрдХрдиреАрдХреА рдиреБрдХрд╕рд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдкреЗрдирд▓реНрдЯреА рд╢реВрдЯрдЖрдЙрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореИрдЪ, рдЬрдм рдЧреБрдгрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдореБрдЦреНрдп рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рдореЗрдВ рдЦреЗрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рддрдп рд╣реЛрддреА рд╣реИред

рдЗрд╕ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рд╡рд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдореИрдЪ рдЦреЗрд▓рддрд╛ рддреЛ рдХреНрд▓рдм рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреЗ рджреМрд░ рдореЗрдВ рдЬрд╛рддрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рдм рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реАрдЬрд╝рди, рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ, рд░рд╛рдЙрдВрдб рдореЗрдВ рдХрд┐рддрдиреЗ рдореИрдЪ рдЦреЗрд▓реЗ:
played '' (Season s, Tournament t, Round r, Team tm) =
GROUP SUM 1 IF played(tm, Match m) AND round(m) = r AND tournament(m) = t AND season(m) = s;


рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рджреМрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдЕрдВрдХ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, League рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ рдореЗрдВ 5 рдЕрдВрдХ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреВрд░реЛрдкрд╛ рд▓реАрдЧ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ:
bonusPoints ' ' = DATA NUMERIC [ 10 , 1 ] (Tournament, Round);

рдЖрдЗрдП рдЕрдм рдмреЛрдирд╕ рдЕрдВрдХ рдФрд░ рд╕реАрдЬрд╝рди рдХреЗ рдХреНрд▓рдм рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдЕрдВрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:
bonusPoints ' ' (Season s, Team tm) = GROUP SUM bonusPoints(Tournament t, Round r) IF played(s, t, r, tm) MATERIALIZED ;

points '' (Season s, Team tm) = matchPoints(s, tm) (+) bonusPoints(s, tm);

рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реАрдзреЗ рджреЗрд╢ рдХреЗ рдЧреБрдгрд╛рдВрдХ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред
рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреА рд░реЗрдЯрд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ рдФрд░ рдпреВрд░реЛрдкрд╛ рд▓реАрдЧ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рдмреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдПрд╕реЛрд╕рд┐рдПрд╢рди [2] [3] рд╕реЗ рдХреНрд▓рдмреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдпреВрд░реЛрдкреАрдп рд╕рдВрдШреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдШ рдХреЗ рд▓рд┐рдП рдХреНрд▓рдмреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:
matchesUL ' ' (Season s, Team t) = GROUP SUM 1 IF played(t, Match m) AND season(m) = s AND isUL(m);
teams '' (Season s, Country c) = GROUP SUM 1 IF matchesUL(s, Team t) AND country(t) = c;

рдЕрдм рд╣рдо рд╕реАрдЬрди рдХреЗ рд▓рд┐рдП рдХреБрд▓ рд╕рдВрдШ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рдмреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
totalPoints ' ()' (Season s, Country c) = GROUP SUM points(s, Team t) IF country(t) = c;
points '' (Season s, Country c) = trunc( NUMERIC [ 13 , 4 ](totalPoints(s, c)) / teams(s, c), 3 );


рджреЗрд╢ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдкрд┐рдЫрд▓реЗ 5 рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рджреЗрд╢ рдХреЗ рдЧреБрдгрд╛рдВрдХ рдХрд╛ рдпреЛрдЧ рд╣реИред


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореМрд╕рдореЛрдВ рдХреЛ рд╕рдВрдЦреНрдпрд╛ рджреЗрддреЗ рд╣реИрдВ (рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдж рдХреЛ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдХ рдмрдбрд╝рд╛ рдХреЛрдб рд╣реИ):
index '' (Season s) = PARTITION SUM 1 IF s IS Season ORDER DESC s;

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдирд╛рдо рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝реАрд▓реНрдб рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХреЗрд╡рд▓ рджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд░реЗрдЯрд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
rating '' (Country c) = GROUP SUM points(Season s, c) IF index(s) <= 5 ;

рдКрдкрд░, рд╣рдордиреЗ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдФрд░ рд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреАред рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рд░рд╛рдЙрдВрдб рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реБрдП, рдЙрдиреНрд╣реЗрдВ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдПрдбрд┐рдЯрд┐рдВрдЧ рдлреЙрд░реНрдо рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
matches (Tournament t, Round r) = GROUP SUM 1 IF tournament(Match m) = t AND round(m) = r;

EXTEND FORM tournament
OBJECTS r = Round
PROPERTIES name(r) READONLY , matchCoeff(r), bonusPoints(o, r)
FILTERS matches(o, r)
;


рдСрдбрд┐рдпрдВрд╕ рд╕реЗрдЯрд┐рдВрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреИрдВрдкрд┐рдпрдВрд╕ рд▓реАрдЧ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЫрд╡рд┐

рдЖрдЗрдП рдПрдХ рдлреЙрд░реНрдо рдбреНрд░рд╛ рдХрд░реЗрдВ рдЬреЛ рд░реЗрдЯрд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд╣рд╛рдВ рдЯреАрдореЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рджреЗрд╢ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдХреЛ рдЙрд╕рдХреЗ рдореИрдЪреЛрдВ рдХреЗ рд▓рд┐рдП:
FORM countryCoefficientUEFA ' UEFA'
OBJECTS s = Season
FILTERS index(s) <= 5

OBJECTS c = Country
PROPERTIES (c) READONLY name, rating
PROPERTIES (s, c) COLUMNS (s) points HEADER ' : ' + name(s), teams HEADER ' : ' + name(s)

OBJECTS t = Team
PROPERTIES (t) READONLY nameCountry, name
PROPERTIES (s,t) COLUMNS (s) HEADER name(s) points BACKGROUND matchesUL(s, t)
FILTERGROUP country
FILTER ' ' country(t) = c DEFAULT

OBJECTS m = Match
PROPERTIES (m) READONLY dateTime, nameTournament, nameSeason, nameRound,
nameHomeTeam,
goalsHome BACKGROUND goalsHome(m) > goalsAway(m),
goalsAway BACKGROUND goalsHome(m) < goalsAway(m),
nameAwayTeam
FILTERS played(t, m)
ORDER dateTime(m) DESC
;

DESIGN countryCoefficientUEFA {
OBJECTS {
NEW countryDetails {
type = SPLITH ;
fill = 0.5 ;
MOVE BOX (t);
MOVE BOX (m);
}
}

}

NAVIGATOR {
NEW countryCoefficientUEFA;
}

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

рдкрд░рд┐рдгрд╛рдо



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

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

рдЗрд╕ рдмрд╛рдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://demo.lsfusion.org/euroleague рдкрд░ ред рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ рдЕрддрд┐рдерд┐ рд▓реЙрдЧрд┐рдиред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдореЛрдб рдореЗрдВ рд╣реИред

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

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

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

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

Source: https://habr.com/ru/post/hi467279/


All Articles