{"id":647,"date":"2008-05-18T10:02:02","date_gmt":"2008-05-18T10:02:02","guid":{"rendered":"http:\/\/6teen.ru\/?p=624"},"modified":"2008-05-18T10:02:02","modified_gmt":"2008-05-18T10:02:02","slug":"5382","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=647","title":{"rendered":"\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u201c\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445\u201d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439"},"content":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u201c\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445\u201d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \"\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445\" \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\n\u0410\u0432\u0442\u043e\u0440: \u0416\u0443\u043a \u0410\u043d\u0434\u0440\u0435\u0439\n\n\u041d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u0432\u044b, \u0430 \u044f \u0432 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0441\u044f \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0435\u0439. \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u043e\u0440\u043c \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u0418 \u0447\u0435\u043c \u0434\u0430\u043b\u0435\u0435, \u0442\u0435\u043c \u0445\u0443\u0436\u0435. \u041d\u043e \u0434\u0430\u0436\u0435 \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441\u0430\u043c - \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u0441\u0435\u0431\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u043e\u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c - \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c, \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u0442\u0430\u043b\u0430 \u0432\u043e \u0432\u0435\u0441\u044c \u0440\u043e\u0441\u0442 - \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0441\u0442\u0430\u043b \u0441\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043a \"\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435\", \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0441\u0432\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \"\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430\".\u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0437\u0434\u0443\u043c\u0438\u0439 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \"\u0434\u0432\u0438\u0436\u043e\u043a\", \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0435\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0412 \u043e\u0441\u043d\u043e\u0432\u0443 \u044d\u0442\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b:\n1. \u0412\u0441\u0435 \u0431\u0435\u0437 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u0447\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b (\u0434\u043b\u044f \u043c\u0435\u043d\u044f - \u0434\u043e 50 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432) - \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0442\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f;\n2. \u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0437 \u0411\u0414 \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0438\u043b\u0438 ActionList;\n3. \u0412 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434\u0430 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u043e\u0432 \u0440\u0435\u0436\u0438\u043c\u0430 \u0438 \u0432\u044b\u0437\u043e\u0432 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445, \u043e\u0431\u0449\u0438\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435.\n4. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0435\u043d.\n5. \u0420\u0435\u0436\u0438\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \"\u043f\u0440\u0430\u0432\u043e\" \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430.\n6. \u0420\u0435\u0436\u0438\u043c \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u043e\u0440\u043c \u0432\u043e\u043e\u0431\u0449\u0435, \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\n7. \u041c\u043e\u0434\u0443\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u043e\u0432.\n8. \u0420\u0435\u0436\u0438\u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438, \u0434\u0430\u0431\u044b \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u044e\u044e \u043f\u0430\u043c\u044f\u0442\u044c.\n\n\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0440\u0435\u0439\u043c\u044b, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0442.\u043a. \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u043a\u0430\u0434\u0440\u044b - \"\u0444\u0440\u0435\u0439\u043c\u044b\". \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u0430\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0432\u044b\u043d\u0443\u0436\u0434\u0430\u043b\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Visible.\n\n\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043e\u0434 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u043e\u0441\u044c, \u043a\u0430\u043a\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d, \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0435\u0436\u0438\u043c\u0430.\n\n\u041f\u043e\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043e\u0442\u043e\u0439\u0442\u0438 \u043e\u0442 \"\u0442\u044f\u0436\u0435\u043b\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0438\u044f\" :) \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u041e\u041e\u041f.\n\n\u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u0432\u0441\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u043c\u043e\u0436\u043d\u043e (\u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e) \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430. \u041a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043d\u0438\u0436\u0435.\nunit UnitFrameBase;\n\ninterface\n\nuses\nWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\nshellapi, DB, DBGrids, UnitConstTypes_etc;\n\ntype\nTFrameBase = class(TFrame)\nprivate\n{\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0430 - \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b}\nFrameDescription: string;\n{\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445}\nFrameCurrentDataSet: TDataSet;\n{\u0444\u043b\u0430\u0433 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445}\nLoadingData: Boolean;\n{\u0444\u043b\u0430\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b - \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043e\u0442\u0447\u0451\u0442\u0430}\nMakeLongTimeWork: Boolean;\npublic\n{ \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0430}\nprocedure InitialisationFrame(Param1, Param2: Integer); virtual;\n{ \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 }\nprocedure Filter(Param1, Param2: Integer); virtual;\n{ \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438}\nprocedure ShowAdditionalInformation(); virtual;\n{ \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043a\u0440\u044b\u0442\u0438\u044f\/\u043f\u043e\u043a\u0430\u0437\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432}\nprocedure ShowContols(); virtual;\n{ \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c}\nprocedure OpenNeededTables(Param1, Param2: Integer); virtual;\n{\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445}\n{\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435}\nfunction AddRecord(): TFunctionResult; virtual;\n{\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435}\nfunction EditRecord(): TFunctionResult; virtual;\n{\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435}\nfunction DeleteRecord(): TFunctionResult; virtual;\n{\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c}\nfunction PostRecord(): TFunctionResult; virtual;\n{\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c}\nfunction CancelRecord(): TFunctionResult; virtual;\n{\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430}\nfunction GetProperty(): boolean; virtual;\n{\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b}\nfunction ExportData(Parameter: string): TFunctionResult; virtual;\n{\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432}\nfunction ImportData(Parameter: string): TFunctionResult; virtual;\n{\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439: \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0444\u0440\u0435\u0439\u043c\u0430}\nfunction GetDesc: string;\nprocedure SetDesc(Description: string);\n{\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439, \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439, \u043f\u0435\u0440\u0432\u043e\u0439, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438}\nprocedure GotoNextElement; virtual;\nprocedure GotoPrevElement; virtual;\nprocedure GotoFirstElement; virtual;\nprocedure GotoLastElement; virtual;\n{\u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0439 Grid \u0444\u0440\u0435\u0439\u043c\u0430}\nfunction GetMainGrid: TDBGrid;virtual;\n{\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445}\nprocedure SetLoadingData(LD: boolean);\nfunction GetLoadingData: boolean;\n{\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430}\nprocedure SetMakeLongTimeWork (LTW: boolean);\nfunction GetMakeLongTimeWork : boolean;\n{\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445}\nprocedure SetFrameCurrentDataSet(DS: TDataSet);\nfunction GetFrameCurrentDataSet: TDataSet;\n{\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440}\ndestructor Destroy;override;\n    {\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0444\u0440\u0435\u0439\u043c\u0430 \u0432 \u0444\u0430\u0439\u043b\u044b}\n    {\u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u0445\/\u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u0445}\n    {\u0432\u044b\u0437\u043e\u0432 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043a\u043b\u0430\u0441\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 \u0444\u0440\u0435\u0439\u043c\u0430}\n    function SaveFrameToFile(FileName: TFileName): TFunctionResult; virtual;\n    function LoadFromFileToFrame(FileName: TFileName): TFunctionResult; virtual;\n  published\n    {\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0430 - \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435}\n    property FrameDesc: string read GetDesc write SetDesc;\n  end;\n\nimplementation\n\nuses UnitFormMain, MyDBGrid;\n\n{$R *.dfm}\n\nprocedure TFrameBase.ShowAdditionalInformation();\nbegin\n\/\/---\u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0447\u0430\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440\nend;\n\nprocedure TFrameBase.Filter(Param1, Param2: Integer);\nbegin\n\/\/---\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n\/\/---\u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 SendMessage\nend;\n\nprocedure TFrameBase.ShowContols();\nbegin\n\/\/---\u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c\/\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b\nend;\n\nprocedure TFrameBase.OpenNeededTables(Param1, Param2: Integer);\nbegin\n\/\/ \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0430\n if Assigned(FrameCurrentDataSet) then\n  FrameCurrentDataSet.Active := true;\nend;\n\nprocedure TFrameBase.InitialisationFrame(Param1, Param2: Integer);\nbegin\n\/\/-------------\n  SetLoadingData(true);\n\/\/\u043e\u0442\u043a\u0440\u043e\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n  OpenNeededTables(Param1, Param2);\n\/\/\u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0438\u0445\n  Filter(Param1, Param2);\n\/\/\u043f\u043e\u043a\u0430\u0436\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b\n  ShowContols;\n  SetLoadingData(false);\nend;\n\n{\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445}\n\n{\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435}\nfunction TFrameBase.AddRecord(): TFunctionResult;\nvar\n E: Exception;\nbegin\n\/\/\u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0430\n Result.Successful := false;\n if Assigned(FrameCurrentDataSet) then\n  begin\n  try\n  FrameCurrentDataSet.Append;\n  Result.Successful := true;\n  except on E:Exception do\n    Result.MessageOnError := E.Message;\nend;\n\n{\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435}\nfunction TFrameBase.EditRecord(): TFunctionResult;\nvar\n E: Exception;\nbegin\n\/\/\u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435 \u0444\u0440\u0435\u0439\u043c\u0430\n Result.Successful := false;\n if Assigned(FrameCurrentDataSet)then\n  begin\n  try\n  FrameCurrentDataSet.Edit;\n  Result.Successful := true;\n  except on E:Exception do\n    Result.MessageOnError := E.Message;\nend;\n\n{\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435}\nfunction TFrameBase.DeleteRecord(): TFunctionResult;\nvar\n E: Exception;\nbegin\n\/\/\u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0444\u0440\u0435\u0439\u043c\u0430\n Result.Successful := false;\n if Assigned(FrameCurrentDataSet) then\n  begin\n  try\n  FrameCurrentDataSet.Delete;\n  Result.Successful := true;\n  except on E:Exception do\n    Result.MessageOnError := E.Message;\nend;\n\n{\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c}\nfunction TFrameBase.PostRecord(): TFunctionResult;\nvar\n E: Exception;\nbegin\n\/\/\u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0441\u043b\u0430\u0442\u044c Post\n Result.Successful := false;\n if Assigned(FrameCurrentDataSet) then\n  begin\n  try\n  FrameCurrentDataSet.Post;\n  Result.Successful := true;\n  except on E:Exception do\n    Result.MessageOnError := E.Message;\nend;\n\n{\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c}\nfunction TFrameBase.CancelRecord(): TFunctionResult;\nvar\n E: Exception;\nbegin\n\/\/\u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0441\u043b\u0430\u0442\u044c Cancel\n Result.Successful := false;\n if Assigned(FrameCurrentDataSet) then\n  begin\n  try\n  FrameCurrentDataSet.Cancel;\n  Result.Successful := true;\n  except on E:Exception do\n    Result.MessageOnError := E.Message;\nend;\n\n{\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430}\nfunction TFrameBase.GetProperty(): boolean;\nbegin\n  Result := false;\n   if Assigned(FrameCurrentDataSet) then\n     if not FrameCurrentDataSet.IsEmpty then\n      Result := true;\nend;\n\n{\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b}\nfunction TFrameBase.ExportData(Parameter: string): TFunctionResult;\nvar\n FResult: TFunctionResult;\nbegin\n  Result.Successful := False;\n  Result.MessageOnError := 'Not Save';\n\/\/\u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 AsIs\n\/\/\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0433\u0440\u0438\u0434 \u0432 xls\n  if (Parameter = 'AsIs') then\n  begin\n    with TSaveDialog.Create(Self) do\n    try\n      begin\n        Filter := '\u0424\u0430\u0439\u043b\u0438 \u0433_\u043f\u0435\u0440\u0442\u0435\u043a\u0441\u0442\u0443|*.htm';\n        Title := '\u0412\u043a\u0430\u0436_\u0442\u044c \u043d\u0430\u0437\u0432\u0443 \u0444\u0430\u0439\u043b\u0443';\n        DefaultExt := 'htm';\n        Options := Options + [ofPathMustExist];\n        if Execute then\n        begin\n          FResult := TMyDBGrid(GetMainGrid).SaveToHTML(FileName, false);\n          Result := FResult;\n          ShellExecute(Self.Handle, 'open', PChar(FileName), nil, nil, SW_SHOW);\n        end\n      end;\n    finally\n      Free;\nend;\n\nfunction TFrameBase.ImportData(Parameter: string): TFunctionResult;\nbegin\n  Result.Successful := False;\n  Result.MessageOnError := 'Not implemented method';\nend;\n\n{\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439: \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0444\u0440\u0435\u0439\u043c\u0430}\nfunction TFrameBase.GetDesc: string;\nbegin\n  Result := FrameDescription\nend;\n\nprocedure TFrameBase.SetDesc(Description: string);\nbegin\n  FrameDescription := Description\nend;\n\nprocedure TFrameBase.GotoNextElement;\nbegin\n   if Assigned(FrameCurrentDataSet) then\n    if not FrameCurrentDataSet.Eof then\n     FrameCurrentDataSet.Next;\nend;\n\nprocedure TFrameBase.GotoPrevElement;\nbegin\n   if Assigned(FrameCurrentDataSet) then\n    if not FrameCurrentDataSet.Bof then\n     FrameCurrentDataSet.Prior;\nend;\n\nprocedure TFrameBase.GotoFirstElement;\nbegin\n   if Assigned(FrameCurrentDataSet) then\n    if not FrameCurrentDataSet.Bof then\n     FrameCurrentDataSet.First;\nend;\n\nprocedure TFrameBase.GotoLastElement;\nbegin\n   if Assigned(FrameCurrentDataSet) then\n    if not FrameCurrentDataSet.Eof then\n     FrameCurrentDataSet.Last;\nend;\n\nprocedure TFrameBase.SetLoadingData(LD: boolean);\nbegin\n  LoadingData := LD;\nend;\n\nfunction TFrameBase.GetLoadingData: boolean;\nbegin\n  Result := LoadingData;\nend;\n\nfunction TFrameBase.GetMainGrid: TDBGrid;\nbegin\n Result := nil;\nend;\n\nprocedure TFrameBase.SetMakeLongTimeWork (LTW: boolean);\nbegin\n  MakeLongTimeWork := LTW;\nend;\n\nfunction TFrameBase.GetMakeLongTimeWork : boolean;\nbegin\n  Result := MakeLongTimeWork;\nend;\n\n{\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445}\nprocedure TFrameBase.SetFrameCurrentDataSet(DS: TDataSet);\nbegin\n  FrameCurrentDataSet := DS;\nend;\n\nfunction TFrameBase.GetFrameCurrentDataSet: TDataSet;\nbegin\n  Result := FrameCurrentDataSet;\nend;\n\ndestructor TFrameBase.Destroy;\nbegin\n  if Assigned(FrameCurrentDataSet) then\n   FrameCurrentDataSet.Active := false;\n  inherited Destroy;\nend;\n\n{\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0444\u0440\u0435\u0439\u043c\u0430 \u0432 \u0444\u0430\u0439\u043b\u044b}\nfunction TFrameBase.SaveFrameToFile(FileName: TFileName): TFunctionResult;\nvar\n  E: Exception;\n  ms: TMemoryStream;\n  fs: TFileStream;\nbegin\n  try\n  fs := TFileStream.Create(FileName, fmCreate or fmOpenWrite);\n  ms := TMemoryStream.Create;\n  try\n    ms.WriteComponent(self);\n    ms.Seek(0, soFromBeginning);\n    ObjectBinaryToText(ms, fs);\n  finally\n    ms.Free;\n    fs.free;\n  end;\n  Result.Successful := true;\n  Except on E:Exception do\n   begin\n    Result.Successful := false;\n    Result.MessageOnError := E.Message;\nend;\n\nfunction TFrameBase.LoadFromFileToFrame(FileName: TFileName): TFunctionResult;\nvar\n ComponentIdx: integer;\n  ms: TMemoryStream;\n  fs: TFileStream;\nbegin\n\/\/\u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u043c \u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u0430 \u0444\u0440\u0435\u0439\u043c\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\n\/\/\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\n for ComponentIdx := self.ComponentCount-1 downto 0 do\n  self.Components[ComponentIdx].Free;\n try\n\/\/\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0444\u0440\u0435\u0439\u043c \u0438\u0437 \u0444\u0430\u0439\u043b\u0430\n  ms := TMemoryStream.Create;\n  fs := TFileStream.Create(FileName, fmOpenRead);\n  try\n    ObjectTextToBinary(fs, ms);\n    ms.Seek(0, soFromBeginning);\n    ms.ReadComponent(self);\n  finally\n    ms.Free;\n    fs.free;\n  end;\n  Result.Successful := true;\n except on E:Exception do\n  begin\n   Result.Successful := false;\n   Result.MessageOnError := E.Message;\nend;\nend.\n\n  \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043c\u043d\u043e\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 TFunctionResult. \u042d\u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 UnitConstTypes_etc, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0444\u043b\u0430\u0433 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0430 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 - \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.\n\n  \u042d\u0442\u043e, \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0448\u0430\u0431\u043b\u043e\u043d. \u0412 \u043c\u043e\u0438\u0445 \u043d\u044b\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0432\u044b\u0448\u0435\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043d\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.\n\n  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 SaveToHTML \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u0440\u0438\u0434\u0430 \u0444\u0440\u0435\u0439\u043c\u0430. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 MyDBGrid.\n\n  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\n\n  \u0413\u043b\u0430\u0432\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0443 \u043c\u0435\u043d\u044f \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u0438\u0434: \u0441\u043b\u0435\u0432\u0430 - \u0434\u0435\u0440\u0435\u0432\u043e \u043c\u0435\u043d\u044e, \u0432\u043d\u0438\u0437\u0443 \u043b\u043e\u0433 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u0432\u0435\u0440\u0445\u0443 - \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0443\u0441\u0442\u043e\u0435, \u0435\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0430\u043d\u0435\u043b\u044c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0444\u0440\u0435\u0439\u043c\u044b.\n\n  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0432\u043e\u0439 \u0442\u0438\u043f\n\ntype\n  TFrameClass = class of TFrameBase;\n\n  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443. \u0412 uses \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f UnitFrameBase, \u0432 \u0440\u0430\u0437\u0434\u0435\u043b public \u0432\u043d\u0435\u0441\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 MainFrame \u043a\u043b\u0430\u0441\u0441\u0430 TFrameBase. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430.\nfunction TFormMain.ProcShowFrame(FrameClassName: AnsiString; ParentPanel: TWinControl): TFunctionResult;\nvar\n  FrameClass: TClass;\n  FunctionResult: TFunctionResult;\n  E: Exception;\nbegin\n  Result.Successful := False;\n  FrameClass := GetClass(FrameClassName);\n  if FrameClass = nil then \/\/\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0444\u0440\u0435\u0439\u043c\u0430 \u043d\u0435\u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\n   begin\n    Result.MessageOnError := Format('Class %s not registered',[FrameClassName]);\n    Exit;\n   end;\n  \/\/\u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0444\u0440\u0435\u0439\u043c\u043e\u0432\n  try\n    begin\n      LockWindowUpdate(ParentPanel.Handle); \/\/ \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043c\u0435\u0440\u0446\u0430\u043d\u0438\u0439\n  \/\/\u0435\u0441\u043b\u0438 \u0444\u0440\u0435\u0439\u043c \u043d\u0435 \u043f\u0443\u0441\u0442, \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0435\u0433\u043e\n      if Assigned(MainFrame) then\n        if MainFrame.ClassType = FrameClass then\n        begin\n          Result.Successful := true;\n          Exit; \/\/\u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u044b\u0442\u0430\u043c\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0440\u0435\u0439\u043c \u043d\u0438\u043c \u0436\u0435, \u0442\u043e \u0432\u044b\u0445\u043e\u0434\n        end\n        else\n          begin\n           FunctionResult := MainFrame.SaveFrameToFile(Format('%s.dat',[MainFrame.ClassName]));\n           if not FunctionResult.Successful then\n              ListBoxLog.Items.Add('Error on Save Frame: '+FunctionResult.MessageOnError);\n           MainFrame.Destroy;\n          end;\n  \/\/\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443\n      try\n        MainFrame := TFrameClass(FrameClass).Create(FormMain);\n        if FileExists(Format('%s.dat',[MainFrame.ClassName])) then\n         begin\n        FunctionResult := MainFrame.LoadFromFileToFrame(Format('%s.dat',[MainFrame.ClassName]));\n        if not FunctionResult.Successful then\n         ListBoxLog.Items.Add('Error on Load Frame: '+FunctionResult.MessageOnError);\n       end;\n      except on E:Exception do\n        begin\n          Result.MessageOnError := E.Message;\n          MainFrame := nil;\n          Exit;\n      end;\n      MainFrame.Parent := ParentPanel;\n      MainFrame.Align := alClient;\n    end;\n  finally\n    LockWindowUpdate(0); \/\/\u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0444\u0440\u0435\u0439\u043c\u043e\u0432\n  end;\n  Result.Successful := true;\nend;\n\n  \u041a\u0430\u043a \u0436\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e? \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\nconst FILTER_EVENT = WM_USER + 101,\n- \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438.\n\n  Param1 \u0438 Param2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0430\u0445. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f FILTER_EVENT.\nprocedure TFormMain.CX_FILTER(var Msg: TMessage);\nbegin\n  if Assigned(MainFrame) and (not FormMain.isShutdown) then\n  begin\n    MainFrame.Filter(Msg.wParam, Msg.LParam);\n    MainFrame.ShowAdditionalInformation;\nend;\n\n  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u043c\u0435\u043d\u044e \u0444\u0440\u0435\u0439\u043c\u043e\u0432. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c xml \u0444\u0430\u0439\u043b (\u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0411\u0414), \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0411\u0414 \u0438\u043b\u0438 \u0436\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 (\u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 dxTreeList \u043e\u0442 DevExpress, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043b\u0430\u0442\u043d\u044b\u0435). \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0421\u0423\u0411\u0414 Oracle \u0438\u043b\u0438 Firebird), \u0442\u043e \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b\nCREATE TABLE TECH_APP_MENU (\n    MENU_ID       IDENTIFIER NOT NULL,\n    ITEM_TYPE     VARCHAR(10) DEFAULT 'item' NOT NULL,\n    ITEM_CAPTION  VARCHAR(32) NOT NULL,\n    FRAME_NAME    VARCHAR(32) DEFAULT 'TFrameUnknown' NOT NULL,\n    PARAM1        NONIDENTIFIER,\n    PARAM2        NONIDENTIFIER,\n    PARENT_ID     NONIDENTIFIER NOT NULL,\n    ITEM_ICON     NONIDENTIFIER\n);\n\n  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u0440\u0435\u0432\u0430, \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0442\u0435\u043a\u0441\u0442\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u0411\u0414.\n\n  \u0418\u0437 \u044d\u0442\u043e\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u0411\u0414. \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 \"\u041c\u0438\u0440 InterBase\".\n\n  \u041d\u0435 \u0432\u0434\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435,.\u043e\u0442\u043c\u0435\u0442\u0438\u043c \u0447\u0442\u043e \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043d\u0430\u0431\u043e\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.\n\n  \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0438\u0436\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u043d\u044e\ntype TMenuNodes = record\n    MENU_ID: integer;\n    ITEM_TYPE: WideString;\n    ITEM_CAPTION:  WideString;\n    FRAME_NAME:    WideString;\n    PARAM1: integer;\n    PARAM2: integer;\n    PARENT_ID: integer;\n    LEVEL: integer;\n    ISLEAF: boolean;\n    ParentNode: TTreeNode;\n   end;\nPTMenuNodes = ^TMenuNodes;\n\n  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u043d\u044e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0411\u0414. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0435\u043d\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439\nprocedure TFormMain.GenerateMenu(Tree: TTreeView);\nvar\n  vData : PTMenuNodes;\n  Node, LastNode : TTreeNode;\nbegin\n try\n LockWindowUpdate(Tree.Handle);\n SendMessage(Tree.Handle, TVM_DELETEITEM, 0, Longint(TVI_ROOT)); \/\/\u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0434\u0435\u0440\u0435\u0432\u043e\n if not DataModuleMain.DBMain.Connected then\n  Exit;\n with DataModuleMain.GET_MENU do\n  begin\n   LastNode := nil;\n   Active := True;\n   First;\n   while not Eof do\n    begin\n     New(vData);\n      with vData^ do\n       begin\n     MENU_ID := FieldByName('MEM_ID').AsInteger;\n     ITEM_TYPE := FieldByName('ITEM_TYPE').AsString;\n     ITEM_CAPTION := FieldByName('ITEM_CAPTION').AsString;\n     FRAME_NAME := FieldByName('FRAME_NAME').AsString;\n     PARAM1 := FieldByName('PARAM1').AsInteger;\n     PARAM2 := FieldByName('PARAM2').AsInteger;\n     PARENT_ID := FieldByName('MEM_PID').AsInteger;\n     LEVEL := FieldByName('OUTLEVEL').AsInteger;\n     ISLEAF := boolean(FieldByName('IS_LEAF').AsInteger);\n      end;\n     if vData.LEVEL = 1 then\n      begin\n     Node := TreeViewMenu.Items.Add(nil,vData^.ITEM_CAPTION);\n     vData.ParentNode := nil;\n      end\n       else if PTMenuNodes(LastNode.Data)^.LEVEL<vData.LEVEL then\n      begin\n     Node := TreeViewMenu.Items.AddChild(LastNode,vData^.ITEM_CAPTION);\n     vData.ParentNode := LastNode;\n      end\n       else if PTMenuNodes(LastNode.Data)^.LEVEL=vData.LEVEL then\n      begin\n     Node := TreeViewMenu.Items.AddChild(LastNode.Parent,vData^.ITEM_CAPTION);\n     vData.ParentNode := LastNode.Parent;\n      end\n       else if PTMenuNodes(LastNode.Data)^.LEVEL>vData.LEVEL then\n      begin\n     while PTMenuNodes(LastNode.Data)^.LEVEL>=vData.LEVEL do\n      LastNode := LastNode.Parent;\n     Node := TreeViewMenu.Items.AddChild(LastNode,vData^.ITEM_CAPTION);\n     vData.ParentNode := LastNode.Parent;\n      end;\n{\u0437\u0434\u0435\u0441\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e Node \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439.\n \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0441\u0445\u0435\u043c\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445\n \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430}\n     Node.Data := vData;\n     Node.ImageIndex := FieldByName('ITEM_ICON').AsInteger;\n     Node.SelectedIndex := FieldByName('ITEM_ICON').AsInteger;\n     LastNode := Node;\n     Next;\n  end;\n  finally\n   LockWindowUpdate(0);\nend;\n\n  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0435\u043d\u044e \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434\nprocedure TFormMain.TreeViewMenuChange(Sender: TObject; Node: TTreeNode);\nvar\n  vData : PTMenuNodes;\n  CurrentNodeIcon: TIcon;\n  FunctionResult: TFunctionResult;\nbegin\n vData := Node.Data;\n FunctionResult := ProcShowFrame(vData^.FRAME_NAME,PanelFrame);\n if FunctionResult.Successful then\n   begin\n  MainFrame.InitialisationFrame(vData^.PARAM1,vData^.PARAM2);\n  Caption := Format('%s - %s',[Application.Title,MainFrame.FrameDesc]);\n  CurrentNodeIcon := TIcon.Create;\n  ImageListApp.GetIcon(Node.SelectedIndex,CurrentNodeIcon);\n  FormMain.Icon := CurrentNodeIcon;\n  CurrentNodeIcon.Free;\n   end\n   else\n    ListBoxLog.Items.Add(Format('Error on show frame %s: %s',[vData^.FRAME_NAME,FunctionResult.MessageOnError]));\nend;\n\n  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041a\u0430\u043a \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 Excel \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432, \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u044d\u0442\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f\nprocedure TFormMain.ToolButtonAddClick(Sender: TObject);\nvar\n FResult: TFunctionResult;\nbegin\n if Assigned(MainFrame) then\n  begin\n  FResult := MainFrame.AddRecord;\n  if not FResult.Successful then\n   ListBoxLog.Items.Add('Error on Add: '+FResult.MessageOnError);\nend;\n\n  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0434\u0430\u0442\u0430\u043c, \u043f\u043e \u0440\u0430\u0441\u0441\u0447\u0435\u0442\u043d\u044b\u043c \u0441\u0447\u0435\u0442\u0430\u043c \u0438 \u0442.\u0434. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u044d\u0442\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e-\u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 CX_FILTER. \u041a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c.\n\n  \u041a\u0440\u043e\u043c\u0435 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e, \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0444\u0440\u0435\u0439\u043c\u043e\u0432. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 initialization \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 RegisterClasses.\n\n  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b. \u0424\u0440\u0435\u0439\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 TFrameBase. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b.\n\n  \u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0444\u0440\u0435\u0439\u043c\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0430, \u0432\u044b\u0437\u0432\u0430\u0432 SetDesc \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0430, \u0432\u044b\u0437\u0432\u0430\u0432 SetFrameCurrentDataSet. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0444\u0440\u0435\u0439\u043c\u0435 \u0435\u0441\u0442\u044c \u0433\u0440\u0438\u0434, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e GetMainGrid, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u044b\u0439.\n\n  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0432 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e 9 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430!\n\n  \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 (\u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435) \u0444\u0440\u0435\u0439\u043c\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0438\u043a\u0430\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043a\u0430\u043c \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 DataSet. \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0438\u043b\u0438 \u0434\u0438\u0430\u043b\u043e\u0433\u0438.\n\n  \u0427\u0442\u043e \u0434\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434? \u041d\u0430\u043f\u0438\u0441\u0430\u0432 \u043a\u0430\u0440\u043a\u0430\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0434\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (\u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439) \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 (\u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430), \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043c\u0435\u043d\u044e (\u043c\u043e\u0436\u043d\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b) \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 \u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 RegisterClasses. \u0418 \u0432\u0441\u0435! \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0445\u043e\u0442\u044f, \u0432\u0441\u0435 \u0436\u0435, \u044d\u0442\u043e \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e) - \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b, \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c.\n\n  \u041a\u043e\u0434 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0449\u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0444\u0440\u0435\u0439\u043c\u0430\u043c\u0438 \u043d\u0430\u0445\u043e\u0434\u0435\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c.\n\n  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u201c\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445\u201d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16,409],"tags":[1468,1609,1612,1836,1888],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/647"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=647"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/647\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=647"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}