DataMatrix կամ ինչպես ճիշտ պիտակավորել կոշիկները

1 թվականի հուլիսի 2019-ից Ռուսաստանում ներդրվել է մի խումբ ապրանքների պարտադիր մակնշում։ 1 թվականի մարտի 2020-ից կոշիկները պետք է ենթարկվեին այս օրենքին։ Ոչ բոլորն են ժամանակ ունեցել պատրաստվելու, և արդյունքում մեկնարկը հետաձգվել է հուլիսի 1-ին։ Լամոդան նրանց թվում է, ում հաջողվել է։

Ուստի մենք ցանկանում ենք կիսվել մեր փորձով նրանց հետ, ովքեր դեռ պետք է պիտակավորեն հագուստը, անվադողերը, օծանելիքները և այլն։ Հոդվածում նկարագրված են ոլորտի մի շարք ստանդարտներ, որոշ կարգավորող փաստաթղթեր և անձնական փորձ: Հոդվածը նախատեսված է հիմնականում ինտեգրատորների և մշակողների համար, ովքեր դեռ պետք է հասկանան այս նախագիծը:

DataMatrix կամ ինչպես ճիշտ պիտակավորել կոշիկները

Խնդրում ենք նկատի ունենալ, որ կանոնակարգային դաշտը հաճախակի է փոխվում, և հեղինակը հնարավորություն չունի անընդհատ թարմացնել նյութը: Հետևաբար, կարդալու պահին որոշ տեղեկություններ կարող են արդեն հնացած լինել:

Հեղինակը անձնական փորձ է ձեռք բերել ինչպես Lamoda-ում Datamatrix նախագծի շրջանակներում, այնպես էլ BarCodesFx մակնշման սեփական անվճար հավելվածի մշակման գործում:

1 թվականի հուլիսի 2019-ից Ռուսաստանում գործում է պարտադիր պիտակավորման մասին օրենքը։ Օրենքը չի տարածվում ապրանքների ոչ բոլոր խմբերի վրա, իսկ ապրանքախմբերի համար պարտադիր մակնշման ուժի մեջ մտնելու ժամկետները տարբեր են։ Այժմ ծխախոտը, մուշտակները, կոշիկները, դեղերը ենթակա են պարտադիր մակնշման։ Մոտ ապագայում կներդրվի անվադողերի, հագուստի, օծանելիքի և հեծանիվների համար։ Ապրանքների յուրաքանչյուր խումբ կարգավորվում է կառավարության առանձին որոշմամբ (GPR): Հետևաբար, որոշ հայտարարություններ, որոնք ճիշտ են կոշիկների համար, կարող են ճիշտ չլինել ապրանքային այլ խմբերի համար: Բայց մենք կարող ենք հուսալ, որ տեխնիկական բաղադրիչը մեծապես չի տարբերվի տարբեր ապրանքային խմբերի համար:

ՆշումՄակնշման հիմնական գաղափարն այն է, որ ապրանքի յուրաքանչյուր միավորին տրվում է անհատական ​​համար: Այս թվով դուք կարող եք հետևել ապրանքի որոշակի ապրանքի պատմությանը արտադրության կամ երկիր ներմուծման պահից մինչև դրամարկղում տնօրինելու պահը: Հաճելի է հնչում, բայց գործնականում չափազանց դժվար է իրագործել։Հայեցակարգն ավելի մանրամասն նկարագրված է ազնիվ նշանի պաշտոնական կայքում։

Ընդհանուր տերմիններ և հասկացություններ

UOT - ապրանքների շրջանառության մասնակից.
CRPT առաջադեմ տեխնոլոգիաների զարգացման կենտրոն է։ Մասնավոր ընկերություն, միակ պետ. մակնշման ծրագրի կապալառու. Այն գործում է հանրային մասնավոր գործընկերության (ՊՄԳ) սխեմայի ներքո: Ցավոք, նախագծի մրցույթի այլ մասնակիցների, ինչպես նաև բուն մրցույթի մասին տեղեկություններ չկան։
ТГ - ապրանքային խումբ. Կոշիկ, հագուստ, անվադողեր և այլն:
GTIN - ըստ էության, հոդվածը, հաշվի առնելով գույնը և չափը: Թողարկված է GS1-ում կամ ազգային կատալոգում յուրաքանչյուր ներմուծողի կամ արտադրողի համար իր արտադրանքի համար: Արտադրողը կամ ներմուծողը նախ պետք է նկարագրի այս ապրանքը:
PPR - Ռուսաստանի Դաշնության Կառավարության որոշումը. Կոշիկի համար՝ 860.
КМ - մակնշման կոդը. Սիմվոլների եզակի շարք, որը վերագրվում է որոշակի կետին: Կոշիկի համար այն բաղկացած է GTIN-ից, սերիական համարից, հաստատման կոդից և կրիպտո պոչից։
GS1 միջազգային կազմակերպություն է, որը թողարկում է GTIN: Նաև պիտակավորման մի շարք ստանդարտներ կազմողներ։
Ազգային կատալոգ - GS1-ի անալոգը, որը մշակվել է CRPT-ի կողմից:
ծպտյալ պոչը - թվային ստորագրության անալոգը, որը հաստատում է ԿՄ-ի օրինականությունը: Պետք է լինի դրոշմակնիքի տվյալների մատրիքսում: Տեքստի ձևով պահպանումն արգելված է: Տպագրելուց հետո դրոշմակնիքը պետք է հանվի՝ համաձայն CRPT-ի հետ կնքված պայմանագրի: Փաստացի օգտագործման դեպքեր հայտնի չեն:
CPS - պատվերի կառավարման կայան. Համակարգը, որով KM-ները պատվիրվում են ապրանքի համար:
EDO - էլեկտրոնային փաստաթղթերի կառավարում.
UKEP — ընդլայնված որակավորված էլեկտրոնային ստորագրություն:

Տերմիններ և հասկացություններ այս հոդվածի շրջանակներում

ЧЗ - ազնիվ նշան:
ЛК - Անձնական տարածք:
Դրոշմ - տպագիր մակնշման կոդը:

Գործընթացը հետևյալն է. նախ՝ մասնակիցը (UOT) թողարկում է էլեկտրոնային ստորագրություն (ECES), գրանցվում է ազնիվ նշանով (CHZ), նկարագրում է ապրանքը ազգային կատալոգում կամ GS1-ում և ստանում GTIN ապրանքի համար: Ազնիվ նշանի կայքում այս քայլերը մանրամասն նկարագրված են, ուստի դրանց վրա չենք անդրադառնա։

Կոդերի պատվիրում և ստացում

GTIN-ները ստանալուց հետո մասնակիցը (UOT) կատարում է CPS համակարգում կոդերի (KM) պատվեր:
Կարևոր է, բայց ոչ ակնհայտ։

  1. Մեկ պատվերի համար կարող եք պահանջել մինչև 10 GTIN կոդեր: Սկզբունքորեն անհասկանալի սահմանափակում. 14 GTIN ունեցող ներմուծողը պետք է ստեղծի 000 պատվեր։
  2. Մեկ պատվերով կարելի է պահանջել առավելագույնը 150 կոդ:
  3. Աշխատանքում կա 100 պատվերի սահմանաչափ։ Այսինքն՝ միաժամանակ 100-ից ավելի պատվեր չի կարող մշակվել։ Եթե ​​կան ավելի քան 100, ապա API-ն կսկսի սխալ վերադարձնել պատվերների ցանկի փոխարեն: Այս սխալը շտկելու միակ միջոցը որոշ պատվերներ փակելն է վեբ ինտերֆեյսի միջոցով: API-ն պարամետր չի տրամադրում պատվերների մասնակի ցուցադրման համար:
  4. Կա հարցումների քանակի սահմանափակում՝ ոչ ավելի, քան 10 հարցում վայրկյանում: Այս սահմանափակումը, իմ տվյալներով, փաստաթղթերում չկա, բայց կա։

CMS API-ի միջոցով KM մակնշման կոդերի պատվերների անձնական փորձից:

  1. Հարցումը (json ինքը) պետք է ստորագրվի ԳՕՍՏ ստորագրությամբ: Սա cryptopro-ի հետ աշխատանք է: Մենք պետք է ուշադիր հետևենք, որ օգտագործվող շրջանակը կամ գրադարանը չփոխի սկզբնական json-ը մեկ բայթի համար: Հակառակ դեպքում ստորագրությունն անմիջապես դադարում է վավերականությունից:
  2. Պատվերի ստորագրություն. Պատվերը կարող է ստորագրվել ցանկացած հաճախորդի ցանկացած ստորագրությամբ: Եթե ​​ստորագրությունը վավեր է, KMS համակարգը կընդունի այն: Ինտեգրման ընթացքում հնարավոր էր հարցումը ստորագրել թեստային CA-ի վրա տրված ուրիշի ստորագրությամբ։ CPS-ի մարտական ​​շրջանը մշակել է հրամանը և հրապարակել ծածկագրերը։ Իմ կարծիքով սա անվտանգության փոս է։ Մշակողները արձագանքել են սխալի զեկույցին «կտեսնենք»: Հուսով եմ, որ այն շտկվել է:

    Ուստի չափազանց զգույշ եղեք, եթե մեկ աշխատավայրում աշխատում են մեկից ավելի իրավաբանական անձինք: դեմքեր. Այսօր CPS-ը կընդունի այս հարցումները, իսկ վաղը հարցումները կվերստուգվեն և կոդերի կեսը կհանվի ուրիշի ստորագրության պատճառով։ Եվ սկզբունքորեն, ֆորմալ առումով ճիշտ կլինեն։

  3. Պատվերների ավտոմատ ստորագրումն այլևս հասանելի չէ CMS-ում: Դրա գործարկման համար պահանջվել է ազնիվ նշանի անձնական աքաունթում բեռնել բանալի մասնավոր հատվածը։ Սա առանցքային փոխզիջում է: Եվ գործող օրենսդրության համաձայն, ուժեղացված որակավորված էլեկտրոնային ստորագրության փոխզիջման դեպքում սեփականատերը պետք է տեղեկացնի իր հավաստագրման կենտրոնին (CA) և չեղյալ համարի UKES-ը: Եթե ​​այս ֆունկցիոնալությունը վերադարձվի, ապա ուշադիր համոզվեք, որ բանալու մասնավոր հատվածը չի հեռանում համակարգչից:
  4. Փետրվարին առաջադեմ տեխնոլոգիաների զարգացման կենտրոնը (CRPT) լուռ մտցրեց KMS API-ի հարցումների քանակի սահմանափակում: Ոչ ավելի, քան մեկ հարցում վայրկյանում: Հետո նույնքան անսպասելի ու լուռ հանեց այս սահմանափակումը։ Հետևաբար, ես խորհուրդ եմ տալիս համակարգում ներդնել ռեցիդիվների դեպքում հարցումների քանակը CRPT API-ին սահմանափակելու հնարավորություն: Այժմ տեղեկություններ կան վայրկյանում 10 հարցումների սահմանաչափի մասին։
  5. Նաև փետրվարին, առանց նախազգուշացման, KMS API-ի վարքագիծը զգալիորեն փոխվեց: API-ն ունի պատվերների կարգավիճակ ստանալու հարցում: Կարգավիճակը ցույց է տալիս բուֆերները և դրանց վիճակը: Մեկ GTIN = մեկ բուֆեր: Այն նաև նշել է, թե քանի կոդ կա բուֆերից ստանալու համար: Մի գեղեցիկ օր բոլոր բուֆերներն ունեին -1 հաշվարկ: Ես պետք է հարցնեի յուրաքանչյուր բուֆերի վիճակը առանձին՝ առանձին մեթոդով: Մեկ խնդրանքի փոխարեն ես ստիպված էի կատարել տասնմեկը։

Կոդերի կառուցվածքը

Այսպիսով, կոդերը պատվիրվում և գեներացվում են: Դրանք կարելի է վերցնել api-ի միջոցով՝ տեքստային ձևով, pdf-ով՝ որպես պիտակներ տպագրության համար և որպես csv ֆայլ՝ տեքստով:

API-ն արդեն գրված է վերևում։ Ինչ վերաբերում է մյուս երկու ուղիներին. Սկզբում CPS-ը թույլ էր տալիս վերցնել կոդերը միայն մեկ անգամ: Իսկ եթե վերցվել է pdf ֆայլ, ապա կոդերը հնարավոր է եղել ստանալ տեքստային տեսքով միայն pdf-ից բոլոր տվյալների մատրիսները վերասկանավորելու միջոցով։ Բարեբախտաբար, նրանք մի քանի անգամ ավելացրին կոդերը վերցնելու հնարավորությունը, և այս խնդիրը լուծվեց: Երկու օրվա ընթացքում կոդերը դեռ հասանելի են նորից ներբեռնելու համար։

Եթե ​​դուք վերցնում եք csv ձևաչափով, ապա երբեք, ոչ մի դեպքում մի բացեք այն excel-ով: Եվ ոչ մեկին թույլ մի տվեք: Excel-ն ունի ավտոմատ պահպանման հատկություն: Պահպանման պահին Excel-ը կարող է փոփոխել ձեր կոդերը ամենաանկանխատեսելի ձևով: Կոդերը դիտելու համար խորհուրդ եմ տալիս օգտագործել notepad++:

Եթե ​​CMS-ից ֆայլ եք բացում notepad ++-ում, կարող եք տեսնել այսպիսի տողեր: Երրորդ կոդը անվավեր է (այն չունի GS սահմանազատիչներ):

DataMatrix կամ ինչպես ճիշտ պիտակավորել կոշիկները

Գործընկերները մեզ տվել են իրենց ապրանքները նշելու ծածկագրեր: Անզեն աչքով դուք կարող եք տեսնել, թե որ ֆայլերն են ստեղծվել Excel-ի միջոցով. կոդերի մինչև 5%-ն անվավեր է:

Խստորեն խորհուրդ եմ տալիս կարդալ դրա մասին ստանդարտ GS1. Ստանդարտի նկարագրությունը պարունակում է DataMatrix-ի ձևավորման վերաբերյալ բազմաթիվ հարցերի պատասխաններ:

Նույնականացման կոդը բաղկացած է GTIN-ից և սերիական համարից: GS1 ստանդարտի համաձայն՝ դրանք համապատասխանում են հավելվածի նույնացուցիչներին (UI) 01 և 21: Խնդրում ենք նկատի ունենալ, որ հավելվածի նույնացուցիչները GTIN-ի և սերիական համարի մաս չեն: Նրանք ցույց են տալիս, որ Application Identifier-ին (UI) հաջորդում է GTIN-ը կամ սերիական համարը: Սա հատկապես կարևոր է POS ծրագրերի ծրագրավորման ժամանակ: 1162 պիտակը լրացնելու համար անհրաժեշտ է հենց GTIN և սերիական համարը՝ առանց հավելվածի նույնացուցիչների։

UTD-ի (ունիվերսալ փոխանցման փաստաթուղթ) և այլ փաստաթղթերի համար, ընդհակառակը, ամենից հաճախ անհրաժեշտ է ամբողջական գրառում՝ հայտի նույնացուցիչներով:

DataMatrix կամ ինչպես ճիշտ պիտակավորել կոշիկները

GS1 ստանդարտը նշում է, որ GTIN-ն ունի 14 նիշ ֆիքսված երկարություն և կարող է բաղկացած լինել միայն թվերից: Սերիական համարը փոփոխական երկարություն ունի և նկարագրված է ստանդարտի 155-րդ էջում: Գոյություն ունի նաև հղում դեպի աղյուսակը խորհրդանիշներով, որը կարելի է գտնել սերիական համարում:

Քանի որ սերիական համարն ունի փոփոխական երկարություն, GS տարանջատիչը ցույց է տալիս դրա ավարտը: ASCII աղյուսակում այն ​​ունի 29 ծածկագիրը: Առանց այս տարանջատիչի, ոչ մի ծրագիր չի հասկանա, թե որ կետում ավարտվեց սերիական համարը և սկսվեցին այլ տվյալների խմբերը:

Նշման կոդի (KM) մասին ավելի մանրամասն կարող եք գտնել այստեղ պաշտոնական փաստաթղթեր.

Կոշիկի համար սերիական համարը ֆիքսված է 13 նիշով, սակայն դրա չափը կարող է փոխվել ցանկացած պահի։ Այլ ապրանքային խմբերի համար (TG) սերիական համարի երկարությունը կարող է տարբեր լինել:

DataMatrix-ի ստեղծում

DataMatrix կամ ինչպես ճիշտ պիտակավորել կոշիկները

Հաջորդ քայլը տվյալների վերափոխումն է DataMatrix կոդի: Ռուսաստանի Դաշնության Կառավարության 860 որոշման մեջ նշվում է ԳՕՍՏ-ը, որի համաձայն անհրաժեշտ է ձևավորել DataMatrix: Նաև PPR 860-ը սահմանում է հավելվածի նույնացուցիչների պարտադիր օգտագործումը: Նկատի ունեցեք, որ DataMatrix ստանդարտում «հավելվածի նույնացուցիչներ» հասկացություն չկա: Դրանք միայն GS-1 DataMatrix ստանդարտում են: Պարզվում է, որ PPR 860-ը անուղղակիորեն պահանջում է GS-1 DataMatrix-ի օգտագործումը: Բարեբախտաբար, չափանիշները նման են: Հիմնական տարբերությունը. GS-1 DataMatrix-ում առաջին նիշը պետք է լինի FNC1: Պարտադիր չէ, որ GS նշանը լինի DataMatrix-ում առաջինը, այլ միայն FNC1:

FNC1-ը պարզապես չի կարող վերցվել և ավելացվել գծին որպես GS: Այն պետք է ավելացվի այն ծրագրի կողմից, որն առաջացնում է DataMatrix: Մի քանիսը բջջային հավելվածներ, որով կարող եք ստուգել գեներացված DataMatrix կոդերի ճիշտությունը։

Կարևոր. Ազնիվ նշանի հավելվածն ընդունում է անվավեր DataMatrix: Նույնիսկ QR կոդերը: Այն փաստը, որ ապրանքանիշը ճանաչված է և ցուցադրվում է ապրանքի մասին տեղեկատվությունը, չի նշանակում, որ DataMatrix-ը ճիշտ է ձևավորվել: Նույնիսկ երբ կրիպտո-պոչը փոխարինվեց, CZ հավելվածը ճանաչեց ապրանքանիշը և ցուցադրեց արտադրանքի տվյալները:

Ավելի ուշ CZ-ն թողարկվեց բացատրությունինչպես ճիշտ գեներացնել կոդերը: Սխալների կոդերի մեծ քանակի պատճառով նրանք վավեր ճանաչեցին առանց FNC1 կոդերը, բայց, այնուամենայնիվ, խորհուրդ են տալիս ստեղծել GS-1 DataMatrix:

Դժբախտաբար, գործընկերների տվյալների մատրիցիաների բավականին մեծ տոկոսը սխալներով է եկել: CZ-ի պարզաբանումների շնորհիվ «Հնարավո՞ր է հուլիսի 1-ից հետո նման ապրանքի առևտուր անել, թե՞ ոչ» հարցը ամբողջությամբ լուծվեց։ Սփոյլեր - կարող ես:

Տպել

Ուշադրություն դարձրեք նամականիշերի տպագրության ձևին. Ջերմային տպիչի վրա տպելիս դրոշմակնիքն արագորեն գունաթափվում է, և այս ապրանքն այլևս չի կարող վաճառվել: Անընթեռնելի դրոշմակնիքը PPR 860-ի խախտում է, ինչը հանգեցնում է ապրանքների առգրավման, տուգանքների և քրեական պատասխանատվության:

Օգտագործեք ջերմային փոխանցման տպագրություն: Այս դեպքում դրոշմակնիքն այնքան էլ հակված չէ խամրելու։ Պիտակի նյութը նաև որոշում է, թե ապրանքանիշը որքանով է ենթակա մեխանիկական վնասների: Եթե ​​կոդը ընթեռնելի չէ մեխանիկական վնասների պատճառով, դա հավասարազոր է ապրանքանիշի բացակայությանը՝ դրանից բխող բոլոր հետևանքներով:

DataMatrix կամ ինչպես ճիշտ պիտակավորել կոշիկները

Ընտրեք տպիչ պլանավորված տպագրական ծավալներից: Սեղանի տպիչները նախատեսված չեն օրական 100 պիտակ տպելու համար:

Տպման դադարեցումը և գործարկումը մեծացնում են տպիչի մաշվածությունը: Որոշ ծրագրեր տպագրական աշխատանքն ուղարկում են մեկ պիտակ: Ավելի լավ է չօգտագործել նման ծրագրեր։

Աշխատեք փաստաթղթերի հետ

Նամականիշերը տպագրվելուց և կպցնելուց հետո նրանց հետ հետագա բոլոր գործողությունները կատարվում են փաստաթղթերի կամ ազնիվ նշանի անձնական հաշվի միջոցով:

Մեծ թվով կոդերի հետ աշխատելիս կարող եք ստեղծել անհրաժեշտ կոդերը պարունակող xml ֆայլեր և վերբեռնել այդ ֆայլերը API-ի կամ ձեր անձնական հաշվի վեբ ինտերֆեյսի միջոցով:

XSD սխեման կարելի է ներբեռնել LC CZ-ի «օգնություն» բաժնում:

Ուշադրություն դարձրեք հետևյալ կետերին.

  1. LC CZ-ում Xsd սխեմաները պարունակում են TIN վավերացման սխալներ և գծի երկարության սահմանափակումներ: Միայն սխալները շտկելով, կարող եք օգտագործել սխեմաները: Բարեբախտաբար, սխալներն ակնհայտ են, ուստի դա դժվար չէ անել:
  2. Սխեման ամենից հաճախ բաղկացած է երկու մասից՝ ընդհանուր բոլոր տեսակի փաստաթղթերի համար և առանձին՝ որոշակի տեսակի համար: Ընդհանուր սխեման ներմուծման միջոցով ավելացվում է կոնկրետին: Երկու սխեմաներն էլ գտնվում են LC ChZ-ի օգնության բաժնում:
  3. CM-ի փախուստի կանոնները տարբերվում են XML-ի համար ընդհանուր ընդունվածներից, սա գրված է CZ-ի պաշտոնական փաստաթղթերում, ուշադրություն դարձրեք սրան: Այստեղ այստեղ 4-րդ էջում բոլոր կանոնները.
  4. Չպետք է փորձեք մեկ ֆայլում շրջանառության մեջ մտցնել 150 ծածկագիր։ Ըստ ականատեսների՝ սովորաբար անցնում են 000-ից ավելի ֆայլեր...
  5. Xml ֆայլը կարող է փաթաթվել «xml վավերացման սխալ» սխալով, և հինգ րոպե անց նույն ֆայլն ընդունվում է առանց խնդիրների:
  6. Եթե ​​ֆայլը պարունակում է կոդ, որն արդեն դրվել է շրջանառության մեջ, ապա շրջանառության մեջ դրված ֆայլը, ամենայն հավանականությամբ, չի ընդունվի:
  7. Որպես ժամանակավոր լուծում օգտագործվում են առաքման և ստացման փաստաթղթերը: Հետագայում նրանք նախատեսում են վերացնել դրանք և անցնել UPD-ին՝ PPR 860-ի համաձայն։
  8. Առասպել 60 օրվա մասին. Կարծիք կա, որ շրջանառության մեջ չդրվող ծածկագրերը «վառվում են» 60 օր հետո։ Սա առասպել է, աղբյուրն անհայտ է։ Կոդերը «վառվում են» միայն այն դեպքում, եթե դրանք 60 օրվա ընթացքում չեք հավաքել CPS-ից: Հավաքված ծածկագրերի ժամկետը սահմանափակված չէ:

Ամփոփում

Իմ անվճար պիտակավորման BarCodesFX հավելվածը մշակելիս ի սկզբանե կատարվել է ինտեգրում KMS API-ի հետ: Երբ ազնիվ նշանը երկրորդ անգամ անսպասելիորեն փոխեց API-ի տրամաբանությունը, ինտեգրումը պետք է լքվեր: Հուսով եմ, որ ապագայում CZ-ն կկարողանա կայունացնել զարգացումը և API-ն, քանի որ. ոչ առևտրային արտադրանքի համար ինձ համար շատ թանկ է ամեն օր կրկնակի ստուգել, ​​թե արդյոք փոփոխություններ են եղել API-ում և արագ կատարելագործել այն:

Նշումն իրականացնելիս ուշադիր կարդացեք ձեր TG ապրանքային խմբի կարգավորող փաստաթղթերը, ճիշտ տպեք GS1-DataMatrix-ը և պատրաստ եղեք արդար CZ նշանից ցանկացած չնախատեսված փոփոխության:

Fort Alliance-ը ստեղծել է տեղեկատվական տարածք (վիքի, չաթեր հեռագիր, սեմինարներ, վեբինարներ), որտեղ դուք կարող եք գտնել օգտակար և արդի տեղեկատվություն բոլոր ոլորտներում պիտակավորման վերաբերյալ:

Source: www.habr.com

Добавить комментарий