{"id":335610,"date":"2022-07-12T09:00:15","date_gmt":"2022-07-12T09:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=335610"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=335610","title":{"rendered":"<span>\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440 \u043f\u043e\u0434 \u0441\u0435\u0431\u044f \u043d\u0430 low-code \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/85c\/21d\/e8b\/85c21de8bc941b5980f16864b6d5c0a5.jpg\" width=\"1001\" height=\"581\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/85c\/21d\/e8b\/85c21de8bc941b5980f16864b6d5c0a5.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u2013 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0438 \u043c\u0443\u0442\u043e\u0440\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b: \u0434\u0436\u0438\u0440\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f, \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u0430\u044f, Trello \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u043d\u0435 \u0434\u0430\u044e\u0442 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439.<\/p>\n<p>\u041c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u0432\u043e\u0439 low-code \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0448\u0438 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 CRM \u0438 ERP-\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0436\u0435 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 \u043d\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u043e \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u0432\u044b\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0438\u0437 \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443.<\/p>\n<h2>TL;DR \u2014 \u0432\u043e\u0442 \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0446\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 (\u0438 3 \u0447\u0430\u0441\u0430 \u0440\u0430\u0431\u043e\u0442\u044b)<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/c10\/994\/843\/c10994843c6fcb613d0ce533f1c5a47a.jpg\" alt=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430\" title=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430\" width=\"2384\" height=\"1677\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c10\/994\/843\/c10994843c6fcb613d0ce533f1c5a47a.jpg\" data-blurred=\"true\"\/><figcaption>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430<\/figcaption><\/figure>\n<h2>\u0427\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430<\/h2>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0442 \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u2014 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u0441\u043a\u0438 \u0432\u0441\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. <\/p>\n<\/li>\n<li>\n<p>\u0423 \u0437\u0430\u0434\u0430\u0447 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439. \u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0434\u0438\u043d? \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u0430 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0442\u043e \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439-\u0441\u0432\u044f\u0437\u044c\u044e \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0438, \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043b\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 \u2014 \u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0430\u043a \u043a\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u0435\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u0411\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0435\u0440\u0441\u0438\u0439, \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0439 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u043f\u0430\u0440\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u0449\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u2014 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435. \u0412\u0441\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0445\u043e\u0442\u0435\u043b\u043a\u0438 \u0435\u0441\u043b\u0438 \u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f, \u0442\u043e \u0443\u0436\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u0434\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0438\u0445 \u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043b\u043e \u043d\u0430 15 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h2>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c low-code \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f c \u043f\u043e\u043c\u043e\u0449\u044c\u044e SQL-\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 <a href=\"https:\/\/wiki.ozma.io\/ru\/docs\/funql\" rel=\"noopener noreferrer nofollow\">FunQL<\/a>. \u041f\u043e \u0441\u0443\u0442\u0438 \u0432 \u043d\u0451\u043c \u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0430\u0445\u0430\u0440\u0430 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0440\u0435\u043b\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0431\u0435\u0437 JOIN. \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 SQL, \u0438 \u043a \u043d\u0435\u043c\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2013 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a ROW LEVEL SECURITY \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0411\u0414, \u043d\u043e \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438. \u0421\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. <\/p>\n<p>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0430 (\u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438)<\/p>\n<\/li>\n<li>\n<p>\u0424\u043e\u0440\u043c\u044b (\u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430-\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430)<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u044b (\u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0438 \u0441 \u043b\u044e\u0434\u044c\u043c\u0438)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u0440\u0435\u0432\u043e (\u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438)<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u043d\u044e (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434\u044b (\u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u0431\u0430\u0437\u0435)<\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0443<\/h2>\n<p>\u041d\u0430\u0448 \u0432\u044b\u0431\u043e\u0440 \u2014 \u044d\u0442\u043e \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441 \u0434\u043e\u0441\u043a\u043e\u0439 \u0441 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0440\u0430\u0431\u043e\u0442 \u0438 \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043a\u0430\u043d\u0431\u0430\u043d\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4df\/ca9\/641\/4dfca9641bdf30a30046700cff8455fb.png\" alt=\"\u0412\u043e\u0442 \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 :)\" title=\"\u0412\u043e\u0442 \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 :)\" width=\"2880\" height=\"1636\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4df\/ca9\/641\/4dfca9641bdf30a30046700cff8455fb.png\"\/><figcaption>\u0412\u043e\u0442 \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \ud83d\ude42<\/figcaption><\/figure>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_board?is_archived=false\" rel=\"noopener noreferrer nofollow\">\u0412\u043e\u0442 \u0442\u0443\u0442<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u043e\u0439 \u0432 \u0434\u0435\u043c\u043a\u0435.<br \/>\u0410 <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22pm%22&amp;name=%22tasks_board%22\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a> \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 FunQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u043a\u0430\u043a \u043c\u044b \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u0438.<\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e FunQL \u043e\u043f\u0438\u0448\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0434\u043e\u0441\u043a\u0438. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 FunQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430. \u0414\u043b\u044f \u043a\u0430\u043d\u0431\u0430\u043d-\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443, \u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e).<\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435 \u043f\u043e\u043b\u044f, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u043b\u043e\u043a\u0435 SELECT \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435, \u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0440\u044b\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c \u043f\u043e\u043b\u044f <code>visible = false<\/code>. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c, \u0438\u043a\u043e\u043d\u043a\u0443 \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043e\u043c \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 &#171;\u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0430&#187;<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT     \/* User view type *\/ @type = 'board',  \/* User view title *\/                                           @title = '\u0417\u0430\u0434\u0430\u0447\u0438',        subject @{ \/* Material design icon *\/         icon = 'subject'      },     status @{ \/* Group entries by this field *\/         board_group = true, \/* Do not display status field on the card *\/          visible = false          },     start_date @{         icon = 'date_range'     },     due_date @{         icon = 'flag',         cell_variant = CASE              WHEN due_date &lt; $$transaction_time              THEN 'warning'          END     },     priority @{         icon = 'priority_high'     },     responsible_contact @{         icon = 'person'     },     \"order\" @{ \/* Use the value from the \"order\" field          as a sorting number for all entries *\/         board_order = true,                  visible = false     } FROM      pm.tasks<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u043a\u0430\u043d\u0431\u0430\u043d\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432 \u043d\u0435\u0439. \u041a\u0430\u043d\u0431\u0430\u043d, \u043a\u0430\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0437\u0430\u0434\u0430\u0447, \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0424\u0438\u043b\u044c\u0442\u0440\u044b \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b <code>NULL<\/code>. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c, \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0443, \u0441\u0442\u0430\u0442\u0443\u0441\u0443 \u0438\u043b\u0438 \u0441\u0440\u043e\u043a\u0443. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 \u0431\u043b\u043e\u043a\u0435 WHERE <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">{   \/* Arguments of the user view *\/      $responsible array(reference(base.people)) null @{         caption = '\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439',         \/* Available values in popup will be restricted          with the results of the specified user view *\/         options_view = &amp;base.ref_base_people_view         },     $status array(enum('backlog', 'new', 'in_progress', 'done')) null @{         caption = '\u0421\u0442\u0430\u0442\u0443\u0441',         text = array mapping            WHEN 'backlog' THEN '\u0418\u0434\u0435\u0438'            WHEN 'new' THEN '\u041d\u043e\u0432\u043e\u0435'            WHEN 'in_progress' THEN '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'            WHEN 'done' THEN '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e'        END,     },     $priority array(enum('low', 'medium', 'high', 'urgent')) null @{         caption = '\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442',         text = array mapping            WHEN 'low' THEN '\u041d\u0438\u0437\u043a\u0438\u0439'            WHEN 'medium' THEN '\u0421\u0440\u0435\u0434\u043d\u0438\u0439'            WHEN 'high' THEN '\u0412\u044b\u0441\u043e\u043a\u0438\u0439'            WHEN 'urgent' THEN '\u041a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439'        END         },     $is_archived bool null @{         caption = '\u0410\u0440\u0445\u0438\u0432'     },     \/* \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b *\/ }: SELECT \/* ... *\/  FROM pm.tasks WHERE ($responsible IS NULL         OR responsible_contact = ANY($responsible)) AND ($status IS NULL         OR status = ANY($status))   AND ($priority IS NULL         OR priority = ANY($priority))   AND ($is_archived IS NULL         OR is_archived = $is_archived) <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0432\u0435\u0440\u0445\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u2014 \u201c\u041c\u043e\u0438\u201d \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u201c\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e\u201d \u2014 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447, \u0441\u0440\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b, \u201c\u041d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e\u201d \u2014 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u0435\u0434\u0443\u0442 \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u044e\u0437\u0435\u0440\u0432\u044c\u044e, \u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0432 \u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 @buttons \u0438 \u0437\u0430\u0434\u0430\u0435\u043c \u0432 \u043d\u0451\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">@buttons = [    {    \/* Caption of the button *\/ caption: '\u0421\u0442\u0430\u0442\u0443\u0441',         \/* Material design icon code *\/         icon: 'filter_alt',         \/* Show button at the top right corner on PCs *\/         display: 'desktop',         buttons: [         {             caption: '\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e',                 icon: 'flag',                 \/* Reference to the user view *\/                 ref: &amp;pm.tasks_board,                 \/* New values for arguments *\/                 args: {                 status: ['backlog', 'new', 'in_progress'],                     due_date_to: $$transaction_time,                     is_archived: false,                     responsible: $responsible,                     parent_task: $parent_task                 },                 target: 'top'             },             {             caption: '\u041d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e',                 icon: 'notifications',                 ref: &amp;pm.tasks_board,                 args: {                 status: ['new', 'in_progress'],                     is_archived: false,                     responsible: $responsible,                     parent_task: $parent_task                 },                 target: 'top'             },             {             caption: '\u0412\u0441\u0435',                 icon: 'filter_list_alt',                 ref: &amp;pm.tasks_board,                 args: {                 is_archived: false,                     responsible: $responsible,                     parent_task: $parent_task                 },                 target: 'top'             }         ]     }  ]<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0444\u0438\u043d\u0430\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u0430\u043d\u0431\u0430\u043d-\u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u043a\u0430\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">\/* Reference to the user view opened by clicking the \"Open entry in modal\" button *\/ @row_link = &amp;pm.task_form,  \/* Set the user view used for creating new entries *\/ @card_create_view = { \/* Reference to the user view *\/ ref: &amp;pm.task_form, \/* Default values for the entry being created *\/ default_values: {                              responsible_contact: $responsible, parent_task: $parent_task } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0441 \u043a\u0430\u043d\u0431\u0430\u043d\u043e\u043c \u0432\u0440\u043e\u0434\u0435 \u0432\u0441\u0451.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u0430\u043d\u0431\u0430\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u0438\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">{        \/* Arguments of the user view *\/      $responsible array(reference(base.people)) null @{     caption = '\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439',         \/* Available values in popup will be restricted          with the results of the specified user view *\/         options_view = &amp;base.ref_base_people_view         },     $status array(enum('backlog', 'new', 'in_progress', 'done')) null @{         caption = '\u0421\u0442\u0430\u0442\u0443\u0441',         text = array mapping            WHEN 'backlog' THEN '\u0418\u0434\u0435\u0438'            WHEN 'new' THEN '\u041d\u043e\u0432\u043e\u0435'            WHEN 'in_progress' THEN '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'            WHEN 'done' THEN '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e'        END     },     $priority array(enum('low', 'medium', 'high', 'urgent')) null @{         caption = '\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442',         text = array mapping            WHEN 'low' THEN '\u041d\u0438\u0437\u043a\u0438\u0439'            WHEN 'medium' THEN '\u0421\u0440\u0435\u0434\u043d\u0438\u0439'            WHEN 'high' THEN '\u0412\u044b\u0441\u043e\u043a\u0438\u0439'            WHEN 'urgent' THEN '\u041a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439'        END     },     $parent_task reference(pm.tasks) null @{         caption = '\u041d\u0430\u0434\u0437\u0430\u0434\u0430\u0447\u0430'     },     $start_date_from datetime null @{         caption = '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441'     },     $start_date_to datetime null @{         caption = '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e'     },     $due_date_from datetime null @{         caption = '\u0421\u0440\u043e\u043a \u0441'     },     $due_date_to datetime null @{         caption = '\u0421\u0440\u043e\u043a \u0434\u043e'     },     $is_archived bool null @{         caption = '\u0410\u0440\u0445\u0438\u0432'     } }: SELECT     \/* User view type. See also: https:\/\/wiki.ozma.io\/ru\/docs\/funapp\/board *\/         @type = 'board',      \/* User view title *\/     @title = '\u0417\u0430\u0434\u0430\u0447\u0438',     \/* \"Filters\" panel is hidden by default *\/     @show_argument_editor = false,       \/* \"Filters\" button will be showed on top of the board *\/     @show_argument_button = true,        \/* Reference to the user view opened by clicking the \"Open entry in modal\" button *\/     @row_link = &amp;pm.task_form,       \/* Set the user view used for creating new entries *\/     @card_create_view = {          \/* Reference to the user view *\/         ref: &amp;pm.task_form,         \/* Default values for the entry being created *\/         default_values: {                                           responsible_contact: $responsible,             parent_task: $parent_task         }     },     \/* Specifications of the interface buttons *\/     @buttons = [ \/* ... *\/ ],      subject @{         \/* Material design icon *\/         icon = 'subject'      },     status @{         \/* Group entries by this field *\/         board_group = true,            \/* Do not display status field on the card *\/                        visible = false,       },     start_date @{         icon = 'date_range',     },     due_date @{         icon = 'flag'     },     priority as priority_raw @{         \/* Display the icon specified in the default attributes for the \"priority\" field *\/        icon = priority.@icon,     },     responsible_contact @{         icon = 'person'     },     parent_task @{         icon = 'account_tree'     },     \"order\" @{          \/* Use the value from the \"order\" field as a sorting number for all entries *\/         board_order = true,           visible = false,     },      FROM pm.tasks     WHERE ($is_archived IS NULL OR is_archived = $is_archived)       AND ($responsible IS NULL OR responsible_contact = ANY($responsible))       AND (($parent_task IS NULL AND parent_task IS NULL) OR parent_task = $parent_task)       AND ($status IS NULL OR status = ANY($status))       AND ($priority IS NULL OR priority = ANY($priority))       AND ($start_date_to IS NULL OR start_date &lt;= $start_date_to)       AND ($start_date_from IS NULL OR start_date >= $start_date_from)       AND ($due_date_to IS NULL OR due_date &lt;= $due_date_to)       AND ($due_date_from IS NULL OR due_date &lt;= $due_date_to)  ORDER BY \"order\",           is_archived,           completed_datetime DESC NULLS FIRST,           due_date NULLS LAST,           id<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0451 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0441\u043b\u0435 <code>@<\/code> \u2014 \u044d\u0442\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.\u00a0 \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u2014\u00a0 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u044e\u0437\u0435\u0440\u0432\u044c\u044e), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0 <code>@title<\/code>, <code>@row_link<\/code> \u0438 \u043f\u0440\u043e\u0447\u0438\u0435, \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u2014 <code>@{ visible = false }<\/code>.\u00a0<\/p>\n<p>\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u043d\u043e \u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 (\u0442\u0430\u0431\u043b\u0438\u0446\u0430 <code>public.default_attributes<\/code>). \u0422\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0447\u0435\u0435. \u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u2013 \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445 \u043c\u044b \u0437\u0430\u0434\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 <code>{ $is_archived bool null @{ caption = '\u0410\u0440\u0445\u0438\u0432' }}<\/code><\/p>\n<h2>\u041f\u0438\u043b\u0438\u043c \u0444\u043e\u0440\u043c\u044b<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9b4\/f99\/f2c\/9b4f99f2cf71bbe1aa6e18d742889ba6.png\" alt=\"\u0424\u043e\u0440\u043c\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u0442\u043e\u043a, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438\" title=\"\u0424\u043e\u0440\u043c\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u0442\u043e\u043a, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438\" width=\"2000\" height=\"1135\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9b4\/f99\/f2c\/9b4f99f2cf71bbe1aa6e18d742889ba6.png\"\/><figcaption>\u0424\u043e\u0440\u043c\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u0442\u043e\u043a, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438<\/figcaption><\/figure>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/task_form?id=45\" rel=\"noopener noreferrer nofollow\">\u0422\u0430\u043a<\/a> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0434\u0435\u043c\u043e-\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435. \u0410 <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22pm%22&amp;name=%22task_form%22\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e<\/a> \u0435\u0451 FunQL \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0451 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438:<\/p>\n<ol>\n<li>\n<p><strong>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 (\u0444\u043e\u0440\u043c\u0443) \u0437\u0430\u0434\u0430\u0447\u0438.<\/strong> FunQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435, \u043a\u0430\u043a \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043a\u0430\u043d\u0431\u0430\u043d\u0430 \u0438\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u2014 \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e <code>id<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430. <\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0437\u043e\u0431\u044c\u0435\u043c \u0444\u043e\u0440\u043c\u0443 \u043d\u0430 \u0431\u043b\u043e\u043a\u0438<\/strong>, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043f\u043e\u043b\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u043f\u043e \u0431\u043b\u043e\u043a\u0430\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u043a\u0435, \u0438 \u043d\u0430 \u041f\u041a \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0442\u0430\u0439\u043c\u043b\u0430\u0439\u043d \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c (\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b), \u0442\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0442\u0430\u0439\u043c\u043b\u0430\u0439\u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0438\u0432\u0435\u043d\u0442\u044b \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445. <\/p>\n<\/li>\n<li>\n<p>\u041d\u0438\u0436\u0435<strong> \u0432\u0441\u0442\u0440\u043e\u0438\u043c \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0434\u043e\u0441\u043a\u0443 \u0441 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043d\u043e\u043f\u043a\u0430 \u201c\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u201d\/\u201d\u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u201d <\/strong>&#8212; \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f &#171;\u0410\u0440\u0445\u0438\u0432&#187; \u043d\u0430\u00a0 <code>true<\/code> \u0438\u043b\u0438 <code>false<\/code>, \u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443. <\/p>\n<\/li>\n<\/ol>\n<details class=\"spoiler\">\n<summary>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">{     $id reference(pm.tasks) }: SELECT      \/* User view type *\/     @type = 'form',     \/* User view title *\/     @title = $id=>__main,     \/* Form block sizes. This form has three blocks - two first row blocks with the ratio of 7 to 5, and the third block occupying the second row *\/                           @block_sizes = array[         7, 5,         12     ],     @buttons = [         {             caption: '\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c',             \/* Show button at the top right corner on PCs *\/             display: 'desktop',             \/* Show button only if the record is not archived *\/             visible: NOT $id=>is_archived,             \/* Set material design icon *\/             icon: 'archive',             \/* Color variant for the button *\/             variant: 'outline-danger',             action: {                  schema: 'user',                  name: 'archive_record'             },             args: {                  entity: {                      schema: 'pm',                      name: 'tasks'                 },                  is_archived: true,                  id: $id              }         },         {             caption: '\u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c',             display: 'desktop',             visible: $id=>is_archived,             icon: 'archive',             variant: 'outline-success',             action: {                  schema: 'user',                  name: 'archive_record'             },             args: {                  entity: {                      schema: 'pm',                      name: 'tasks'                 },                  is_archived: false,                  id: $id              }         }     ],     subject @{         \/* Display input control in the first block *\/          form_block = 0     },     description @{         form_block = 0,         \/* Use multiline WYSIWYG editor *\/         text_type = 'wysiwyg',         \/* Set control height to 400 px *\/         control_height = 400     },     parent_task @{         form_block = 0,     },     status @{         form_block = 1     },     responsible_contact @{         form_block = 1     },     priority @{         form_block = 1     },     start_date @{         form_block = 1,         default_value = $$transaction_time     },     due_date @{         form_block = 1     },     \/* Arrange nested user views on the form *\/     {         \/* Reference to the nested user view *\/         ref: &amp;pm.tasks_board,         \/* Arguments that will be passed to the nested user view *\/                                      args: {             parent_task: $id         }     } as subtasks @{         \/* Display user view control on the form  *\/         control = 'user_view',         \/* Display user View control in the first block *\/         form_block = 4,         \/* Caption for the nested User View. User view @title will be replaced with this caption *\/         caption = '\u041f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0438'     },     {         ref: &amp;pm.notes_for_task_timeline,         args: {             id: $id         }     } as notes @{         control = 'user_view',         form_block = 1,         caption = '\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438'     } FROM      pm.tasks  WHERE      id = $id  FOR INSERT INTO      pm.tasks<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e <code>SELECT<\/code> \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u044b \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0436\u0435\u043b\u0430\u0435\u043c\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>FOR INSERT INTO<\/code>.<\/p>\n<h2>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u043a\u0443\u0434\u0430 \u0436\u0435 \u0431\u0435\u0437 \u043d\u0435\u0435)<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/33d\/140\/423\/33d14042384e4568344b488a293c3708.png\" alt=\"\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0437\u0430\u0434\u0430\u0447\" title=\"\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0437\u0430\u0434\u0430\u0447\" width=\"2880\" height=\"1638\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33d\/140\/423\/33d14042384e4568344b488a293c3708.png\"\/><figcaption>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0437\u0430\u0434\u0430\u0447<\/figcaption><\/figure>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_table?is_archived=false&amp;start_date_to=%222025-01-01T06%3A00%3A00.000Z%22\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438.<\/a><br \/><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22pm%22&amp;name=%22tasks_table%22\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e\u0437\u0434\u0430\u043b.<\/a><\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0441 \u043a\u0430\u043d\u0431\u0430\u043d\u043e\u043c \u2014 \u043d\u0430\u043f\u0438\u0448\u0435\u043c FunQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043d\u043e\u043f\u043e\u043a \u0441 \u201c\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c\u0438\u201d \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0432 \u0432\u0435\u0440\u0445\u043d\u044e\u044e \u043f\u0430\u043d\u0435\u043b\u044c. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0435\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043b\u0438\u0448\u043d\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e 25 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. <\/p>\n<p>\u0412 \u0444\u0438\u043d\u0430\u043b\u0435 \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043b\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435, \u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>FunQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0430\u0434\u0430\u0447<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">{          \/* Arguments of the user view *\/     $is_archived bool null @{         caption = '\u0410\u0440\u0445\u0438\u0432'     },     $responsible array(reference(base.people)) null @{         caption = '\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439',         \/* Available values in popup will be restricted with the results of the specified user view *\/         options_view = &amp;base.ref_base_people_view      },     $parent_task reference(pm.tasks) null @{         caption = '\u041d\u0430\u0434\u0437\u0430\u0434\u0430\u0447\u0430'     },     $status array(enum('backlog', 'new', 'in_progress', 'done')) null @{         caption = '\u0421\u0442\u0430\u0442\u0443\u0441',         text = array mapping             WHEN 'backlog' THEN '\u0418\u0434\u0435\u0438'             WHEN 'new' THEN '\u041d\u043e\u0432\u043e\u0435'             WHEN 'in_progress' THEN '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'             WHEN 'done' THEN '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e'         END,     },     $priority array(enum('low', 'medium', 'high', 'urgent')) null @{         caption = '\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442',         text = array mapping             WHEN 'low' THEN '\u041d\u0438\u0437\u043a\u0438\u0439'             WHEN 'medium' THEN '\u0421\u0440\u0435\u0434\u043d\u0438\u0439'             WHEN 'high' THEN '\u0412\u044b\u0441\u043e\u043a\u0438\u0439'             WHEN 'urgent' THEN '\u041a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439'         END     },     $start_date_from datetime null @{         caption = '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441'     },     $start_date_to datetime null @{         caption = '\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e'     },     $due_date_from datetime null @{         caption = '\u0421\u0440\u043e\u043a \u0441'     },     $due_date_to datetime null @{         caption = '\u0421\u0440\u043e\u043a \u0434\u043e'     } }: SELECT     \/* User view type. See also: https:\/\/wiki.ozma.io\/ru\/docs\/funapp\/table *\/       \/* This table can be displayed as a tree is case of all filters are null. More info about tree view: https:\/\/wiki.ozma.io\/ru\/docs\/funapp\/tree *\/      @type = 'table',         \/* User view title *\/                                         @title = '\u0417\u0430\u0434\u0430\u0447\u0438',     \/* \"Filters\" panel is hidden by default *\/     @show_argument_editor = false,       \/* \"Filters\" button will be showed on the top of the board *\/                          @show_argument_button = true,     \/* Set the user view used for creating new entries *\/     @create_link = &amp;pm.task_form,     \/* Reference to the user view opened by clicking the \"Open entry in modal\" button *\/     @row_link = &amp;pm.task_form,     \/* Disable ability to create new child record if parent task is not null and it was archived *\/     @soft_disabled = $parent_task=>is_archived,       \/* Set pagination options *\/     @lazy_load = {                                                   pagination: {              \/* Show 25 rows per page *\/             per_page: 25         }     },     \/*  Specifications of the interface buttons *\/                     @buttons = [                                                 {             \/* Caption of the button *\/             caption: '\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439',             \/* Material design icon code *\/             icon: 'people',               \/* Show button at the top right corner on PCs *\/                                display: 'desktop',             buttons: [                 {                     caption: '\u042f',                     ref: &amp;pm.tasks_table,                     icon: 'person',                     \/* Apply a \"light gray\" color variant to the button if there is no person associated with the current user *\/                     \/* $$user_id returns ID of the current user *\/                     variant: CASE WHEN (SELECT COUNT(1) FROM base.people WHERE user = $$user_id) = 0 THEN 'light' END,                      args: {                         responsible: (                             SELECT array_agg(id)                              FROM base.people                              WHERE user = $$user_id                         ),                         status: $status,                         start_date_to: $start_date_to,                         start_date_from: $start_date_from,                         due_date_to: $due_date_to,                         due_date_from: $due_date_from,                         is_archived: $is_archived,                         parent_task: $parent_task,                         priority: $priority                     },                     \/* Open link full screen *\/                     target: 'top'                 },                 {                     caption: '\u0412\u0441\u0435',                     ref: &amp;pm.tasks_table,                     icon: 'people',                     args: {                         responsible: null,                         status: $status,                         start_date_to: $start_date_to,                         start_date_from: $start_date_from,                         due_date_to: $due_date_to,                         due_date_from: $due_date_from,                         is_archived: $is_archived,                         parent_task: $parent_task,                         priority: $priority                     },                     target: 'top'                 }             ]         },         {             caption: '\u0421\u0442\u0430\u0442\u0443\u0441',             icon: 'filter_alt',             display: 'desktop',             buttons: [                 {                     caption: '\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e',                     icon: 'flag',                     ref: &amp;pm.tasks_table,                     args: {                         status: ['backlog', 'new', 'in_progress'],                         due_date_to: $$transaction_time,                         is_archived: false,                         responsible: $responsible,                         parent_task: $parent_task                     },                     target: 'top'                 },                 {                     caption: '\u041d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e',                     icon: 'notifications',                     ref: &amp;pm.tasks_table,                     args: {                         status: ['new', 'in_progress'],                         is_archived: false,                         responsible: $responsible,                         parent_task: $parent_task                     },                     target: 'top'                 },                 {                     caption: '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e',                     icon: 'done_all',                     ref: &amp;pm.tasks_table,                     args: {                         status: ['done'],                         is_archived: false,                         responsible: $responsible,                         parent_task: $parent_task                     },                     target: 'top'                 },                 {                     caption: '\u0412\u0441\u0435',                     icon: 'filter_list_alt',                     ref: &amp;pm.tasks_table,                     args: {                         is_archived: false,                         responsible: $responsible,                         parent_task: $parent_task                     },                     target: 'top'                 },                  {                     caption: '\u0410\u0440\u0445\u0438\u0432',                     icon: 'delete',                     ref: &amp;pm.tasks_table,                     args: {                         is_archived: true,                         responsible: $responsible,                         parent_task: $parent_task                     },                     target: 'top'                 }             ]         },         {                \/* Open board with tasks instead of tasks table *\/                caption: '\u0414\u043e\u0441\u043a\u0430',               tooltip: '\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0438',             icon: 'sticky_note_2',             variant: 'dark',              display: 'desktop',             ref: &amp;pm.tasks_board,               \/* Use filters from tasks table for tasks board *\/             args: {                 is_archived: $is_archived,                 parent_task: $parent_task,                 status: $status,                 priority: $priority,                 start_date_from: $start_date_from,                 start_date_to: $start_date_to,                 due_date_from: $due_date_from,                 due_date_to: $due_date_to,                 responsible: $responsible             },                target: 'top'         },     ],      subject @{         \/* Set column width to 350 px *\/         column_width = 350,       },     status @{         column_width = 100     },     priority @{         column_width = 100     },     start_date @{         column_width = 100,         default_value = $$transaction_time \/* $$transaction_time returns current timestamp *\/     },     due_date @{         column_width = 100     },     description @{         column_width = 300     },     responsible_contact @{         column_width = 150     },     parent_task @{         \/* Set $parent_task argument value as a default value for \"parent_task\" field *\/         default_value = $parent_task,          \/* Display column \"parent_task\" only if $parent_task argument value is null *\/         visible = $parent_task IS NULL                  },     completed_datetime @{         column_width = 125,         visible = ($status = array['done'])     },     completed_person @{         column_width = 125,         visible = ($status = array['done'])     }     FROM pm.tasks    WHERE ($is_archived IS NULL OR is_archived = $is_archived)      AND ($responsible IS NULL OR responsible_contact = ANY($responsible))      AND ($parent_task IS NULL OR parent_task = $parent_task)      AND ($status IS NULL OR status = ANY($status))      AND ($priority IS NULL OR priority = ANY($priority))      AND ($start_date_to IS NULL OR start_date &lt;= $start_date_to)      AND ($start_date_from IS NULL OR start_date >= $start_date_from)      AND ($due_date_to IS NULL OR due_date &lt;= $due_date_to)      AND ($due_date_from IS NULL OR due_date &lt;= $due_date_to) ORDER BY is_archived,          status.@order_number, \/* Return an attribute \"order_numer\" value for the \"status\" column field *\/          completed_datetime DESC NULLS FIRST,          start_date NULLS LAST,          id  \/* Set the main entity *\/ FOR INSERT INTO pm.tasks<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0434\u043d\u043e\u0433\u043e <code>SELECT<\/code> \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u0436\u0435 \u0441 <code>JOIN<\/code> \u0438 <code>UNION<\/code> \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445.<\/p>\n<h2>\u0414\u0435\u0440\u0435\u0432\u044c\u044f &#8212; \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430\u0441\u043a\u043e\u0432<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fef\/787\/485\/fef787485bf04bce06919a2ba87644ca.png\" alt=\"\u0414\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0438 \u0438\u0445 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\" title=\"\u0414\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0438 \u0438\u0445 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\" width=\"2880\" height=\"1638\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fef\/787\/485\/fef787485bf04bce06919a2ba87644ca.png\"\/><figcaption>\u0414\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0438 \u0438\u0445 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447<\/figcaption><\/figure>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_table?is_archived=false\" rel=\"noopener noreferrer nofollow\"> <\/a>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_table?is_archived=false\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442.<\/a><br \/>FunQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0443 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435. <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22pm%22&amp;name=%22tasks_table%22\" rel=\"noopener noreferrer nofollow\">\u041e\u043d \u0442\u0443\u0442.<\/a><\/p>\n<p>\u0414\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441 \u043b\u044e\u0431\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f, \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u043f\u043e\u0434\u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0438 (\u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0435\u0449\u0451 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438).<\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0430\u0434\u0430\u0447 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0437\u0430\u0434\u0430\u0447 \u0438 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044f <code>parent_task @{ tree_parent_ids = true }<\/code>. \u0422\u043e\u0433\u0434\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u043e \u0437\u0430\u043f\u0438\u0441\u044f\u043c, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043b\u043e\u043d\u043a\u0443.\u00a0<\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u0435\u0440\u0435\u0432\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043e\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0433\u0434\u0435 <code>parent_task = null<\/code>. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043d\u0435\u0433\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0432 \u043a\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u044b &#8212; \u0437\u0430\u0447\u0435\u043c \u043f\u0438\u043b\u0438\u0442\u044c \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043e\u0434\u043d\u0438\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0440\u0435\u0432\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/p>\n<h2>\u041c\u0435\u043d\u044e &#8212; \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c<\/h2>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0435\u043d\u044e \u2014\u00a0 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0441\u0441\u044b\u043b\u043e\u043a, \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u043b\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043b\u043e\u0433\u0438\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <code>\/user\/main<\/code> , \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u2014 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/81f\/0d6\/0b0\/81f0d60b0ea189349527e6040ad8b517.png\" alt=\"\u0412 \u043c\u0435\u043d\u044e \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043a\u043d\u043e\u043f\u043e\u043a\" title=\"\u0412 \u043c\u0435\u043d\u044e \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043a\u043d\u043e\u043f\u043e\u043a\" width=\"2880\" height=\"1638\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/81f\/0d6\/0b0\/81f0d60b0ea189349527e6040ad8b517.png\"\/><figcaption>\u0412 \u043c\u0435\u043d\u044e \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043a\u043d\u043e\u043f\u043e\u043a<\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/user\/main\" rel=\"noopener noreferrer nofollow\">\u0432 \u0434\u0435\u043c\u043e-\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435.<\/a> <br \/><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22user%22&amp;name=%22main%22\" rel=\"noopener noreferrer nofollow\">FunQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044e<\/a> \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u043d\u044e, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0434\u043e\u0441\u043a\u0438 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043c\u0435\u043d\u044e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0435\u0433\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044e \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 FunQL-\u0437\u0430\u043f\u0440\u043e\u0441:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT    \/* User view type.See also: https:\/\/wiki.ozma.io\/ru\/docs\/funapp\/menu *\/    @type = 'menu',    \/* Menu title *\/    @title = '\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e',               @menu_centered = true,                        menu.blocks FROM (    VALUES ([        {            \/* Menu block name *\/            name: '\u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438',             \/* Block width size = 3\/12 *\/            size: 3,            \/* Block content *\/                                           content: [{                \/* Caption for the link *\/                name: '\u041e\u0442\u0447\u0435\u0442\u044b',                \/* Reference to the linked user view *\/                ref: &amp;pm.dashboard,                \/* Icon for the link *\/                icon: 'monitor_heart'                                  },            {                name: '\u0414\u043e\u0441\u043a\u0430: \u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438',                ref: &amp;pm.tasks_board,                \/* Arguments passed to the user view *\/                args: {                    is_archived: false,                },                icon: 'sticky_note_2',            },            {                name: '\u0422\u0430\u0431\u043b\u0438\u0446\u0430: \u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438',                ref: &amp;pm.tasks_table,                args: {                    is_archived: false,                },                icon: 'table_chart',            }]        },        {            name: '\u041c\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438',            size: 3,            content: [{                name: '\u0414\u043e\u0441\u043a\u0430: \u041c\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438',                ref: &amp;pm.tasks_board,                args: {                    is_archived: false,                    responsible: (SELECT array_agg(id) FROM base.people WHERE user = $$user_id) \/* $$user_id returns ID of the current user *\/                },                icon: 'sticky_note_2',            },            {                name: '\u0422\u0430\u0431\u043b\u0438\u0446\u0430: \u041c\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438',                ref: &amp;pm.tasks_table,                args: {                    is_archived: false,                    responsible: (SELECT array_agg(id) FROM base.people WHERE user = $$user_id)                },                icon: 'table_chart',                badge: {                    value: (SELECT COUNT(id) FROM pm.tasks WHERE responsible_contact = ANY((SELECT id FROM base.people WHERE user = $$user_id))),                    variant: 'danger'                }            }]        },        {            name: '\u0414\u0440\u0443\u0433\u043e\u0435',            size: 3,            content: [{                name: '\u041b\u044e\u0434\u0438',                ref: &amp;base.people_table,                icon: 'person',                badge: {                    value: (SELECT COUNT(1) FROM base.people WHERE NOT is_archived),                    variant: 'info'                }            },            {                name: '\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438',                ref: &amp;admin.main,                icon: 'settings',            }]        },    ]) ) AS menu(blocks)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0414\u0430\u0448\u0431\u043e\u0440\u0434 &#8212; \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u044e\u0431\u044f\u0442 \u0432\u0441\u0435<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/194\/e45\/849\/194e45849ca5a4872bf75c77be3be3e7.png\" alt=\"\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u043b\u0438\" title=\"\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u043b\u0438\" width=\"2880\" height=\"1638\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/194\/e45\/849\/194e45849ca5a4872bf75c77be3be3e7.png\"\/><figcaption>\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u043b\u0438<\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c 4 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435:<\/p>\n<ul>\n<li>\n<p>\u0434\u043e\u043d\u0430\u0442-\u0433\u0440\u0430\u0444\u0438\u043a \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0442\u043e\u043b\u0431\u0438\u043a\u0438 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u043f\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0442\u043e \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0435\u043b\u0430\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p>\u0433\u0440\u0430\u0444\u0438\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u043d\u0430\u0442-\u0433\u0440\u0430\u0444\u0438\u043a \u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f. \u041d\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0442\u0438\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445.<\/p>\n<p>\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 iframe \u2013 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u0430 HTML \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0431\u0430\u0437\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0435 \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u0430 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 iframe \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<p>\u0412\u0441\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u0440\u043e\u043d\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u0431\u0430\u0437\u044b \u0443\u0436\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043d\u0430 js \u0438\u0445 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 <a href=\"https:\/\/nvd3.org\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/nvd3.org<\/u><\/a> &#8212; \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 <a href=\"https:\/\/d3js.org\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/d3js.org<\/u><\/a>:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/nvd3.org\/examples\/pie.html\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/nvd3.org\/examples\/pie.html<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/nvd3.org\/examples\/multiBar.html\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/nvd3.org\/examples\/multiBar.html<\/u><\/a>\u00a0<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/nvd3.org\/examples\/line.html\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/nvd3.org\/examples\/line.html<\/u><\/a>\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0447\u0435\u0442\u044b\u0440\u0435 \u0444\u043e\u0440\u043c\u044b \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0438\u043f\u0430 iframe. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0434 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0444\u043e\u0440\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434<\/p>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u0434\u0435\u043c\u043e-\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c<a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/dashboard\" rel=\"noopener noreferrer nofollow\"> \u0442\u0443\u0442.<\/a> \u0410 FunQL-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u0447\u0435\u0442\u044b\u0440\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043e\u0434\u0438\u043d,<a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22pm%22&amp;name=%22dashboard%22\" rel=\"noopener noreferrer nofollow\"> \u0442\u0443\u0442.<\/a><\/p>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/iframe_markup_form?id=10\" rel=\"noopener noreferrer nofollow\">FunQL-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0431\u0430\u0437\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0438\u0445 \u0432 iframe.<\/a><br \/><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_by_statuses_chart_pie?status=%5B%22backlog%22,%22new%22,%22in_progress%22%5D\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u0434 iframe-markup-\u0430 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0441\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430 \u0432\u044b\u0448\u0435.<\/a><br \/><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/iframe_markups_table\" rel=\"noopener noreferrer nofollow\">\u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<\/a><\/p>\n<h2>\u0414\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0435\u043c \u043c\u0435\u043b\u043e\u0447\u0438<\/h2>\n<p>\u041d\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u043c\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 (\u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 FunQL):<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/base\/people_table\" rel=\"noopener noreferrer nofollow\">\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/a> + <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22base%22&amp;name=%22people_table%22\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/base\/person_form?id=1\" rel=\"noopener noreferrer nofollow\">\u0424\u043e\u0440\u043c\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/a> + <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22base%22&amp;name=%22person_form%22\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/notes_for_task_timeline?id=10\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438 \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0437\u0430\u0434\u0430\u0447\u0438<\/a> (\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0430\u0439\u043c\u043b\u0430\u0439\u043d) + <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22pm%22&amp;name=%22notes_for_task_timeline%22\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u043a\u0443<\/h2>\n<p>\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 <a href=\"http:\/\/ozma.io\" rel=\"noopener noreferrer nofollow\">ozma.io<\/a> \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043d\u0430 JavaScript. \u0412\u043d\u0443\u0442\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 <a href=\"https:\/\/bitbucket.org\/ozma\/ozma-api\/src\/master\/src\/serverside_api.d.ts\" rel=\"noopener noreferrer nofollow\">API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0439<\/a>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u043a\u043d\u043e\u043f\u043a\u0430\u043c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438\u043b\u0438 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e API \u2014 \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u2014 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430.<\/p>\n<h2>\u041a\u043d\u043e\u043f\u043a\u0438<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u201c\u044d\u043a\u0448\u0435\u043d\u044b\u201d. \u041d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 JS, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0451\u0440\u043d\u0443\u0442\u044c \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b (\u0438\u0445 \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442), \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u044d\u043a\u0448\u043d \u201c\u0430\u0440\u0445\u0438\u0432\u0430\u0446\u0438\u0438\u201d \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0438 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f <code>is_archived<\/code> \u0441 <code>true<\/code> \u043d\u0430 <code>false<\/code> \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0430\u0439\u0434\u0438\u0448\u043d\u0438\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c5b\/5a5\/934\/c5b5a59345ff13743491b7cd9bc508c4.png\" width=\"2880\" height=\"1636\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5b\/5a5\/934\/c5b5a59345ff13743491b7cd9bc508c4.png\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u044d\u043a\u0448\u043d\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">export default async function archiveRecord(args) {    const ids = args.ids ?? [args.id];     if (!('is_archived' in args))        throw '\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435';     for (const id of ids) {        try {                                        \/\/ FunDB API function call            await FunDB.updateEntity(                \/\/  updateEntity: (                args.entity,                         \/\/     ref: IEntityRef,                 id,                                  \/\/     id: number,                { is_archived: args.is_archived }    \/\/     args: Record&lt;string, unknown>            );                                       \/\/  ) => Promise&lt;void>;        } catch(e) {            throw '\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435';        }    }     return { ok: true } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u043a\u0448\u043d \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u044d\u043a\u0448\u043d\u0430 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u0434\u0430\u0447\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">\/* pm.task_form *\/ @buttons = [  {        caption: '\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c',   display: 'desktop',         visible: NOT $id=>is_archived,         icon: 'archive',         variant: 'outline-danger',         action: {         schema: 'user',         name: 'archive_record'         },         args: {         entity: { schema: 'pm', name: 'tasks' },         is_archived: true,         id: $id         }   },   {         caption: '\u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c',         display: 'desktop',         visible: $id=>is_archived,         icon: 'archive',         variant: 'outline-success',         action: {             schema: 'user',             name: 'archive_record'         },         args: {         entity: { schema: 'pm', name: 'tasks' },         is_archived: false,         id: $id         }   } ]<\/code><\/pre>\n<p> \u0410 \u043f\u043e\u0442\u043e\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 &#8212; \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0430\u0434\u0430\u0447<\/p>\n<pre><code class=\"sql\">\/* pm.tasks_table *\/ @buttons = [                 { \/* Set is_archived = true for all selected records *\/      caption: '\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438',        \/* Display button when records are selected with a check mark *\/         display: 'selectionPanel',     \/* Display button only if $is_archived argument value is false  *\/         visible: NOT $is_archived,                         icon: 'archive',                                         variant: 'danger',                                      action: {                                          schema: 'user',             name: 'archive_record'         },         args: {                                               entity: {             schema: 'pm',                 name: 'tasks'             },             is_archived: true         },   },     { caption: '\u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438',         display: 'selectionPanel',         visible: $is_archived,         icon: 'unarchive',         variant: 'success',         action: { schema: 'user',             name: 'archive_record'         },         args: { entity: { schema: 'pm',                 name: 'tasks' },             is_archived: false } } ]<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <a href=\"https:\/\/acmeinc-pm.ozma.org\/views\/admin\/action_form?id=9\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0434 \u044d\u043a\u0448\u043d\u0430 user.archive_record<\/a>.<br \/><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_board?is_archived=false&amp;__0=funapp%2Fuser_view_by_name&amp;__0_schema=%22pm%22&amp;__0_name=%22task_form%22\" rel=\"noopener noreferrer nofollow\">\u0412\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0448\u043d\u0430<\/a> \u043d\u0430 \u0444\u043e\u0440\u043c\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.<br \/><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_table?is_archived=false&amp;__0=funapp%2Fuser_view_by_name&amp;__0_schema=%22pm%22&amp;__0_name=%22tasks_table%22\" rel=\"noopener noreferrer nofollow\">\u0412\u044b\u0437\u043e\u0432 \u044d\u043a\u0448\u043d\u0430 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/a> \u0437\u0430\u0434\u0430\u0447 \u043f\u0440\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0433\u0430\u043b\u043e\u0447\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b (\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438)<\/h2>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u201cnotes_for_tasks\u201d \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>\u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430, \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f &#171;\u0410\u0440\u0445\u0438\u0432&#187;<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">import { getPersonName } from 'admin\/user_info.mjs';  export default async function insertNote(event, args) {    const taskId = event.source.id;    const now = new Date();    const author = await getPersonName() ?? args.author;     \/* append status change event *\/    if ('status' in args) {        const msg = args.status            ? `\u0438\u0437\u043c\u0435\u043d\u0438\u043b(\u0430) \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \\\"${args.status}\\\"`            : `\u0443\u0431\u0440\u0430\u043b(\u0430) \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u0434\u0430\u0447\u0438`;         await addNote(taskId, now, author, msg);    }     \/* append priority change event *\/    if ('priority' in args) {        const msg = args.priority            ? `\u0438\u0437\u043c\u0435\u043d\u0438\u043b(\u0430) \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \\\"${args.priority}\\\"`            : `\u0443\u0431\u0440\u0430\u043b(\u0430) \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438`;         await addNote(taskId, now, author, msg);    }     \/* append archive change event *\/    if ('is_archived' in args) {        const msg = args.is_archived            ? `\u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b(\u0430) \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u0410\u0440\u0445\u0438\u0432`            : `\u0432\u0435\u0440\u043d\u0443\u043b(\u0430) \u0437\u0430\u0434\u0430\u0447\u0443 \u0438\u0437 \u0410\u0440\u0445\u0438\u0432\u0430`;         await addNote(taskId, now, author, msg);    }     return true; }  \/* add entity into \"pm\".\"notes_for_tasks\" table *\/ async function addNote(taskId, date, author, message) {     await FunDB.insertEntity({            schema: 'pm', name: 'notes_for_tasks'        },        {            note_datetime: date,            author: author,            message: message,            type: 'event',            task: taskId        }    ); }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 <code>id = 101<\/code> \u0441 <code>\u201c\u041d\u043e\u0432\u043e\u0435\u201d<\/code> \u043d\u0430 <code>\u201c\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\u201d<\/code> \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0430\u0432\u0438\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>notes_for_tasks<\/code> \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<pre><code class=\"json\">{        note_datetime:`2022-01-01 10:00:00`,        author: `\u041f\u0435\u0442\u044f`,        message:`\u0438\u0437\u043c\u0435\u043d\u0438\u043b(\u0430) \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \"\u0412 \u0440\u0430\u0431\u043e\u0442\u0435\"`,        type: 'event',        task: 101 }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438 \u0442\u0430\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u0433\u0430\u0445, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u043c\u043d\u043e\u0433\u043e\u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u044b\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 \u2014 \u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u201c\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\u201d, \u201c\u041a\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u201d \u0438 \u201c\u0414\u0430\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u201d, \u201c\u041a\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u201d. <\/p>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/trigger_form?id=5\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0434 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430<\/a> \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0437\u0430\u043c\u0435\u0442\u043e\u043a\/\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432.<br \/>\u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#8212; <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/trigger_form?id=3\" rel=\"noopener noreferrer nofollow\">\u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u044f &#171;\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f&#187; \u0438 &#171;\u041a\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b&#187; \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438.<\/a><br \/><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/triggers_table\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0432 \u0434\u0435\u043c\u043e-\u0440\u0435\u0448\u0435\u043d\u0438\u0438.<\/a><\/p>\n<h2>\u041f\u0440\u043e \u0441\u0445\u0435\u043c\u0443 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0413\u043b\u044f\u0434\u044f \u043d\u0430 \u043d\u0430\u0448 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0430 \u043a\u0443\u0434\u0430 \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 SELECT-\u044b \u043f\u0438\u0448\u0435\u043c? \u0413\u0434\u0435 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445? \u0410 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0438? \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043c\u0441\u044f \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0431\u0430\u0437\u044b \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0438 \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c.\u00a0<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 <a href=\"http:\/\/ozma.io\" rel=\"noopener noreferrer nofollow\">ozma.io<\/a> \u2014 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 PostgreSQL, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0431\u0430\u0437\u044b. \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0435\u0451 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u0440\u0438\u0441\u0443\u0435\u043c <a href=\"https:\/\/miro.com\/app\/board\/uXjVOrWrtSM=\/\" rel=\"noopener noreferrer nofollow\"><u>\u0432 \u041c\u0438\u0440\u043e<\/u><\/a>\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e5f\/2e0\/2a9\/e5f2e02a916813c52771de5f3cf5191f.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u041c\u0438\u0440\u043e \u2014 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435\" title=\"\u0421\u0445\u0435\u043c\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u041c\u0438\u0440\u043e \u2014 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435\" width=\"2880\" height=\"1640\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e5f\/2e0\/2a9\/e5f2e02a916813c52771de5f3cf5191f.png\"\/><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u041c\u0438\u0440\u043e \u2014 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435<\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u0435\u0435 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u043c, \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0438\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0445\u0435\u043c. \u0421\u0445\u0435\u043c\u044b, \u043a\u0430\u043a \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ul>\n<li>\n<p>\u0432 \u0441\u0445\u0435\u043c\u0435 <code>pm<\/code> \u2014 \u0432\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438: \u0417\u0430\u0434\u0430\u0447\u0438 (<code>tasks<\/code>) \u0438 \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438\u00a0 (<code>notes_for_tasks<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0432 \u0441\u0445\u0435\u043c\u0435 <code>base<\/code> \u0431\u0443\u0434\u0443\u0442 \u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b (<code>contacts<\/code>) \u0438 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043d\u0438\u0445 \u041b\u044e\u0434\u0438 (<code>people<\/code>) \u0438 \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (<code>organizations<\/code>). \u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u2013 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043b\u044e\u0434\u0438 \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.\u00a0<br \/><em>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u201c\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438\u201d \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438, \u043c\u044b \u0438\u0445 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. \u041d\u043e \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0440\u044f\u0434\u043e\u043c \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u0430, \u0430 \u0435\u0449\u0435 \u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430. \u041b\u0443\u0447\u0448\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0432 \u0441\u0432\u043e\u0451 \u0434\u0440\u0430\u0433\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438.<\/em>\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0441\u0445\u0435\u043c\u0430 <code>public<\/code> \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f, \u0438 \u0435\u0451 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0439 \u043d\u0435 \u0443\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412 \u043d\u0435\u0439 \u043d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 (<code>users<\/code>), \u0442.\u043a. \u0442\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0443\u043c\u0430\u0435\u043c \u043d\u0430\u0434 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u043a\u043e\u0439:<\/p>\n<ul>\n<li>\n<p>\u041d\u0443\u0436\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u201c\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\u201d, \u201c\u041a\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u201d, \u201c\u0414\u0430\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u201d, \u201c\u041a\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u201d \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0437\u0430\u0434\u0430\u0447 (<code>pm.tasks<\/code>) \u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 (<code>base.contacts<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0430\u0440\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0438\u0432\u0435\u043d\u0442\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>pm.notes_for_tasks<\/code><\/p>\n<\/li>\n<\/ul>\n<h2>\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u043e\u043b\u044f \u0438 \u0441\u0432\u044f\u0437\u0438 \u0432 \u0411\u0414<\/h2>\n<p>\u0417\u0430\u0432\u043e\u0434\u0438\u043c \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0441\u0445\u0435\u043c\u044b, \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u043b\u044f, \u043a\u0430\u043a \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e\u00a0 \u0432 \u0441\u0445\u0435\u043c\u0435. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0441\u0445\u0435\u043c\u044b, \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043f\u043e\u043b\u044f \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8a\/b83\/1ad\/f8ab831adf3418ac20260f324089ea4e.png\" alt=\"\u0424\u043e\u0440\u043c\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 pm.tasks \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \" title=\"\u0424\u043e\u0440\u043c\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 pm.tasks \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \" width=\"2880\" height=\"1636\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f8a\/b83\/1ad\/f8ab831adf3418ac20260f324089ea4e.png\"\/><figcaption>\u0424\u043e\u0440\u043c\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 pm.tasks \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f <\/figcaption><\/figure>\n<p>\u0412\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0430\u043c\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043e \u0441\u0445\u0435\u043c\u0430\u0445, \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445, \u043f\u043e\u043b\u044f\u0445, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u0445 \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c) \u043b\u0435\u0436\u0438\u0442 \u0432 \u0441\u0445\u0435\u043c\u0435 <code>public<\/code>.<\/p>\n<blockquote>\n<p>\u0415\u0449\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u044d\u0442\u0438\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b\u0438 \u0438\u0445 \u0432 \u0441\u0445\u0435\u043c\u0435 <code>admin<\/code>. \u042d\u0442\u043e \u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0435\u0451 \u043d\u0435\u0442 \u2013 \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430.\u00a0<\/p>\n<p>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043b\u0435\u0436\u0438\u0442 \u0432 <a href=\"https:\/\/wiki.ozma.io\/ru\/administration\/admin-schema\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0430\u0449\u0435 \u0430\u0434\u043c\u0438\u043d\u044b \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0435\u0439, \u043b\u0438\u0431\u043e (\u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0440\u0435\u0436\u0435) \u043f\u0438\u0448\u0443\u0442 \u0441\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u043b\u0435\u0439, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0438 \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e.<\/p>\n<\/blockquote>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430<a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/column_fields_table?entity=28\" rel=\"noopener noreferrer nofollow\"> \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 tasks \u0432 \u0434\u0435\u043c\u043a\u0435<\/a>.<br \/>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0441\u0445\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/schemas_table\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>, \u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/admin\/entities_table\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<h2>\u0427\u0442\u043e \u043d\u0435 \u0432\u043e\u0448\u043b\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044e<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0440\u043e\u043b\u0438 \u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u043d\u0430 \u043f\u043e\u0447\u0442\u0443 \u0438 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2014 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u043a\u0441\u0442\u0430\u0442\u0438 <a href=\"https:\/\/wiki.ozma.io\/ru\/administration\/save_restore\" rel=\"noopener noreferrer nofollow\">\u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0441\u0435\u0431\u0435 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/a>, \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043e\u0437\u043c\u0443. <\/p>\n<h2>\u041a\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435?<\/h2>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u201c\u041a\u043b\u0438\u0435\u043d\u0442\u043e\u0432\u201d \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u201c\u0421\u0434\u0435\u043b\u043a\u0438\u201d \u0438 \u0432\u043e\u0440\u043e\u043d\u043a\u0438 \u043f\u0440\u043e\u0434\u0430\u0436;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0438\u0445 \u0440\u043e\u043b\u0438;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 CRM-\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0449\u0451 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041d\u043e \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u043c, \u0435\u0441\u043b\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. <\/p>\n<h2>\u0427\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c?<\/h2>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"161\" width=\"161\">\n<p align=\"left\">\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">Linux (NixOS\/nixops), PostgreSQL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"161\" width=\"161\">\n<p align=\"left\">\u0411\u044d\u043a\u0435\u043d\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">F# (.NET Core), \u0441\u0432\u043e\u0439 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 SQL \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0432 pgSQL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"161\" width=\"161\">\n<p align=\"left\">\u0424\u0440\u043e\u043d\u0442\u044d\u043d\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">TypeScript\/Vue.js<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u041e \u043d\u0430\u0441<\/h2>\n<p>\u041e\u0437\u043c\u0430 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u0430 \u0434\u0432\u0443\u043c\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438 \u0438\u0437 \u0431\u0430\u0443\u043c\u0430\u043d\u043a\u0438 \u041a\u0438\u0440\u0438\u043b\u043b\u043e\u043c \u041c\u0430\u0440\u043a\u0438\u043d\u044b\u043c \u0438 \u041d\u0438\u043a\u043e\u043b\u0430\u0435\u043c \u0410\u043c\u0438\u0430\u043d\u0442\u043e\u0432\u044b\u043c. \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u0443\u0441\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u0418\u0440\u0438\u043d\u0430 \u0413\u043e\u0440\u043e\u0445\u043e\u0432\u0430. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u0443, \u0420\u0435\u043d\u0430\u0442\u0443 \u0414\u0430\u0440\u044b\u0431\u0430\u0435\u0432\u0443, \u0414\u0430\u043d\u0438\u0438\u043b\u0443 \u0438 \u041b\u044e\u0431\u043e\u0432\u0438 \u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u041c\u0438\u0445\u0430\u0438\u043b\u0443 \u041f\u043e\u043b\u044f\u043d\u0438\u043d\u0443 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0438 \u0420\u043e\u043c\u0430\u043d\u0443 \u0411\u0435\u043b\u044f\u043a\u043e\u0432\u0443 \u0437\u0430 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435, \u0447\u0435\u0433\u043e \u0432\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0432 \u0441\u0432\u043e\u0435\u043c \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0435. \u041a\u0430\u043a \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u0442\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u0445\u043e\u0442\u0435\u043b\u043a\u0438? \u041c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0448\u0442\u0443\u043a\u0430?<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/673874\/\"> https:\/\/habr.com\/ru\/post\/673874\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u2013 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0438 \u043c\u0443\u0442\u043e\u0440\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b: \u0434\u0436\u0438\u0440\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f, \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u0430\u044f, Trello \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u043d\u0435 \u0434\u0430\u044e\u0442 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439.<\/p>\n<p>\u041c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u0432\u043e\u0439 low-code \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0448\u0438 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 CRM \u0438 ERP-\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0436\u0435 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 \u043d\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u043e \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u0432\u044b\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0438\u0437 \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443.<\/p>\n<h2>TL;DR \u2014 \u0432\u043e\u0442 \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0446\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 (\u0438 3 \u0447\u0430\u0441\u0430 \u0440\u0430\u0431\u043e\u0442\u044b)<\/h2>\n<figure class=\"full-width\"><figcaption>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430<\/figcaption><\/figure>\n<h2>\u0427\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u0442\u0430\u0441\u043a-\u0442\u0440\u0435\u043a\u0435\u0440\u0430<\/h2>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0442 \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u2014 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u0441\u043a\u0438 \u0432\u0441\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. <\/p>\n<\/li>\n<li>\n<p>\u0423 \u0437\u0430\u0434\u0430\u0447 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439. \u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0434\u0438\u043d? \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u0430 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0442\u043e \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439-\u0441\u0432\u044f\u0437\u044c\u044e \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0438, \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043b\u0438 \u0434\u0435\u0440\u0435\u0432\u0430 \u2014 \u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0430\u043a \u043a\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u0435\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u0411\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0435\u0440\u0441\u0438\u0439, \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0439 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u043f\u0430\u0440\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u0449\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u2014 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435. \u0412\u0441\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0445\u043e\u0442\u0435\u043b\u043a\u0438 \u0435\u0441\u043b\u0438 \u0438 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f, \u0442\u043e \u0443\u0436\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u0434\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0438\u0445 \u2014 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043b\u043e \u043d\u0430 15 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h2>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c low-code \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f c \u043f\u043e\u043c\u043e\u0449\u044c\u044e SQL-\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 <a href=\"https:\/\/wiki.ozma.io\/ru\/docs\/funql\" rel=\"noopener noreferrer nofollow\">FunQL<\/a>. \u041f\u043e \u0441\u0443\u0442\u0438 \u0432 \u043d\u0451\u043c \u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0430\u0445\u0430\u0440\u0430 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0440\u0435\u043b\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0431\u0435\u0437 JOIN. \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 SQL, \u0438 \u043a \u043d\u0435\u043c\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u2013 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a ROW LEVEL SECURITY \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0411\u0414, \u043d\u043e \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438. \u0421\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. <\/p>\n<p>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0430 (\u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438)<\/p>\n<\/li>\n<li>\n<p>\u0424\u043e\u0440\u043c\u044b (\u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430-\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430)<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u044b (\u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0438 \u0441 \u043b\u044e\u0434\u044c\u043c\u0438)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u0440\u0435\u0432\u043e (\u0441 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438)<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u043d\u044e (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434\u044b (\u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u0431\u0430\u0437\u0435)<\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0443<\/h2>\n<p>\u041d\u0430\u0448 \u0432\u044b\u0431\u043e\u0440 \u2014 \u044d\u0442\u043e \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441 \u0434\u043e\u0441\u043a\u043e\u0439 \u0441 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0440\u0430\u0431\u043e\u0442 \u0438 \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043a\u0430\u043d\u0431\u0430\u043d\u0430.<\/p>\n<figure class=\"full-width\"><figcaption>\u0412\u043e\u0442 \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0442\u0430\u0441\u043a-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \ud83d\ude42<\/figcaption><\/figure>\n<p><a href=\"https:\/\/x-pm-ru.ozma.org\/views\/pm\/tasks_board?is_archived=false\" rel=\"noopener noreferrer nofollow\">\u0412\u043e\u0442 \u0442\u0443\u0442<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u043e\u0439 \u0432 \u0434\u0435\u043c\u043a\u0435.<br \/>\u0410 <a href=\"https:\/\/x-pm-ru.ozma.org\/views\/funapp\/user_view_by_name?schema=%22pm%22&amp;name=%22tasks_board%22\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a> \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 FunQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u043a\u0430\u043a \u043c\u044b \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u0438.<\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e FunQL \u043e\u043f\u0438\u0448\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0434\u043e\u0441\u043a\u0438. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 FunQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430. \u0414\u043b\u044f \u043a\u0430\u043d\u0431\u0430\u043d-\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443, \u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0443\u0433\u043e\u0434\u043d\u043e).<\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435 \u043f\u043e\u043b\u044f, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u043b\u043e\u043a\u0435 SELECT \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435, \u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0440\u044b\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c \u043f\u043e\u043b\u044f <code>visible = false<\/code>. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c, \u0438\u043a\u043e\u043d\u043a\u0443 \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043e\u043c \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 &#171;\u043a\u0430\u043d\u0431\u0430\u043d-\u0434\u043e\u0441\u043a\u0430&#187;<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT     \/* User view type *\/ @type = 'board',  \/* User view title *\/                                           @title = '\u0417\u0430\u0434\u0430\u0447\u0438',        subject @{ \/* Material design icon *\/         icon = 'subject'      },     status @{ \/* Group entries by this field *\/         board_group = true, \/* Do not display status field on the card *\/          visible = false          },     start_date @{         icon = 'date_range'     },     due_date @{         icon = 'flag',         cell_variant = CASE              WHEN due_date &lt; $$transaction_time              THEN 'warning'          END     },     priority @{         icon = 'priority_high'     },     responsible_contact @{         icon = 'person'     },     \"order\" @{ \/* Use the value from the \"order\" field          as a sorting number for all entries *\/         board_order = true,                  visible = false     } FROM      pm.tasks<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u043a\u0430\u043d\u0431\u0430\u043d\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432 \u043d\u0435\u0439. \u041a\u0430\u043d\u0431\u0430\u043d, \u043a\u0430\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0437\u0430\u0434\u0430\u0447, \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0424\u0438\u043b\u044c\u0442\u0440\u044b \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b <code>NULL<\/code>. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c, \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0443, \u0441\u0442\u0430\u0442\u0443\u0441\u0443 \u0438\u043b\u0438 \u0441\u0440\u043e\u043a\u0443. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 \u0431\u043b\u043e\u043a\u0435 WHERE <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">{   \/* Arguments of the user view *\/      $responsible array(reference(base.people)) null @{         caption = '\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439',         \/* Available values in popup will be restricted          with the results of the specified user view *\/         options_view = &amp;base.ref_base_people_view         },     $status array(enum('backlog', 'new', 'in_progress', 'done')) null @{         caption = '\u0421\u0442\u0430\u0442\u0443\u0441',         text = array mapping            WHEN 'backlog' THEN '\u0418\u0434\u0435\u0438'            WHEN 'new' THEN '\u041d\u043e\u0432\u043e\u0435'            WHEN 'in_progress' THEN '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'            WHEN 'done' THEN '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e'        END,     },     $priority array(enum('low', 'medium', 'high', 'urgent')) null @{         caption = '\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442',         text = array mapping            WHEN 'low' THEN '\u041d\u0438\u0437\u043a\u0438\u0439'            WHEN 'medium' THEN '\u0421\u0440\u0435\u0434\u043d\u0438\u0439'            WHEN 'high' THEN '\u0412\u044b\u0441\u043e\u043a\u0438\u0439'            WHEN 'urgent' THEN '\u041a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439'        END         },     $is_archived bool null @{         caption = '\u0410\u0440\u0445\u0438\u0432'     },     \/* \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b *\/ }: SELECT \/* ... *\/  FROM pm.tasks WHERE ($responsible IS NULL         OR responsible_contact = ANY($responsible)) AND ($status IS NULL         OR status = ANY($status))   AND ($priority IS NULL         OR priority = ANY($priority))   AND ($is_archived IS NULL         OR is_archived = $is_archived) <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0432\u0435\u0440\u0445\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u2014 \u201c\u041c\u043e\u0438\u201d \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u201c\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e\u201d \u2014 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447, \u0441\u0440\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b, \u201c\u041d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e\u201d \u2014 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u0435\u0434\u0443\u0442 \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u044e\u0437\u0435\u0440\u0432\u044c\u044e, \u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0432 \u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 @buttons \u0438 \u0437\u0430\u0434\u0430\u0435\u043c \u0432 \u043d\u0451\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">@buttons = [    {    \/* Caption of the button *\/ caption: '\u0421\u0442\u0430\u0442\u0443\u0441',         \/* Material design icon code *\/         icon: 'filter_alt',         \/* Show button at the top right corner on PCs *\/         display: 'desktop',         buttons: [         {             caption: '\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e',                 icon: 'flag',                 \/* Reference to the user view *\/                 ref: &amp;pm.tasks_board,                 \/* New values for arguments *\/                 args: {                 status: ['backlog', 'new', 'in_progress'],                     due_date_to: $$transaction_time,                     is_archived: false,                     responsible: $responsible,                     parent_task: $parent_task                 },                 target: 'top'             },             {             caption: '\u041d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e',                 icon: 'notifications',                 ref: &amp;pm.tasks_board,                 args: {                 status: ['new', 'in_progress'],                     is_archived: false,                     responsible: $responsible,                     parent_task: $parent_task                 },                 target: 'top'             },             {             caption: '\u0412\u0441\u0435',                 icon: 'filter_list_alt',                 ref: &amp;pm.tasks_board,                 args: {                 is_archived: false,                     responsible: $responsible,                     parent_task: $parent_task                 },                 target: 'top'             }         ]     }  ]<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0444\u0438\u043d\u0430\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u0430\u043d\u0431\u0430\u043d-\u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u043a\u0430\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">\/* Reference to the user view opened by clicking the \"Open entry in modal\" button *\/ @row_link = &amp;pm.task_form,  \/* Set the user view used for creating new entries *\/ @card_create_view = { \/* Reference to the user view *\/ ref: &amp;pm.task_form, \/* Default values for the entry being created *\/ default_values: {                              responsible_contact: $responsible, parent_task: $parent_task } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0441 \u043a\u0430\u043d\u0431\u0430\u043d\u043e\u043c \u0432\u0440\u043e\u0434\u0435 \u0432\u0441\u0451.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u0430\u043d\u0431\u0430\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u0438\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">{        \/* Arguments of the user view *\/      $responsible array(reference(base.people)) null @{     caption = '\u041e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439',         \/* Available values in popup will be restricted          with the results of the specified user view *\/         options_view = &amp;base.ref_base_people_view         },     $status array(enum('backlog', 'new', 'in_progress', 'done')) null @{         caption = '\u0421\u0442\u0430\u0442\u0443\u0441',         text = array mapping            WHEN 'backlog' THEN '\u0418\u0434\u0435\u0438'            WHEN 'new' THEN '\u041d\u043e\u0432\u043e\u0435'            WHEN 'in_progress' THEN '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'            WHEN 'done' THEN '\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e'        END     },     $priority array(enum('low', 'medium', 'high', 'urgent')) null @{         caption = '\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442',         text =<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-335610","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=335610"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335610\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=335610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=335610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=335610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}