<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://wiki.erp.kyiv.ua/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=R</id>
	<title>K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні - Внесок користувача [uk]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.erp.kyiv.ua/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=R"/>
	<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86%D1%96%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0:%D0%92%D0%BD%D0%B5%D1%81%D0%BE%D0%BA/R"/>
	<updated>2026-04-28T22:25:39Z</updated>
	<subtitle>Внесок користувача</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=152</id>
		<title>Головна сторінка</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=152"/>
		<updated>2026-04-28T21:58:35Z</updated>

		<summary type="html">&lt;p&gt;R: Поправив жирність&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Про систему K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]] — це комплексна система управління підприємством, яка об’єднує фінанси, бухгалтерію, продажі, склад, закупівлі, документообіг, CRM, аналітику та галузеві модулі в єдиному цифровому середовищі. Система допомагає автоматизувати щоденні процеси, зменшити ручну роботу й кількість помилок, контролювати ресурси в реальному часі, швидше обробляти заявки та документи, бачити повну картину бізнесу й приймати точні управлінські рішення на основі актуальних даних. Завдяки модульності, хмарному доступу та гнучкому налаштуванню K2 ERP підходить для компаній різного масштабу й допомагає бізнесу працювати прозоріше, ефективніше та впевнено масштабуватися.&lt;br /&gt;
&lt;br /&gt;
== Сайти K2 ERP ==&lt;br /&gt;
[[Ресурси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для користувачів ==&lt;br /&gt;
&lt;br /&gt;
[[Початок роботи з K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Хмара K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бухгалтерія K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Управлінський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[CRM K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Складський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтернет-магазин K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 VDoc]]&lt;br /&gt;
&lt;br /&gt;
[[Галузеві рішення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Звіти та аналітика K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Поширені питання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для програмістів ==&lt;br /&gt;
&lt;br /&gt;
[[Розгортання системи K2 ERP Python для розробників]]&lt;br /&gt;
&lt;br /&gt;
[[Архітектура K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Встановлення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Розгортання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Створення модулів K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[База даних K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[API K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтеграції K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 CMS]]&lt;br /&gt;
&lt;br /&gt;
[[Розробка веб-інтерфейсів K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бізнес-процеси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Права доступу K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Рекомендації для розробників K2]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 ERP Python]]&lt;br /&gt;
&lt;br /&gt;
[[Стандарти UI K2 2025]]&lt;br /&gt;
&lt;br /&gt;
== Атестаційні завдання по K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
[[Атестаційні завдання по K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Регламент K2]]&lt;br /&gt;
&lt;br /&gt;
== K2 ERP PHP ==&lt;br /&gt;
&lt;br /&gt;
[[Практична робота в K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Інструкція по розгортанню K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 Cloud ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
== Робота в K2 ==&lt;br /&gt;
[[Налаштування WireGuard]]&lt;br /&gt;
&lt;br /&gt;
== Довідник та модулі ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 CMS]]&lt;br /&gt;
* [[K2 VDoc (Електронний документообіг)]]&lt;br /&gt;
* [[Ліцензійна політика K2]]&lt;br /&gt;
&lt;br /&gt;
== Навігація за категоріями ==&lt;br /&gt;
Усі статті бази знань автоматично групуються за категоріями:&lt;br /&gt;
&lt;br /&gt;
* [[:Категорія:ERP-системи|ERP-системи]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення, розроблене в Україні|Українське ПЗ]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення для бізнесу|ПЗ для бізнесу]]&lt;br /&gt;
&lt;br /&gt;
== Порівняння систем ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs BAS ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs BAS Управління торгівлею (UT)]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Парус-Підприємство]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs SAP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Microsoft Dynamics 365]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Oracle NetSuite]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Odoo]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Scoro]]&lt;br /&gt;
&lt;br /&gt;
== Статті по IT ==&lt;br /&gt;
&lt;br /&gt;
[[Цифрова деокупація та санкції в Україні]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=151</id>
		<title>Головна сторінка</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=151"/>
		<updated>2026-04-28T21:57:55Z</updated>

		<summary type="html">&lt;p&gt;R: Додав порівняння&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Про систему K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]] — це комплексна система управління підприємством, яка об’єднує фінанси, бухгалтерію, продажі, склад, закупівлі, документообіг, CRM, аналітику та галузеві модулі в єдиному цифровому середовищі. Система допомагає автоматизувати щоденні процеси, зменшити ручну роботу й кількість помилок, контролювати ресурси в реальному часі, швидше обробляти заявки та документи, бачити повну картину бізнесу й приймати точні управлінські рішення на основі актуальних даних. Завдяки модульності, хмарному доступу та гнучкому налаштуванню K2 ERP підходить для компаній різного масштабу й допомагає бізнесу працювати прозоріше, ефективніше та впевнено масштабуватися.&lt;br /&gt;
&lt;br /&gt;
== Сайти K2 ERP ==&lt;br /&gt;
[[Ресурси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для користувачів ==&lt;br /&gt;
&lt;br /&gt;
[[Початок роботи з K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Хмара K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бухгалтерія K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Управлінський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[CRM K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Складський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтернет-магазин K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 VDoc]]&lt;br /&gt;
&lt;br /&gt;
[[Галузеві рішення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Звіти та аналітика K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Поширені питання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для програмістів ==&lt;br /&gt;
&lt;br /&gt;
[[Розгортання системи K2 ERP Python для розробників]]&lt;br /&gt;
&lt;br /&gt;
[[Архітектура K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Встановлення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Розгортання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Створення модулів K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[База даних K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[API K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтеграції K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 CMS]]&lt;br /&gt;
&lt;br /&gt;
[[Розробка веб-інтерфейсів K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бізнес-процеси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Права доступу K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Рекомендації для розробників K2]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 ERP Python]]&lt;br /&gt;
&lt;br /&gt;
[[Стандарти UI K2 2025]]&lt;br /&gt;
&lt;br /&gt;
== Атестаційні завдання по K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
[[Атестаційні завдання по K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Регламент K2]]&lt;br /&gt;
&lt;br /&gt;
== K2 ERP PHP ==&lt;br /&gt;
&lt;br /&gt;
[[Практична робота в K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Інструкція по розгортанню K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 Cloud ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
== Робота в K2 ==&lt;br /&gt;
[[Налаштування WireGuard]]&lt;br /&gt;
&lt;br /&gt;
== Довідник та модулі ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 CMS]]&lt;br /&gt;
* [[K2 VDoc (Електронний документообіг)]]&lt;br /&gt;
* [[Ліцензійна політика K2]]&lt;br /&gt;
&lt;br /&gt;
== Навігація за категоріями ==&lt;br /&gt;
Усі статті бази знань автоматично групуються за категоріями:&lt;br /&gt;
&lt;br /&gt;
* [[:Категорія:ERP-системи|ERP-системи]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення, розроблене в Україні|Українське ПЗ]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення для бізнесу|ПЗ для бізнесу]]&lt;br /&gt;
&lt;br /&gt;
== Порівняння систем ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs BAS ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs BAS Управління торгівлею (UT)]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Парус-Підприємство:|&#039;&#039;&#039;K2 ERP vs Парус-Підприємство&#039;&#039;&#039;:]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs SAP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Microsoft Dynamics 365]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Oracle NetSuite]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Odoo]]&lt;br /&gt;
&lt;br /&gt;
[[K2 ERP vs Scoro]]&lt;br /&gt;
&lt;br /&gt;
== Статті по IT ==&lt;br /&gt;
&lt;br /&gt;
[[Цифрова деокупація та санкції в Україні]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%97%D0%B0%D0%BC%D1%96%D1%89%D0%B5%D0%BD%D0%BD%D1%8F_1%D0%A1&amp;diff=150</id>
		<title>Заміщення 1С</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%97%D0%B0%D0%BC%D1%96%D1%89%D0%B5%D0%BD%D0%BD%D1%8F_1%D0%A1&amp;diff=150"/>
		<updated>2026-04-28T21:52:03Z</updated>

		<summary type="html">&lt;p&gt;R: Заміщення 1С&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Заміщення 1С та BAS: Стратегія переходу для українського бізнесу ==&lt;br /&gt;
&#039;&#039;&#039;Заміщення 1С&#039;&#039;&#039; — це стратегічний комплекс заходів із виведення підсанкційних програмних продуктів (1С:Підприємство, BAS, Парус) з ІТ-контуру підприємства та впровадження альтернативних систем автоматизації.&lt;br /&gt;
&lt;br /&gt;
З огляду на посилення санкційної політики у 2024–2026 роках, повна відмова від російського софту стала необхідною умовою для безпечного функціонування будь-якого українського суб&#039;єкта господарювання.&lt;br /&gt;
&lt;br /&gt;
=== Чому заміщення є критичним у 2026 році? ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Юридична токсичність&#039;&#039;&#039;: Використання підсанкційного ПЗ може бути підставою для перевірок з боку контролюючих органів та блокування електронного документообігу.&lt;br /&gt;
* &#039;&#039;&#039;Відсутність легітимних оновлень&#039;&#039;&#039;: Після січня 2026 року офіційна підтримка та оновлення форм звітності для систем 1С/BAS в Україні технічно та юридично заблоковані.&lt;br /&gt;
* &#039;&#039;&#039;Кіберризики&#039;&#039;&#039;: Продукти, код яких розроблявся в РФ, містять потенційні вразливості для цільових атак на інфраструктуру України.&lt;br /&gt;
&lt;br /&gt;
=== Етапи заміщення 1С ===&lt;br /&gt;
Процес переходу зазвичай триває від 3 до 9 місяців, залежно від масштабу компанії, і включає наступні кроки:&lt;br /&gt;
&lt;br /&gt;
==== 1. Аналіз поточної конфігурації ====&lt;br /&gt;
Проведення інвентаризації всіх модулів (Бухгалтерія, Зарплата і Кадри, Склад, Виробництво). Визначення обсягу кастомізації (допрацювань), які були зроблені в 1С.&lt;br /&gt;
&lt;br /&gt;
==== 2. Підготовка даних (Data Cleaning) ====&lt;br /&gt;
Перед переходом необхідно провести ревізію довідників контрагентів, номенклатури та залишків. Важливо вивантажити дані у форматі CSV або Excel для подальшого імпорту в нову систему.&lt;br /&gt;
&lt;br /&gt;
==== 3. Вибір цільової системи ====&lt;br /&gt;
На ринку України представлено три основні вектори заміщення:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Українські ERP&#039;&#039;&#039;: Системы, як-от [[K2 ERP]] або IT-Enterprise, що спочатку розроблялися під українське законодавство.&lt;br /&gt;
* &#039;&#039;&#039;Міжнародні ERP&#039;&#039;&#039;: [[Odoo]], SAP Business One, Microsoft Dynamics 365 (потребують локалізації бухгалтерії).&lt;br /&gt;
* &#039;&#039;&#039;Хмарні сервіси&#039;&#039;&#039;: Спеціалізовані рішення для малого бізнесу (Dilovod, Master:Бухгалтерія).&lt;br /&gt;
&lt;br /&gt;
==== 4. Паралельна експлуатація ====&lt;br /&gt;
Протягом 1-2 звітних періодів (місяців) рекомендується вести облік одночасно у старій та новій системах для звірки сальдо та коректності нарахувань.&lt;br /&gt;
&lt;br /&gt;
=== Порівняння архітектури 1С та сучасних ERP ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Характеристика&lt;br /&gt;
!1С / BAS (Застаріле)&lt;br /&gt;
!Сучасні системи (напр. K2 ERP)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Архітектура&#039;&#039;&#039;&lt;br /&gt;
|Монолітна, закрита&lt;br /&gt;
|Модульна, веб-орієнтована&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Доступ&#039;&#039;&#039;&lt;br /&gt;
|Переважно локальний сервер&lt;br /&gt;
|Хмарний доступ (SaaS), мобільні додатки&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Безпека&#039;&#039;&#039;&lt;br /&gt;
|Ризик витоку даних до РФ&lt;br /&gt;
|Відповідність стандартам ДСТУ/ISO&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Оновлення&#039;&#039;&#039;&lt;br /&gt;
|Ручне, складне&lt;br /&gt;
|Автоматичне, &amp;quot;безшовне&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Рекомендації щодо міграції ===&lt;br /&gt;
Для мінімізації ризиків під час заміщення рекомендується:&lt;br /&gt;
&lt;br /&gt;
* Не намагатися повністю скопіювати інтерфейс 1С у новій системі.&lt;br /&gt;
* Використовувати перехід як можливість для оптимізації застарілих бізнес-процесів.&lt;br /&gt;
* Забезпечити повне видалення підсанкційного ПЗ з серверів після завершення міграції для уникнення претензій з боку кіберполіції.&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0_%D0%B4%D0%B5%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%86%D1%96%D1%8F_%D1%82%D0%B0_%D1%81%D0%B0%D0%BD%D0%BA%D1%86%D1%96%D1%97_%D0%B2_%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%96&amp;diff=149</id>
		<title>Цифрова деокупація та санкції в Україні</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0_%D0%B4%D0%B5%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%86%D1%96%D1%8F_%D1%82%D0%B0_%D1%81%D0%B0%D0%BD%D0%BA%D1%86%D1%96%D1%97_%D0%B2_%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%96&amp;diff=149"/>
		<updated>2026-04-28T21:51:12Z</updated>

		<summary type="html">&lt;p&gt;R: Цифрова деокупація&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Цифрова деокупація&#039;&#039;&#039; — це процес повного заміщення програмного забезпечення, цифрових сервісів та ІТ-інфраструктури, що мають походження з країни-агресора (РФ) або контролюються її резидентами, на українські або міжнародні аналоги. Метою цифрової деокупації є забезпечення національної кібербезпеки, захист персональних даних та запобігання фінансуванню агресії через ліцензійні платежі.&lt;br /&gt;
&lt;br /&gt;
=== Законодавче підґрунтя ===&lt;br /&gt;
Процес цифрової деокупації в Україні регулюється наступними нормативно-правовими актами:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Указ Президента України №487/2024&#039;&#039;&#039;: Про запровадження санкцій проти технологічних компаній РФ.&lt;br /&gt;
* &#039;&#039;&#039;Закон України про санкції&#039;&#039;&#039;: Визначає правові основи обмеження використання програмних продуктів.&lt;br /&gt;
* &#039;&#039;&#039;Рішення РНБО від 2025 року&#039;&#039;&#039;: Встановлює граничні терміни використання підсанкційного ПЗ для приватного сектору (до 1 січня 2026 року).&lt;br /&gt;
&lt;br /&gt;
=== Реєстр підсанкційного програмного забезпечення (основні групи) ===&lt;br /&gt;
У межах цифрової деокупації обов&#039;язковому заміщенню підлягають наступні системи:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Група ПЗ&lt;br /&gt;
!Найпопулярніші продукти&lt;br /&gt;
!Статус (на 2026 рік)&lt;br /&gt;
|-&lt;br /&gt;
|ERP та бухгалтерський облік&lt;br /&gt;
|1С:Підприємство, BAS ERP, Парус&lt;br /&gt;
|Повна заборона для держсектору; критичні ризики для бізнесу.&lt;br /&gt;
|-&lt;br /&gt;
|CRM-системи&lt;br /&gt;
|Бітрікс24, AmoCRM&lt;br /&gt;
|Блокування на рівні провайдерів; витік даних до РФ.&lt;br /&gt;
|-&lt;br /&gt;
|Антивірусне ПЗ&lt;br /&gt;
|Kaspersky, Dr.Web&lt;br /&gt;
|Заборонено до використання на території України.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ризики використання підсанкційного ПЗ ===&lt;br /&gt;
1. &#039;&#039;&#039;Кібершпигунство&#039;&#039;&#039;: Наявність «бекдорів» (backdoors) у коді російського ПЗ дозволяє спецслужбам РФ отримувати доступ до фінансової та стратегічної інформації українських компаній. 2. &#039;&#039;&#039;Фінансування тероризму&#039;&#039;&#039;: Сплата за оновлення та підтримку російських продуктів фактично є наповненням бюджету країни-агресора. 3. &#039;&#039;&#039;Технічне блокування&#039;&#039;&#039;: Згідно з планом цифрової деокупації, з 2026 року буде посилено контроль за електронною звітністю. Звіти, сформовані у підсанкційних програмах, можуть не прийматися державними органами.&lt;br /&gt;
&lt;br /&gt;
=== Дорожня карта цифрової деокупації підприємства ===&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Аудит&#039;&#039;&#039;: Виявлення всіх встановлених програм російського походження.&lt;br /&gt;
# &#039;&#039;&#039;Вибір альтернативи&#039;&#039;&#039;: Перехід на українські системи (наприклад, [[K2 ERP]]) або світові рішення ([[Odoo]], [[SAP]]).&lt;br /&gt;
# &#039;&#039;&#039;Міграція даних&#039;&#039;&#039;: Вивантаження залишків та довідників зі старих систем.&lt;br /&gt;
# &#039;&#039;&#039;Навчання персоналу&#039;&#039;&#039;: Адаптація команди до нового інтерфейсу та бізнес-процесів.&lt;br /&gt;
&lt;br /&gt;
=== Див. також ===&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]] — українська альтернатива для цифрової деокупації.&lt;br /&gt;
* [[Заміщення 1С]] — покроковий гайд міграції.&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=148</id>
		<title>Головна сторінка</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=148"/>
		<updated>2026-04-28T21:49:56Z</updated>

		<summary type="html">&lt;p&gt;R: Додав розділ цифрової деокупації&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Про систему K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]] — це комплексна система управління підприємством, яка об’єднує фінанси, бухгалтерію, продажі, склад, закупівлі, документообіг, CRM, аналітику та галузеві модулі в єдиному цифровому середовищі. Система допомагає автоматизувати щоденні процеси, зменшити ручну роботу й кількість помилок, контролювати ресурси в реальному часі, швидше обробляти заявки та документи, бачити повну картину бізнесу й приймати точні управлінські рішення на основі актуальних даних. Завдяки модульності, хмарному доступу та гнучкому налаштуванню K2 ERP підходить для компаній різного масштабу й допомагає бізнесу працювати прозоріше, ефективніше та впевнено масштабуватися.&lt;br /&gt;
&lt;br /&gt;
== Сайти K2 ERP ==&lt;br /&gt;
[[Ресурси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для користувачів ==&lt;br /&gt;
&lt;br /&gt;
[[Початок роботи з K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Хмара K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бухгалтерія K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Управлінський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[CRM K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Складський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтернет-магазин K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 VDoc]]&lt;br /&gt;
&lt;br /&gt;
[[Галузеві рішення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Звіти та аналітика K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Поширені питання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для програмістів ==&lt;br /&gt;
&lt;br /&gt;
[[Розгортання системи K2 ERP Python для розробників]]&lt;br /&gt;
&lt;br /&gt;
[[Архітектура K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Встановлення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Розгортання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Створення модулів K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[База даних K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[API K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтеграції K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 CMS]]&lt;br /&gt;
&lt;br /&gt;
[[Розробка веб-інтерфейсів K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бізнес-процеси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Права доступу K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Рекомендації для розробників K2]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 ERP Python]]&lt;br /&gt;
&lt;br /&gt;
[[Стандарти UI K2 2025]]&lt;br /&gt;
&lt;br /&gt;
== Атестаційні завдання по K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
[[Атестаційні завдання по K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Регламент K2]]&lt;br /&gt;
&lt;br /&gt;
== K2 ERP PHP ==&lt;br /&gt;
&lt;br /&gt;
[[Практична робота в K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Інструкція по розгортанню K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 Cloud ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
== Робота в K2 ==&lt;br /&gt;
[[Налаштування WireGuard]]&lt;br /&gt;
&lt;br /&gt;
== Довідник та модулі ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 CMS]]&lt;br /&gt;
* [[K2 VDoc (Електронний документообіг)]]&lt;br /&gt;
* [[Ліцензійна політика K2]]&lt;br /&gt;
&lt;br /&gt;
== Навігація за категоріями ==&lt;br /&gt;
Усі статті бази знань автоматично групуються за категоріями:&lt;br /&gt;
&lt;br /&gt;
* [[:Категорія:ERP-системи|ERP-системи]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення, розроблене в Україні|Українське ПЗ]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення для бізнесу|ПЗ для бізнесу]]&lt;br /&gt;
&lt;br /&gt;
== Статті по IT ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Цифрова деокупація та санкції в Україні]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%86%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD&amp;diff=147</id>
		<title>Атестаційні завдання K2 ERP/Інтернет-магазин</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%86%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD&amp;diff=147"/>
		<updated>2026-04-28T21:43:53Z</updated>

		<summary type="html">&lt;p&gt;R: Пененос з Гугл док.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — Інтернет-магазин&#039;&#039;&#039; — практична задача для розробника K2 ERP, що передбачає створення модуля інтернет-магазину з управлінням товарами, категоріями, кошиком, замовленнями, оплатою, залишками, медіафайлами та адміністративним інтерфейсом.&lt;br /&gt;
&lt;br /&gt;
== Назва ==&lt;br /&gt;
&#039;&#039;&#039;Модуль Інтернет-магазин: управління товарами, кошиком, замовленнями та оплатою&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Реальний бізнес-контекст ==&lt;br /&gt;
Компанія хоче створити власний інтернет-магазин на базі K2 ERP, інтегрований із загальною ERP-структурою.&lt;br /&gt;
&lt;br /&gt;
Модуль повинен забезпечувати:&lt;br /&gt;
&lt;br /&gt;
* управління каталогом товарів;&lt;br /&gt;
* ведення складів і залишків;&lt;br /&gt;
* оформлення замовлень покупцями через сайт;&lt;br /&gt;
* інтеграцію з платіжними системами;&lt;br /&gt;
* відстеження статусів замовлень.&lt;br /&gt;
&lt;br /&gt;
== Основні завдання ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Структура довідників ===&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Категорії товарів» ====&lt;br /&gt;
Довідник категорій товарів повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву категорії;&lt;br /&gt;
* батьківську категорію для побудови ієрархії;&lt;br /&gt;
* сортування;&lt;br /&gt;
* SEO-поля:&lt;br /&gt;
** URL;&lt;br /&gt;
** Title;&lt;br /&gt;
** Description.&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Товари» ====&lt;br /&gt;
Довідник товарів повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву товару;&lt;br /&gt;
* опис товару у форматі HTML через редактор;&lt;br /&gt;
* код товару або артикул;&lt;br /&gt;
* ціну;&lt;br /&gt;
* акційну ціну, опціонально;&lt;br /&gt;
* залишок на складі;&lt;br /&gt;
* статус товару:&lt;br /&gt;
** активний;&lt;br /&gt;
** прихований;&lt;br /&gt;
* прев’ю-зображення як медіафайл;&lt;br /&gt;
* додаткові фото.&lt;br /&gt;
&lt;br /&gt;
=== 2. Фронтенд магазину для покупців ===&lt;br /&gt;
&lt;br /&gt;
==== Каталог товарів ====&lt;br /&gt;
Каталог товарів повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* виведення списку товарів за категоріями;&lt;br /&gt;
* фільтрацію за ціною;&lt;br /&gt;
* фільтрацію за наявністю;&lt;br /&gt;
* фільтрацію за акційними пропозиціями;&lt;br /&gt;
* пошук товарів по назві або коду.&lt;br /&gt;
&lt;br /&gt;
==== Сторінка товару ====&lt;br /&gt;
Сторінка товару повинна містити:&lt;br /&gt;
&lt;br /&gt;
* фото з можливістю збільшення;&lt;br /&gt;
* назву товару;&lt;br /&gt;
* опис;&lt;br /&gt;
* ціну;&lt;br /&gt;
* кнопку &#039;&#039;&#039;«Додати у кошик»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Кошик ====&lt;br /&gt;
Кошик повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* перелік товарів у кошику;&lt;br /&gt;
* можливість змінити кількість товару;&lt;br /&gt;
* автоматичний перерахунок загальної суми;&lt;br /&gt;
* кнопку &#039;&#039;&#039;«Оформити замовлення»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== 3. Оформлення замовлення ===&lt;br /&gt;
Форма оформлення замовлення повинна містити:&lt;br /&gt;
&lt;br /&gt;
* ім’я та прізвище покупця;&lt;br /&gt;
* телефон;&lt;br /&gt;
* email;&lt;br /&gt;
* адресу доставки;&lt;br /&gt;
* коментар до замовлення;&lt;br /&gt;
* вибір способу оплати:&lt;br /&gt;
** оплата при отриманні;&lt;br /&gt;
** оплата онлайн.&lt;br /&gt;
&lt;br /&gt;
=== 4. Інтеграція з платіжною системою ===&lt;br /&gt;
Потрібно реалізувати підключення до однієї з популярних платіжних платформ:&lt;br /&gt;
&lt;br /&gt;
* WayForPay;&lt;br /&gt;
* LiqPay;&lt;br /&gt;
* Stripe;&lt;br /&gt;
* або іншої платіжної системи.&lt;br /&gt;
&lt;br /&gt;
Після успішної оплати статус замовлення повинен змінюватися автоматично.&lt;br /&gt;
&lt;br /&gt;
=== 5. Журнал замовлень в адмінці ===&lt;br /&gt;
Журнал замовлень повинен бути доступний в адміністративній частині.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
У журналі мають бути такі колонки:&lt;br /&gt;
&lt;br /&gt;
* номер замовлення;&lt;br /&gt;
* дата замовлення;&lt;br /&gt;
* покупець;&lt;br /&gt;
* сума;&lt;br /&gt;
* статус:&lt;br /&gt;
** нове;&lt;br /&gt;
** в обробці;&lt;br /&gt;
** відправлено;&lt;br /&gt;
** завершено;&lt;br /&gt;
** скасовано;&lt;br /&gt;
* тип оплати.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу ====&lt;br /&gt;
Журнал замовлень має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* фільтрацію за статусом;&lt;br /&gt;
* фільтрацію за періодом;&lt;br /&gt;
* перегляд деталей замовлення;&lt;br /&gt;
* зміну статусу замовлення.&lt;br /&gt;
&lt;br /&gt;
=== 6. Додаткові функції ===&lt;br /&gt;
Потрібно реалізувати:&lt;br /&gt;
&lt;br /&gt;
* відправку email-підтвердження клієнту після оформлення замовлення;&lt;br /&gt;
* відправку email співробітникам про нове замовлення;&lt;br /&gt;
* відображення залишків у реальному часі;&lt;br /&gt;
* автоматичне зменшення залишку товару після покупки;&lt;br /&gt;
* окрему категорію &#039;&#039;&#039;«Акції»&#039;&#039;&#039; для акційних товарів.&lt;br /&gt;
&lt;br /&gt;
=== 7. Бекенд-функціонал для адміністраторів ===&lt;br /&gt;
Адміністративний інтерфейс повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* додавання товарів через AJAX-інтерфейс;&lt;br /&gt;
* редагування товарів через AJAX-інтерфейс;&lt;br /&gt;
* видалення товарів через AJAX-інтерфейс;&lt;br /&gt;
* завантаження великої кількості товарів через імпорт CSV або Excel;&lt;br /&gt;
* управління категоріями без перезавантаження сторінки.&lt;br /&gt;
&lt;br /&gt;
== Технічні вимоги ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр&lt;br /&gt;
!Опис&lt;br /&gt;
|-&lt;br /&gt;
|Бекенд&lt;br /&gt;
|K2 ERP на Python або PHP&lt;br /&gt;
|-&lt;br /&gt;
|БД&lt;br /&gt;
|PostgreSQL або MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Фронтенд&lt;br /&gt;
|HTML5, JavaScript, AJAX через Fetch або Axios&lt;br /&gt;
|-&lt;br /&gt;
|UI-компоненти&lt;br /&gt;
|DataTables, Select2, WYSIWYG-редактор для опису товару&lt;br /&gt;
|-&lt;br /&gt;
|Платіжні шлюзи&lt;br /&gt;
|WayForPay, LiqPay або Stripe&lt;br /&gt;
|-&lt;br /&gt;
|Медіа&lt;br /&gt;
|Завантаження зображень через FilePond або аналог&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Критерії оцінки ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерій&lt;br /&gt;
!Бали&lt;br /&gt;
|-&lt;br /&gt;
|Реалізація довідника товарів і категорій&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Робота кошика і оформлення замовлення&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Інтеграція з платіжною системою&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Журнал замовлень і управління статусами&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Інтерактивність через AJAX&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Збереження структури і логіки бізнес-процесів&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примітка ==&lt;br /&gt;
Інтернет-магазин є обов’язковим модулем для багатьох бізнесів у 2025 році незалежно від розміру компанії.&lt;br /&gt;
&lt;br /&gt;
Такий модуль допомагає компаніям вийти в онлайн-продажі без залучення сторонніх платформ.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створений модуль інтернет-магазину K2 ERP, який підтримує каталог товарів і категорій, сторінки товарів, кошик, оформлення замовлення, онлайн-оплату, журнал замовлень, управління статусами, email-сповіщення, облік залишків, акційні товари, імпорт CSV/Excel та AJAX-адміністрування.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
* категорії товарів;&lt;br /&gt;
* товари;&lt;br /&gt;
* фото товарів;&lt;br /&gt;
* залишки товарів;&lt;br /&gt;
* склади;&lt;br /&gt;
* кошики;&lt;br /&gt;
* рядки кошика;&lt;br /&gt;
* замовлення;&lt;br /&gt;
* рядки замовлення;&lt;br /&gt;
* покупці;&lt;br /&gt;
* способи оплати;&lt;br /&gt;
* платежі;&lt;br /&gt;
* статуси замовлень;&lt;br /&gt;
* історія зміни статусів;&lt;br /&gt;
* email-сповіщення;&lt;br /&gt;
* імпорт товарів;&lt;br /&gt;
* SEO-налаштування.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[Інтернет-магазин]]&lt;br /&gt;
* [[Каталог товарів]]&lt;br /&gt;
* [[Кошик]]&lt;br /&gt;
* [[Онлайн-оплата]]&lt;br /&gt;
* [[WayForPay]]&lt;br /&gt;
* [[LiqPay]]&lt;br /&gt;
* [[Stripe]]&lt;br /&gt;
* [[Складський облік]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/CMS&amp;diff=146</id>
		<title>Атестаційні завдання K2 ERP/CMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/CMS&amp;diff=146"/>
		<updated>2026-04-28T21:41:38Z</updated>

		<summary type="html">&lt;p&gt;R: Перенос з Гугл док.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — CMS&#039;&#039;&#039; — практична задача для розробника K2 ERP, що передбачає створення модуля управління контентом сайту або корпоративного порталу: сторінками, новинами, статтями, оголошеннями, медіафайлами, багатомовністю, публікацією та історією змін.&lt;br /&gt;
&lt;br /&gt;
== Назва ==&lt;br /&gt;
&#039;&#039;&#039;Модуль CMS: Управління контентом сайту і корпоративного порталу&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Реальний бізнес-контекст ==&lt;br /&gt;
Компанія має публічний сайт або внутрішній корпоративний портал. Потрібно надати менеджерам можливість самостійно керувати контентом без залучення розробників.&lt;br /&gt;
&lt;br /&gt;
Користувачі повинні мати можливість:&lt;br /&gt;
&lt;br /&gt;
* створювати сторінки;&lt;br /&gt;
* редагувати новини, статті та оголошення;&lt;br /&gt;
* керувати медіафайлами: зображеннями, PDF-файлами та іншими документами;&lt;br /&gt;
* публікувати інформацію кількома мовами.&lt;br /&gt;
&lt;br /&gt;
== Основні завдання ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Структура довідників ===&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Категорії контенту» ====&lt;br /&gt;
Довідник категорій контенту повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву категорії;&lt;br /&gt;
* тип категорії:&lt;br /&gt;
** новина;&lt;br /&gt;
** стаття;&lt;br /&gt;
** сторінка;&lt;br /&gt;
** оголошення;&lt;br /&gt;
* батьківську категорію для побудови ієрархії.&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Мови» ====&lt;br /&gt;
Довідник мов повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву мови, наприклад українська, англійська, польська;&lt;br /&gt;
* код мови, наприклад &amp;lt;code&amp;gt;uk&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;en&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 2. Журнал «Матеріали» ===&lt;br /&gt;
Журнал матеріалів повинен відображати всі одиниці контенту сайту або корпоративного порталу.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
У журналі мають бути такі колонки:&lt;br /&gt;
&lt;br /&gt;
* заголовок;&lt;br /&gt;
* категорія;&lt;br /&gt;
* автор;&lt;br /&gt;
* дата створення;&lt;br /&gt;
* статус публікації:&lt;br /&gt;
** чернетка;&lt;br /&gt;
** опубліковано;&lt;br /&gt;
** приховано;&lt;br /&gt;
* мова.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу ====&lt;br /&gt;
Журнал має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* пошук по заголовку;&lt;br /&gt;
* пошук по автору;&lt;br /&gt;
* пошук по категорії;&lt;br /&gt;
* фільтрацію за статусом;&lt;br /&gt;
* фільтрацію за мовою.&lt;br /&gt;
&lt;br /&gt;
=== 3. Форма створення матеріалу ===&lt;br /&gt;
&lt;br /&gt;
==== Основна інформація ====&lt;br /&gt;
Форма створення або редагування матеріалу повинна містити:&lt;br /&gt;
&lt;br /&gt;
* заголовок;&lt;br /&gt;
* короткий опис або анонс;&lt;br /&gt;
* повний текст матеріалу через WYSIWYG-редактор;&lt;br /&gt;
* категорію з вибором із довідника через AJAX;&lt;br /&gt;
* мову;&lt;br /&gt;
* зображення-прев’ю із завантаженням через медіабібліотеку;&lt;br /&gt;
* статус:&lt;br /&gt;
** чернетка;&lt;br /&gt;
** опубліковано.&lt;br /&gt;
&lt;br /&gt;
==== Додаткові поля ====&lt;br /&gt;
Додатково потрібно передбачити:&lt;br /&gt;
&lt;br /&gt;
* теги для SEO;&lt;br /&gt;
* URL-адресу, яка генерується автоматично або вказується вручну.&lt;br /&gt;
&lt;br /&gt;
=== 4. Управління медіафайлами ===&lt;br /&gt;
Модуль має містити медіабібліотеку з каталогами.&lt;br /&gt;
&lt;br /&gt;
Потрібно реалізувати:&lt;br /&gt;
&lt;br /&gt;
* завантаження зображень та файлів через AJAX;&lt;br /&gt;
* підключення файлів до матеріалів;&lt;br /&gt;
* можливість обрізки зображень при завантаженні;&lt;br /&gt;
* зберігання медіафайлів у структурованих каталогах.&lt;br /&gt;
&lt;br /&gt;
=== 5. Мультимовність ===&lt;br /&gt;
Кожен матеріал може мати окремі версії різними мовами.&lt;br /&gt;
&lt;br /&gt;
Потрібно реалізувати механізм прив’язки матеріалів між мовами.&lt;br /&gt;
&lt;br /&gt;
Приклад:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Про нас&#039;&#039;&#039; українською мовою → &#039;&#039;&#039;About us&#039;&#039;&#039; англійською мовою.&lt;br /&gt;
&lt;br /&gt;
=== 6. Публікація на сайті ===&lt;br /&gt;
Після публікації матеріал автоматично відображається на сайті за налаштованим шаблоном.&lt;br /&gt;
&lt;br /&gt;
URL повинен формуватися за правилом:&amp;lt;pre&amp;gt;&lt;br /&gt;
/&amp;lt;код мови&amp;gt;/&amp;lt;категорія&amp;gt;/&amp;lt;url матеріалу&amp;gt;/&lt;br /&gt;
&amp;lt;/pre&amp;gt;Приклад URL:&amp;lt;pre&amp;gt;&lt;br /&gt;
/en/news/open-new-office/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7. Специфіка функціоналу ===&lt;br /&gt;
Модуль повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* редагування контенту без перезавантаження сторінки через AJAX;&lt;br /&gt;
* автоматичне збереження чернеток кожні X хвилин;&lt;br /&gt;
* відображення історії змін;&lt;br /&gt;
* фіксацію того, хто редагував матеріал;&lt;br /&gt;
* фіксацію дати та часу останньої зміни;&lt;br /&gt;
* можливість відкату до попередньої версії.&lt;br /&gt;
&lt;br /&gt;
=== 8. Модульні блоки контенту, опціонально ===&lt;br /&gt;
Рівень Advanced передбачає можливість створення окремих блоків контенту для розміщення в різних частинах сайту.&lt;br /&gt;
&lt;br /&gt;
Приклади блоків:&lt;br /&gt;
&lt;br /&gt;
* банер;&lt;br /&gt;
* акційний блок;&lt;br /&gt;
* слайдер.&lt;br /&gt;
&lt;br /&gt;
Потрібно передбачити конфігурування розташування блоку через панель адміністратора.&lt;br /&gt;
&lt;br /&gt;
== Технічні вимоги ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр&lt;br /&gt;
!Опис&lt;br /&gt;
|-&lt;br /&gt;
|Бекенд&lt;br /&gt;
|K2 ERP на Python або PHP&lt;br /&gt;
|-&lt;br /&gt;
|БД&lt;br /&gt;
|PostgreSQL або MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Фронтенд&lt;br /&gt;
|HTML5, JavaScript, AJAX через Axios або Fetch API&lt;br /&gt;
|-&lt;br /&gt;
|UI-компоненти&lt;br /&gt;
|DataTables, Select2, WYSIWYG-редактор TinyMCE або CKEditor&lt;br /&gt;
|-&lt;br /&gt;
|Медіауправління&lt;br /&gt;
|Завантаження файлів через FilePond або Dropzone.js&lt;br /&gt;
|-&lt;br /&gt;
|Друк&lt;br /&gt;
|Немає необхідності&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Критерії оцінки ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерій&lt;br /&gt;
!Бали&lt;br /&gt;
|-&lt;br /&gt;
|Реалізація журналу матеріалів&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Форма створення та редагування матеріалу&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Робота медіабібліотеки&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Підтримка багатомовності&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Інтерактивність через AJAX&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Управління статусами публікації&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примітка ==&lt;br /&gt;
Цей модуль потрібен практично кожній компанії, що має сайт або внутрішній портал: IT-компаніям, маркетинг-агентствам, торговим мережам, освітнім установам і банкам.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створений CMS-модуль K2 ERP, який підтримує довідники категорій і мов, журнал матеріалів, форму створення та редагування контенту, WYSIWYG-редактор, медіабібліотеку, багатомовність, автоматичну публікацію, SEO-поля, історію змін, AJAX-інтерактив і, за потреби, модульні блоки контенту.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
* категорії контенту;&lt;br /&gt;
* мови;&lt;br /&gt;
* матеріали;&lt;br /&gt;
* переклади матеріалів;&lt;br /&gt;
* медіафайли;&lt;br /&gt;
* каталоги медіабібліотеки;&lt;br /&gt;
* теги;&lt;br /&gt;
* SEO-налаштування;&lt;br /&gt;
* історія змін;&lt;br /&gt;
* статуси публікації;&lt;br /&gt;
* модульні блоки;&lt;br /&gt;
* розташування блоків;&lt;br /&gt;
* автори та права доступу.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[CMS]]&lt;br /&gt;
* [[Контент]]&lt;br /&gt;
* [[Медіабібліотека]]&lt;br /&gt;
* [[Багатомовність]]&lt;br /&gt;
* [[WYSIWYG]]&lt;br /&gt;
* [[TinyMCE]]&lt;br /&gt;
* [[CKEditor]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/CRM&amp;diff=145</id>
		<title>Атестаційні завдання K2 ERP/CRM</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/CRM&amp;diff=145"/>
		<updated>2026-04-28T21:39:15Z</updated>

		<summary type="html">&lt;p&gt;R: Перенос з Гугл док.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — CRM&#039;&#039;&#039; — практична задача для розробника K2 ERP, що передбачає створення CRM-модуля для управління лідами, клієнтами, угодами, комунікаціями, воронкою продажів та аналітикою ефективності менеджерів.&lt;br /&gt;
&lt;br /&gt;
== Назва ==&lt;br /&gt;
&#039;&#039;&#039;Модуль CRM: Управління лідами, клієнтами, угодами і комунікаціями&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Реальний бізнес-контекст ==&lt;br /&gt;
Компанія займається активними продажами своїх послуг і товарів.&lt;br /&gt;
&lt;br /&gt;
Потрібно автоматизувати процес:&lt;br /&gt;
&lt;br /&gt;
* збору лідів — потенційних клієнтів;&lt;br /&gt;
* переведення лідів у клієнтів;&lt;br /&gt;
* управління угодами, комерційними пропозиціями та замовленнями;&lt;br /&gt;
* ведення історії контактів: дзвінків, листів, зустрічей;&lt;br /&gt;
* побудови воронки продажів;&lt;br /&gt;
* аналітики ефективності менеджерів.&lt;br /&gt;
&lt;br /&gt;
== Основні завдання ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Структура довідників ===&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Статуси лідів» ====&lt;br /&gt;
Довідник статусів лідів описує етапи проходження потенційного клієнта через воронку продажів.&lt;br /&gt;
&lt;br /&gt;
Приклад послідовності статусів:&lt;br /&gt;
&lt;br /&gt;
* новий;&lt;br /&gt;
* уточнюється;&lt;br /&gt;
* презентація;&lt;br /&gt;
* комерційна пропозиція;&lt;br /&gt;
* угода;&lt;br /&gt;
* успіх;&lt;br /&gt;
* втрата.&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Джерела лідів» ====&lt;br /&gt;
Довідник джерел лідів описує, звідки прийшов потенційний клієнт.&lt;br /&gt;
&lt;br /&gt;
Приклади джерел:&lt;br /&gt;
&lt;br /&gt;
* вебсайт;&lt;br /&gt;
* рекомендації;&lt;br /&gt;
* реклама;&lt;br /&gt;
* холодний дзвінок;&lt;br /&gt;
* захід.&lt;br /&gt;
&lt;br /&gt;
=== 2. Журнал «Ліди» ===&lt;br /&gt;
Журнал лідів повинен відображати потенційних клієнтів і поточний стан роботи з ними.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
У журналі мають бути такі колонки:&lt;br /&gt;
&lt;br /&gt;
* ПІБ або назва компанії;&lt;br /&gt;
* джерело ліда;&lt;br /&gt;
* дата створення;&lt;br /&gt;
* відповідальний менеджер;&lt;br /&gt;
* поточний статус;&lt;br /&gt;
* ймовірність успіху, %;&lt;br /&gt;
* очікувана сума угоди.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу ====&lt;br /&gt;
Журнал лідів має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* пошук по імені;&lt;br /&gt;
* пошук по телефону;&lt;br /&gt;
* пошук по email;&lt;br /&gt;
* фільтрацію за статусами;&lt;br /&gt;
* фільтрацію за менеджерами;&lt;br /&gt;
* фільтрацію за джерелами.&lt;br /&gt;
&lt;br /&gt;
=== 3. Форма створення ліда ===&lt;br /&gt;
&lt;br /&gt;
==== Основна інформація ====&lt;br /&gt;
Форма створення ліда повинна містити:&lt;br /&gt;
&lt;br /&gt;
* ПІБ або назву компанії;&lt;br /&gt;
* телефон;&lt;br /&gt;
* email;&lt;br /&gt;
* джерело ліда з вибором через AJAX;&lt;br /&gt;
* примітки;&lt;br /&gt;
* відповідального менеджера з вибором зі списку користувачів.&lt;br /&gt;
&lt;br /&gt;
==== Важливий функціонал ====&lt;br /&gt;
Потрібно передбачити:&lt;br /&gt;
&lt;br /&gt;
* конвертацію ліда у клієнта разом з угодою;&lt;br /&gt;
* відображення історії дій:&lt;br /&gt;
** первинний дзвінок;&lt;br /&gt;
** презентація;&lt;br /&gt;
** інші комунікації.&lt;br /&gt;
&lt;br /&gt;
=== 4. Журнал «Клієнти» ===&lt;br /&gt;
Журнал клієнтів повинен містити всі компанії або фізичних осіб, які стали клієнтами.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
&lt;br /&gt;
* назва компанії або особи;&lt;br /&gt;
* телефон;&lt;br /&gt;
* email;&lt;br /&gt;
* дата першого контакту;&lt;br /&gt;
* менеджер;&lt;br /&gt;
* поточний статус взаємодії.&lt;br /&gt;
&lt;br /&gt;
=== 5. Журнал «Угоди» ===&lt;br /&gt;
Журнал угод повинен відображати комерційні можливості та замовлення.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
&lt;br /&gt;
* назва угоди;&lt;br /&gt;
* клієнт;&lt;br /&gt;
* стадія продажу;&lt;br /&gt;
* вартість угоди;&lt;br /&gt;
* ймовірність успіху, %;&lt;br /&gt;
* менеджер;&lt;br /&gt;
* дата відкриття;&lt;br /&gt;
* дата закриття;&lt;br /&gt;
* статус:&lt;br /&gt;
** в роботі;&lt;br /&gt;
** успішно закрито;&lt;br /&gt;
** програно.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу угод ====&lt;br /&gt;
Журнал угод має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* зв’язування угод із клієнтами;&lt;br /&gt;
* зв’язування угод з історією комунікацій;&lt;br /&gt;
* відображення стадії воронки продажів.&lt;br /&gt;
&lt;br /&gt;
=== 6. Журнал «Комунікації» ===&lt;br /&gt;
Журнал комунікацій зберігає історію контактів із лідами та клієнтами.&lt;br /&gt;
&lt;br /&gt;
==== Типи подій ====&lt;br /&gt;
&lt;br /&gt;
* дзвінок:&lt;br /&gt;
** вхідний;&lt;br /&gt;
** вихідний;&lt;br /&gt;
* email;&lt;br /&gt;
* зустріч;&lt;br /&gt;
* коментар.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
&lt;br /&gt;
* клієнт або лід;&lt;br /&gt;
* тип події;&lt;br /&gt;
* дата;&lt;br /&gt;
* опис;&lt;br /&gt;
* відповідальний.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу комунікацій ====&lt;br /&gt;
Потрібно реалізувати:&lt;br /&gt;
&lt;br /&gt;
* додавання події вручну;&lt;br /&gt;
* прив’язку події до ліда;&lt;br /&gt;
* прив’язку події до клієнта.&lt;br /&gt;
&lt;br /&gt;
=== 7. Воронка продажів ===&lt;br /&gt;
Воронка продажів повинна візуально показувати проходження лідів та угод по етапах.&lt;br /&gt;
&lt;br /&gt;
==== Графік воронки ====&lt;br /&gt;
На графіку потрібно показати:&lt;br /&gt;
&lt;br /&gt;
* кількість лідів на кожній стадії;&lt;br /&gt;
* конверсії між стадіями;&lt;br /&gt;
* втрати на кожному етапі.&lt;br /&gt;
&lt;br /&gt;
Воронку можна реалізувати через просту діаграму, наприклад з використанням бібліотеки Chart.js.&lt;br /&gt;
&lt;br /&gt;
=== 8. Звітність ===&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Ліди за період» ====&lt;br /&gt;
Звіт має показувати:&lt;br /&gt;
&lt;br /&gt;
* кількість нових лідів;&lt;br /&gt;
* конверсії в клієнтів;&lt;br /&gt;
* джерела лідів.&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Ефективність менеджерів» ====&lt;br /&gt;
Звіт має показувати:&lt;br /&gt;
&lt;br /&gt;
* кількість лідів на менеджера;&lt;br /&gt;
* кількість успішних угод;&lt;br /&gt;
* середню суму угоди.&lt;br /&gt;
&lt;br /&gt;
=== 9. Додаткові умови ===&lt;br /&gt;
Модуль повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* виконання всіх операцій через AJAX:&lt;br /&gt;
** створення ліда;&lt;br /&gt;
** оновлення статусу;&lt;br /&gt;
** додавання комунікацій;&lt;br /&gt;
* миттєве оновлення статусу ліда без перезавантаження сторінки;&lt;br /&gt;
* автоматичні нагадування менеджерам про заплановані події:&lt;br /&gt;
** зустрічі;&lt;br /&gt;
** дзвінки;&lt;br /&gt;
* нотифікації при переході ліда у стадію &#039;&#039;&#039;«Угода»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Технічні вимоги ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр&lt;br /&gt;
!Опис&lt;br /&gt;
|-&lt;br /&gt;
|Бекенд&lt;br /&gt;
|K2 ERP на Python або PHP&lt;br /&gt;
|-&lt;br /&gt;
|БД&lt;br /&gt;
|PostgreSQL або MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Фронтенд&lt;br /&gt;
|HTML5, JavaScript, AJAX через Axios або Fetch API&lt;br /&gt;
|-&lt;br /&gt;
|UI-компоненти&lt;br /&gt;
|DataTables, Select2, Chart.js&lt;br /&gt;
|-&lt;br /&gt;
|Нотифікації&lt;br /&gt;
|Email або внутрішні сповіщення через WebSocket, опціонально&lt;br /&gt;
|-&lt;br /&gt;
|Друк&lt;br /&gt;
|Можливість експорту списків в Excel або PDF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Критерії оцінки ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерій&lt;br /&gt;
!Бали&lt;br /&gt;
|-&lt;br /&gt;
|Реалізація журналів лідів, угод і клієнтів&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Конверсія ліда у клієнта та угоду&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Управління комунікаціями&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Воронка продажів і аналітика&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Інтерактивність через AJAX&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Загальна якість структури коду і БД&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примітка ==&lt;br /&gt;
Такий модуль є серцем будь-якої сучасної компанії, яка будує продажі: IT-аутсорсингу, виробників обладнання, логістичних компаній, фінансових послуг і страхування.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створений CRM-модуль K2 ERP, який підтримує довідники статусів і джерел лідів, журнали лідів, клієнтів, угод і комунікацій, конверсію ліда у клієнта та угоду, воронку продажів, звітність, AJAX-інтерактив і нотифікації.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
* статуси лідів;&lt;br /&gt;
* джерела лідів;&lt;br /&gt;
* ліди;&lt;br /&gt;
* клієнти;&lt;br /&gt;
* угоди;&lt;br /&gt;
* стадії продажів;&lt;br /&gt;
* комунікації;&lt;br /&gt;
* заплановані події;&lt;br /&gt;
* користувачі-менеджери;&lt;br /&gt;
* нотифікації;&lt;br /&gt;
* журнал змін;&lt;br /&gt;
* файли експорту.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[CRM]]&lt;br /&gt;
* [[Ліди]]&lt;br /&gt;
* [[Клієнти]]&lt;br /&gt;
* [[Угоди]]&lt;br /&gt;
* [[Воронка продажів]]&lt;br /&gt;
* [[Chart.js]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/TMS&amp;diff=144</id>
		<title>Атестаційні завдання K2 ERP/TMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/TMS&amp;diff=144"/>
		<updated>2026-04-28T21:36:38Z</updated>

		<summary type="html">&lt;p&gt;R: Перенос з Гугл док.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — TMS&#039;&#039;&#039; — практична задача для розробника K2 ERP, що передбачає створення модуля управління транспортними перевезеннями: облік замовлень на доставку, автомобілів, водіїв, маршрутів, витрат, статусів доставки, друкованих документів і звітності.&lt;br /&gt;
&lt;br /&gt;
== Назва ==&lt;br /&gt;
&#039;&#039;&#039;Модуль управління транспортними перевезеннями (TMS)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Реальний бізнес-контекст ==&lt;br /&gt;
Компанія здійснює доставку товарів власним або залученим транспортом.&lt;br /&gt;
&lt;br /&gt;
У системі потрібно вести облік:&lt;br /&gt;
&lt;br /&gt;
* замовлень на доставку;&lt;br /&gt;
* автомобілів та водіїв;&lt;br /&gt;
* планування маршрутів;&lt;br /&gt;
* витрат на перевезення;&lt;br /&gt;
* статусу виконання доставки.&lt;br /&gt;
&lt;br /&gt;
Менеджери повинні:&lt;br /&gt;
&lt;br /&gt;
* призначати машини на замовлення;&lt;br /&gt;
* контролювати статуси перевезень у реальному часі;&lt;br /&gt;
* отримувати акти виконаних робіт.&lt;br /&gt;
&lt;br /&gt;
== Основні завдання ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Структура довідників ===&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Транспортні засоби» ====&lt;br /&gt;
Довідник транспортних засобів повинен містити:&lt;br /&gt;
&lt;br /&gt;
* державний номер;&lt;br /&gt;
* марку та модель;&lt;br /&gt;
* тип кузова;&lt;br /&gt;
* вантажопідйомність;&lt;br /&gt;
* власника транспорту:&lt;br /&gt;
** компанія;&lt;br /&gt;
** підрядник;&lt;br /&gt;
* стан транспортного засобу:&lt;br /&gt;
** активний;&lt;br /&gt;
** на ремонті.&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Водії» ====&lt;br /&gt;
Довідник водіїв повинен містити:&lt;br /&gt;
&lt;br /&gt;
* ПІБ;&lt;br /&gt;
* телефон;&lt;br /&gt;
* водійське посвідчення;&lt;br /&gt;
* прив’язку до транспортного засобу.&lt;br /&gt;
&lt;br /&gt;
=== 2. Журнал «Замовлення на перевезення» ===&lt;br /&gt;
Журнал замовлень на перевезення повинен відображати всі доставки та їхній поточний стан.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
У журналі мають бути такі колонки:&lt;br /&gt;
&lt;br /&gt;
* номер замовлення;&lt;br /&gt;
* дата створення;&lt;br /&gt;
* замовник, контрагент;&lt;br /&gt;
* пункт відправлення;&lt;br /&gt;
* пункт призначення;&lt;br /&gt;
* дата та час завантаження;&lt;br /&gt;
* дата та час доставки;&lt;br /&gt;
* статус замовлення:&lt;br /&gt;
** нове;&lt;br /&gt;
** в дорозі;&lt;br /&gt;
** доставлено;&lt;br /&gt;
** скасовано.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу ====&lt;br /&gt;
Журнал має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* пошук за номером замовлення;&lt;br /&gt;
* пошук за замовником;&lt;br /&gt;
* пошук за датами;&lt;br /&gt;
* фільтрацію за статусами.&lt;br /&gt;
&lt;br /&gt;
=== 3. Форма створення замовлення на перевезення ===&lt;br /&gt;
&lt;br /&gt;
==== Заголовок замовлення ====&lt;br /&gt;
Форма замовлення повинна містити:&lt;br /&gt;
&lt;br /&gt;
* замовника, контрагента через AJAX-пошук;&lt;br /&gt;
* контактну особу;&lt;br /&gt;
* пункт відправлення — пошук адреси або ручне введення;&lt;br /&gt;
* пункт призначення;&lt;br /&gt;
* планову дату завантаження;&lt;br /&gt;
* планову дату доставки;&lt;br /&gt;
* примітки.&lt;br /&gt;
&lt;br /&gt;
==== Вибір транспортного засобу ====&lt;br /&gt;
Потрібно реалізувати:&lt;br /&gt;
&lt;br /&gt;
* вибір із вільних машин, доступних на дату перевезення;&lt;br /&gt;
* автоматичний фільтр за вантажопідйомністю.&lt;br /&gt;
&lt;br /&gt;
==== Вибір водія ====&lt;br /&gt;
Система повинна пропонувати водія, який закріплений за машиною, або дозволяти вибрати іншого водія.&lt;br /&gt;
&lt;br /&gt;
=== 4. Операції зі статусами ===&lt;br /&gt;
Потрібно реалізувати такі статуси замовлення:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Нове&#039;&#039;&#039; — замовлення створене;&lt;br /&gt;
* &#039;&#039;&#039;Призначено&#039;&#039;&#039; — обрано машину та водія;&lt;br /&gt;
* &#039;&#039;&#039;В дорозі&#039;&#039;&#039; — машина вирушила, статус встановлюється кнопкою &#039;&#039;&#039;«Почати доставку»&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;Доставлено&#039;&#039;&#039; — машина прибула, статус встановлюється кнопкою &#039;&#039;&#039;«Завершити доставку»&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;Скасовано&#039;&#039;&#039; — замовлення скасоване.&lt;br /&gt;
&lt;br /&gt;
=== 5. Додаткові розрахунки ===&lt;br /&gt;
Вартість доставки розраховується за тарифами.&lt;br /&gt;
&lt;br /&gt;
Можливі варіанти тарифікації:&lt;br /&gt;
&lt;br /&gt;
* фіксована ціна за доставку;&lt;br /&gt;
* ціна за кілометр з автоматичним розрахунком відстані через Google Maps API;&lt;br /&gt;
* ціна за кілометр із ручним введенням відстані.&lt;br /&gt;
&lt;br /&gt;
==== Формула розрахунку вартості ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Вартість = Відстань × Тариф за 1 км + Додаткові витрати&lt;br /&gt;
&amp;lt;/pre&amp;gt;До додаткових витрат можуть належати:&lt;br /&gt;
&lt;br /&gt;
* очікування;&lt;br /&gt;
* навантаження;&lt;br /&gt;
* інші витрати, пов’язані з перевезенням.&lt;br /&gt;
&lt;br /&gt;
=== 6. Шаблони документів ===&lt;br /&gt;
&lt;br /&gt;
==== Транспортна накладна ====&lt;br /&gt;
У транспортній накладній потрібно виводити:&lt;br /&gt;
&lt;br /&gt;
* номер замовлення;&lt;br /&gt;
* машину;&lt;br /&gt;
* водія;&lt;br /&gt;
* замовника;&lt;br /&gt;
* пункт відправлення;&lt;br /&gt;
* пункт призначення;&lt;br /&gt;
* список товарів, якщо потрібен;&lt;br /&gt;
* підписи водія і представника замовника.&lt;br /&gt;
&lt;br /&gt;
==== Акт виконаних робіт ====&lt;br /&gt;
Акт виконаних робіт формується після завершення доставки.&lt;br /&gt;
&lt;br /&gt;
=== 7. Звітність ===&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Перевезення за період» ====&lt;br /&gt;
Звіт має показувати:&lt;br /&gt;
&lt;br /&gt;
* кількість замовлень;&lt;br /&gt;
* суми за перевезення;&lt;br /&gt;
* витрати по транспорту;&lt;br /&gt;
* коефіцієнт використання транспорту.&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Рентабельність транспорту» ====&lt;br /&gt;
Звіт має показувати:&lt;br /&gt;
&lt;br /&gt;
* доходи;&lt;br /&gt;
* витрати;&lt;br /&gt;
* рентабельність по кожному транспортному засобу.&lt;br /&gt;
&lt;br /&gt;
=== 8. Специфіка функціоналу ===&lt;br /&gt;
Модуль повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* зміну всіх статусів через AJAX;&lt;br /&gt;
* фільтрацію в таблицях по статусу та датах;&lt;br /&gt;
* підрахунок підсумків прямо у журналі:&lt;br /&gt;
** кількість замовлень;&lt;br /&gt;
** загальна вартість перевезень;&lt;br /&gt;
* логування змін у замовленнях і статусах;&lt;br /&gt;
* контроль доступу:&lt;br /&gt;
** менеджери бачать лише свої замовлення;&lt;br /&gt;
** або замовлення за певними складами.&lt;br /&gt;
&lt;br /&gt;
== Технічні вимоги ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр&lt;br /&gt;
!Опис&lt;br /&gt;
|-&lt;br /&gt;
|Бекенд&lt;br /&gt;
|K2 ERP на Python або PHP&lt;br /&gt;
|-&lt;br /&gt;
|БД&lt;br /&gt;
|PostgreSQL або MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Фронтенд&lt;br /&gt;
|HTML5, JavaScript, AJAX через Fetch API або Axios&lt;br /&gt;
|-&lt;br /&gt;
|UI-компоненти&lt;br /&gt;
|DataTables, Select2 для автопошуку&lt;br /&gt;
|-&lt;br /&gt;
|Карти, опціонально&lt;br /&gt;
|Google Maps API або OpenStreetMap для розрахунку відстаней&lt;br /&gt;
|-&lt;br /&gt;
|Друк&lt;br /&gt;
|Stimulsoft Reports або внутрішній PDF-генератор&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Критерії оцінки ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерій&lt;br /&gt;
!Бали&lt;br /&gt;
|-&lt;br /&gt;
|Реалізація журналу замовлень&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Форма замовлення з вибором машини і водія&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Логіка статусів доставки&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Розрахунок вартості перевезення&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Формування друкованих документів&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Звітність і аналітика&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примітка ==&lt;br /&gt;
Такий модуль критично важливий для компаній із логістикою: служб доставки товарів, будівельних компаній, сервісних служб, складів, ТРЦ і транспортних агентств.&lt;br /&gt;
&lt;br /&gt;
Правильна реалізація TMS-модуля дозволяє контролювати весь ланцюжок доставки та оптимізувати витрати на транспорт.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створений TMS-модуль K2 ERP, який підтримує довідники транспортних засобів і водіїв, журнал замовлень на перевезення, форму замовлення з вибором машини та водія, логіку статусів, розрахунок вартості доставки, друк транспортної накладної й акту виконаних робіт, а також звіти по перевезеннях і рентабельності транспорту.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
* транспортні засоби;&lt;br /&gt;
* водії;&lt;br /&gt;
* контрагенти-замовники;&lt;br /&gt;
* замовлення на перевезення;&lt;br /&gt;
* статуси замовлень;&lt;br /&gt;
* маршрути;&lt;br /&gt;
* точки маршруту;&lt;br /&gt;
* тарифи;&lt;br /&gt;
* додаткові витрати;&lt;br /&gt;
* транспортні накладні;&lt;br /&gt;
* акти виконаних робіт;&lt;br /&gt;
* журнали змін статусів;&lt;br /&gt;
* права доступу менеджерів;&lt;br /&gt;
* склади або зони відповідальності.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[TMS]]&lt;br /&gt;
* [[Логістика]]&lt;br /&gt;
* [[Транспортна накладна]]&lt;br /&gt;
* [[Акт виконаних робіт]]&lt;br /&gt;
* [[OpenStreetMap]]&lt;br /&gt;
* [[Google Maps API]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%96%D0%BD%D0%BD%D1%8F_%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B0%D0%BC%D0%B8&amp;diff=143</id>
		<title>Атестаційні завдання K2 ERP/Управління договорами</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%96%D0%BD%D0%BD%D1%8F_%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B0%D0%BC%D0%B8&amp;diff=143"/>
		<updated>2026-04-28T21:34:30Z</updated>

		<summary type="html">&lt;p&gt;R: Перенос з Гугл док&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — Управління договорами&#039;&#039;&#039; — практична задача для розробника K2 ERP, що передбачає створення модуля обліку договорів компанії, автоматичного нарахування рахунків, контролю строків дії договорів, друку шаблонів та звітності.&lt;br /&gt;
&lt;br /&gt;
== Назва ==&lt;br /&gt;
&#039;&#039;&#039;Модуль управління договорами компанії&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Реалістичний опис бізнес-процесу ==&lt;br /&gt;
Компанія має велику кількість договорів із клієнтами та підрядниками. Для нормальної роботи потрібно:&lt;br /&gt;
&lt;br /&gt;
* вести облік усіх договорів;&lt;br /&gt;
* контролювати терміни закінчення;&lt;br /&gt;
* автоматично нараховувати суму щомісячних платежів по договорах, наприклад абонплату, роялті або постійні послуги;&lt;br /&gt;
* автоматично формувати акти або рахунки на підставі активних договорів;&lt;br /&gt;
* вчасно попереджати про закінчення або пролонгацію договорів.&lt;br /&gt;
&lt;br /&gt;
== Основні завдання ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Структура довідників ===&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Контрагенти» ====&lt;br /&gt;
Довідник контрагентів повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву компанії;&lt;br /&gt;
* тип контрагента:&lt;br /&gt;
** клієнт;&lt;br /&gt;
** постачальник;&lt;br /&gt;
* ЄДРПОУ або ІПН;&lt;br /&gt;
* контактну особу;&lt;br /&gt;
* email для повідомлень.&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Типи договорів» ====&lt;br /&gt;
Довідник типів договорів повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву типу договору:&lt;br /&gt;
** оренда;&lt;br /&gt;
** постійне обслуговування;&lt;br /&gt;
** постачання;&lt;br /&gt;
** аутсорсинг;&lt;br /&gt;
** ліцензійна угода;&lt;br /&gt;
** інші типи;&lt;br /&gt;
* ознаку, чи потребує тип договору автоматичного виставлення рахунків: так або ні.&lt;br /&gt;
&lt;br /&gt;
=== 2. Журнал «Договори» ===&lt;br /&gt;
Журнал договорів повинен відображати всі договори компанії.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
У журналі мають бути такі колонки:&lt;br /&gt;
&lt;br /&gt;
* номер договору;&lt;br /&gt;
* контрагент;&lt;br /&gt;
* тип договору;&lt;br /&gt;
* дата укладання;&lt;br /&gt;
* дата початку;&lt;br /&gt;
* дата закінчення;&lt;br /&gt;
* статус договору:&lt;br /&gt;
** діючий;&lt;br /&gt;
** закінчений;&lt;br /&gt;
** пролонгований;&lt;br /&gt;
** розірваний;&lt;br /&gt;
* сума договору;&lt;br /&gt;
* періодичність оплат:&lt;br /&gt;
** одноразово;&lt;br /&gt;
** щомісяця;&lt;br /&gt;
** щокварталу.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу ====&lt;br /&gt;
Журнал договорів має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* пошук за номером договору;&lt;br /&gt;
* пошук за контрагентом;&lt;br /&gt;
* пошук за періодами;&lt;br /&gt;
* фільтрацію по статусу;&lt;br /&gt;
* масове продовження договорів на новий термін — пролонгацію;&lt;br /&gt;
* лог змін по кожному договору.&lt;br /&gt;
&lt;br /&gt;
=== 3. Форма створення договору ===&lt;br /&gt;
&lt;br /&gt;
==== Заголовок договору ====&lt;br /&gt;
Форма створення договору повинна містити:&lt;br /&gt;
&lt;br /&gt;
* контрагента з вибором через AJAX-пошук;&lt;br /&gt;
* тип договору;&lt;br /&gt;
* номер договору, який вводиться вручну або генерується автоматично;&lt;br /&gt;
* дату укладання;&lt;br /&gt;
* дату початку;&lt;br /&gt;
* дату закінчення;&lt;br /&gt;
* умови пролонгації:&lt;br /&gt;
** автоматично;&lt;br /&gt;
** за погодженням;&lt;br /&gt;
* періодичність виставлення рахунків;&lt;br /&gt;
* суму платежу, якщо передбачені періодичні платежі.&lt;br /&gt;
&lt;br /&gt;
==== Додаткові дані договору ====&lt;br /&gt;
У формі договору потрібно передбачити:&lt;br /&gt;
&lt;br /&gt;
* прикріплення файлу скану підписаного договору у форматі PDF;&lt;br /&gt;
* поле приміток у форматі textarea.&lt;br /&gt;
&lt;br /&gt;
=== 4. Автоматичне нарахування рахунків по договорах ===&lt;br /&gt;
На початку кожного місяця система має перевіряти всі діючі договори з періодичністю &#039;&#039;&#039;«Щомісяця»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для кожного такого договору система повинна:&lt;br /&gt;
&lt;br /&gt;
* автоматично створювати чернетку рахунку на оплату;&lt;br /&gt;
* формувати номер рахунку автоматично на базі номера договору та порядкового номера місяця;&lt;br /&gt;
* пов’язувати рахунок із договором;&lt;br /&gt;
* відображати всі рахунки у журналі рахунків.&lt;br /&gt;
&lt;br /&gt;
=== 5. Сповіщення про закінчення договору ===&lt;br /&gt;
За 30 днів до закінчення договору система має створити нагадування.&lt;br /&gt;
&lt;br /&gt;
Нагадування повинно:&lt;br /&gt;
&lt;br /&gt;
* відображатися у списку &#039;&#039;&#039;«Договори, що закінчуються»&#039;&#039;&#039; у панелі керівника;&lt;br /&gt;
* надсилатися email відповідальному менеджеру.&lt;br /&gt;
&lt;br /&gt;
=== 6. Шаблони друку ===&lt;br /&gt;
&lt;br /&gt;
==== Шаблон договору ====&lt;br /&gt;
Шаблон договору повинен формуватися у форматі DOCX або PDF.&lt;br /&gt;
&lt;br /&gt;
У шаблоні потрібно підтримати підстановку змінних:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;{{CONTRACT_NUMBER}}&amp;lt;/code&amp;gt; — номер договору;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{CLIENT_NAME}}&amp;lt;/code&amp;gt; — назва клієнта;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{START_DATE}}&amp;lt;/code&amp;gt; — дата початку;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{END_DATE}}&amp;lt;/code&amp;gt; — дата закінчення;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{AMOUNT}}&amp;lt;/code&amp;gt; — сума.&lt;br /&gt;
&lt;br /&gt;
Також потрібно реалізувати генерацію шаблонного тексту договору на основі введених даних.&lt;br /&gt;
&lt;br /&gt;
==== Шаблон рахунку ====&lt;br /&gt;
Шаблон рахунку повинен містити:&lt;br /&gt;
&lt;br /&gt;
* контрагента;&lt;br /&gt;
* суму;&lt;br /&gt;
* дату виставлення;&lt;br /&gt;
* підпис директора та бухгалтера.&lt;br /&gt;
&lt;br /&gt;
=== 7. Звітність ===&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Договори за період» ====&lt;br /&gt;
Звіт повинен показувати договори за вибраний період:&lt;br /&gt;
&lt;br /&gt;
* укладені;&lt;br /&gt;
* закінчені;&lt;br /&gt;
* пролонговані.&lt;br /&gt;
&lt;br /&gt;
Також потрібно показувати суми укладених зобов’язань.&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Очікувані платежі» ====&lt;br /&gt;
Звіт повинен показувати суми платежів по діючих договорах на майбутні місяці.&lt;br /&gt;
&lt;br /&gt;
=== 8. Функціональні вимоги ===&lt;br /&gt;
Модуль повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* роботу без перезавантаження сторінок через AJAX;&lt;br /&gt;
* збереження чернеток договорів;&lt;br /&gt;
* автоматичний підрахунок сум платежів;&lt;br /&gt;
* лог змін із зазначенням, хто і коли редагував договір.&lt;br /&gt;
&lt;br /&gt;
== Технічні вимоги ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр&lt;br /&gt;
!Опис&lt;br /&gt;
|-&lt;br /&gt;
|Бекенд&lt;br /&gt;
|K2 ERP на Python або PHP&lt;br /&gt;
|-&lt;br /&gt;
|БД&lt;br /&gt;
|PostgreSQL або MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Фронтенд&lt;br /&gt;
|HTML5, JavaScript, AJAX&lt;br /&gt;
|-&lt;br /&gt;
|UI-компоненти&lt;br /&gt;
|DataTables, Select2 для вибору контрагентів&lt;br /&gt;
|-&lt;br /&gt;
|Друк&lt;br /&gt;
|Stimulsoft або внутрішній генератор PDF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Критерії оцінки ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерій&lt;br /&gt;
!Бали&lt;br /&gt;
|-&lt;br /&gt;
|Реалізація журналу договорів&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Форма створення договору та розрахунки&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Автоматичне створення рахунків&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Нотифікації про закінчення договорів&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Формування друкованих шаблонів&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Якість структури БД і коду&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примітка ==&lt;br /&gt;
Цей модуль є обов’язковим для будь-якої компанії середнього і великого бізнесу, яка працює з договорами: сервісних компаній, IT-компаній, торговельних мереж, орендодавців і фінансових установ.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створений модуль управління договорами в K2 ERP, який підтримує довідники контрагентів і типів договорів, журнал договорів, форму договору, автоматичне створення рахунків, контроль строків дії, сповіщення, друк шаблонів і звітність.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
* контрагенти;&lt;br /&gt;
* типи договорів;&lt;br /&gt;
* договори;&lt;br /&gt;
* файли договорів;&lt;br /&gt;
* умови пролонгації;&lt;br /&gt;
* графік платежів;&lt;br /&gt;
* рахунки;&lt;br /&gt;
* рядки рахунків;&lt;br /&gt;
* акти;&lt;br /&gt;
* сповіщення;&lt;br /&gt;
* відповідальні менеджери;&lt;br /&gt;
* журнал змін договорів;&lt;br /&gt;
* шаблони друку.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[Управління договорами]]&lt;br /&gt;
* [[Контрагенти]]&lt;br /&gt;
* [[Рахунок на оплату]]&lt;br /&gt;
* [[Акт виконаних робіт]]&lt;br /&gt;
* [[Автоматичне нарахування]]&lt;br /&gt;
* [[Пролонгація договору]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%9E%D1%80%D0%B5%D0%BD%D0%B4%D0%B0&amp;diff=142</id>
		<title>Атестаційні завдання K2 ERP/Оренда</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%9E%D1%80%D0%B5%D0%BD%D0%B4%D0%B0&amp;diff=142"/>
		<updated>2026-04-28T21:32:03Z</updated>

		<summary type="html">&lt;p&gt;R: Перенос з Гугл док&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — Рахунки орендарям ТРЦ&#039;&#039;&#039; — практична задача для розробника K2 ERP, що передбачає створення модуля обліку виставлення рахунків орендарям за орендовані площі та комунальні послуги в торговельно-розважальному центрі.&lt;br /&gt;
&lt;br /&gt;
== Назва ==&lt;br /&gt;
&#039;&#039;&#039;Модуль обліку виставлення рахунків орендарям за орендовані площі та комунальні послуги в ТРЦ&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Опис ситуації ==&lt;br /&gt;
Власник ТРЦ має десятки орендарів: магазини, кафе, сервісні компанії. Кожного місяця потрібно автоматизовано виконувати нарахування та виставлення рахунків.&lt;br /&gt;
&lt;br /&gt;
Щомісячно необхідно:&lt;br /&gt;
&lt;br /&gt;
* автоматично нараховувати фіксовану орендну плату за квадратні метри;&lt;br /&gt;
* враховувати платежі за електроенергію, водопостачання, опалення, кондиціонування та інші послуги;&lt;br /&gt;
* розраховувати комунальні послуги за лічильниками або за нормативом пропорційно площі.&lt;br /&gt;
&lt;br /&gt;
Система повинна:&lt;br /&gt;
&lt;br /&gt;
* автоматично розраховувати суми;&lt;br /&gt;
* дозволяти вручну коригувати дані;&lt;br /&gt;
* виставляти рахунки;&lt;br /&gt;
* формувати акти виконаних робіт;&lt;br /&gt;
* друкувати документи та надсилати їх орендарям;&lt;br /&gt;
* вести аналітику по оплатах і заборгованості.&lt;br /&gt;
&lt;br /&gt;
== Завдання ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Структура довідників ===&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Орендарі» ====&lt;br /&gt;
Довідник орендарів повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву компанії;&lt;br /&gt;
* договір оренди:&lt;br /&gt;
** номер договору;&lt;br /&gt;
** дату початку;&lt;br /&gt;
** дату закінчення;&lt;br /&gt;
* контактних осіб;&lt;br /&gt;
* email для виставлення рахунків.&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Орендовані площі» ====&lt;br /&gt;
Довідник орендованих площ повинен містити:&lt;br /&gt;
&lt;br /&gt;
* прив’язку до орендаря;&lt;br /&gt;
* номер приміщення;&lt;br /&gt;
* метраж, м²;&lt;br /&gt;
* ставку оренди за м², грн/м²;&lt;br /&gt;
* додаткові примітки.&lt;br /&gt;
&lt;br /&gt;
==== Довідник «Послуги» ====&lt;br /&gt;
Довідник послуг повинен містити типи послуг:&lt;br /&gt;
&lt;br /&gt;
* електроенергія;&lt;br /&gt;
* вода;&lt;br /&gt;
* опалення;&lt;br /&gt;
* кондиціонування;&lt;br /&gt;
* прибиральні послуги.&lt;br /&gt;
&lt;br /&gt;
Для кожної послуги потрібно передбачити тип розрахунку:&lt;br /&gt;
&lt;br /&gt;
* за показниками лічильника;&lt;br /&gt;
* за нормативом на 1 м²;&lt;br /&gt;
* фіксована сума.&lt;br /&gt;
&lt;br /&gt;
=== 2. Журнал документів «Рахунки на оплату» ===&lt;br /&gt;
Журнал документів має відображати всі рахунки, виставлені орендарям.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
У журналі повинні бути такі колонки:&lt;br /&gt;
&lt;br /&gt;
* номер рахунку;&lt;br /&gt;
* орендар;&lt;br /&gt;
* період нарахування: місяць і рік;&lt;br /&gt;
* загальна сума;&lt;br /&gt;
* статус рахунку:&lt;br /&gt;
** чернетка;&lt;br /&gt;
** виставлений;&lt;br /&gt;
** оплачений;&lt;br /&gt;
** прострочений;&lt;br /&gt;
* дата виставлення;&lt;br /&gt;
* дата оплати.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу ====&lt;br /&gt;
Журнал має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* створення рахунку;&lt;br /&gt;
* редагування рахунку;&lt;br /&gt;
* проведення рахунку;&lt;br /&gt;
* друк рахунку;&lt;br /&gt;
* фільтрацію по орендарю;&lt;br /&gt;
* фільтрацію по статусу;&lt;br /&gt;
* фільтрацію по періоду.&lt;br /&gt;
&lt;br /&gt;
=== 3. Форма створення рахунку ===&lt;br /&gt;
&lt;br /&gt;
==== Заголовок документа ====&lt;br /&gt;
Заголовок рахунку повинен містити:&lt;br /&gt;
&lt;br /&gt;
* орендаря з пошуком у довіднику через AJAX;&lt;br /&gt;
* період нарахування;&lt;br /&gt;
* дату виставлення.&lt;br /&gt;
&lt;br /&gt;
==== Таблична частина ====&lt;br /&gt;
Таблична частина повинна містити орендовані площі та послуги.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!№&lt;br /&gt;
!Назва послуги&lt;br /&gt;
!Одиниця виміру&lt;br /&gt;
!Кількість&lt;br /&gt;
!Ціна за одиницю&lt;br /&gt;
!Сума&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Оренда приміщення&lt;br /&gt;
|м²&lt;br /&gt;
|120&lt;br /&gt;
|300&lt;br /&gt;
|36 000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Електроенергія&lt;br /&gt;
|кВт·год&lt;br /&gt;
|450&lt;br /&gt;
|5&lt;br /&gt;
|2 250&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Водопостачання&lt;br /&gt;
|м³&lt;br /&gt;
|30&lt;br /&gt;
|20&lt;br /&gt;
|600&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Опалення&lt;br /&gt;
|м²&lt;br /&gt;
|120&lt;br /&gt;
|30&lt;br /&gt;
|3 600&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; |Підсумкова сума&lt;br /&gt;
!42 450 грн&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 4. Розрахунки в системі ===&lt;br /&gt;
&lt;br /&gt;
==== Оренда ====&lt;br /&gt;
Сума оренди розраховується за формулою:&amp;lt;pre&amp;gt;&lt;br /&gt;
Сума оренди = Метраж × Ставка за м²&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Електроенергія ====&lt;br /&gt;
Якщо є лічильник:&amp;lt;pre&amp;gt;&lt;br /&gt;
Сума = Спожиті кВт·год × Тариф&lt;br /&gt;
&amp;lt;/pre&amp;gt;Якщо лічильника немає:&amp;lt;pre&amp;gt;&lt;br /&gt;
Сума = Норма споживання × Метраж × Тариф&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Водопостачання ====&lt;br /&gt;
Водопостачання розраховується за лічильником або за нормативом.&lt;br /&gt;
&lt;br /&gt;
==== Опалення і кондиціонування ====&lt;br /&gt;
Опалення та кондиціонування зазвичай розраховуються пропорційно площі.&lt;br /&gt;
&lt;br /&gt;
=== 5. Інтерфейс користувача ===&lt;br /&gt;
Інтерфейс користувача повинен підтримувати:&lt;br /&gt;
&lt;br /&gt;
* додавання рядків послуг у таблиці через AJAX без перезавантаження сторінки;&lt;br /&gt;
* редагування кількості або тарифу прямо в таблиці через inline edit;&lt;br /&gt;
* автоматичний перерахунок підсумкової суми при зміні кількості або тарифу;&lt;br /&gt;
* кнопку &#039;&#039;&#039;«Зберегти чернетку»&#039;&#039;&#039;;&lt;br /&gt;
* кнопку &#039;&#039;&#039;«Виставити рахунок»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== 6. Друк рахунку ===&lt;br /&gt;
Шаблон рахунку повинен містити:&lt;br /&gt;
&lt;br /&gt;
* назву орендаря;&lt;br /&gt;
* реквізити ТРЦ;&lt;br /&gt;
* таблицю послуг;&lt;br /&gt;
* підсумкову суму;&lt;br /&gt;
* підпис відповідальної особи ТРЦ.&lt;br /&gt;
&lt;br /&gt;
Формат друку:&lt;br /&gt;
&lt;br /&gt;
* PDF;&lt;br /&gt;
* або HTML-друк для подальшої відправки.&lt;br /&gt;
&lt;br /&gt;
=== 7. Звітність ===&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Реєстр виставлених рахунків» ====&lt;br /&gt;
Звіт має містити:&lt;br /&gt;
&lt;br /&gt;
* список рахунків із підсумками за періодами;&lt;br /&gt;
* суми виставлені;&lt;br /&gt;
* суми сплачені;&lt;br /&gt;
* борги.&lt;br /&gt;
&lt;br /&gt;
==== Звіт «Баланс орендарів» ====&lt;br /&gt;
Звіт має містити:&lt;br /&gt;
&lt;br /&gt;
* орендарів із сумою нарахувань;&lt;br /&gt;
* оплати за вибраний період;&lt;br /&gt;
* виділення боржників червоним кольором.&lt;br /&gt;
&lt;br /&gt;
=== 8. Додаткові вимоги ===&lt;br /&gt;
&lt;br /&gt;
* статуси рахунків повинні змінюватися автоматично при фіксації оплати;&lt;br /&gt;
* потрібно логувати всі зміни по рахунках і оплатах;&lt;br /&gt;
* потрібно реалізувати нотифікації орендарям через email API про виставлення рахунку;&lt;br /&gt;
* потрібно передбачити можливість масового завантаження показників лічильників з Excel-файлу.&lt;br /&gt;
&lt;br /&gt;
== Технічні вимоги ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр&lt;br /&gt;
!Опис&lt;br /&gt;
|-&lt;br /&gt;
|Бекенд&lt;br /&gt;
|PHP 8 або Python 3&lt;br /&gt;
|-&lt;br /&gt;
|Фреймворк&lt;br /&gt;
|K2 Core або Symfony Slim K2&lt;br /&gt;
|-&lt;br /&gt;
|БД&lt;br /&gt;
|PostgreSQL або MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Фронтенд&lt;br /&gt;
|HTML5, JavaScript, AJAX через Fetch або Axios&lt;br /&gt;
|-&lt;br /&gt;
|UI-компоненти&lt;br /&gt;
|DataTables, Select2 для довідників&lt;br /&gt;
|-&lt;br /&gt;
|Друк&lt;br /&gt;
|Stimulsoft Reports або внутрішній PDF-генератор&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Критерії оцінки ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерій&lt;br /&gt;
!Бали&lt;br /&gt;
|-&lt;br /&gt;
|Коректність розрахунків&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Зручність введення даних, UX&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Реалізація AJAX-інтерактиву&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Якість структури БД і коду&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Формування друкованих форм&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Формування звітів&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Примітка ==&lt;br /&gt;
Це прикладна задача, яку реально використовують власники ТРЦ, бізнес-центри, склади, готелі та інші об’єкти нерухомості.&lt;br /&gt;
&lt;br /&gt;
Реалізація такого рішення в K2 ERP автоматизує щомісячну рутину та допомагає уникнути людських помилок.&lt;br /&gt;
&lt;br /&gt;
== Додаткові зауваження ==&lt;br /&gt;
Співробітники ТРЦ знімають показники лічильників, як правило, один раз на місяць. Усі зняті показники потрібно зберігати в системі.&lt;br /&gt;
&lt;br /&gt;
Співробітник вносить інформацію в табличному форматі на певну дату та час зняття показників.&lt;br /&gt;
&lt;br /&gt;
=== Таблиця показників лічильників ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!№&lt;br /&gt;
!Кімната / Приміщення&lt;br /&gt;
!№ лічильника (ID)&lt;br /&gt;
!Тип лічильника&lt;br /&gt;
!Одиниці&lt;br /&gt;
!Значення на початок періоду&lt;br /&gt;
!Значення на кінець періоду&lt;br /&gt;
!Різниця (витрата)&lt;br /&gt;
!Примітки&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|49&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|50&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!0,00&lt;br /&gt;
!&lt;br /&gt;
|}&lt;br /&gt;
Нарахування робляться по події натисканням кнопки та формуються на певну дату. Усі нарахування потрібно зберігати в системі.&lt;br /&gt;
&lt;br /&gt;
Приклад Excel-файлу нарахувань за 1 місяць:&lt;br /&gt;
&lt;br /&gt;
* https://drive.google.com/file/d/1poPAq1mFiPM_8wVZ3WU3ipPeTkSSISmq/view?usp=drive_link&lt;br /&gt;
&lt;br /&gt;
З таблиці нарахувань повинні виставлятись рахунки:&lt;br /&gt;
&lt;br /&gt;
* по певному нарахуванню;&lt;br /&gt;
* по певному контрагенту;&lt;br /&gt;
* або по всіх нарахуваннях одразу.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створений модуль K2 ERP для обліку оренди та комунальних послуг у ТРЦ, який підтримує довідники орендарів, площ і послуг, журнал рахунків, форму рахунку з AJAX-інтерактивом, розрахунки за лічильниками і нормативами, друк документів, звітність, контроль оплат, боргів і масове завантаження показників з Excel.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
* орендарі;&lt;br /&gt;
* договори оренди;&lt;br /&gt;
* орендовані площі;&lt;br /&gt;
* послуги;&lt;br /&gt;
* тарифи;&lt;br /&gt;
* лічильники;&lt;br /&gt;
* показники лічильників;&lt;br /&gt;
* нарахування;&lt;br /&gt;
* рядки нарахувань;&lt;br /&gt;
* рахунки на оплату;&lt;br /&gt;
* рядки рахунків;&lt;br /&gt;
* оплати;&lt;br /&gt;
* акти виконаних робіт;&lt;br /&gt;
* email-нотифікації;&lt;br /&gt;
* журнал змін.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[Оренда]]&lt;br /&gt;
* [[Комунальні послуги]]&lt;br /&gt;
* [[ТРЦ]]&lt;br /&gt;
* [[Рахунок на оплату]]&lt;br /&gt;
* [[Акт виконаних робіт]]&lt;br /&gt;
* [[Баланс орендарів]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/WMS&amp;diff=141</id>
		<title>Атестаційні завдання K2 ERP/WMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/WMS&amp;diff=141"/>
		<updated>2026-04-28T21:29:02Z</updated>

		<summary type="html">&lt;p&gt;R: Виправлено УРЛ в кінці&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — Оптова торгівля, FIFO та документообіг&#039;&#039;&#039; — практична задача для перевірки навичок розробника у побудові веб-рішення для обліку закупівель, продажів, послуг, партійного обліку, списання собівартості за FIFO та формування звітів.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Текст задачі ==&lt;br /&gt;
&lt;br /&gt;
Компанія займається оптовою торгівлею. Надходження товарів відображається документом &#039;&#039;&#039;«Прибуткова накладна»&#039;&#039;&#039;, продаж — документом &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;. Крім продажу товару можуть надаватися додаткові послуги, наприклад доставка. І послуги, і товари зазначаються в одній табличній частині.&lt;br /&gt;
&lt;br /&gt;
Перед продажем компанія спочатку створює документ &#039;&#039;&#039;«Замовлення»&#039;&#039;&#039;. На основі документа &#039;&#039;&#039;«Замовлення»&#039;&#039;&#039; створюється &#039;&#039;&#039;«Рахунок-фактура»&#039;&#039;&#039;, коли йде підтвердження замовлення і клієнт просить безготівковий рахунок.&lt;br /&gt;
&lt;br /&gt;
З документа &#039;&#039;&#039;«Рахунок-фактура»&#039;&#039;&#039; створюється документ &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;. На основі видаткової накладної створюється &#039;&#039;&#039;«Податкова накладна»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
При проведенні видаткової накладної, якщо товару не вистачає, система повинна показувати попередження із зазначенням кількості нестачі та не дозволяти проводити документ.&lt;br /&gt;
&lt;br /&gt;
Списання собівартості має бути організоване за партіями за методом &#039;&#039;&#039;FIFO&#039;&#039;&#039;. Вважається, що документи заднім числом не запроваджуються, але старі документи можуть неоперативно переводитися.&lt;br /&gt;
&lt;br /&gt;
Необхідно побудувати звіти:&lt;br /&gt;
&lt;br /&gt;
* продаж товарів за період;&lt;br /&gt;
* прибутки за період;&lt;br /&gt;
* залишки товару на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Документообіг ==&lt;br /&gt;
&lt;br /&gt;
Основний ланцюжок документів:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Замовлення&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Рахунок-фактура&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Видаткова накладна&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Податкова накладна&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Документи надходження оформлюються через &#039;&#039;&#039;прибуткову накладну&#039;&#039;&#039;. Документи продажу оформлюються через &#039;&#039;&#039;видаткову накладну&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Виконання задачі ==&lt;br /&gt;
&lt;br /&gt;
# Побудувати структуру бази даних у графічному вигляді та продемонструвати її.&lt;br /&gt;
# На основі графічної структури бази даних створити SQL для створення таблиць.&lt;br /&gt;
# Для вирішення задачі допускаються такі бази даних:&lt;br /&gt;
#* MySQL;&lt;br /&gt;
#* PostgreSQL;&lt;br /&gt;
#* SQLite.&lt;br /&gt;
# Веб-рішення має бути побудоване на фреймворку з відкритим вихідним кодом.&lt;br /&gt;
# При створенні сторінок документів усе має працювати без перезавантаження сторінок.&lt;br /&gt;
# Виконану роботу потрібно продемонструвати у вигляді веб-сторінки, доступної з інтернет-URL.&lt;br /&gt;
# При виконанні задачі потрібно зафіксувати час її виконання та повідомити його при здачі.&lt;br /&gt;
# При виконанні завдання потрібно використовувати об’єктно-орієнтований підхід.&lt;br /&gt;
&lt;br /&gt;
== Пояснення до задачі ==&lt;br /&gt;
&lt;br /&gt;
Пояснення нижче надане для розуміння того, які поля повинні бути у документах і яка має бути таблична частина. Усі форми повинні працювати без перезавантаження сторінки.&lt;br /&gt;
&lt;br /&gt;
=== Прибуткова накладна ===&lt;br /&gt;
&lt;br /&gt;
Прибуток товарів та послуг оформлюється документом надходження товарів та послуг — &#039;&#039;&#039;прибутковою накладною&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Зазвичай це реєстр документів, у якому можна знайти раніше створені документи, а також створити новий документ.&lt;br /&gt;
&lt;br /&gt;
==== Реєстр прибуткових накладних ====&lt;br /&gt;
&lt;br /&gt;
Реєстр повинен дозволяти переглядати, шукати та відкривати створені прибуткові накладні.&lt;br /&gt;
&lt;br /&gt;
==== Форма прибуткової накладної ====&lt;br /&gt;
&lt;br /&gt;
При відкритті або створенні прибуткової накладної документ повинен містити шапку документа та табличну частину.&lt;br /&gt;
&lt;br /&gt;
У табличній частині мають бути товари та послуги.&lt;br /&gt;
&lt;br /&gt;
==== Послуги в прибутковій накладній ====&lt;br /&gt;
&lt;br /&gt;
Послуги мають обліковуватися в тій самій табличній частині, що і товари.&lt;br /&gt;
&lt;br /&gt;
==== Друкована форма прибуткової накладної ====&lt;br /&gt;
&lt;br /&gt;
Документ повинен мати друковану форму.&lt;br /&gt;
&lt;br /&gt;
=== Реалізація товарів та послуг: видаткова накладна ===&lt;br /&gt;
&lt;br /&gt;
Продаж товарів і послуг оформлюється документом &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Реєстр видаткових накладних ====&lt;br /&gt;
&lt;br /&gt;
Реєстр документів повинен дозволяти переглядати, шукати, відкривати та створювати видаткові накладні.&lt;br /&gt;
&lt;br /&gt;
==== Реалізація послуг ====&lt;br /&gt;
&lt;br /&gt;
Послуги повинні додаватися у табличну частину документа разом з товарами.&lt;br /&gt;
&lt;br /&gt;
==== Друкована форма видаткової накладної ====&lt;br /&gt;
&lt;br /&gt;
Видаткова накладна повинна мати друковану форму.&lt;br /&gt;
&lt;br /&gt;
== Звіт «Залишки по складу» ==&lt;br /&gt;
&lt;br /&gt;
Потрібно реалізувати звіт &#039;&#039;&#039;«Залишки по складу»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Звіт повинен показувати залишки товарів на складі на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Вимоги до вибору рядків у видатковій накладній ==&lt;br /&gt;
&lt;br /&gt;
Вибір рядків у видатковій накладній має відбуватися з поточних залишків.&lt;br /&gt;
&lt;br /&gt;
Якщо товару недостатньо, система повинна:&lt;br /&gt;
&lt;br /&gt;
* показати попередження;&lt;br /&gt;
* вказати кількість нестачі;&lt;br /&gt;
* заборонити проведення документа.&lt;br /&gt;
&lt;br /&gt;
== FIFO ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FIFO&#039;&#039;&#039; — метод списання, за яким фактично списується той товар, який першим надійшов.&lt;br /&gt;
&lt;br /&gt;
Посилання для довідки:&lt;br /&gt;
&lt;br /&gt;
* https://uk.wikipedia.org/wiki/Алгоритм_заміщення_комірок_пам%27яті_FIFO&lt;br /&gt;
&lt;br /&gt;
У межах задачі FIFO використовується для списання собівартості товару за партіями.&lt;br /&gt;
&lt;br /&gt;
== Очікувані звіти ==&lt;br /&gt;
&lt;br /&gt;
Необхідно побудувати такі звіти:&lt;br /&gt;
&lt;br /&gt;
=== Продаж товарів за період ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати реалізацію товарів за вибраний період.&lt;br /&gt;
&lt;br /&gt;
=== Прибутки за період ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати прибуток за вибраний період з урахуванням собівартості, списаної за FIFO.&lt;br /&gt;
&lt;br /&gt;
=== Залишки товару на дату ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати залишки товару на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Цілі теста ==&lt;br /&gt;
&lt;br /&gt;
* Побачити вміння будувати структуру бази даних.&lt;br /&gt;
* Побачити знання SQL та вміння роботи з базою даних.&lt;br /&gt;
* Побачити стиль написання програмного коду.&lt;br /&gt;
* Перевірити вміння використання веб-технологій для прикладних задач.&lt;br /&gt;
* Перевірити вміння використання об’єктно-орієнтованого програмування.&lt;br /&gt;
* Перевірити вміння використання AJAX у практичних завданнях.&lt;br /&gt;
* Перевірити вміння інтерпретації практичної задачі у веб-додаток.&lt;br /&gt;
* Перевірити вміння налаштувати веб-сервер для відображення проєкту у вебі.&lt;br /&gt;
* Побачити швидкість вирішення задач у вебі.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створене веб-рішення для оптової торгівлі, яке підтримує прибуткові накладні, замовлення, рахунки-фактури, видаткові накладні, податкові накладні, послуги в табличній частині, контроль залишків, списання собівартості за FIFO, друковані форми та звіти.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
Для реалізації задачі доцільно передбачити такі сутності:&lt;br /&gt;
&lt;br /&gt;
* товари;&lt;br /&gt;
* послуги;&lt;br /&gt;
* контрагенти;&lt;br /&gt;
* склади;&lt;br /&gt;
* документи;&lt;br /&gt;
* рядки документів;&lt;br /&gt;
* партії товарів;&lt;br /&gt;
* рухи товарів;&lt;br /&gt;
* рухи собівартості;&lt;br /&gt;
* рахунки-фактури;&lt;br /&gt;
* податкові накладні;&lt;br /&gt;
* користувачі;&lt;br /&gt;
* журнал змін документів.&lt;br /&gt;
&lt;br /&gt;
== Критерії перевірки ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Напрям перевірки !! Що перевіряється&lt;br /&gt;
|-&lt;br /&gt;
| Структура БД || Повнота моделі даних, наявність партій, документів, рядків, залишків і рухів&lt;br /&gt;
|-&lt;br /&gt;
| SQL || Коректність SQL-скриптів для MySQL, PostgreSQL або SQLite&lt;br /&gt;
|-&lt;br /&gt;
| Веб-рішення || Робота сторінок без перезавантаження&lt;br /&gt;
|-&lt;br /&gt;
| AJAX || Створення, редагування, проведення документів через AJAX&lt;br /&gt;
|-&lt;br /&gt;
| FIFO || Коректне списання собівартості за партіями&lt;br /&gt;
|-&lt;br /&gt;
| Контроль залишків || Заборона проведення при нестачі товару&lt;br /&gt;
|-&lt;br /&gt;
| Звіти || Продажі, прибутки, залишки на дату&lt;br /&gt;
|-&lt;br /&gt;
| ООП || Об’єктно-орієнтована структура коду&lt;br /&gt;
|-&lt;br /&gt;
| Демонстрація || Доступний веб-URL і зафіксований час виконання&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ілюстрації з документа ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_01.png|Приблизний вигляд реєстру прибуткових накладних|посилання=Файл:K2_Attestation_Wholesale_FIFO_01.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_02.png|Форма прибуткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_02.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_03.png|Послуги у прибутковій накладній|посилання=Файл:K2_Attestation_Wholesale_FIFO_03.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_04.png|Друкована форма прибуткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_04.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_05.png|Реєстр видаткових накладних|посилання=Файл:K2_Attestation_Wholesale_FIFO_05.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_06.png|Реалізація послуг у видатковій накладній|посилання=Файл:K2_Attestation_Wholesale_FIFO_06.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_07.png|Друкована форма видаткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_07.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_08.png|Звіт «Залишки по складу»|посилання=Файл:K2_Attestation_Wholesale_FIFO_08.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_09.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_09.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_10.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_10.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[Оптова торгівля]]&lt;br /&gt;
* [[FIFO]]&lt;br /&gt;
* [[Складський облік]]&lt;br /&gt;
* [[Прибуткова накладна]]&lt;br /&gt;
* [[Видаткова накладна]]&lt;br /&gt;
* [[Звіт залишків по складу]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/WMS&amp;diff=140</id>
		<title>Атестаційні завдання K2 ERP/WMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/WMS&amp;diff=140"/>
		<updated>2026-04-28T21:28:26Z</updated>

		<summary type="html">&lt;p&gt;R: Перенос з Гугл док.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 ERP — Оптова торгівля, FIFO та документообіг&#039;&#039;&#039; — практична задача для перевірки навичок розробника у побудові веб-рішення для обліку закупівель, продажів, послуг, партійного обліку, списання собівартості за FIFO та формування звітів.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Текст задачі ==&lt;br /&gt;
&lt;br /&gt;
Компанія займається оптовою торгівлею. Надходження товарів відображається документом &#039;&#039;&#039;«Прибуткова накладна»&#039;&#039;&#039;, продаж — документом &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;. Крім продажу товару можуть надаватися додаткові послуги, наприклад доставка. І послуги, і товари зазначаються в одній табличній частині.&lt;br /&gt;
&lt;br /&gt;
Перед продажем компанія спочатку створює документ &#039;&#039;&#039;«Замовлення»&#039;&#039;&#039;. На основі документа &#039;&#039;&#039;«Замовлення»&#039;&#039;&#039; створюється &#039;&#039;&#039;«Рахунок-фактура»&#039;&#039;&#039;, коли йде підтвердження замовлення і клієнт просить безготівковий рахунок.&lt;br /&gt;
&lt;br /&gt;
З документа &#039;&#039;&#039;«Рахунок-фактура»&#039;&#039;&#039; створюється документ &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;. На основі видаткової накладної створюється &#039;&#039;&#039;«Податкова накладна»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
При проведенні видаткової накладної, якщо товару не вистачає, система повинна показувати попередження із зазначенням кількості нестачі та не дозволяти проводити документ.&lt;br /&gt;
&lt;br /&gt;
Списання собівартості має бути організоване за партіями за методом &#039;&#039;&#039;FIFO&#039;&#039;&#039;. Вважається, що документи заднім числом не запроваджуються, але старі документи можуть неоперативно переводитися.&lt;br /&gt;
&lt;br /&gt;
Необхідно побудувати звіти:&lt;br /&gt;
&lt;br /&gt;
* продаж товарів за період;&lt;br /&gt;
* прибутки за період;&lt;br /&gt;
* залишки товару на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Документообіг ==&lt;br /&gt;
&lt;br /&gt;
Основний ланцюжок документів:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Замовлення&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Рахунок-фактура&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Видаткова накладна&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Податкова накладна&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Документи надходження оформлюються через &#039;&#039;&#039;прибуткову накладну&#039;&#039;&#039;. Документи продажу оформлюються через &#039;&#039;&#039;видаткову накладну&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Виконання задачі ==&lt;br /&gt;
&lt;br /&gt;
# Побудувати структуру бази даних у графічному вигляді та продемонструвати її.&lt;br /&gt;
# На основі графічної структури бази даних створити SQL для створення таблиць.&lt;br /&gt;
# Для вирішення задачі допускаються такі бази даних:&lt;br /&gt;
#* MySQL;&lt;br /&gt;
#* PostgreSQL;&lt;br /&gt;
#* SQLite.&lt;br /&gt;
# Веб-рішення має бути побудоване на фреймворку з відкритим вихідним кодом.&lt;br /&gt;
# При створенні сторінок документів усе має працювати без перезавантаження сторінок.&lt;br /&gt;
# Виконану роботу потрібно продемонструвати у вигляді веб-сторінки, доступної з інтернет-URL.&lt;br /&gt;
# При виконанні задачі потрібно зафіксувати час її виконання та повідомити його при здачі.&lt;br /&gt;
# При виконанні завдання потрібно використовувати об’єктно-орієнтований підхід.&lt;br /&gt;
&lt;br /&gt;
== Пояснення до задачі ==&lt;br /&gt;
&lt;br /&gt;
Пояснення нижче надане для розуміння того, які поля повинні бути у документах і яка має бути таблична частина. Усі форми повинні працювати без перезавантаження сторінки.&lt;br /&gt;
&lt;br /&gt;
=== Прибуткова накладна ===&lt;br /&gt;
&lt;br /&gt;
Прибуток товарів та послуг оформлюється документом надходження товарів та послуг — &#039;&#039;&#039;прибутковою накладною&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Зазвичай це реєстр документів, у якому можна знайти раніше створені документи, а також створити новий документ.&lt;br /&gt;
&lt;br /&gt;
==== Реєстр прибуткових накладних ====&lt;br /&gt;
&lt;br /&gt;
Реєстр повинен дозволяти переглядати, шукати та відкривати створені прибуткові накладні.&lt;br /&gt;
&lt;br /&gt;
==== Форма прибуткової накладної ====&lt;br /&gt;
&lt;br /&gt;
При відкритті або створенні прибуткової накладної документ повинен містити шапку документа та табличну частину.&lt;br /&gt;
&lt;br /&gt;
У табличній частині мають бути товари та послуги.&lt;br /&gt;
&lt;br /&gt;
==== Послуги в прибутковій накладній ====&lt;br /&gt;
&lt;br /&gt;
Послуги мають обліковуватися в тій самій табличній частині, що і товари.&lt;br /&gt;
&lt;br /&gt;
==== Друкована форма прибуткової накладної ====&lt;br /&gt;
&lt;br /&gt;
Документ повинен мати друковану форму.&lt;br /&gt;
&lt;br /&gt;
=== Реалізація товарів та послуг: видаткова накладна ===&lt;br /&gt;
&lt;br /&gt;
Продаж товарів і послуг оформлюється документом &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Реєстр видаткових накладних ====&lt;br /&gt;
&lt;br /&gt;
Реєстр документів повинен дозволяти переглядати, шукати, відкривати та створювати видаткові накладні.&lt;br /&gt;
&lt;br /&gt;
==== Реалізація послуг ====&lt;br /&gt;
&lt;br /&gt;
Послуги повинні додаватися у табличну частину документа разом з товарами.&lt;br /&gt;
&lt;br /&gt;
==== Друкована форма видаткової накладної ====&lt;br /&gt;
&lt;br /&gt;
Видаткова накладна повинна мати друковану форму.&lt;br /&gt;
&lt;br /&gt;
== Звіт «Залишки по складу» ==&lt;br /&gt;
&lt;br /&gt;
Потрібно реалізувати звіт &#039;&#039;&#039;«Залишки по складу»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Звіт повинен показувати залишки товарів на складі на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Вимоги до вибору рядків у видатковій накладній ==&lt;br /&gt;
&lt;br /&gt;
Вибір рядків у видатковій накладній має відбуватися з поточних залишків.&lt;br /&gt;
&lt;br /&gt;
Якщо товару недостатньо, система повинна:&lt;br /&gt;
&lt;br /&gt;
* показати попередження;&lt;br /&gt;
* вказати кількість нестачі;&lt;br /&gt;
* заборонити проведення документа.&lt;br /&gt;
&lt;br /&gt;
== FIFO ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FIFO&#039;&#039;&#039; — метод списання, за яким фактично списується той товар, який першим надійшов.&lt;br /&gt;
&lt;br /&gt;
Посилання для довідки:&lt;br /&gt;
&lt;br /&gt;
* https://uk.wikipedia.org/wiki/Алгоритм_заміщення_комірок_пам%27яті_FIFO&lt;br /&gt;
&lt;br /&gt;
У межах задачі FIFO використовується для списання собівартості товару за партіями.&lt;br /&gt;
&lt;br /&gt;
== Очікувані звіти ==&lt;br /&gt;
&lt;br /&gt;
Необхідно побудувати такі звіти:&lt;br /&gt;
&lt;br /&gt;
=== Продаж товарів за період ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати реалізацію товарів за вибраний період.&lt;br /&gt;
&lt;br /&gt;
=== Прибутки за період ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати прибуток за вибраний період з урахуванням собівартості, списаної за FIFO.&lt;br /&gt;
&lt;br /&gt;
=== Залишки товару на дату ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати залишки товару на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Цілі теста ==&lt;br /&gt;
&lt;br /&gt;
* Побачити вміння будувати структуру бази даних.&lt;br /&gt;
* Побачити знання SQL та вміння роботи з базою даних.&lt;br /&gt;
* Побачити стиль написання програмного коду.&lt;br /&gt;
* Перевірити вміння використання веб-технологій для прикладних задач.&lt;br /&gt;
* Перевірити вміння використання об’єктно-орієнтованого програмування.&lt;br /&gt;
* Перевірити вміння використання AJAX у практичних завданнях.&lt;br /&gt;
* Перевірити вміння інтерпретації практичної задачі у веб-додаток.&lt;br /&gt;
* Перевірити вміння налаштувати веб-сервер для відображення проєкту у вебі.&lt;br /&gt;
* Побачити швидкість вирішення задач у вебі.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створене веб-рішення для оптової торгівлі, яке підтримує прибуткові накладні, замовлення, рахунки-фактури, видаткові накладні, податкові накладні, послуги в табличній частині, контроль залишків, списання собівартості за FIFO, друковані форми та звіти.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
Для реалізації задачі доцільно передбачити такі сутності:&lt;br /&gt;
&lt;br /&gt;
* товари;&lt;br /&gt;
* послуги;&lt;br /&gt;
* контрагенти;&lt;br /&gt;
* склади;&lt;br /&gt;
* документи;&lt;br /&gt;
* рядки документів;&lt;br /&gt;
* партії товарів;&lt;br /&gt;
* рухи товарів;&lt;br /&gt;
* рухи собівартості;&lt;br /&gt;
* рахунки-фактури;&lt;br /&gt;
* податкові накладні;&lt;br /&gt;
* користувачі;&lt;br /&gt;
* журнал змін документів.&lt;br /&gt;
&lt;br /&gt;
== Критерії перевірки ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Напрям перевірки !! Що перевіряється&lt;br /&gt;
|-&lt;br /&gt;
| Структура БД || Повнота моделі даних, наявність партій, документів, рядків, залишків і рухів&lt;br /&gt;
|-&lt;br /&gt;
| SQL || Коректність SQL-скриптів для MySQL, PostgreSQL або SQLite&lt;br /&gt;
|-&lt;br /&gt;
| Веб-рішення || Робота сторінок без перезавантаження&lt;br /&gt;
|-&lt;br /&gt;
| AJAX || Створення, редагування, проведення документів через AJAX&lt;br /&gt;
|-&lt;br /&gt;
| FIFO || Коректне списання собівартості за партіями&lt;br /&gt;
|-&lt;br /&gt;
| Контроль залишків || Заборона проведення при нестачі товару&lt;br /&gt;
|-&lt;br /&gt;
| Звіти || Продажі, прибутки, залишки на дату&lt;br /&gt;
|-&lt;br /&gt;
| ООП || Об’єктно-орієнтована структура коду&lt;br /&gt;
|-&lt;br /&gt;
| Демонстрація || Доступний веб-URL і зафіксований час виконання&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ілюстрації з документа ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_01.png|Приблизний вигляд реєстру прибуткових накладних|посилання=Файл:K2_Attestation_Wholesale_FIFO_01.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_02.png|Форма прибуткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_02.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_03.png|Послуги у прибутковій накладній|посилання=Файл:K2_Attestation_Wholesale_FIFO_03.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_04.png|Друкована форма прибуткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_04.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_05.png|Реєстр видаткових накладних|посилання=Файл:K2_Attestation_Wholesale_FIFO_05.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_06.png|Реалізація послуг у видатковій накладній|посилання=Файл:K2_Attestation_Wholesale_FIFO_06.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_07.png|Друкована форма видаткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_07.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_08.png|Звіт «Залишки по складу»|посилання=Файл:K2_Attestation_Wholesale_FIFO_08.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_09.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_09.png&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_10.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_10.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[Оптова торгівля]]&lt;br /&gt;
* [[FIFO]]&lt;br /&gt;
* [[Складський облік]]&lt;br /&gt;
* [[Прибуткова накладна]]&lt;br /&gt;
* [[Видаткова накладна]]&lt;br /&gt;
* [[Звіт залишків по складу]]&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категорія:K2 ERP]]&lt;br /&gt;
[[index.php?title=Категорія:K2 Cloud ERP]]&lt;br /&gt;
[[index.php?title=Категорія:Атестаційні завдання K2]]&lt;br /&gt;
[[index.php?title=Категорія:Оптова торгівля]]&lt;br /&gt;
[[index.php?title=Категорія:Складський облік]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/WMS&amp;diff=139</id>
		<title>Атестаційні завдання K2 ERP/WMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/WMS&amp;diff=139"/>
		<updated>2026-04-28T21:27:30Z</updated>

		<summary type="html">&lt;p&gt;R: Створена сторінка: {{Картка документації K2 | назва = Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та документообіг | система = K2 Cloud ERP | розділ = Оптова торгівля | тип = Атестаційне завдання для розробника }}  &amp;#039;&amp;#039;&amp;#039;Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та докумен...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Картка документації K2&lt;br /&gt;
| назва = Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та документообіг&lt;br /&gt;
| система = K2 Cloud ERP&lt;br /&gt;
| розділ = Оптова торгівля&lt;br /&gt;
| тип = Атестаційне завдання для розробника&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та документообіг&#039;&#039;&#039; — практична задача для перевірки навичок розробника у побудові веб-рішення для обліку закупівель, продажів, послуг, партійного обліку, списання собівартості за FIFO та формування звітів.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Текст задачі ==&lt;br /&gt;
&lt;br /&gt;
Компанія займається оптовою торгівлею. Надходження товарів відображається документом &#039;&#039;&#039;«Прибуткова накладна»&#039;&#039;&#039;, продаж — документом &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;. Крім продажу товару можуть надаватися додаткові послуги, наприклад доставка. І послуги, і товари зазначаються в одній табличній частині.&lt;br /&gt;
&lt;br /&gt;
Перед продажем компанія спочатку створює документ &#039;&#039;&#039;«Замовлення»&#039;&#039;&#039;. На основі документа &#039;&#039;&#039;«Замовлення»&#039;&#039;&#039; створюється &#039;&#039;&#039;«Рахунок-фактура»&#039;&#039;&#039;, коли йде підтвердження замовлення і клієнт просить безготівковий рахунок.&lt;br /&gt;
&lt;br /&gt;
З документа &#039;&#039;&#039;«Рахунок-фактура»&#039;&#039;&#039; створюється документ &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;. На основі видаткової накладної створюється &#039;&#039;&#039;«Податкова накладна»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
При проведенні видаткової накладної, якщо товару не вистачає, система повинна показувати попередження із зазначенням кількості нестачі та не дозволяти проводити документ.&lt;br /&gt;
&lt;br /&gt;
Списання собівартості має бути організоване за партіями за методом &#039;&#039;&#039;FIFO&#039;&#039;&#039;. Вважається, що документи заднім числом не запроваджуються, але старі документи можуть неоперативно переводитися.&lt;br /&gt;
&lt;br /&gt;
Необхідно побудувати звіти:&lt;br /&gt;
&lt;br /&gt;
* продаж товарів за період;&lt;br /&gt;
* прибутки за період;&lt;br /&gt;
* залишки товару на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Документообіг ==&lt;br /&gt;
&lt;br /&gt;
Основний ланцюжок документів:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Замовлення&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Рахунок-фактура&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Видаткова накладна&#039;&#039;&#039;;&lt;br /&gt;
# &#039;&#039;&#039;Податкова накладна&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Документи надходження оформлюються через &#039;&#039;&#039;прибуткову накладну&#039;&#039;&#039;. Документи продажу оформлюються через &#039;&#039;&#039;видаткову накладну&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Виконання задачі ==&lt;br /&gt;
&lt;br /&gt;
# Побудувати структуру бази даних у графічному вигляді та продемонструвати її.&lt;br /&gt;
# На основі графічної структури бази даних створити SQL для створення таблиць.&lt;br /&gt;
# Для вирішення задачі допускаються такі бази даних:&lt;br /&gt;
#* MySQL;&lt;br /&gt;
#* PostgreSQL;&lt;br /&gt;
#* SQLite.&lt;br /&gt;
# Веб-рішення має бути побудоване на фреймворку з відкритим вихідним кодом.&lt;br /&gt;
# При створенні сторінок документів усе має працювати без перезавантаження сторінок.&lt;br /&gt;
# Виконану роботу потрібно продемонструвати у вигляді веб-сторінки, доступної з інтернет-URL.&lt;br /&gt;
# При виконанні задачі потрібно зафіксувати час її виконання та повідомити його при здачі.&lt;br /&gt;
# При виконанні завдання потрібно використовувати об’єктно-орієнтований підхід.&lt;br /&gt;
&lt;br /&gt;
== Пояснення до задачі ==&lt;br /&gt;
&lt;br /&gt;
Пояснення нижче надане для розуміння того, які поля повинні бути у документах і яка має бути таблична частина. Усі форми повинні працювати без перезавантаження сторінки.&lt;br /&gt;
&lt;br /&gt;
=== Прибуткова накладна ===&lt;br /&gt;
&lt;br /&gt;
Прибуток товарів та послуг оформлюється документом надходження товарів та послуг — &#039;&#039;&#039;прибутковою накладною&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Зазвичай це реєстр документів, у якому можна знайти раніше створені документи, а також створити новий документ.&lt;br /&gt;
&lt;br /&gt;
==== Реєстр прибуткових накладних ====&lt;br /&gt;
&lt;br /&gt;
Реєстр повинен дозволяти переглядати, шукати та відкривати створені прибуткові накладні.&lt;br /&gt;
&lt;br /&gt;
==== Форма прибуткової накладної ====&lt;br /&gt;
&lt;br /&gt;
При відкритті або створенні прибуткової накладної документ повинен містити шапку документа та табличну частину.&lt;br /&gt;
&lt;br /&gt;
У табличній частині мають бути товари та послуги.&lt;br /&gt;
&lt;br /&gt;
==== Послуги в прибутковій накладній ====&lt;br /&gt;
&lt;br /&gt;
Послуги мають обліковуватися в тій самій табличній частині, що і товари.&lt;br /&gt;
&lt;br /&gt;
==== Друкована форма прибуткової накладної ====&lt;br /&gt;
&lt;br /&gt;
Документ повинен мати друковану форму.&lt;br /&gt;
&lt;br /&gt;
=== Реалізація товарів та послуг: видаткова накладна ===&lt;br /&gt;
&lt;br /&gt;
Продаж товарів і послуг оформлюється документом &#039;&#039;&#039;«Видаткова накладна»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Реєстр видаткових накладних ====&lt;br /&gt;
&lt;br /&gt;
Реєстр документів повинен дозволяти переглядати, шукати, відкривати та створювати видаткові накладні.&lt;br /&gt;
&lt;br /&gt;
==== Реалізація послуг ====&lt;br /&gt;
&lt;br /&gt;
Послуги повинні додаватися у табличну частину документа разом з товарами.&lt;br /&gt;
&lt;br /&gt;
==== Друкована форма видаткової накладної ====&lt;br /&gt;
&lt;br /&gt;
Видаткова накладна повинна мати друковану форму.&lt;br /&gt;
&lt;br /&gt;
== Звіт «Залишки по складу» ==&lt;br /&gt;
&lt;br /&gt;
Потрібно реалізувати звіт &#039;&#039;&#039;«Залишки по складу»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Звіт повинен показувати залишки товарів на складі на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Вимоги до вибору рядків у видатковій накладній ==&lt;br /&gt;
&lt;br /&gt;
Вибір рядків у видатковій накладній має відбуватися з поточних залишків.&lt;br /&gt;
&lt;br /&gt;
Якщо товару недостатньо, система повинна:&lt;br /&gt;
&lt;br /&gt;
* показати попередження;&lt;br /&gt;
* вказати кількість нестачі;&lt;br /&gt;
* заборонити проведення документа.&lt;br /&gt;
&lt;br /&gt;
== FIFO ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FIFO&#039;&#039;&#039; — метод списання, за яким фактично списується той товар, який першим надійшов.&lt;br /&gt;
&lt;br /&gt;
Посилання для довідки:&lt;br /&gt;
&lt;br /&gt;
* https://uk.wikipedia.org/wiki/Алгоритм_заміщення_комірок_пам%27яті_FIFO&lt;br /&gt;
&lt;br /&gt;
У межах задачі FIFO використовується для списання собівартості товару за партіями.&lt;br /&gt;
&lt;br /&gt;
== Очікувані звіти ==&lt;br /&gt;
&lt;br /&gt;
Необхідно побудувати такі звіти:&lt;br /&gt;
&lt;br /&gt;
=== Продаж товарів за період ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати реалізацію товарів за вибраний період.&lt;br /&gt;
&lt;br /&gt;
=== Прибутки за період ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати прибуток за вибраний період з урахуванням собівартості, списаної за FIFO.&lt;br /&gt;
&lt;br /&gt;
=== Залишки товару на дату ===&lt;br /&gt;
&lt;br /&gt;
Звіт має показувати залишки товару на зазначену дату.&lt;br /&gt;
&lt;br /&gt;
== Цілі теста ==&lt;br /&gt;
&lt;br /&gt;
* Побачити вміння будувати структуру бази даних.&lt;br /&gt;
* Побачити знання SQL та вміння роботи з базою даних.&lt;br /&gt;
* Побачити стиль написання програмного коду.&lt;br /&gt;
* Перевірити вміння використання веб-технологій для прикладних задач.&lt;br /&gt;
* Перевірити вміння використання об’єктно-орієнтованого програмування.&lt;br /&gt;
* Перевірити вміння використання AJAX у практичних завданнях.&lt;br /&gt;
* Перевірити вміння інтерпретації практичної задачі у веб-додаток.&lt;br /&gt;
* Перевірити вміння налаштувати веб-сервер для відображення проєкту у вебі.&lt;br /&gt;
* Побачити швидкість вирішення задач у вебі.&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створене веб-рішення для оптової торгівлі, яке підтримує прибуткові накладні, замовлення, рахунки-фактури, видаткові накладні, податкові накладні, послуги в табличній частині, контроль залишків, списання собівартості за FIFO, друковані форми та звіти.&lt;br /&gt;
&lt;br /&gt;
== Рекомендовані сутності бази даних ==&lt;br /&gt;
&lt;br /&gt;
Для реалізації задачі доцільно передбачити такі сутності:&lt;br /&gt;
&lt;br /&gt;
* товари;&lt;br /&gt;
* послуги;&lt;br /&gt;
* контрагенти;&lt;br /&gt;
* склади;&lt;br /&gt;
* документи;&lt;br /&gt;
* рядки документів;&lt;br /&gt;
* партії товарів;&lt;br /&gt;
* рухи товарів;&lt;br /&gt;
* рухи собівартості;&lt;br /&gt;
* рахунки-фактури;&lt;br /&gt;
* податкові накладні;&lt;br /&gt;
* користувачі;&lt;br /&gt;
* журнал змін документів.&lt;br /&gt;
&lt;br /&gt;
== Критерії перевірки ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Напрям перевірки !! Що перевіряється&lt;br /&gt;
|-&lt;br /&gt;
| Структура БД || Повнота моделі даних, наявність партій, документів, рядків, залишків і рухів&lt;br /&gt;
|-&lt;br /&gt;
| SQL || Коректність SQL-скриптів для MySQL, PostgreSQL або SQLite&lt;br /&gt;
|-&lt;br /&gt;
| Веб-рішення || Робота сторінок без перезавантаження&lt;br /&gt;
|-&lt;br /&gt;
| AJAX || Створення, редагування, проведення документів через AJAX&lt;br /&gt;
|-&lt;br /&gt;
| FIFO || Коректне списання собівартості за партіями&lt;br /&gt;
|-&lt;br /&gt;
| Контроль залишків || Заборона проведення при нестачі товару&lt;br /&gt;
|-&lt;br /&gt;
| Звіти || Продажі, прибутки, залишки на дату&lt;br /&gt;
|-&lt;br /&gt;
| ООП || Об’єктно-орієнтована структура коду&lt;br /&gt;
|-&lt;br /&gt;
| Демонстрація || Доступний веб-URL і зафіксований час виконання&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ілюстрації з документа ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_01.png|Приблизний вигляд реєстру прибуткових накладних&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_02.png|Форма прибуткової накладної&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_03.png|Послуги у прибутковій накладній&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_04.png|Друкована форма прибуткової накладної&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_05.png|Реєстр видаткових накладних&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_06.png|Реалізація послуг у видатковій накладній&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_07.png|Друкована форма видаткової накладної&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_08.png|Звіт «Залишки по складу»&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_09.png|Ілюстрація до атестаційного завдання&lt;br /&gt;
K2_Attestation_Wholesale_FIFO_10.png|Ілюстрація до атестаційного завдання&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[Оптова торгівля]]&lt;br /&gt;
* [[FIFO]]&lt;br /&gt;
* [[Складський облік]]&lt;br /&gt;
* [[Прибуткова накладна]]&lt;br /&gt;
* [[Видаткова накладна]]&lt;br /&gt;
* [[Звіт залишків по складу]]&lt;br /&gt;
&lt;br /&gt;
[[Категорія:K2 ERP]]&lt;br /&gt;
[[Категорія:K2 Cloud ERP]]&lt;br /&gt;
[[Категорія:Атестаційні завдання K2]]&lt;br /&gt;
[[Категорія:Оптова торгівля]]&lt;br /&gt;
[[Категорія:Складський облік]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_10.png&amp;diff=138</id>
		<title>Файл:K2 Attestation Wholesale FIFO 10.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_10.png&amp;diff=138"/>
		<updated>2026-04-28T21:27:26Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_09.png&amp;diff=137</id>
		<title>Файл:K2 Attestation Wholesale FIFO 09.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_09.png&amp;diff=137"/>
		<updated>2026-04-28T21:27:25Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_08.png&amp;diff=136</id>
		<title>Файл:K2 Attestation Wholesale FIFO 08.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_08.png&amp;diff=136"/>
		<updated>2026-04-28T21:27:23Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_07.png&amp;diff=135</id>
		<title>Файл:K2 Attestation Wholesale FIFO 07.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_07.png&amp;diff=135"/>
		<updated>2026-04-28T21:27:21Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_06.png&amp;diff=134</id>
		<title>Файл:K2 Attestation Wholesale FIFO 06.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_06.png&amp;diff=134"/>
		<updated>2026-04-28T21:27:19Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_05.png&amp;diff=133</id>
		<title>Файл:K2 Attestation Wholesale FIFO 05.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_05.png&amp;diff=133"/>
		<updated>2026-04-28T21:27:16Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_04.png&amp;diff=132</id>
		<title>Файл:K2 Attestation Wholesale FIFO 04.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_04.png&amp;diff=132"/>
		<updated>2026-04-28T21:27:14Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_03.png&amp;diff=131</id>
		<title>Файл:K2 Attestation Wholesale FIFO 03.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_03.png&amp;diff=131"/>
		<updated>2026-04-28T21:27:12Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_02.png&amp;diff=130</id>
		<title>Файл:K2 Attestation Wholesale FIFO 02.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_02.png&amp;diff=130"/>
		<updated>2026-04-28T21:27:10Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_01.png&amp;diff=129</id>
		<title>Файл:K2 Attestation Wholesale FIFO 01.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Attestation_Wholesale_FIFO_01.png&amp;diff=129"/>
		<updated>2026-04-28T21:27:07Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%9D%D0%B0%D0%B4%D1%85%D0%BE%D0%B4%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%96%D0%B2&amp;diff=128</id>
		<title>Атестаційні завдання K2 ERP/Надходження товарів</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%90%D1%82%D0%B5%D1%81%D1%82%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D1%96_%D0%B7%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D0%BD%D1%8F_K2_ERP/%D0%9D%D0%B0%D0%B4%D1%85%D0%BE%D0%B4%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%96%D0%B2&amp;diff=128"/>
		<updated>2026-04-28T21:24:57Z</updated>

		<summary type="html">&lt;p&gt;R: Перенос з Гугл документа&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Атестаційне завдання K2 Cloud ERP — Надходження товарів&#039;&#039;&#039; — практична задача для розробника K2 Cloud ERP, що передбачає створення веб-модуля обліку надходження товарів на склад з управлінням партіями.&lt;br /&gt;
&lt;br /&gt;
== Назва ==&lt;br /&gt;
&#039;&#039;&#039;Модуль обліку надходження товарів на склад з управлінням партіями&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Опис задачі ==&lt;br /&gt;
Необхідно розробити веб-модуль для обліку приходу товарів на склад.&lt;br /&gt;
&lt;br /&gt;
Кожен прихід реєструється у системі у вигляді документа &#039;&#039;&#039;«Надходження товарів»&#039;&#039;&#039;. Документ має містити детальну інформацію про партії товарів:&lt;br /&gt;
&lt;br /&gt;
* кількість;&lt;br /&gt;
* ціна закупки;&lt;br /&gt;
* дата виробництва;&lt;br /&gt;
* дата постачання.&lt;br /&gt;
&lt;br /&gt;
Кожен документ повинен:&lt;br /&gt;
&lt;br /&gt;
* реєструватися у журналі документів;&lt;br /&gt;
* мати можливість друкуватися у вигляді товарної накладної;&lt;br /&gt;
* відображатися у звіті руху товарів.&lt;br /&gt;
&lt;br /&gt;
Модуль повинен працювати без перезавантаження сторінки — через AJAX, з можливістю:&lt;br /&gt;
&lt;br /&gt;
* пошуку товарів та постачальників у довідниках;&lt;br /&gt;
* автоматичного розрахунку сум;&lt;br /&gt;
* формування підсумків по кількості та сумі у таблиці.&lt;br /&gt;
&lt;br /&gt;
== Поставлені задачі ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Створити довідники ===&lt;br /&gt;
Потрібно створити такі довідники:&lt;br /&gt;
&lt;br /&gt;
==== Товари ====&lt;br /&gt;
Довідник товарів має містити поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;;&lt;br /&gt;
* код;&lt;br /&gt;
* назва;&lt;br /&gt;
* одиниця виміру;&lt;br /&gt;
* тип товару;&lt;br /&gt;
* виробник;&lt;br /&gt;
* стандартна ціна закупки.&lt;br /&gt;
&lt;br /&gt;
==== Постачальники ====&lt;br /&gt;
Довідник постачальників має містити поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;;&lt;br /&gt;
* код;&lt;br /&gt;
* назва;&lt;br /&gt;
* контактні дані.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність довідників ====&lt;br /&gt;
Довідники мають підтримувати:&lt;br /&gt;
&lt;br /&gt;
* створення записів;&lt;br /&gt;
* редагування записів;&lt;br /&gt;
* видалення записів;&lt;br /&gt;
* пошук по назві або коду;&lt;br /&gt;
* вибір із довідника при заповненні документів;&lt;br /&gt;
* підказки через AJAX.&lt;br /&gt;
&lt;br /&gt;
=== 2. Створити журнал документів «Надходження товарів» ===&lt;br /&gt;
Журнал документів має відображати список документів надходження товарів.&lt;br /&gt;
&lt;br /&gt;
==== Колонки журналу ====&lt;br /&gt;
Таблиця журналу повинна містити такі колонки:&lt;br /&gt;
&lt;br /&gt;
* номер документа;&lt;br /&gt;
* дата;&lt;br /&gt;
* постачальник;&lt;br /&gt;
* кількість товарних позицій;&lt;br /&gt;
* загальна сума;&lt;br /&gt;
* статус документа:&lt;br /&gt;
** чернетка;&lt;br /&gt;
** проведений;&lt;br /&gt;
** анульований.&lt;br /&gt;
&lt;br /&gt;
==== Функціональність журналу ====&lt;br /&gt;
Журнал документів має підтримувати:&lt;br /&gt;
&lt;br /&gt;
* фільтрацію за датами;&lt;br /&gt;
* фільтрацію за постачальниками;&lt;br /&gt;
* фільтрацію за статусом;&lt;br /&gt;
* пошук по номеру документа;&lt;br /&gt;
* підсумки за обраним періодом.&lt;br /&gt;
&lt;br /&gt;
==== Підсумки журналу ====&lt;br /&gt;
За обраним періодом потрібно показувати:&lt;br /&gt;
&lt;br /&gt;
* загальну кількість товарів;&lt;br /&gt;
* загальну суму надходжень.&lt;br /&gt;
&lt;br /&gt;
=== 3. Створити форму введення документа «Надходження товарів» ===&lt;br /&gt;
Форма документа складається із заголовка документа та табличної частини.&lt;br /&gt;
&lt;br /&gt;
==== Заголовок документа ====&lt;br /&gt;
Заголовок документа повинен містити:&lt;br /&gt;
&lt;br /&gt;
* номер документа — автоматична генерація при збереженні;&lt;br /&gt;
* дата документа — за замовченням поточна дата;&lt;br /&gt;
* постачальник — пошук у довіднику через AJAX.&lt;br /&gt;
&lt;br /&gt;
==== Таблична частина ====&lt;br /&gt;
Таблична частина має бути багаторядковою формою та містити такі поля:&lt;br /&gt;
&lt;br /&gt;
* товар — пошук у довіднику через AJAX;&lt;br /&gt;
* одиниця виміру — підтягується автоматично;&lt;br /&gt;
* кількість — ручне введення;&lt;br /&gt;
* ціна закупки — автоматично пропонується, але може бути змінена вручну;&lt;br /&gt;
* сума — розраховується автоматично за формулою &amp;lt;code&amp;gt;кількість × ціна закупки&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Приховані або бекенд-розрахунки для товару ====&lt;br /&gt;
Для кожного товару необхідно передбачити:&lt;br /&gt;
&lt;br /&gt;
* номер партії — автоматичне генерування на основі дати постачання та коду товару;&lt;br /&gt;
* дата виробництва — опціонально;&lt;br /&gt;
* термін придатності — опціонально.&lt;br /&gt;
&lt;br /&gt;
=== 4. Реалізувати збереження та проведення документа ===&lt;br /&gt;
Потрібно реалізувати:&lt;br /&gt;
&lt;br /&gt;
* збереження документа без перезавантаження сторінки — через AJAX;&lt;br /&gt;
* проведення документа;&lt;br /&gt;
* переведення статусу документа у &#039;&#039;&#039;«Проведений»&#039;&#039;&#039;;&lt;br /&gt;
* зарахування товару на склад після проведення документа.&lt;br /&gt;
&lt;br /&gt;
=== 5. Розрахунки ===&lt;br /&gt;
&lt;br /&gt;
==== Розрахунки після збереження документа ====&lt;br /&gt;
Після збереження документа потрібно:&lt;br /&gt;
&lt;br /&gt;
* розрахувати підсумкову кількість товарів;&lt;br /&gt;
* розрахувати загальну суму документа;&lt;br /&gt;
* розрахувати окремо ПДВ 20%.&lt;br /&gt;
&lt;br /&gt;
==== Розрахунки у списку документів ====&lt;br /&gt;
При виведенні списку документів потрібно підраховувати:&lt;br /&gt;
&lt;br /&gt;
* загальну кількість товарних позицій за вибраний період;&lt;br /&gt;
* загальну суму за вибраний період.&lt;br /&gt;
&lt;br /&gt;
=== 6. Друк документів ===&lt;br /&gt;
Потрібно створити шаблон друку &#039;&#039;&#039;«Товарна накладна»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Дані для друку ====&lt;br /&gt;
У друкованій формі потрібно виводити:&lt;br /&gt;
&lt;br /&gt;
* шапку документа:&lt;br /&gt;
** постачальник;&lt;br /&gt;
** дата;&lt;br /&gt;
** номер;&lt;br /&gt;
* табличну частину:&lt;br /&gt;
** товари;&lt;br /&gt;
** одиниці виміру;&lt;br /&gt;
** кількість;&lt;br /&gt;
** ціна;&lt;br /&gt;
** сума;&lt;br /&gt;
* підсумки:&lt;br /&gt;
** загальна сума;&lt;br /&gt;
** сума ПДВ.&lt;br /&gt;
&lt;br /&gt;
Шаблон може бути реалізований у форматі HTML/PDF і використовувати Stimulsoft або внутрішні механізми друку K2.&lt;br /&gt;
&lt;br /&gt;
=== 7. Звіт «Рух товарів за період» ===&lt;br /&gt;
Потрібно реалізувати звіт &#039;&#039;&#039;«Рух товарів за період»&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Дані звіту ====&lt;br /&gt;
У звіті потрібно показати:&lt;br /&gt;
&lt;br /&gt;
* товари;&lt;br /&gt;
* кількість надходжень;&lt;br /&gt;
* загальну суму закупок.&lt;br /&gt;
&lt;br /&gt;
==== Фільтри звіту ====&lt;br /&gt;
Звіт має підтримувати фільтрацію:&lt;br /&gt;
&lt;br /&gt;
* по складу;&lt;br /&gt;
* по постачальнику;&lt;br /&gt;
* по товару.&lt;br /&gt;
&lt;br /&gt;
==== Підсумки звіту ====&lt;br /&gt;
У звіті потрібно формувати підсумки по всіх стовпцях.&lt;br /&gt;
&lt;br /&gt;
=== 8. Додаткові умови ===&lt;br /&gt;
&lt;br /&gt;
==== Фронтенд ====&lt;br /&gt;
Фронтенд має відповідати таким вимогам:&lt;br /&gt;
&lt;br /&gt;
* використання AJAX без повного перезавантаження сторінок;&lt;br /&gt;
* таблиці з сортуванням і фільтрацією;&lt;br /&gt;
* можна використовувати DataTables або власну реалізацію.&lt;br /&gt;
&lt;br /&gt;
==== Бекенд ====&lt;br /&gt;
Бекенд має відповідати таким вимогам:&lt;br /&gt;
&lt;br /&gt;
* робота з базою даних через ORM або SQL;&lt;br /&gt;
* чітке розмежування обробки чернеток і проведених документів;&lt;br /&gt;
* логування змін документів:&lt;br /&gt;
** хто створив документ;&lt;br /&gt;
** хто провів документ.&lt;br /&gt;
&lt;br /&gt;
== Технічні вимоги ==&lt;br /&gt;
&lt;br /&gt;
* PHP 8+ або Python для бекенду K2;&lt;br /&gt;
* MySQL або PostgreSQL;&lt;br /&gt;
* власний або стандартний MVC-фреймворк K2;&lt;br /&gt;
* HTML5;&lt;br /&gt;
* JavaScript;&lt;br /&gt;
* jQuery або Fetch API/Axios для AJAX.&lt;br /&gt;
&lt;br /&gt;
== Критерії оцінки ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерій&lt;br /&gt;
!Бали&lt;br /&gt;
|-&lt;br /&gt;
|Правильність структури БД&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Реалізація довідників з пошуком і вибором&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Журнал документів і підсумки&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Форма документа з AJAX-збереженням&lt;br /&gt;
|20&lt;br /&gt;
|-&lt;br /&gt;
|Проведення документа і розрахунок партій&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|Шаблон друку документа&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Формування звітів і підсумків&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Загальна якість коду: читабельність, безпека&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
!Разом&lt;br /&gt;
!100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Очікуваний результат ==&lt;br /&gt;
У результаті виконання атестаційного завдання має бути створений модуль K2 Cloud ERP для обліку надходження товарів на склад, який підтримує довідники товарів і постачальників, журнал документів, форму документа з табличною частиною, AJAX-збереження, проведення документа, управління партіями, друк товарної накладної та звіт руху товарів за період.&lt;br /&gt;
&lt;br /&gt;
== Примітка ==&lt;br /&gt;
Це завдання імітує реальну задачу, яка виникає щодня в роботі торгових, виробничих або дистриб&#039;юторських компаній. Воно підходить для атестації розробників, які будуть працювати з бізнес-логікою у K2 Cloud ERP.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP]]&lt;br /&gt;
* [[Атестаційні завдання K2 ERP]]&lt;br /&gt;
* [[Надходження товарів]]&lt;br /&gt;
* [[Складський облік]]&lt;br /&gt;
* [[WMS]]&lt;br /&gt;
* [[Управління партіями товарів]]&lt;br /&gt;
* [[Звіт руху товарів]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A0%D0%BE%D0%B7%D0%B3%D0%BE%D1%80%D1%82%D0%B0%D0%BD%D0%BD%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8_K2_ERP_Python_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BD%D0%B8%D0%BA%D1%96%D0%B2&amp;diff=127</id>
		<title>Розгортання системи K2 ERP Python для розробників</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A0%D0%BE%D0%B7%D0%B3%D0%BE%D1%80%D1%82%D0%B0%D0%BD%D0%BD%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8_K2_ERP_Python_%D0%B4%D0%BB%D1%8F_%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BD%D0%B8%D0%BA%D1%96%D0%B2&amp;diff=127"/>
		<updated>2026-04-28T21:20:25Z</updated>

		<summary type="html">&lt;p&gt;R: Розгортання K2 ERP для розробників Python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Розгортання системи K2 ERP Python для розробників&#039;&#039;&#039; — інструкція з локального розгортання робочого проєкту [[K2 Cloud ERP|K2 ERP]], підключення розробника, налаштування PyCharm, Git, компонентів, сервера оновлень і процесу публікації нових версій компонент.&lt;br /&gt;
&lt;br /&gt;
== Розгортання локального робочого проєкту ==&lt;br /&gt;
Розгортання локально робочого проекту K2 ERP та підключення до нього розробника&lt;br /&gt;
&lt;br /&gt;
== 1. Копіювання існуючого проекту по ftp, перший запуск ==&lt;br /&gt;
&lt;br /&gt;
* копіюєм з віддаленого сервера існуючий проект по ftp&lt;br /&gt;
&lt;br /&gt;
* переходимо в каталог /K2CloudERP і запускаємо файл first_run для налаштування параметрів віртуального середовища в поточному локальному розташуванні командою:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bash first_run.sh - для Linux&lt;br /&gt;
./first_run.bat - для Windows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* переходимо в файл налаштувань /K2CloudERP/cfg/k2/k2/k2cfg.py і змінюємо там domain_protocol з https на http&lt;br /&gt;
&lt;br /&gt;
* запускаємо додаток:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bash run.sh - для Linux&lt;br /&gt;
./run.bat - для Windows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. Встановлення, середовища розробки Pycharm та відкриття проекту: ==&lt;br /&gt;
&lt;br /&gt;
=== для Linux ===&lt;br /&gt;
&lt;br /&gt;
* встановлення через snap&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo rm /etc/apt/preferences.d/nosnap.pref&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install snapd&lt;br /&gt;
sudo snap install pycharm-community --classic&lt;br /&gt;
pycharm-community&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* встановлення через завантаження архіву з сайту&lt;br /&gt;
&lt;br /&gt;
https://www.jetbrains.com/pycharm/download/?section=linux&lt;br /&gt;
&lt;br /&gt;
розпаковуємо архів, переходимо в папку bin і запускаємо&amp;lt;pre&amp;gt;&lt;br /&gt;
./pycharm.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;якщо отримали помилку встановлюємо JRE/JDK командами:&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install default-jdk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== для Windows ===&lt;br /&gt;
&lt;br /&gt;
=== Завантаження архіву ===&lt;br /&gt;
завантажуємо архів https://www.jetbrains.com/pycharm/download/?section=windows&lt;br /&gt;
&lt;br /&gt;
розпаковуємо архів, запускаємо файл встановленя і встановлюємо згідно інструкцій&lt;br /&gt;
&lt;br /&gt;
* відкриваємо середовище розробки Pycharm,&lt;br /&gt;
&lt;br /&gt;
* відкриваємо поточний завантажений проект та налаштовуємо змінне середовище для поточного проекту:&lt;br /&gt;
&lt;br /&gt;
в правому нижньому куті вибираємо Python Interpreter --&amp;gt; Add new Interpreter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
у полі locations додаємо шлях до поточної папки venv&lt;br /&gt;
&lt;br /&gt;
у полі Base Interpreter додаємо шлях до поточного виконуваного Python файлу (Пр: ../K2CloudERP/venv/bin.python3.12.exe)&lt;br /&gt;
&lt;br /&gt;
* запускаємо проект в дебаг режимі (кнопка в правому верхньому куті)&lt;br /&gt;
&lt;br /&gt;
* запускаємо проект з консолі Pycharm командою:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bash run.sh - для Linux&lt;br /&gt;
./run.bat - для Windows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* активація віртуального середовища вручну&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
source venv/bin/activate - для Linux&lt;br /&gt;
.\venv\Scripts\activate - для Windows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. Встановлення та налаштування git ==&lt;br /&gt;
&lt;br /&gt;
* встановлення&lt;br /&gt;
&lt;br /&gt;
=== для Linux ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== для Windows ===&lt;br /&gt;
завантажуємо архів https://git-scm.com/downloads/win розпаковуємо архів, запускаємо файл встановленя і встановлюємо згідно інструкцій&lt;br /&gt;
&lt;br /&gt;
* налалштування git&lt;br /&gt;
&lt;br /&gt;
=== налаштування користувача ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global user.name &amp;quot;Ваше Ім&#039;я&amp;quot;&lt;br /&gt;
git config --global user.email &amp;quot;ваша_електронна_пошта@example.com&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== авторизація з допомогою логіна і пароля ===&lt;br /&gt;
&lt;br /&gt;
=== авторизація через ssh ===&lt;br /&gt;
&lt;br /&gt;
=== Налаштування SSH ключа ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -b 4096 -C &amp;quot;ваша_електронна_пошта@example.com&amp;quot;&lt;br /&gt;
eval &amp;quot;$(ssh-agent -s)&amp;quot;&lt;br /&gt;
ssh-add ~/.ssh/id_rsa&lt;br /&gt;
cat ~/.ssh/id_rsa.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;копіюєм отриманий ключ і вставляємо у віддалений репозиторій&lt;br /&gt;
&lt;br /&gt;
== 4. підключаємо віддалений репозиторій git для певної компоненти або списку компонент ==&lt;br /&gt;
для списку компонент (скрипт auto_update)&lt;br /&gt;
 копіюєм каталог із скриптом і вставляємо в корінь проекту на рівні з виконуваним файлом app.py https://git.corp2.eu/k2erp/python/k2/base/client/auto_update&lt;br /&gt;
відкриваємо проект в консолі і переходимо в каталог auto_update&amp;lt;pre&amp;gt;&lt;br /&gt;
cd auto_update&lt;br /&gt;
&amp;lt;/pre&amp;gt;відкриваємо файл settings.py і додаємо в словник ключі з потрібними компонентами (повний список в файлі settings_example.py)&lt;br /&gt;
&lt;br /&gt;
* виконуємо в консолі команду, для клонування актуальних версій компонент і перейменовування каталогів поточних версій компонент&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python git_cmd.py clone&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== для одної компоненти вручну ===&lt;br /&gt;
&lt;br /&gt;
* переходимо в папку необхідної компоненти, наприклад k2site&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd components/k2site&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ініціалізуєм git в поточній директорії&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git init&lt;br /&gt;
git checkout -b main (створюємо локальну гілку main і перемикаємось на неї)&lt;br /&gt;
git checkout master (переключаємось на іншу локальну гілку)&lt;br /&gt;
git remote add origin http://git.corp2.eu/k2erp/python/k2/base/site/k2site.git&lt;br /&gt;
git remote -v (перевірка)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* отримуємо дані з віддаленого репозиторію але не змінюємо поточну робочу гілку&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git fetch origin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* отримуємо дані з віддаленого репозиторію з віддаленого репозиторію та автоматично об&#039;єднує їх з поточною локальною гілкою.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull origin main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* перевіряємо зміни локально скопійованої копії проекту з віддаленим репозиторієм&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Комміт змін на віддалений репозиторій git ==&lt;br /&gt;
&lt;br /&gt;
=== автоматично (скрипт auto_update) ===&lt;br /&gt;
відкриваємо проект в консолі і переходимо в каталог auto_update&amp;lt;pre&amp;gt;&lt;br /&gt;
cd auto_update&lt;br /&gt;
&amp;lt;/pre&amp;gt;клонуємо компоненти з віддаленого сервера&amp;lt;pre&amp;gt;&lt;br /&gt;
python git_cmd.py clone&lt;br /&gt;
&amp;lt;/pre&amp;gt;перевірка статусу&lt;br /&gt;
 python git_cmd.py status&lt;br /&gt;
коміт змін&amp;lt;pre&amp;gt;&lt;br /&gt;
python git_cmd.py commit&lt;br /&gt;
&amp;lt;/pre&amp;gt;отримуємо зміни з віддаленого сервера&amp;lt;pre&amp;gt;&lt;br /&gt;
python git_cmd.py pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;пушимо зміни на віддалений репозиторій&amp;lt;pre&amp;gt;&lt;br /&gt;
python git_cmd.py push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== вручну ===&lt;br /&gt;
&lt;br /&gt;
* після внесених в коді змін перевіряємо їх командою&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* додаємо зміни командою&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git add .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* комітимо зміни:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git commit -m &amp;quot;Назва комміту&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* пушимо зміни на віддалений репозиторій&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* при подальшій роботі отримуємо зміни з віддаленого репозиторію командою&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Налаштування завантаження компонент на сервер оновлення ==&lt;br /&gt;
&lt;br /&gt;
* відкриваємо папку builder/config&lt;br /&gt;
&lt;br /&gt;
* в файлі component-list.txt додаємо список компонент, які будемо завантажувати на сервер оновлення, кожна компонента з нового рядка&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
components/k2update&lt;br /&gt;
components/k2adm&lt;br /&gt;
components/k2site&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* в папці ignore створюємо файл з назвою компоненти і додаємо файли і папки, які не потрібно завантажувати на сервер оновлення&lt;br /&gt;
&lt;br /&gt;
( приклад:&amp;lt;pre&amp;gt;&lt;br /&gt;
k2site.txt&lt;br /&gt;
__pycache__&lt;br /&gt;
.gitignore&lt;br /&gt;
.git&lt;br /&gt;
ej2.min.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* в файлі token.txt додаємо токен доступу до сервера оновлення&lt;br /&gt;
&lt;br /&gt;
== 7. Завантаження нової версії компоненти в систему оновлення ==&lt;br /&gt;
Для створення нової версії компоненти (stable або beta (testing) версії):&lt;br /&gt;
&lt;br /&gt;
* змінюємо версію в файлі setup.py в корні каталогу компоненти (рядок 5 поле version, наприклад version=2.0.4.43, version_type=&#039;stable&#039; (testing))&lt;br /&gt;
&lt;br /&gt;
* додаємо опис змін в в файлі history.txt в корні каталогу компоненти (1 рядок, наприклад 2.0.4.43 - додавання додаткового поля в форму реєстрації)&lt;br /&gt;
&lt;br /&gt;
* переходимо в корінь додатку, на рівні з виконуваним файлом app.py:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd k2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* завантажуємо додані в файлі builder/config/component-list.txt компоненти командою:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python k2update_push.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. Оновлюємо змінені версії компонент на тестових доменах deb1-deb3 та тестуємо функціонал. ==&lt;br /&gt;
&lt;br /&gt;
== Контрольний чек-лист розгортання ==&lt;br /&gt;
&lt;br /&gt;
# Проєкт скопійовано з віддаленого сервера по FTP.&lt;br /&gt;
# Виконано &amp;lt;code&amp;gt;first_run.sh&amp;lt;/code&amp;gt; або &amp;lt;code&amp;gt;first_run.bat&amp;lt;/code&amp;gt;.&lt;br /&gt;
# У файлі &amp;lt;code&amp;gt;/K2CloudERP/cfg/k2/k2/k2cfg.py&amp;lt;/code&amp;gt; для локального запуску змінено &amp;lt;code&amp;gt;domain_protocol&amp;lt;/code&amp;gt; з &amp;lt;code&amp;gt;https&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;http&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Проєкт запускається через &amp;lt;code&amp;gt;run.sh&amp;lt;/code&amp;gt; або &amp;lt;code&amp;gt;run.bat&amp;lt;/code&amp;gt;.&lt;br /&gt;
# У PyCharm налаштовано Python Interpreter на локальне віртуальне середовище &amp;lt;code&amp;gt;venv&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Встановлено та налаштовано Git.&lt;br /&gt;
# Підключено віддалений репозиторій потрібної компоненти або список компонент через &amp;lt;code&amp;gt;auto_update&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Перевірено &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Налаштовано &amp;lt;code&amp;gt;builder/config/component-list.txt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ignore&amp;lt;/code&amp;gt; та &amp;lt;code&amp;gt;token.txt&amp;lt;/code&amp;gt; для сервера оновлень.&lt;br /&gt;
# Оновлено версію компоненти в &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; і опис змін у &amp;lt;code&amp;gt;history.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Виконано &amp;lt;code&amp;gt;python k2update_push.py&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Оновлено компоненти на тестових доменах &amp;lt;code&amp;gt;deb1&amp;lt;/code&amp;gt;–&amp;lt;code&amp;gt;deb3&amp;lt;/code&amp;gt; та перевірено функціонал.&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[K2 Cloud ERP Python для розробників|K2 ERP Python для розробників]]&lt;br /&gt;
* [[Python]]&lt;br /&gt;
* [[PyCharm]]&lt;br /&gt;
* [[Git]]&lt;br /&gt;
* [[Розгортання системи K2 Cloud ERP PHP|Розгортання системи K2 ERP PHP]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=126</id>
		<title>Головна сторінка</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=126"/>
		<updated>2026-04-28T21:18:47Z</updated>

		<summary type="html">&lt;p&gt;R: Розгортання K2 ERP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Про систему K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]] — це комплексна система управління підприємством, яка об’єднує фінанси, бухгалтерію, продажі, склад, закупівлі, документообіг, CRM, аналітику та галузеві модулі в єдиному цифровому середовищі. Система допомагає автоматизувати щоденні процеси, зменшити ручну роботу й кількість помилок, контролювати ресурси в реальному часі, швидше обробляти заявки та документи, бачити повну картину бізнесу й приймати точні управлінські рішення на основі актуальних даних. Завдяки модульності, хмарному доступу та гнучкому налаштуванню K2 ERP підходить для компаній різного масштабу й допомагає бізнесу працювати прозоріше, ефективніше та впевнено масштабуватися.&lt;br /&gt;
&lt;br /&gt;
== Сайти K2 ERP ==&lt;br /&gt;
[[Ресурси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для користувачів ==&lt;br /&gt;
&lt;br /&gt;
[[Початок роботи з K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Хмара K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бухгалтерія K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Управлінський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[CRM K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Складський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтернет-магазин K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 VDoc]]&lt;br /&gt;
&lt;br /&gt;
[[Галузеві рішення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Звіти та аналітика K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Поширені питання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для програмістів ==&lt;br /&gt;
&lt;br /&gt;
[[Розгортання системи K2 ERP Python для розробників]]&lt;br /&gt;
&lt;br /&gt;
[[Архітектура K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Встановлення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Розгортання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Створення модулів K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[База даних K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[API K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтеграції K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 CMS]]&lt;br /&gt;
&lt;br /&gt;
[[Розробка веб-інтерфейсів K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бізнес-процеси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Права доступу K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Рекомендації для розробників K2]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 ERP Python]]&lt;br /&gt;
&lt;br /&gt;
[[Стандарти UI K2 2025]]&lt;br /&gt;
&lt;br /&gt;
== Атестаційні завдання по K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
[[Атестаційні завдання по K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Регламент K2]]&lt;br /&gt;
&lt;br /&gt;
== K2 ERP PHP ==&lt;br /&gt;
&lt;br /&gt;
[[Практична робота в K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Інструкція по розгортанню K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 Cloud ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
== Робота в K2 ==&lt;br /&gt;
[[Налаштування WireGuard]]&lt;br /&gt;
&lt;br /&gt;
== Довідник та модулі ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 CMS]]&lt;br /&gt;
* [[K2 VDoc (Електронний документообіг)]]&lt;br /&gt;
* [[Ліцензійна політика K2]]&lt;br /&gt;
&lt;br /&gt;
== Навігація за категоріями ==&lt;br /&gt;
Усі статті бази знань автоматично групуються за категоріями:&lt;br /&gt;
&lt;br /&gt;
* [[:Категорія:ERP-системи|ERP-системи]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення, розроблене в Україні|Українське ПЗ]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення для бізнесу|ПЗ для бізнесу]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Інформацію про роботу з цією вікі можна знайти на сторінці [[mediawikiwiki:Special:MyLanguage/Help:Contents|Довідка:Вміст]].&lt;br /&gt;
&lt;br /&gt;
== Деякі корисні ресурси ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список налаштувань];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Часті питання з приводу MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Розсилка повідомлень про появу нових версій MediaWiki];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локалізувати MediaWiki своєю мовою]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Дізнатися, як боротися зі спамом у своїй вікі]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D0%B8_%D1%82%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8_K2_ERP_Python&amp;diff=125</id>
		<title>Класи та команди K2 ERP Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D0%B8_%D1%82%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8_K2_ERP_Python&amp;diff=125"/>
		<updated>2026-04-28T21:16:33Z</updated>

		<summary type="html">&lt;p&gt;R: Прибрав слово Cloud&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;K2 ERP Python для розробників&#039;&#039;&#039; — документація з вимогами до створення компонентів, структури пакетів, системних класів, API, компонентних класів і допоміжних JavaScript-функцій системи [[K2 Cloud ERP|K2 ERP]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== K2 ERP Python ==&lt;br /&gt;
&lt;br /&gt;
Команда для автоматичної генерації html файлу з документацією по док стрінгах:&lt;br /&gt;
 pydoc -w k2/k2obj.py, де k2/k2obj.py - шлях до файлу з корня&lt;br /&gt;
&lt;br /&gt;
== Вимоги до створення компонент ==&lt;br /&gt;
&lt;br /&gt;
==== Компоненти, які публікуються в K2 ERP повинні мати щонайменше такі атрибути ====&lt;br /&gt;
&lt;br /&gt;
ORM структури. Структури, які потрібні для даної компоненти. (файл models.py)&lt;br /&gt;
&lt;br /&gt;
==== Головний клас компоненти, роути та api (файл views.py) ====&lt;br /&gt;
&lt;br /&gt;
Додаткові об’єкти компоненти. Додаткові класи від яких залежить функціонал компоненти. (каталог objects/)&lt;br /&gt;
&lt;br /&gt;
Хуки. Використовуються для розширення або зміни поведінки стандартних методів системи (файл hooks.py)&lt;br /&gt;
&lt;br /&gt;
Зележності від інших компонент. (файл requirements-components.txt)&lt;br /&gt;
 приклад:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k2log==2.0.0.2&lt;br /&gt;
k2grid==2.0.4.1&lt;br /&gt;
k2form==2.0.1.27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python залежності, якщо є. (файл requirements.txt)&lt;br /&gt;
&lt;br /&gt;
Readme.md. Файл в якому написана ціль компоненти, як її використовувати. Та різні моменти, які потрібно знати програмістам, адмінам та користувачам&lt;br /&gt;
&lt;br /&gt;
Історія змін. Документ, в якому описуються зміни текстом, зрозумілим для користувачів. (файл history.txt)&lt;br /&gt;
&lt;br /&gt;
Структура бази даних. На даний час, в форматі SQL power Architech. (каталог doc/schema)&lt;br /&gt;
&lt;br /&gt;
Бізнес-процеси, схеми роботи, які були втілені в проудкті. В форматі Draw.io. (каталог doc/business_processes)&lt;br /&gt;
&lt;br /&gt;
Інструкція користувача. Де розписано, як користуватись продуктом. Інструкція користувача повинна автоматично підтягуватись системою документації K2 ERP, додаючи розділ документації для цього продукту і надаючи можливість пошуку інформації в документації. Зберігається в каталозі: doc/user_manual)&lt;br /&gt;
&lt;br /&gt;
Документацію для розробників, що генерується автоматично з коментарів. Зберігається в каталозі: doc/developer_documentation )&lt;br /&gt;
&lt;br /&gt;
(потрібно завершити автоматичне збирання із компонент)&lt;br /&gt;
&lt;br /&gt;
Документація для розробників (не обов’язково, але желательно). Додатково, якщо потрібно, щось додатково відмітити. Каталог doc/additional_developer_docs)&lt;br /&gt;
&lt;br /&gt;
Приклади програмного коду з використанням компонент. Які автоматично з’являються в Examples при встановленні компоненти. І по яким можна протестувати функціонал. /examples (потрібно вирішити як додавати)&lt;br /&gt;
&lt;br /&gt;
Віджети. Дашборди та інші візуальні елементи для вставки на головну сторінку та інші сторінки, які можна додавати автоматично. (потрібно вирішити як додавати) /widgets&lt;br /&gt;
&lt;br /&gt;
Юніт тести. Написати де і яка структура. Юніт тести повинні автоматично знаходитись системою і використовуватись для загального тестування системи. Каталог /tests (потрібно завершити автоматичне збирання із компонент)&lt;br /&gt;
&lt;br /&gt;
Локалізації. В К2 використовуються щонайменше: українська та англійська мова. Ядро повинно вміти робити переклади і давати можливість працювати з перекладами стороннім користувачам, покращуючи якість перекладу. Зберігається в каталозі:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/languages/en/LC_MESSAGES/messages.po&lt;br /&gt;
/languages/en/LC_MESSAGES/messages.mo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Демо-дані. Це дані, які розгортаються на демо-базі даних для демонстрації роботи з продуктом. (потрібно вирішити як додавати)&lt;br /&gt;
&lt;br /&gt;
Файли ресурсів (зображення, тексти): Каталог /static&lt;br /&gt;
&lt;br /&gt;
YML, якщо є. Каталог /yml&lt;br /&gt;
&lt;br /&gt;
Іконки, які будуть використовуватись для представлення компоненти. Каталог /static/img&lt;br /&gt;
&lt;br /&gt;
Авторство. Якщо К2, то в форматі, як прийнято в цілому для К2, якщо сторонній розробник - інформація про стороннього розробника. Copyright © 2000-2025 К2®, Rudiuk Serhii. All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Шаблони, якщо є. Вказуємо каталог. Звертаю увагу, що К2 ERP повинна мати змогу використовувати не обмежену кількість шаблонів. Шаблони повинні бути так розроблені, щоб не конфліктувати з глобальними шаблонами системи. Каталог /templates&lt;br /&gt;
&lt;br /&gt;
==== Приклад дерева структури компоненти ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
components/&lt;br /&gt;
└── k2adm/&lt;br /&gt;
├── k2adm/&lt;br /&gt;
│ ├── data/&lt;br /&gt;
│ ├── languages/&lt;br /&gt;
│ ├── static/&lt;br /&gt;
│ ├── templates/&lt;br /&gt;
│ ├── yml/&lt;br /&gt;
│ ├── tests/&lt;br /&gt;
│ ├── examples/&lt;br /&gt;
│ ├── widgets/&lt;br /&gt;
│ ├── __init__.py&lt;br /&gt;
│ ├── objects/&lt;br /&gt;
│ ├── users/users.py&lt;br /&gt;
│ ├── roles/roles.py&lt;br /&gt;
│ ├── forms.py&lt;br /&gt;
│ ├── history.txt&lt;br /&gt;
│ ├── hooks.py&lt;br /&gt;
│ ├── models.py&lt;br /&gt;
│ ├── views.py│&lt;br /&gt;
├── __init__.py&lt;br /&gt;
├── doc/&lt;br /&gt;
├── schema/&lt;br /&gt;
├── business_processes/&lt;br /&gt;
├── user_manual/&lt;br /&gt;
├── developer_documentation/&lt;br /&gt;
├── additional_developer_docs/&lt;br /&gt;
├── history.txt&lt;br /&gt;
├── requirements-components.txt&lt;br /&gt;
├── requirements.txt&lt;br /&gt;
├── setup.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Системні класи ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2 ===&lt;br /&gt;
&lt;br /&gt;
Ядро системи K2CloudERP.&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Властивості класу ====&lt;br /&gt;
&lt;br /&gt;
domain_name #назва домену&lt;br /&gt;
&lt;br /&gt;
domain_protocol #протокол&lt;br /&gt;
&lt;br /&gt;
domain #домен&lt;br /&gt;
&lt;br /&gt;
port #порт&lt;br /&gt;
&lt;br /&gt;
db #підключення до БД&lt;br /&gt;
&lt;br /&gt;
default_language #мова за замовчуванням&lt;br /&gt;
&lt;br /&gt;
==== Властивості інстансу ====&lt;br /&gt;
&lt;br /&gt;
==== self.secur #властивість що підключає до ядра клас безпеки ====&lt;br /&gt;
&lt;br /&gt;
self.path #властивість що підключає до ядра клас пошуку шляхів по ієрархії self.data #властивість що підключає до ядра клас синхронізації даних&lt;br /&gt;
&lt;br /&gt;
==== self.settings #властивість що підключає до ядра клас збереження та пошуку налаштувань ====&lt;br /&gt;
&lt;br /&gt;
==== self.notifications #властивість що підключає до ядра клас створення та відправки сповіщень ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати домен&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().domain ====&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== Методи інстансу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати id поточного контрагента&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_id() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# отримати список встановлених компонент&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().component_list() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# отримати назву поточного проекту&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_name() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати id поточного користувача&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_current_user() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#створити користувача на рівні БД&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().create_db_role(user_name, password) ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(self, *args, **kwargs) ====&lt;br /&gt;
&lt;br /&gt;
Initialize self. See help(type(self)) for accurate signature.&lt;br /&gt;
&lt;br /&gt;
==== add_authorized_users(self, user_id, login) ====&lt;br /&gt;
&lt;br /&gt;
Додати користувача до списку авторизованих&lt;br /&gt;
&lt;br /&gt;
==== check_authorized_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Перевірити чи користувач активний&lt;br /&gt;
&lt;br /&gt;
==== check_logout_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Авторизовані користувачі&lt;br /&gt;
&lt;br /&gt;
==== component_list() ====&lt;br /&gt;
&lt;br /&gt;
Пошук встановлених компонент&lt;br /&gt;
&lt;br /&gt;
==== create_db_file_config_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Створення файлу з параметрами підключенням до БД для користувача&lt;br /&gt;
&lt;br /&gt;
==== create_db_role(self, user_name, password) ====&lt;br /&gt;
&lt;br /&gt;
Створення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== current_template(self) ====&lt;br /&gt;
&lt;br /&gt;
Search current template&lt;br /&gt;
&lt;br /&gt;
==== db_custom_engine(self, db) ====&lt;br /&gt;
&lt;br /&gt;
Зміна custom параметрів підключення&lt;br /&gt;
&lt;br /&gt;
==== db_user_engine(self, db) ====&lt;br /&gt;
&lt;br /&gt;
Зміна параметрів підключення для поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== dell_authorized_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Видалити користувача зі списку авторизованих&lt;br /&gt;
&lt;br /&gt;
==== drop_db_role(self, user_name) ====&lt;br /&gt;
&lt;br /&gt;
Видалення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== get_all_subclasses(cls) ====&lt;br /&gt;
&lt;br /&gt;
==== Пошук підкласів ====&lt;br /&gt;
&lt;br /&gt;
==== get_authorized_users(self) ====&lt;br /&gt;
&lt;br /&gt;
Отримати список авторизованих користувачів&lt;br /&gt;
&lt;br /&gt;
==== get_current_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Повертає об’єкт поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_current_user() ====&lt;br /&gt;
&lt;br /&gt;
==== get_menu_url(self) ====&lt;br /&gt;
&lt;br /&gt;
Повертає список url активних пунктів меню&lt;br /&gt;
&lt;br /&gt;
==== get_project_setting(self) ====&lt;br /&gt;
&lt;br /&gt;
Форма зміни проекту&lt;br /&gt;
&lt;br /&gt;
==== get_user_counterparts_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного контрагента&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_counterparts_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного контрагента&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_project_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного проекту користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_project_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного проекту користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_stoages_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного складу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_stoages_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_storage_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного складу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_storage_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_structural_division_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного підрозділу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_structural_division_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_structural_division_id_tree(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук всіх підрозділів за ієрархією від поточного підрозділу користувача у форматі tuple (&#039;id1&#039;, &#039;id2&#039;, &#039;id3&#039;)&lt;br /&gt;
&lt;br /&gt;
==== init_db(self) ====&lt;br /&gt;
&lt;br /&gt;
Підключення db_uri для вибраної бази даних&lt;br /&gt;
&lt;br /&gt;
==== init_db_custom(self, key) ====&lt;br /&gt;
&lt;br /&gt;
Підключення custom db_uri за ключем.&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук і ініціалізація файлу з підключення до бази даних&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri_custom(self) ====&lt;br /&gt;
&lt;br /&gt;
Зчитує всі підключення до бази даних з файлу db_custom.yml і зберігає їх у словник.&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук і ініціалізація файлу з підключення до бази даних для поточного користуача&lt;br /&gt;
&lt;br /&gt;
==== init_db_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Підключення db_uri для користувача&lt;br /&gt;
&lt;br /&gt;
==== init_lm(self, app) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація логін-менеджера&lt;br /&gt;
&lt;br /&gt;
==== kill_user_sessions(self, target_username) ====&lt;br /&gt;
&lt;br /&gt;
Завершення сесії підключення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== search_class_dict(self, parent_class=None) ====&lt;br /&gt;
&lt;br /&gt;
==== Рекурсивний пошук властивостей нащадків базового класу ====&lt;br /&gt;
&lt;br /&gt;
==== search_class_prop(path_objs) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Отримуємо значення з path_objs для розширення поточного класу&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== search_menu_items(self) ====&lt;br /&gt;
&lt;br /&gt;
Search menu items&lt;br /&gt;
&lt;br /&gt;
==== search_menu_items_category(self) ====&lt;br /&gt;
&lt;br /&gt;
Search menu items category&lt;br /&gt;
&lt;br /&gt;
==== search_static_files(self) ====&lt;br /&gt;
&lt;br /&gt;
==== url_map(self) ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id = K2.generate_id()&lt;br /&gt;
usr_perm = K2().get_user_permissions()&lt;br /&gt;
K2.get_platform()&lt;br /&gt;
yml_path = K2.search_yml(&#039;users&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== clear_logging_messages() ====&lt;br /&gt;
&lt;br /&gt;
Clear all logging message by user&lt;br /&gt;
&lt;br /&gt;
==== compare_versions(version1, version2) ====&lt;br /&gt;
&lt;br /&gt;
порівняння версій&lt;br /&gt;
&lt;br /&gt;
==== create_system_settings() ====&lt;br /&gt;
&lt;br /&gt;
==== dump_stacks() ====&lt;br /&gt;
&lt;br /&gt;
Request information about the running threads of the current process.&lt;br /&gt;
&lt;br /&gt;
:return: A tuple containing:&lt;br /&gt;
&lt;br /&gt;
* A sequence of text lines detailing the stacks of running&lt;br /&gt;
&lt;br /&gt;
threads and greenlets. (One greenlet will duplicate one thread,&lt;br /&gt;
&lt;br /&gt;
the current thread and greenlet.)&lt;br /&gt;
&lt;br /&gt;
* The number of greenlets.&lt;br /&gt;
&lt;br /&gt;
==== generate_id() ====&lt;br /&gt;
&lt;br /&gt;
Генерація ID&lt;br /&gt;
&lt;br /&gt;
==== get_active_lang_list() ====&lt;br /&gt;
&lt;br /&gt;
Визначення id поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_current_user_role_name() ====&lt;br /&gt;
&lt;br /&gt;
Отрмання rolename поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== get_locale() ====&lt;br /&gt;
&lt;br /&gt;
Визначення поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_locale_id() ====&lt;br /&gt;
&lt;br /&gt;
Визначення id поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_path_abs(caller_file) ====&lt;br /&gt;
&lt;br /&gt;
Абсолютний шлях до файлу, в якому виконується код.&lt;br /&gt;
&lt;br /&gt;
Виклик K2.get_path_abs(__file__)&lt;br /&gt;
&lt;br /&gt;
__file__ -стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.&lt;br /&gt;
&lt;br /&gt;
==== get_path_to_root(caller_file) ====&lt;br /&gt;
&lt;br /&gt;
Відносний шлях до рута.&lt;br /&gt;
&lt;br /&gt;
Виклик K2.get_path_to_root(__file__).&lt;br /&gt;
&lt;br /&gt;
__file__ - стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.&lt;br /&gt;
&lt;br /&gt;
==== get_platform() ====&lt;br /&gt;
&lt;br /&gt;
Визначення операційної системи&lt;br /&gt;
&lt;br /&gt;
==== get_user_permissions() ====&lt;br /&gt;
&lt;br /&gt;
Retrieve user permissions based on the URL.&lt;br /&gt;
&lt;br /&gt;
This method fetches permissions for the current user based on the URL they are accessing.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: A dictionary containing the user permissions, including &#039;roleid&#039; and various permission flags&lt;br /&gt;
&lt;br /&gt;
such as &#039;r&#039; (read), &#039;w&#039; (write), &#039;i&#039; (insert), &#039;d&#039; (delete), &#039;c&#039; (create), &#039;exp&#039; (export), &#039;imp&#039; (import), &#039;del_&#039; (undelete), &#039;settable&#039; (set table), &#039;cutpast&#039; (cut and paste), &#039;enable&#039; (enable), and &#039;active&#039; (active).&lt;br /&gt;
&lt;br /&gt;
If the user is a superadmin, a default set of permissions is returned.&lt;br /&gt;
&lt;br /&gt;
If no permissions are found for the user, an empty dictionary is returned.&lt;br /&gt;
&lt;br /&gt;
Raises:&lt;br /&gt;
&lt;br /&gt;
Exception: If an error occurs during database query execution.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
current_user_permissions = K2().get_user_permissions()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== get_user_role(user_id) ====&lt;br /&gt;
&lt;br /&gt;
Отрмання roleid користувача&lt;br /&gt;
&lt;br /&gt;
==== ins_search_comp() ====&lt;br /&gt;
&lt;br /&gt;
Вивід списку компонент з файлу components.yml у всіх шляхах пошуку&lt;br /&gt;
&lt;br /&gt;
==== load_babel_translation_directories() ====&lt;br /&gt;
&lt;br /&gt;
Завантаження перекладів&lt;br /&gt;
&lt;br /&gt;
==== load_logging_message_by_id(error_id: str) ====&lt;br /&gt;
&lt;br /&gt;
Load a logging message by its error_id from the error log file.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
error_id (str): The ID of the error to load.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: The logging message if found, None otherwise.&lt;br /&gt;
&lt;br /&gt;
==== load_logging_messages(page_url: str) ====&lt;br /&gt;
&lt;br /&gt;
Load logging messages for the curren page from the error log file.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
name (str): Name of the object (page) to load messages for.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: A dictionary containing formatted log messages, the count of &#039;error&#039; messages, and the count of &#039;warning&#039; messages.&lt;br /&gt;
&lt;br /&gt;
==== log_entry(error_id, status, message, name) ====&lt;br /&gt;
&lt;br /&gt;
==== logging_message(status, message, page_url=None, show_message=True) ====&lt;br /&gt;
&lt;br /&gt;
Send a logging message to the client via Socket.IO.&lt;br /&gt;
&lt;br /&gt;
This method emits a message to the client with a given status and message content.&lt;br /&gt;
&lt;br /&gt;
The message is sent to a room identified by the current user&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
status (str): The status of the message (e.g., cls.log_error - &#039;ERROR&#039;, cls.log_warning - &#039;WARNING&#039;, cls.log_success - &#039;SUCCESS&#039;).&lt;br /&gt;
&lt;br /&gt;
message (str): The content of the message to be sent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page_url(str): url of page with Errors.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
show_message (bool): True - save log and show windows, False - only save_log&lt;br /&gt;
&lt;br /&gt;
Приклад використання функції:&lt;br /&gt;
&lt;br /&gt;
K2.logging_message(K2.log_error, &#039;Operation completed with error.&#039;)&lt;br /&gt;
&lt;br /&gt;
K2.logging_message(K2.log_success, &#039;Operation completed successfully.&#039;1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
K2.logging_message(status=K2.log_success, message=&#039;Operation completed successfully.&#039;, page_url=&#039;/kadm/users&#039;, show_message=False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
==== namemenu(url) ====&lt;br /&gt;
&lt;br /&gt;
Add identificators to url page&lt;br /&gt;
&lt;br /&gt;
==== save_logging_message(error_id, status, message, name) ====&lt;br /&gt;
&lt;br /&gt;
Save a logging message to the stack.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
status (str): The status of the message (e.g., cls.log_error - &#039;ERROR&#039;, cls.log_warning - &#039;WARNING&#039;, cls.log_success - &#039;SUCCESS&#039;).&lt;br /&gt;
&lt;br /&gt;
message (str): The content of the message to be saved.&lt;br /&gt;
&lt;br /&gt;
name (str): Name of object where the message originated.&lt;br /&gt;
&lt;br /&gt;
==== search_babel_translation_directories() ====&lt;br /&gt;
&lt;br /&gt;
Пошук файлів з перекладами&lt;br /&gt;
&lt;br /&gt;
==== search_comp_names() ====&lt;br /&gt;
&lt;br /&gt;
Вивід списку ідентифікаторів компонент&lt;br /&gt;
&lt;br /&gt;
у всіх шляхах пошуку&lt;br /&gt;
&lt;br /&gt;
Rerurn: list of components identificators&lt;br /&gt;
&lt;br /&gt;
==== search_yml(name_yml) ====&lt;br /&gt;
&lt;br /&gt;
Search for a yml file in the caller directories of subclasses.&lt;br /&gt;
&lt;br /&gt;
This method searches for a yml file with a specified name in the caller directories of all subclasses of K2Obj.&lt;br /&gt;
&lt;br /&gt;
The search is performed in the &#039;yml&#039; subdirectory of each caller directory.&lt;br /&gt;
&lt;br /&gt;
Args:&lt;br /&gt;
&lt;br /&gt;
name_yml: The name of the yml file to search for (without the &#039;.yml&#039; extension).&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
The caller directory where the yml file was found, or None if the file was not found.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
To search for a yml file named &#039;users.yml&#039;, call this method as follows:&lt;br /&gt;
&lt;br /&gt;
K2.search_yml(&#039;users&#039;)&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Obj ===&lt;br /&gt;
&lt;br /&gt;
З цього класу створюються всі об’єкти системи К2. Він має основну базову функціональність, що розширюється та розвивається та яка є у всіх класів системи&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Властивості класу ====&lt;br /&gt;
&lt;br /&gt;
name #Назва компоненти.&lt;br /&gt;
&lt;br /&gt;
version #Версія компоненти&lt;br /&gt;
&lt;br /&gt;
==== Властивості інстансу ====&lt;br /&gt;
&lt;br /&gt;
self._name_yml #назва конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._name_yml_tree #назва конфігураційного файлу з деревом&lt;br /&gt;
&lt;br /&gt;
self._new_buttons #назва кнопки&lt;br /&gt;
&lt;br /&gt;
self._name_yml_master #назва конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._send_params #параметри для конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._send_group_params #параметри групи&lt;br /&gt;
&lt;br /&gt;
self._report_id #id звіту&lt;br /&gt;
&lt;br /&gt;
self._data_source #датасети&lt;br /&gt;
&lt;br /&gt;
self._off_buttons #вимкнути кнопки&lt;br /&gt;
&lt;br /&gt;
self._row_selection #вибір з рядка&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== Методи інстансу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
==== __init__(self) ====&lt;br /&gt;
&lt;br /&gt;
Initialize self. See help(type(self)) for accurate signature.&lt;br /&gt;
&lt;br /&gt;
==== content(self) ====&lt;br /&gt;
&lt;br /&gt;
==== create_names_yml(self, name_yml: str = &#039;&#039;, name_yml_tree: str = &#039;&#039;, ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
name_yml_master: str = &#039;&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== search_class_prop(path_objs) ====&lt;br /&gt;
&lt;br /&gt;
==== Пошук властивостей для розширення класу ====&lt;br /&gt;
&lt;br /&gt;
==== select_grid(self) ====&lt;br /&gt;
&lt;br /&gt;
==== show_grid(self) ====&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2admin_menus ===&lt;br /&gt;
&lt;br /&gt;
==== Даний клас формує список пунктів меню для конкретного користувача ====&lt;br /&gt;
&lt;br /&gt;
=== Клас k2data ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2datasync ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2logging ===&lt;br /&gt;
&lt;br /&gt;
==== Класk2mail ====&lt;br /&gt;
&lt;br /&gt;
==== Класk2notifications ====&lt;br /&gt;
&lt;br /&gt;
=== Клас k2path ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2secur ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2settings ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2trans ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2upd ===&lt;br /&gt;
&lt;br /&gt;
== Класи компонент ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Site ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Grid ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2WMS ===&lt;br /&gt;
&lt;br /&gt;
=== K2UpdateRemainder ===&lt;br /&gt;
&lt;br /&gt;
=== Клас для оновлення залишків на основі даних з отриманих від клієнтів. ===&lt;br /&gt;
&lt;br /&gt;
Відповідає за обробку даних з логів, створення/оновлення записів про залишки товарів та керування їх статусами (новий, стабільний, старий).&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== __init__() ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація класу.&lt;br /&gt;
Викликає конструктор батьківського класу K2Docs.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
Відсутні.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
Об&#039;єкт класу K2UpdateRemainder.&lt;br /&gt;
&lt;br /&gt;
==== update_pub_sub_remainder() ====&lt;br /&gt;
&lt;br /&gt;
Оновлення залишків на основі даних Pub/Sub.&lt;br /&gt;
Витягує нові залишки з логів, додає їх у таблицю k2remainder_by_parties, оновлює статуси існуючих записів та видаляє застарілі залишки.&lt;br /&gt;
&lt;br /&gt;
Логіка статусів:&lt;br /&gt;
&lt;br /&gt;
&#039;new&#039; – нові залишки, отримані в поточному оновленні.&lt;br /&gt;
&lt;br /&gt;
&#039;stable&#039; – залишки, які підтвердились та доступні користувачам.&lt;br /&gt;
&lt;br /&gt;
&#039;old&#039; – застарілі дані, що підлягають видаленню.&lt;br /&gt;
&lt;br /&gt;
Алгоритм роботи:&lt;br /&gt;
&lt;br /&gt;
Отримує список pub_sub_list_id з логів k2pubsub_logs.&lt;br /&gt;
&lt;br /&gt;
Витягує дані про залишки (inventSumLines).&lt;br /&gt;
&lt;br /&gt;
Вставляє нові записи у таблицю k2remainder_by_parties зі статусом &#039;new&#039;.&lt;br /&gt;
&lt;br /&gt;
Масово оновлює статуси залишків:&lt;br /&gt;
&lt;br /&gt;
Видаляє застарілі (&#039;old&#039;).&lt;br /&gt;
&lt;br /&gt;
Переводить стабільні (&#039;stable&#039;) в старі (&#039;old&#039;).&lt;br /&gt;
&lt;br /&gt;
Нові (&#039;new&#039;) переводить у стабільні (&#039;stable&#039;).&lt;br /&gt;
&lt;br /&gt;
Фіксує зміни у базі (commit).&lt;br /&gt;
&lt;br /&gt;
У разі помилки виконує відкат (rollback).&lt;br /&gt;
&lt;br /&gt;
==== _insert_new_pub_sub_nomenclature(session, nomenclature_data) ====&lt;br /&gt;
&lt;br /&gt;
Додавання нової номенклатури.&lt;br /&gt;
Перевіряє наявність номенклатури у таблиці k2nomenclature. Якщо запису немає – створює його.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
session (Session) – об&#039;єкт сесії бази даних.&lt;br /&gt;
&lt;br /&gt;
nomenclature_data (dict) – дані про номенклатуру:&lt;br /&gt;
&lt;br /&gt;
itemId (str) – ідентифікатор номенклатури.&lt;br /&gt;
&lt;br /&gt;
itemName (str) – назва товару.&lt;br /&gt;
&lt;br /&gt;
unitId (str) – одиниця виміру (конвертується за фіксованим списком).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
Нічого.&lt;br /&gt;
&lt;br /&gt;
Винятки:&lt;br /&gt;
&lt;br /&gt;
Логує помилку у разі невдалої вставки даних.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2CRM ===&lt;br /&gt;
&lt;br /&gt;
Цей клас представляє CRM модуль, який забезпечує роботу з різними розділами CRM системи такими як:&lt;br /&gt;
&lt;br /&gt;
управління лідами&lt;br /&gt;
- замовлення&lt;br /&gt;
&lt;br /&gt;
* рахунки&lt;br /&gt;
&lt;br /&gt;
* звіти&lt;br /&gt;
&lt;br /&gt;
* налаштування системи CRM&lt;br /&gt;
&lt;br /&gt;
=== Клас K2CRM наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу. ===&lt;br /&gt;
&lt;br /&gt;
=== K2DocsCRM ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2DocsCRM є частиною системи K2CRM і наслідується від K2Obj. Він надає доступ до ключових глобальних налаштувань та ресурсів, необхідних для роботи з документами або іншими функціями CRM. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути ====&lt;br /&gt;
&lt;br /&gt;
database:&lt;br /&gt;
&lt;br /&gt;
База даних, доступна через глобальний об&#039;єкт K2.db.&lt;br /&gt;
&lt;br /&gt;
Призначення: Використовується для зберігання та обробки даних, пов&#039;язаних з CRM.&lt;br /&gt;
&lt;br /&gt;
time_zone:&lt;br /&gt;
&lt;br /&gt;
Часовий пояс системи, визначений глобальним об&#039;єктом K2.timezone.&lt;br /&gt;
&lt;br /&gt;
Призначення: Забезпечує коректну обробку часу в межах системи.&lt;br /&gt;
&lt;br /&gt;
domain:&lt;br /&gt;
&lt;br /&gt;
Домен, на якому працює CRM, отримується з глобального об&#039;єкта K2.domain.&lt;br /&gt;
&lt;br /&gt;
Призначення: Використовується для побудови URL-адрес або інших задач, пов&#039;язаних з доменним середовищем.&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create_contact() - Цей метод створює контакт на основі даних існуючого ліда. Лід і контакт взаємодіють через базу даних, де дані ліда переносяться в таблицю контактів.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
==== Метод очікує вхідний JSON, що містить ідентифікатор ліда (lead_id) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє чи було надано lead_id. Якщо lead_id не надано то повертається помилка.&lt;br /&gt;
&lt;br /&gt;
Шукає ліда в таблиці k2lead за наданим параметром.&lt;br /&gt;
&lt;br /&gt;
Якщо лід знайдено то створюється новий запис у таблиці k2contacts на основі даних ліда.&lt;br /&gt;
&lt;br /&gt;
У разі помилки скасовує транзакцію і повертає опис помилки.&lt;br /&gt;
&lt;br /&gt;
==== Моделі які використовуються ====&lt;br /&gt;
&lt;br /&gt;
K2Lead. Таблиця яка містить дані про лідів.&lt;br /&gt;
&lt;br /&gt;
k2contacts. Таблиця, в яку додається новий контакт на основі даних ліда.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_lead() - Цей метод перевіряє, чи існує контакт із заданим номером телефону у базі даних (k2contacts). Якщо знайдено, оновлює дані ліда (ім&#039;я, прізвище, email) у переданому об&#039;єкті.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Отримає вхідний JSON, що містить options із даними для перевірки.&lt;br /&gt;
&lt;br /&gt;
З options[‘dataField’] отримує номер телефону (phone)&lt;br /&gt;
&lt;br /&gt;
Виконує SQL-запит до таблиці k2contacts для пошуку контакту за номером телефону.&lt;br /&gt;
&lt;br /&gt;
Якщо контакт знайдено то відбувається оновлення даних у options[‘dataField’] (name, surname, email, lead_id)&lt;br /&gt;
&lt;br /&gt;
Якщо контакт не знайдено то для полів name, surname, email встановлюється значення None.&lt;br /&gt;
&lt;br /&gt;
У разі помилки повертає повідомлення з помилкою.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crm_data(route, data) - Цей метод отримує дані із відповідних таблиць з бази даних на основі переданих параметрів для подальшого оформлення друкованої форми документів у компоненті k2CRM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Створює порожній словник result_dict, який буде наповнюватись даними та парсить вхідні дані data у форматі JSON і зберігає їх у result_dict[‘Header’].&lt;br /&gt;
&lt;br /&gt;
Формує SQL-запити для витягування даних із таблиць бази даних (Товари, Організація, Контрагент, Склад, Договір, Відповідальна особа, Клієнт).&lt;br /&gt;
&lt;br /&gt;
Для кожного запиту виконується SQL-запит та результат додається до result_dict.&lt;br /&gt;
&lt;br /&gt;
Результати запитів конвертуються у словники (row_asdict) для зручного JSON-формату.&lt;br /&gt;
&lt;br /&gt;
Успішний результат повертається у форматі JSON із ключем data. У разі помилки застосовується лог помилки і повертається повідомлення з помилкою.&lt;br /&gt;
&lt;br /&gt;
process_options - Метод обробляє різні параметри, передані через JSON-запит, і налаштовує об&#039;єкти типу K2Grid для роботи з даними в залежності від значення ключа name у вхідних даних.&lt;br /&gt;
&lt;br /&gt;
Основні операції:&lt;br /&gt;
&lt;br /&gt;
Обробка k2doc_rows_detail:&lt;br /&gt;
&lt;br /&gt;
Ім&#039;я YML: &#039;k2doc_rows_detail&#039;.&lt;br /&gt;
&lt;br /&gt;
Вимикаються кнопки: add, delete, printReport.&lt;br /&gt;
&lt;br /&gt;
Передаються параметри: row_id та storage_id.&lt;br /&gt;
&lt;br /&gt;
Обробка k2doc_move:&lt;br /&gt;
&lt;br /&gt;
Ім&#039;я YML: &#039;k2doc_move&#039;.&lt;br /&gt;
&lt;br /&gt;
Вимикаються кнопки: add, edit, delete, printReport.&lt;br /&gt;
&lt;br /&gt;
Передаються параметри: doc_id.&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Метод очікує вхідні дані у форматі JSON і доступ до них здійснюється через request.json.&lt;br /&gt;
&lt;br /&gt;
Перевіряється значення ключа name у вхідних даних:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Якщо name == &#039;k2doc_rows_detail&#039;:&lt;br /&gt;
Виділяється row_id із переданих даних. Створюється об’єкт K2Grid з іменем yml “&#039;k2doc_rows_detail”. Вимикаються кнопки add, delete, printReport на панелі інструментів. Отримується storage_id через метод self.get_storage_id(). Параметри row_id та storage_id передаються через send_params.&lt;br /&gt;
Якщо name == &#039;k2doc_move&#039;:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Виділяється doc_id із вхідних даних. Створюється об&#039;єкт K2Grid з іменем yml &#039;k2doc_move&#039;. Вимикаються кнопки add, edit, delete, printReport на панелі інструментів. Параметри (doc_id) передаються через send_params.&lt;br /&gt;
&lt;br /&gt;
Повернення результату у форматі JSON&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Report ===&lt;br /&gt;
&lt;br /&gt;
Цей клас забезпечує генерацію та друк звітів за допомогою API Stimulsoft.&lt;br /&gt;
&lt;br /&gt;
==== Основні можливості модуля ====&lt;br /&gt;
&lt;br /&gt;
створення звітів за допомогою конструктора звітів&lt;br /&gt;
&lt;br /&gt;
управління друкованими формами&lt;br /&gt;
&lt;br /&gt;
генерація друкованих документів&lt;br /&gt;
&lt;br /&gt;
==== взаємодія з API Stimulsoft для візуалізації та експорту звітів ====&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Report наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу.&lt;br /&gt;
Також клас K2Report є батьківським класом для K2ReportEmbed та K2ReportDesigner ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(sql=[]) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація класу. Отримує шлях до каталогу файлу, що викликав ініціалізацію.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
sql (list, опціонально): Список SQL-запитів.&lt;br /&gt;
&lt;br /&gt;
==== create_report(sql=None, data_source=None) ====&lt;br /&gt;
&lt;br /&gt;
Створення звіту. Відображає HTML-сторінку редактора або переглядача звітів.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
sql (dict, опціонально): SQL-запити.&lt;br /&gt;
&lt;br /&gt;
data_source (dict, опціонально): Джерело даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
HTML-сторінку редактора або переглядача звітів.&lt;br /&gt;
&lt;br /&gt;
==== get_report(file_name) ====&lt;br /&gt;
&lt;br /&gt;
Отримання звіту за його ім&#039;ям.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
file_name (str): Назва файлу звіту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Файл звіту або помилку 404, якщо файл не знайдено.&lt;br /&gt;
&lt;br /&gt;
==== execute_query(query, params=None) ====&lt;br /&gt;
&lt;br /&gt;
Виконує SQL-запит.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
query (str): SQL-запит.&lt;br /&gt;
&lt;br /&gt;
params (dict, опціонально): Параметри запиту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Результат виконання запиту.&lt;br /&gt;
&lt;br /&gt;
==== get_report_designer(file_name, design_type_id) ====&lt;br /&gt;
&lt;br /&gt;
Отримує дизайнер звіту за типом звіту.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
file_name (str): Назва файлу.&lt;br /&gt;
&lt;br /&gt;
design_type_id (str): Тип дизайну (1 - звіт, 2 - дашборд).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Файл дизайну або помилку 404.&lt;br /&gt;
&lt;br /&gt;
==== add_reports_type(name, data) ====&lt;br /&gt;
&lt;br /&gt;
Додає тип звіту до групи звітів.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
name (str): Назва типу звіту.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані для оновлення.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
bool: True, якщо успішно.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportEmbed ===&lt;br /&gt;
&lt;br /&gt;
K2ReportEmbed - Компонент для вбудовування звітів у веб-додаток. Дозволяє отримувати та відображати звіти з бази даних на основі їх ідентифікаторів.&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(reports_id: List[str]) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізує екземпляр класу K2ReportEmbed.&lt;br /&gt;
&lt;br /&gt;
Аргументи:&lt;br /&gt;
&lt;br /&gt;
reports_id (List[str]) – список ідентифікаторів звітів.&lt;br /&gt;
&lt;br /&gt;
==== get_report_data() -&amp;gt; Optional[List[Dict[str, Any]]] ====&lt;br /&gt;
&lt;br /&gt;
Отримує дані звітів з бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Optional[List[Dict[str, Any]]] – список даних звітів або None, якщо сталася помилка.&lt;br /&gt;
&lt;br /&gt;
Опис: Метод виконує запит до бази даних для отримання інформації про звіти, джерела даних та формує структуру JSON-даних. Він включає наступні дані для кожного звіту:&lt;br /&gt;
&lt;br /&gt;
report_name – Назва звіту.&lt;br /&gt;
&lt;br /&gt;
file_name – Ім&#039;я файлу звіту.&lt;br /&gt;
&lt;br /&gt;
json_data_list – JSON-структура, що містить дані для звіту.&lt;br /&gt;
&lt;br /&gt;
Якщо під час виконання запитів виникає помилка, вона логуватиметься у системному журналі помилок&lt;br /&gt;
&lt;br /&gt;
Приклад вбудовування звітів на веб-сторінку&lt;br /&gt;
&lt;br /&gt;
==== Бекенд (Flask) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@k2production.route(&#039;/test_dashboard&#039;, methods=[&#039;GET&#039;])&lt;br /&gt;
def test_dashboard():&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot; Index page &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reports_id = [&#039;b452a5ae84f9e92e75eb0467c196fd71&#039;, &#039;1673a4fab757fb6c5df970fdc6ee680c&#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;49952f397efff44d7ce0e5cb9aa625fb&#039;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k2report_embed = K2ReportEmbed(reports_id)&lt;br /&gt;
return render_template(&#039;k2dashboard_production/k2dashboard_production.html&#039;,&lt;br /&gt;
dashboard_settings=k2report_embed)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Фронтенд (Jinja-шаблон) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% extends template_name + &#039;/base.html&#039; %}&lt;br /&gt;
{% block content %}&lt;br /&gt;
{% if error %}&lt;br /&gt;
{{ error }}&lt;br /&gt;
{% else %}&lt;br /&gt;
{% include dashboard_settings.template %}&lt;br /&gt;
{% endif %}&lt;br /&gt;
{% endblock %&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportDesigner ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportDesigner надає функціональність для створення, редагування та перегляду звітів і дашбордів. Він взаємодіє з базою даних, управляє файлами звітів та генерує JSON-дані для подальшого використання. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== designer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку редагування друкованої форми.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки редагування.&lt;br /&gt;
&lt;br /&gt;
==== viewer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку перегляду друкованої форми.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки перегляду.&lt;br /&gt;
&lt;br /&gt;
==== dashboard_viewer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку перегляду дашборду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки перегляду дашборду.&lt;br /&gt;
&lt;br /&gt;
==== dashboard_designer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку редагування дашборду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки редагування дашборду.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from=None, date_to=None)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Створює JSON-дані на основі джерел даних та періоду.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
datasource_value (list): Список SQL-запитів.&lt;br /&gt;
&lt;br /&gt;
datasource_keys (list): Список ключів для джерел даних.&lt;br /&gt;
&lt;br /&gt;
datasource_is_counterpart_id (list): Список флагів, що вказують на наявність counterpart_id.&lt;br /&gt;
&lt;br /&gt;
datasource_is_storage_id (list): Список флагів, що вказують на наявність storage_id.&lt;br /&gt;
&lt;br /&gt;
period (int): Період вибірки даних.&lt;br /&gt;
&lt;br /&gt;
date_from (str, опціонально): Початкова дата періоду.&lt;br /&gt;
&lt;br /&gt;
date_to (str, опціонально): Кінцева дата періоду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
dict: Словник з результатами запитів або помилкою.&lt;br /&gt;
&lt;br /&gt;
==== Приклад використання ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
datasource_value = [&amp;quot;SELECT * FROM table1&amp;quot;, &amp;quot;SELECT * FROM table2&amp;quot;]&lt;br /&gt;
datasource_keys = [&amp;quot;table1_data&amp;quot;, &amp;quot;table2_data&amp;quot;]&lt;br /&gt;
datasource_is_counterpart_id = [True, False]&lt;br /&gt;
datasource_is_storage_id = [False, True]&lt;br /&gt;
period = 1&lt;br /&gt;
date_from = &amp;quot;2023-01-01&amp;quot;&lt;br /&gt;
date_to = &amp;quot;2023-12-31&amp;quot;&lt;br /&gt;
json_data = k2_designer.json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from, date_to)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== save_report_id() ====&lt;br /&gt;
&lt;br /&gt;
Зберігає ідентифікатор та налаштування звіту в JSON-файл.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Response: JSON-відповідь про результат збереження.&lt;br /&gt;
&lt;br /&gt;
==== mrt_report_create(report_id, design_type_id=None) ====&lt;br /&gt;
&lt;br /&gt;
Створює MRT-файл звіту на основі шаблону.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
report_id (str): Ідентифікатор звіту.&lt;br /&gt;
&lt;br /&gt;
design_type_id (str, опціонально): Тип дизайну звіту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: Ім&#039;я створеного файлу або помилка.&lt;br /&gt;
&lt;br /&gt;
==== table_report_data(datasource_value, datasource_keys) ====&lt;br /&gt;
&lt;br /&gt;
Обробляє дані з SQL-запитів для кожного джерела даних і повертає їх у вигляді JSON.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
datasource_value (list): Список SQL-запитів для виконання.&lt;br /&gt;
&lt;br /&gt;
datasource_keys (list): Список ключів, які відповідають кожному SQL-запиту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
dict: Словник, де ключі — це значення з datasource_keys, а значення — дані у форматі JSON для кожного запиту.&lt;br /&gt;
&lt;br /&gt;
==== save_info_report_designer() ====&lt;br /&gt;
&lt;br /&gt;
Зберігає інформацію про репорт та генерує файл MRT.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Response: JSON-об&#039;єкт із результатами генерації звіту та повідомленням про успішність.&lt;br /&gt;
&lt;br /&gt;
==== data_source_lists_creating(group_reports_id) ====&lt;br /&gt;
&lt;br /&gt;
Створює списки джерел даних для звіту.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
group_reports_id (str): Ідентифікатор групи звітів.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
list: Списки джерел даних.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Production ===&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
Схема вибору обслуговування терміналу&lt;br /&gt;
&lt;br /&gt;
=== Клас K2LogbookTMDoc ===&lt;br /&gt;
&lt;br /&gt;
=== Клас для управління логбуком технічного обслуговування (ТО). Забезпечує функціональність для створення, перегляду, редагування записів логбука ТО, роботи з параметрами завдань та обладнання, а також підготовки даних про запчастини. ===&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== k2logbook_tm() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку логбука технічного обслуговування.&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон сторінки логбука.&lt;br /&gt;
&lt;br /&gt;
==== take_logbook_tm(task_id) ====&lt;br /&gt;
&lt;br /&gt;
Створює форму логбука для конкретного завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
task_id (str): Ідентифікатор завдання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон форми логбука.&lt;br /&gt;
&lt;br /&gt;
==== edit_logbook_tm(logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Редагує запис логбука технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id (str): Ідентифікатор запису логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон сторінки редагування.&lt;br /&gt;
&lt;br /&gt;
==== select_current_step(connection, logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Вибирає поточний активний крок логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id (str): Ідентифікатор запису логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: Ідентифікатор поточного кроку.&lt;br /&gt;
&lt;br /&gt;
==== planned_tm(data, connection) ====&lt;br /&gt;
&lt;br /&gt;
Налаштовує параметри grid для запланованого технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані завдання.&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Налаштування grid.&lt;br /&gt;
&lt;br /&gt;
==== unplanned_tm(data, connection) ====&lt;br /&gt;
&lt;br /&gt;
Налаштовує параметри grid для незапланованого технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані завдання.&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Налаштування grid.&lt;br /&gt;
&lt;br /&gt;
==== write_logbook_params(data) ====&lt;br /&gt;
&lt;br /&gt;
Зберігає параметри логбука в JSON-файл.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані для збереження.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь про успішне збереження.&lt;br /&gt;
&lt;br /&gt;
==== read_logbook_params() ====&lt;br /&gt;
&lt;br /&gt;
Зчитує параметри логбука з JSON-файлу поточного користувача.&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Збережені параметри логбука.&lt;br /&gt;
&lt;br /&gt;
==== fill_logbook_tm_rows(data) ====&lt;br /&gt;
&lt;br /&gt;
Заповнює рядки логбука технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри для заповнення рядків.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True при успішному заповненні, False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== pull_spare_parts_data() ====&lt;br /&gt;
&lt;br /&gt;
Витягує та підготовлює дані про запчастини для логбука.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з результатом операції та даними про запчастини.&lt;br /&gt;
&lt;br /&gt;
==== send_params_to_k2logbook_spare_parts(data) ====&lt;br /&gt;
&lt;br /&gt;
Формує параметри та SQL-запит для отримання даних про запчастини.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Інформація про запчастини або False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== instruments_and_equipment_parts_params() ====&lt;br /&gt;
&lt;br /&gt;
Отримує параметри інструментів та запчастин для обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з результатом операції або повідомленням про помилку.&lt;br /&gt;
&lt;br /&gt;
==== task_step_form() ====&lt;br /&gt;
&lt;br /&gt;
Формує форму кроку завдання технічного обслуговування.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з параметрами кроку або повідомленням про помилку.&lt;br /&gt;
&lt;br /&gt;
==== is_unplanned_step_form(step_data) ====&lt;br /&gt;
&lt;br /&gt;
Обробляє форму кроку для позапланованого ТО.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
step_data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: ID кроку або JSON з помилкою.&lt;br /&gt;
&lt;br /&gt;
==== save_step(data) ====&lt;br /&gt;
&lt;br /&gt;
Зберігає дані кроку (номенклатуру).&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True при успіху, False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== end_step(data, session_id, connection, post_request) ====&lt;br /&gt;
&lt;br /&gt;
Завершує крок ТО. Обробляє запчастини, час, статус.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
session_id (str): ID сесії.&lt;br /&gt;
&lt;br /&gt;
connection (опціонально): Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
post_request (bool): Чи це постобробка.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON або False.&lt;br /&gt;
&lt;br /&gt;
==== step_image_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє наявність зображень для кроку.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (є зображення), False (немає або помилка).&lt;br /&gt;
&lt;br /&gt;
==== step_data_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє коректність даних про запчастини.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (дані валідні), False (невалідні або помилка).&lt;br /&gt;
&lt;br /&gt;
==== decline_task() ====&lt;br /&gt;
&lt;br /&gt;
Відхиляє завдання. Деактивує запис у логбуці.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== write_user_comment() ====&lt;br /&gt;
&lt;br /&gt;
Додає коментар користувача до кроку.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат збереження.&lt;br /&gt;
&lt;br /&gt;
==== end_step_manager(data) ====&lt;br /&gt;
&lt;br /&gt;
Керує завершенням кроку. Перевіряє матеріали, зображення.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== detail_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє відповідність номенклатури обладнанню.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (відповідність є), False (немає або помилка).&lt;br /&gt;
&lt;br /&gt;
==== send_params_to_k2mount_point_form() ====&lt;br /&gt;
&lt;br /&gt;
Формує параметри для форми монтажних точок обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Параметри форми (точки монтування, URL зображення схеми).&lt;br /&gt;
&lt;br /&gt;
==== change_scheme_equipment() ====&lt;br /&gt;
&lt;br /&gt;
Оновлює схему обладнання шляхом заміни монтажних точок.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== pass_familiarisation() ====&lt;br /&gt;
&lt;br /&gt;
Позначає завдання як ознайомлене та оновлює його статус.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
Примітка:&lt;br /&gt;
 Функціонал створення акту списання закоментований.&lt;br /&gt;
&lt;br /&gt;
==== create_write_off_act_logbook(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Створює акт списання для логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані для акту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (акт створено), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== create_doc_rows_for_write_of_act(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Створює рядки документу для акту списання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані документу.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (рядки створено), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== write_off_part_logbook(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Списати частину обладнання з логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані для списання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 Нічого (помилки обробляються через rollback).&lt;br /&gt;
&lt;br /&gt;
==== end_logbook() ====&lt;br /&gt;
&lt;br /&gt;
Завершує роботу з журналом ТО.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== spare_parts_check() ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє наявність запасних частин для журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат перевірки (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== equipment_qr_confirmation() ====&lt;br /&gt;
&lt;br /&gt;
Підтверджує відповідність QR-коду обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат перевірки (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== add_new_equipment_parts(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Додає нові частини обладнання до БД.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані про частини обладнання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== material_quantity() ====&lt;br /&gt;
&lt;br /&gt;
Отримує інформацію про кількість матеріалів.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Дані про кількість матеріалів.&lt;br /&gt;
&lt;br /&gt;
==== create_unplanned_task(data) ====&lt;br /&gt;
&lt;br /&gt;
Створює незаплановане завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data: Дані для створення завдання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== take_material_by_qr() ====&lt;br /&gt;
&lt;br /&gt;
Резервує матеріал за допомогою QR-коду.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== return_material_by_qr() ====&lt;br /&gt;
&lt;br /&gt;
Повертає матеріал за QR-кодом.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== requires_partner() ====&lt;br /&gt;
&lt;br /&gt;
Встановлює статус завдання &amp;quot;потребує партнера&amp;quot;.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
&lt;br /&gt;
==== join_task() ====&lt;br /&gt;
&lt;br /&gt;
Додає користувача до завдання та змінює статус на &amp;quot;in_work&amp;quot;.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== e_report_logbook(logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Генерує звіт для журналу ТО у форматі HTML.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id: ID журналу.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 HTML: Відображення звіту.&lt;br /&gt;
&lt;br /&gt;
==== get_all_employee_image() ====&lt;br /&gt;
&lt;br /&gt;
Отримує всі зображення журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Список URL зображень.&lt;br /&gt;
&lt;br /&gt;
==== get_employee_image() ====&lt;br /&gt;
&lt;br /&gt;
Отримує зображення конкретного рядка журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Список URL зображень.&lt;br /&gt;
&lt;br /&gt;
==== get_image_logbook(image_data) ====&lt;br /&gt;
&lt;br /&gt;
Перетворює шляхи зображень у URL.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
image_data: Дані зображень з БД.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 list: Список URL&lt;br /&gt;
&lt;br /&gt;
==== confirm_task() ====&lt;br /&gt;
&lt;br /&gt;
Підтверджує завершення завдання. Надсилає сповіщення.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== send_on_revision_task() ====&lt;br /&gt;
&lt;br /&gt;
Надсилає завдання на доопрацювання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
&lt;br /&gt;
==== send_to_the_task_list_revision() ====&lt;br /&gt;
&lt;br /&gt;
Надсилає завдання на доопрацювання та деактивує виконавців.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== change_task_employee(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Оновлює виконавців завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Нові виконавці та рядки.&lt;br /&gt;
&lt;br /&gt;
==== change_step_status_revision(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Скидає статус виконання кроків.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Ідентифікатори кроків.&lt;br /&gt;
&lt;br /&gt;
==== change_task_status_revision(connection, data, status) ====&lt;br /&gt;
&lt;br /&gt;
Змінює статус завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Ідентифікатор завдання.&lt;br /&gt;
&lt;br /&gt;
status: Новий статус (за замовчуванням in_work).&lt;br /&gt;
&lt;br /&gt;
=== Клас K2EquipmentFunction ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2EquipmentFunction є підкласом K2Obj і призначений для роботи з функціональністю, пов&#039;язаною з обладнанням у системі K2. Він містить методи для обробки запитів на затвердження змін у технічній документації обладнання. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути ====&lt;br /&gt;
&lt;br /&gt;
path_class: &#039;components/k2production/k2production/k2equipment&#039;&lt;br /&gt;
&lt;br /&gt;
file_class: &#039;k2equipment&#039;&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== init(self) ====&lt;br /&gt;
&lt;br /&gt;
Конструктор класу, який викликає конструктор батьківського класу K2Obj.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
send_approval_request_from_hook(self, data) - Метод для відправлення запиту на затвердження змін у технічній карті обладнання.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Параметри ====&lt;br /&gt;
&lt;br /&gt;
data (dict): Словник з даними, що містить:&lt;br /&gt;
&lt;br /&gt;
equipment_type_id (int): Ідентифікатор типу обладнання&lt;br /&gt;
&lt;br /&gt;
changed_fields (dict): Словник зі зміненими полями та їх значеннями&lt;br /&gt;
&lt;br /&gt;
==== Логіка роботи ====&lt;br /&gt;
&lt;br /&gt;
Перевірка наявності записів з parentid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Перевіряє наявність записів у таблиці k2tm_fields з parentid != &#039;0&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Якщо записів немає, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Отримання інформації про тип обладнання:&lt;br /&gt;
&lt;br /&gt;
Витягує equipment_type_name та equipment_type_code з таблиці k2equipment_type&lt;br /&gt;
&lt;br /&gt;
Якщо тип обладнання не знайдено, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Пошук затверджувачів:&lt;br /&gt;
&lt;br /&gt;
Отримує список активних користувачів для затвердження з таблиці k2users_for_approval&lt;br /&gt;
&lt;br /&gt;
Якщо затверджувачів не знайдено, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Формування повідомлення:&lt;br /&gt;
&lt;br /&gt;
Створює опис змін у форматі &amp;quot;поле: старе_значення → нове_значення&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Формує URL для сторінки затвердження&lt;br /&gt;
&lt;br /&gt;
Відправка запиту на затвердження:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Використовує K2Notifications.send_approval_request() для відправки повідомлення&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Передає список затверджувачів, ідентифікатор об&#039;єкта, URL та опис змін&lt;br /&gt;
&lt;br /&gt;
==== Повертає ====&lt;br /&gt;
&lt;br /&gt;
У разі успіху: JSON з повідомленням про успішну відправку (код 200)&lt;br /&gt;
&lt;br /&gt;
У разі помилки: JSON з описом помилки (код 404 або 500)&lt;br /&gt;
&lt;br /&gt;
==== Залежності ====&lt;br /&gt;
&lt;br /&gt;
Потребує доступу до бази даних через self.db&lt;br /&gt;
&lt;br /&gt;
==== Використовує клас K2Notifications для відправки повідомлень ====&lt;br /&gt;
&lt;br /&gt;
Працює з конфігурацією домену через K2.domain&lt;br /&gt;
&lt;br /&gt;
== K2 ERP Javascript ==&lt;br /&gt;
&lt;br /&gt;
==== createImageSliderModal(images, containerId = null) ====&lt;br /&gt;
&lt;br /&gt;
Створює слайдер зображень у контейнері або модальному вікні.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
images: Масив URL-адрес зображень.&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера для вставки слайдера (необов’язково).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Ідентифікатор створеного каруселя або модального вікна.&lt;br /&gt;
&lt;br /&gt;
Якщо зображення відсутні, показує повідомлення та повертає null.&lt;br /&gt;
&lt;br /&gt;
==== showBootstrapLoader(containerId) ====&lt;br /&gt;
&lt;br /&gt;
Додає анімацію завантаження у вказаний контейнер.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера, у який буде вставлений індикатор завантаження.&lt;br /&gt;
&lt;br /&gt;
==== removeBootstrapLoader(containerId) ====&lt;br /&gt;
&lt;br /&gt;
Видаляє анімацію завантаження з контейнера.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера, з якого потрібно прибрати індикатор завантаження.&lt;br /&gt;
&lt;br /&gt;
==== showUserAlert(message, type = &#039;light&#039;) ====&lt;br /&gt;
&lt;br /&gt;
Відображає сповіщення користувача у вигляді Bootstrap Toast&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
message: Текст повідомлення. type: Тип сповіщення (primary, success, danger, warning, info, light). За замовчуванням &#039;light&#039;.&lt;br /&gt;
&lt;br /&gt;
== Стилі (Назва) ==&lt;br /&gt;
&lt;br /&gt;
Подзаголовок&lt;br /&gt;
&lt;br /&gt;
Заголовок 1&lt;br /&gt;
&lt;br /&gt;
Заголовок 2&lt;br /&gt;
&lt;br /&gt;
Заголовок 3&lt;br /&gt;
&lt;br /&gt;
Заголовок 4&lt;br /&gt;
&lt;br /&gt;
Заголовок 5&lt;br /&gt;
&lt;br /&gt;
Заголовок 6&lt;br /&gt;
&lt;br /&gt;
Звичвйний текст&lt;br /&gt;
&lt;br /&gt;
== Ілюстрації з документа ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_Cloud_ERP_Python_01.png|Ілюстрація K2 ERP Python|посилання=Файл:K2_Cloud_ERP_Python_01.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP|K2 ERP]]&lt;br /&gt;
* [[K2 ERP]]&lt;br /&gt;
* [[Python]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Документація для розробників]]&lt;br /&gt;
* [[K2 Cloud ERP Javascript|K2 ERP Javascript]]&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категорія:K2 ERP]]&lt;br /&gt;
[[Index.php?title=Категорія:K2 Cloud ERP|index.php?title=Категорія:K2 ERP]]&lt;br /&gt;
[[index.php?title=Категорія:Python]]&lt;br /&gt;
[[index.php?title=Категорія:Документація K2]]&lt;br /&gt;
[[index.php?title=Категорія:Документація для розробників]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%B8_UI_K2_2025&amp;diff=124</id>
		<title>Стандарти UI K2 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%B8_UI_K2_2025&amp;diff=124"/>
		<updated>2026-04-28T21:15:19Z</updated>

		<summary type="html">&lt;p&gt;R: Прибрав шаблон&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Стандарти UI K2 2025&#039;&#039;&#039; — документ, який описує єдині підходи до реалізації дизайнів, контролів, компонентів та програмної частини у проектах K2.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Мета ==&lt;br /&gt;
&lt;br /&gt;
Цей документ призначений для того, щоб різні співробітники і партнери компанії К2 розмовляли одне з одним однаковою мовою, коли йде реалізація дизайнів, контролів, програмної частини у різних проектах.&lt;br /&gt;
&lt;br /&gt;
Веб-проекти відрізняються від звичайних проектів тим, що майже завжди адаптуються під дизайн, необхідний клієнту. Тобто, зовнішній вигляд компоненту може змінюватись в залежності від потреб сайту, при цьому, компонента не повинна переписуватись і повинна працювати на одній і тій же програмній реалізації.&lt;br /&gt;
&lt;br /&gt;
Компоненти повинні з самого початку передбачати свою кастомізацію під певний дизайн.&lt;br /&gt;
&lt;br /&gt;
Увага: різні компоненти можуть конфліктувати одне з одним. Тому дуже важливо правильно підбирати контроли, щоб не конфліктували друг з другом.&lt;br /&gt;
&lt;br /&gt;
* P.S. Дуже стара версія стандартів (10-20 річної давнини): https://docs.google.com/document/d/1LjNHDyISGVkk7AnhXfWnTL9xChJqzKHchfTcVrTYWk8/edit&lt;br /&gt;
&lt;br /&gt;
== Карти ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_01.png|міні|центр|Ілюстрація до розділу «Карти»]]&lt;br /&gt;
&lt;br /&gt;
=== OpenStreet ===&lt;br /&gt;
&lt;br /&gt;
* https://tomickigrzegorz.github.io/leaflet-examples/#10.matching-all-markers-to-the-map-view&lt;br /&gt;
&lt;br /&gt;
* https://leafletjs.com/&lt;br /&gt;
&lt;br /&gt;
=== Карти 3D ===&lt;br /&gt;
&lt;br /&gt;
* https://mapplic.com/maps/apartment&lt;br /&gt;
&lt;br /&gt;
== Інструментарій ==&lt;br /&gt;
&lt;br /&gt;
SQL Power Architech - моделювання структури бази даних:&lt;br /&gt;
&lt;br /&gt;
* https://bestofbi.com/architect-download/&lt;br /&gt;
&lt;br /&gt;
DBAver - редактор бази даних&lt;br /&gt;
&lt;br /&gt;
* https://dbeaver.com/download/&lt;br /&gt;
&lt;br /&gt;
* Редактор структури бази даних (для можливого використання редактора): https://www.drawdb.app/editor&lt;br /&gt;
&lt;br /&gt;
== Шаблони ==&lt;br /&gt;
&lt;br /&gt;
Багато прикладів роботи компонентів та їх поводження можна побачити в різних шаблонах.&lt;br /&gt;
&lt;br /&gt;
* https://adminlte.io/themes/AdminLTE/index2.html#&lt;br /&gt;
&lt;br /&gt;
* https://appstack.bootlab.io/dashboard-default.html&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=88616&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=28117&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/product/keen-the-ultimate-bootstrap-admin-theme/&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=5824&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=1666&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=21888&lt;br /&gt;
&lt;br /&gt;
== Google-теми ==&lt;br /&gt;
&lt;br /&gt;
* https://themewagon.com/themes/tailadmin/&lt;br /&gt;
&lt;br /&gt;
* https://startbootstrap.com/previews/material-admin-pro&lt;br /&gt;
&lt;br /&gt;
* https://startbootstrap.com/previews/sb-admin-pro-angular&lt;br /&gt;
&lt;br /&gt;
== Грід PHP Grid ==&lt;br /&gt;
&lt;br /&gt;
* https://www.gridphp.com/demo-center/&lt;br /&gt;
&lt;br /&gt;
== AG-Grid ==&lt;br /&gt;
&lt;br /&gt;
* https://www.ag-grid.com/example/&lt;br /&gt;
&lt;br /&gt;
== Telerik ==&lt;br /&gt;
&lt;br /&gt;
* https://www.telerik.com/&lt;br /&gt;
&lt;br /&gt;
* https://www.telerik.com/support/demos&lt;br /&gt;
&lt;br /&gt;
== Report ==&lt;br /&gt;
&lt;br /&gt;
* Stimul Report: https://demo.stimulsoft.com/#Net/BusinessInvoice&lt;br /&gt;
&lt;br /&gt;
== Набори прикладів різних UI компонентів ==&lt;br /&gt;
&lt;br /&gt;
В наборах ви можете побачити багато різних компонентів. Якісь компоненти ми можемо не описати в цьому документі, але потрібно бачити їх можливості і при необхідності - використовувати.&lt;br /&gt;
&lt;br /&gt;
* Syncfusion: https://ej2.syncfusion.com/vue/documentation/toolbar/responsive-mode&lt;br /&gt;
&lt;br /&gt;
* jQWidgets: https://www.jqwidgets.com/jquery-widgets-demo/&lt;br /&gt;
&lt;br /&gt;
* DHX (рекомендовано до використання): https://snippet.dhtmlx.com/i7cfddkl&lt;br /&gt;
&lt;br /&gt;
* Різні UI-компоненти Telerik (більше під .Net): https://demos.telerik.com/kendo-ui/&lt;br /&gt;
&lt;br /&gt;
* DevExpress (більше .Net): https://www.devexpress.com/support/demos/#&lt;br /&gt;
&lt;br /&gt;
== VueRibbon: https://www.vueribbon.com/home ==&lt;br /&gt;
&lt;br /&gt;
* MetroUI: https://korzh.com/metroui#licensing&lt;br /&gt;
&lt;br /&gt;
* https://themes.org.ua/pandora/index.html#forms-extended&lt;br /&gt;
&lt;br /&gt;
* https://metroui.org.ua/ribbon-menu.html&lt;br /&gt;
&lt;br /&gt;
== Інструменти протопіювання дизайну ==&lt;br /&gt;
&lt;br /&gt;
За допомогою цих інструментів ви можете зробити схему елементів дизайну.&lt;br /&gt;
&lt;br /&gt;
Microsoft Visio - графічний редактор для ділової графіки. Дозволяє створити схеми користувацького інтерфейсу та ділову графіку для проекту.&lt;br /&gt;
&lt;br /&gt;
* https://wireframe.cc&lt;br /&gt;
&lt;br /&gt;
== Моделювання структури бази даних ==&lt;br /&gt;
&lt;br /&gt;
* https://bestofbi.com/products/sql-power-architect-data-modeling/ - SQL Power Architech.&lt;br /&gt;
&lt;br /&gt;
== Види компонентів ==&lt;br /&gt;
&lt;br /&gt;
== Меню ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_02.png|міні|центр|Ілюстрація до розділу «Меню»]]&lt;br /&gt;
&lt;br /&gt;
Меню можуть бути: верхнє, нижнє, бокове (справа, або зліва), контекстне та інше.&lt;br /&gt;
&lt;br /&gt;
Контекстне меню - з’являється тоді, коли ми клацаємо на елементі лівою клавішею миші. Можливі і інші варіанти визову контекстного меню.&lt;br /&gt;
&lt;br /&gt;
Меню можуть мати багато рівнів. Тому, повинно бути розуміння скільки рівнів меню передбачає і як поводяться різні рівні меню.&lt;br /&gt;
&lt;br /&gt;
Останнім часом для меню з великою кількістю пунктів стали передбачати полосу пошуку елемента меню по назві, або ключовому слову.&lt;br /&gt;
&lt;br /&gt;
* Приклади: https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxmenu/index.htm#demos/jqxmenu/defaultfunctionality.htm&lt;br /&gt;
&lt;br /&gt;
* https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxmenu/index.htm#demos/jqxmenu/minimized.htm&lt;br /&gt;
&lt;br /&gt;
=== Контектне меню ===&lt;br /&gt;
&lt;br /&gt;
* https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxmenu/index.htm#demos/jqxmenu/contextmenu.htm&lt;br /&gt;
&lt;br /&gt;
== Таймлайн ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_03.png|міні|центр|Ілюстрація до розділу «Таймлайн»]]&lt;br /&gt;
&lt;br /&gt;
За допомогою Таймлайну можна показати красиво розвиток в часі дій.&lt;br /&gt;
&lt;br /&gt;
Приклад:&lt;br /&gt;
&lt;br /&gt;
* https://adminlte.io/themes/AdminLTE/pages/UI/timeline.html&lt;br /&gt;
&lt;br /&gt;
== Тулбари ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_04.png|міні|центр|Ілюстрація до розділу «Тулбари»]]&lt;br /&gt;
&lt;br /&gt;
Панель інструментів призначена для вибору команд.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxtoolbar/index.htm#demos/jqxtoolbar/defaultfunctionality.htm&lt;br /&gt;
&lt;br /&gt;
== Закладки (TabStrip) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_05.png|міні|центр|Ілюстрація до розділу «Закладки (TabStrip)»]]&lt;br /&gt;
&lt;br /&gt;
Дозволяють розташувати інформацію по різним сторінкам. Розподіляючи інформацію по смислу.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://demos.telerik.com/kendo-ui/tabstrip/tab-position&lt;br /&gt;
&lt;br /&gt;
== Ribbon-інтерфейс ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_06.png|міні|центр|Ілюстрація до розділу «Ribbon-інтерфейс»]]&lt;br /&gt;
&lt;br /&gt;
Це інтерфейс в стилі Ms Office 2013.&lt;br /&gt;
&lt;br /&gt;
== Приклади: https://snippet.dhtmlx.com/9ckg47ro?text=Ribbon ==&lt;br /&gt;
&lt;br /&gt;
* https://www.vueribbon.com/home&lt;br /&gt;
&lt;br /&gt;
== Таблиці (гриди) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_07.png|міні|центр|Ілюстрація до розділу «Таблиці (гриди)»]]&lt;br /&gt;
&lt;br /&gt;
За допомогою гридів автоматизуються значні частини табличних даних.&lt;br /&gt;
&lt;br /&gt;
Ми використовуємо в своїй практиці PHPGrid та AG-Grid.&lt;br /&gt;
&lt;br /&gt;
Приклади роботи та функціоналу PHPGrid:&lt;br /&gt;
&lt;br /&gt;
* https://www.gridphp.com/demo-center/&lt;br /&gt;
&lt;br /&gt;
Приклади AG-Grid:&lt;br /&gt;
&lt;br /&gt;
* https://www.ag-grid.com/example/&lt;br /&gt;
&lt;br /&gt;
=== Master-Detail ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_08.png|міні|центр|Ілюстрація до розділу «Master-Detail»]]&lt;br /&gt;
&lt;br /&gt;
Це можливість показати співвідношення таблиць один до багатьох:&lt;br /&gt;
&lt;br /&gt;
Приклад:&lt;br /&gt;
&lt;br /&gt;
* https://www.gridphp.com/demo-center/&lt;br /&gt;
&lt;br /&gt;
=== Під-гридом Master-Detail ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_09.png|міні|центр|Ілюстрація до розділу «Під-гридом Master-Detail»]]&lt;br /&gt;
&lt;br /&gt;
=== Multy-грід (Tab-грід) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_10.png|міні|центр|Ілюстрація до розділу «Multy-грід (Tab-грід)»]]&lt;br /&gt;
&lt;br /&gt;
== Кнопки ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_11.png|міні|центр|Ілюстрація до розділу «Кнопки»]]&lt;br /&gt;
&lt;br /&gt;
Приклад зовнішнього вигляду кнопок:&lt;br /&gt;
&lt;br /&gt;
* https://adminlte.io/themes/AdminLTE/pages/UI/buttons.html&lt;br /&gt;
&lt;br /&gt;
== Кнопка може мати список (меню) ==&lt;br /&gt;
&lt;br /&gt;
== Кнопки можуть мати картинку на підпис ==&lt;br /&gt;
&lt;br /&gt;
Кнопки можуть розміщуватись не тільки горизонтально, але й вертикально:&lt;br /&gt;
&lt;br /&gt;
== Спліттери (Splitter) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_12.png|міні|центр|Ілюстрація до розділу «Спліттери (Splitter)»]]&lt;br /&gt;
&lt;br /&gt;
Призначення спліттерів - рухати області-контейнери між собою. Таким чином, дозволяючи користувачу збільшити, або зменшити якісь частини інтерфейсу.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxsplitter/index.htm#demos/jqxsplitter/defaultfunctionality.htm&lt;br /&gt;
&lt;br /&gt;
== Карти ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_13.png|міні|центр|Ілюстрація до розділу «Карти»]]&lt;br /&gt;
&lt;br /&gt;
== Прогрес-бари ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_14.png|міні|центр|Ілюстрація до розділу «Прогрес-бари»]]&lt;br /&gt;
&lt;br /&gt;
== Слайдери ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_15.png|міні|центр|Ілюстрація до розділу «Слайдери»]]&lt;br /&gt;
&lt;br /&gt;
За допомогою слайдеру можна вказувати диапазони зміни даних.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://adminlte.io/themes/AdminLTE/pages/UI/sliders.html&lt;br /&gt;
&lt;br /&gt;
== Звіти (Reports) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_16.png|міні|центр|Ілюстрація до розділу «Звіти (Reports)»]]&lt;br /&gt;
&lt;br /&gt;
Звіти - це різновид інформації, яка підготовується для друку.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://demo.stimulsoft.com/#Net/Order&lt;br /&gt;
&lt;br /&gt;
== PivotGrid (OLAP), BI ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_17.png|міні|центр|Ілюстрація до розділу «PivotGrid (OLAP), BI»]]&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://demo.stimulsoft.com/#Net/DashboardInsuranceSales2014-2022&lt;br /&gt;
&lt;br /&gt;
== Вікна ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_18.png|міні|центр|Ілюстрація до розділу «Вікна»]]&lt;br /&gt;
&lt;br /&gt;
Модальне вікно - це вікно, яке виринає та не дає переключитись на інші дії, поки не даш відповідь, яке задає модальне вікно.&lt;br /&gt;
&lt;br /&gt;
* Приклад модальних вікон: https://adminlte.io/themes/AdminLTE/pages/UI/modals.html&lt;br /&gt;
&lt;br /&gt;
Технічно, для вікон рекомендується займати максимальний простір екрану, який має сенс для певної здачі. Тому має сенс мати змогу змінити розмір вікна, розширити його.&lt;br /&gt;
&lt;br /&gt;
Елементи вікна повинні теж позіціонуватись так, щоб займати весь простір та легко читатись.&lt;br /&gt;
&lt;br /&gt;
== Suite (комплект) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_19.png|міні|центр|Ілюстрація до розділу «Suite (комплект)»]]&lt;br /&gt;
&lt;br /&gt;
Це стилистично росташований комплекс компонент.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://snippet.dhtmlx.com/85fbitnu?mode=wide&lt;br /&gt;
&lt;br /&gt;
== Додаткові ілюстрації ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_UI_Standards_2025_20.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_20.png&lt;br /&gt;
K2_UI_Standards_2025_21.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_21.png&lt;br /&gt;
K2_UI_Standards_2025_22.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_22.png&lt;br /&gt;
K2_UI_Standards_2025_23.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_23.png&lt;br /&gt;
K2_UI_Standards_2025_24.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_24.png&lt;br /&gt;
K2_UI_Standards_2025_25.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_25.png&lt;br /&gt;
K2_UI_Standards_2025_26.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_26.png&lt;br /&gt;
K2_UI_Standards_2025_27.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_27.png&lt;br /&gt;
K2_UI_Standards_2025_28.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_28.png&lt;br /&gt;
K2_UI_Standards_2025_29.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_29.png&lt;br /&gt;
K2_UI_Standards_2025_30.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_30.png&lt;br /&gt;
K2_UI_Standards_2025_31.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_31.png&lt;br /&gt;
K2_UI_Standards_2025_32.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_32.png&lt;br /&gt;
K2_UI_Standards_2025_33.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_33.png&lt;br /&gt;
K2_UI_Standards_2025_34.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_34.png&lt;br /&gt;
K2_UI_Standards_2025_35.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_35.png&lt;br /&gt;
K2_UI_Standards_2025_36.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_36.png&lt;br /&gt;
K2_UI_Standards_2025_37.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_37.png&lt;br /&gt;
K2_UI_Standards_2025_38.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_38.png&lt;br /&gt;
K2_UI_Standards_2025_39.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_39.png&lt;br /&gt;
K2_UI_Standards_2025_40.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_40.png&lt;br /&gt;
K2_UI_Standards_2025_41.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_41.png&lt;br /&gt;
K2_UI_Standards_2025_42.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_42.png&lt;br /&gt;
K2_UI_Standards_2025_43.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_43.png&lt;br /&gt;
K2_UI_Standards_2025_44.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_44.png&lt;br /&gt;
K2_UI_Standards_2025_45.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_45.png&lt;br /&gt;
K2_UI_Standards_2025_46.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_46.png&lt;br /&gt;
K2_UI_Standards_2025_47.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_47.png&lt;br /&gt;
K2_UI_Standards_2025_48.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_48.png&lt;br /&gt;
K2_UI_Standards_2025_49.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_49.png&lt;br /&gt;
K2_UI_Standards_2025_50.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_50.png&lt;br /&gt;
K2_UI_Standards_2025_51.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_51.png&lt;br /&gt;
K2_UI_Standards_2025_52.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_52.png&lt;br /&gt;
K2_UI_Standards_2025_53.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_53.png&lt;br /&gt;
K2_UI_Standards_2025_54.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_54.png&lt;br /&gt;
K2_UI_Standards_2025_55.png|Ілюстрація UI K2|посилання=Файл:K2_UI_Standards_2025_55.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]]&lt;br /&gt;
* [[K2 Cloud ERP]]&lt;br /&gt;
* [[UI]]&lt;br /&gt;
* [[UX]]&lt;br /&gt;
* [[Адміністративна панель]]&lt;br /&gt;
* [[Таблиці]]&lt;br /&gt;
* [[Грід]]&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категорія:K2 ERP]]&lt;br /&gt;
[[index.php?title=Категорія:UI]]&lt;br /&gt;
[[index.php?title=Категорія:Стандарти K2]]&lt;br /&gt;
[[index.php?title=Категорія:Документація K2]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D0%B8_%D1%82%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8_K2_ERP_Python&amp;diff=123</id>
		<title>Класи та команди K2 ERP Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D0%B8_%D1%82%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8_K2_ERP_Python&amp;diff=123"/>
		<updated>2026-04-28T21:14:09Z</updated>

		<summary type="html">&lt;p&gt;R: Прибрав шаблон&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;K2 Cloud ERP Python для розробників&#039;&#039;&#039; — документація з вимогами до створення компонентів, структури пакетів, системних класів, API, компонентних класів і допоміжних JavaScript-функцій системи [[K2 Cloud ERP]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== K2 Cloud ERP Python ==&lt;br /&gt;
&lt;br /&gt;
Команда для автоматичної генерації html файлу з документацією по док стрінгах:&lt;br /&gt;
 pydoc -w k2/k2obj.py, де k2/k2obj.py - шлях до файлу з корня&lt;br /&gt;
&lt;br /&gt;
== Вимоги до створення компонент ==&lt;br /&gt;
&lt;br /&gt;
==== Компоненти, які публікуються в K2 Cloud ERP повинні мати щонайменше такі атрибути ====&lt;br /&gt;
&lt;br /&gt;
ORM структури. Структури, які потрібні для даної компоненти. (файл models.py)&lt;br /&gt;
&lt;br /&gt;
==== Головний клас компоненти, роути та api (файл views.py) ====&lt;br /&gt;
&lt;br /&gt;
Додаткові об’єкти компоненти. Додаткові класи від яких залежить функціонал компоненти. (каталог objects/)&lt;br /&gt;
&lt;br /&gt;
Хуки. Використовуються для розширення або зміни поведінки стандартних методів системи (файл hooks.py)&lt;br /&gt;
&lt;br /&gt;
Зележності від інших компонент. (файл requirements-components.txt)&lt;br /&gt;
 приклад:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k2log==2.0.0.2&lt;br /&gt;
k2grid==2.0.4.1&lt;br /&gt;
k2form==2.0.1.27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python залежності, якщо є. (файл requirements.txt)&lt;br /&gt;
&lt;br /&gt;
Readme.md. Файл в якому написана ціль компоненти, як її використовувати. Та різні моменти, які потрібно знати програмістам, адмінам та користувачам&lt;br /&gt;
&lt;br /&gt;
Історія змін. Документ, в якому описуються зміни текстом, зрозумілим для користувачів. (файл history.txt)&lt;br /&gt;
&lt;br /&gt;
Структура бази даних. На даний час, в форматі SQL power Architech. (каталог doc/schema)&lt;br /&gt;
&lt;br /&gt;
Бізнес-процеси, схеми роботи, які були втілені в проудкті. В форматі Draw.io. (каталог doc/business_processes)&lt;br /&gt;
&lt;br /&gt;
Інструкція користувача. Де розписано, як користуватись продуктом. Інструкція користувача повинна автоматично підтягуватись системою документації K2 Cloud ERP, додаючи розділ документації для цього продукту і надаючи можливість пошуку інформації в документації. Зберігається в каталозі: doc/user_manual)&lt;br /&gt;
&lt;br /&gt;
Документацію для розробників, що генерується автоматично з коментарів. Зберігається в каталозі: doc/developer_documentation )&lt;br /&gt;
&lt;br /&gt;
(потрібно завершити автоматичне збирання із компонент)&lt;br /&gt;
&lt;br /&gt;
Документація для розробників (не обов’язково, але желательно). Додатково, якщо потрібно, щось додатково відмітити. Каталог doc/additional_developer_docs)&lt;br /&gt;
&lt;br /&gt;
Приклади програмного коду з використанням компонент. Які автоматично з’являються в Examples при встановленні компоненти. І по яким можна протестувати функціонал. /examples (потрібно вирішити як додавати)&lt;br /&gt;
&lt;br /&gt;
Віджети. Дашборди та інші візуальні елементи для вставки на головну сторінку та інші сторінки, які можна додавати автоматично. (потрібно вирішити як додавати) /widgets&lt;br /&gt;
&lt;br /&gt;
Юніт тести. Написати де і яка структура. Юніт тести повинні автоматично знаходитись системою і використовуватись для загального тестування системи. Каталог /tests (потрібно завершити автоматичне збирання із компонент)&lt;br /&gt;
&lt;br /&gt;
Локалізації. В К2 використовуються щонайменше: українська та англійська мова. Ядро повинно вміти робити переклади і давати можливість працювати з перекладами стороннім користувачам, покращуючи якість перекладу. Зберігається в каталозі:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/languages/en/LC_MESSAGES/messages.po&lt;br /&gt;
/languages/en/LC_MESSAGES/messages.mo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Демо-дані. Це дані, які розгортаються на демо-базі даних для демонстрації роботи з продуктом. (потрібно вирішити як додавати)&lt;br /&gt;
&lt;br /&gt;
Файли ресурсів (зображення, тексти): Каталог /static&lt;br /&gt;
&lt;br /&gt;
YML, якщо є. Каталог /yml&lt;br /&gt;
&lt;br /&gt;
Іконки, які будуть використовуватись для представлення компоненти. Каталог /static/img&lt;br /&gt;
&lt;br /&gt;
Авторство. Якщо К2, то в форматі, як прийнято в цілому для К2, якщо сторонній розробник - інформація про стороннього розробника. Copyright © 2000-2025 К2®, Rudiuk Serhii. All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Шаблони, якщо є. Вказуємо каталог. Звертаю увагу, що К2 Cloud ERP повинна мати змогу використовувати не обмежену кількість шаблонів. Шаблони повинні бути так розроблені, щоб не конфліктувати з глобальними шаблонами системи. Каталог /templates&lt;br /&gt;
&lt;br /&gt;
==== Приклад дерева структури компоненти ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
components/&lt;br /&gt;
└── k2adm/&lt;br /&gt;
├── k2adm/&lt;br /&gt;
│ ├── data/&lt;br /&gt;
│ ├── languages/&lt;br /&gt;
│ ├── static/&lt;br /&gt;
│ ├── templates/&lt;br /&gt;
│ ├── yml/&lt;br /&gt;
│ ├── tests/&lt;br /&gt;
│ ├── examples/&lt;br /&gt;
│ ├── widgets/&lt;br /&gt;
│ ├── __init__.py&lt;br /&gt;
│ ├── objects/&lt;br /&gt;
│ ├── users/users.py&lt;br /&gt;
│ ├── roles/roles.py&lt;br /&gt;
│ ├── forms.py&lt;br /&gt;
│ ├── history.txt&lt;br /&gt;
│ ├── hooks.py&lt;br /&gt;
│ ├── models.py&lt;br /&gt;
│ ├── views.py│&lt;br /&gt;
├── __init__.py&lt;br /&gt;
├── doc/&lt;br /&gt;
├── schema/&lt;br /&gt;
├── business_processes/&lt;br /&gt;
├── user_manual/&lt;br /&gt;
├── developer_documentation/&lt;br /&gt;
├── additional_developer_docs/&lt;br /&gt;
├── history.txt&lt;br /&gt;
├── requirements-components.txt&lt;br /&gt;
├── requirements.txt&lt;br /&gt;
├── setup.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Системні класи ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2 ===&lt;br /&gt;
&lt;br /&gt;
Ядро системи K2CloudERP.&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Властивості класу ====&lt;br /&gt;
&lt;br /&gt;
domain_name #назва домену&lt;br /&gt;
&lt;br /&gt;
domain_protocol #протокол&lt;br /&gt;
&lt;br /&gt;
domain #домен&lt;br /&gt;
&lt;br /&gt;
port #порт&lt;br /&gt;
&lt;br /&gt;
db #підключення до БД&lt;br /&gt;
&lt;br /&gt;
default_language #мова за замовчуванням&lt;br /&gt;
&lt;br /&gt;
==== Властивості інстансу ====&lt;br /&gt;
&lt;br /&gt;
==== self.secur #властивість що підключає до ядра клас безпеки ====&lt;br /&gt;
&lt;br /&gt;
self.path #властивість що підключає до ядра клас пошуку шляхів по ієрархії self.data #властивість що підключає до ядра клас синхронізації даних&lt;br /&gt;
&lt;br /&gt;
==== self.settings #властивість що підключає до ядра клас збереження та пошуку налаштувань ====&lt;br /&gt;
&lt;br /&gt;
==== self.notifications #властивість що підключає до ядра клас створення та відправки сповіщень ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати домен&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().domain ====&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== Методи інстансу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати id поточного контрагента&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_id() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# отримати список встановлених компонент&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().component_list() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# отримати назву поточного проекту&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_name() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати id поточного користувача&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_current_user() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#створити користувача на рівні БД&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().create_db_role(user_name, password) ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(self, *args, **kwargs) ====&lt;br /&gt;
&lt;br /&gt;
Initialize self. See help(type(self)) for accurate signature.&lt;br /&gt;
&lt;br /&gt;
==== add_authorized_users(self, user_id, login) ====&lt;br /&gt;
&lt;br /&gt;
Додати користувача до списку авторизованих&lt;br /&gt;
&lt;br /&gt;
==== check_authorized_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Перевірити чи користувач активний&lt;br /&gt;
&lt;br /&gt;
==== check_logout_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Авторизовані користувачі&lt;br /&gt;
&lt;br /&gt;
==== component_list() ====&lt;br /&gt;
&lt;br /&gt;
Пошук встановлених компонент&lt;br /&gt;
&lt;br /&gt;
==== create_db_file_config_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Створення файлу з параметрами підключенням до БД для користувача&lt;br /&gt;
&lt;br /&gt;
==== create_db_role(self, user_name, password) ====&lt;br /&gt;
&lt;br /&gt;
Створення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== current_template(self) ====&lt;br /&gt;
&lt;br /&gt;
Search current template&lt;br /&gt;
&lt;br /&gt;
==== db_custom_engine(self, db) ====&lt;br /&gt;
&lt;br /&gt;
Зміна custom параметрів підключення&lt;br /&gt;
&lt;br /&gt;
==== db_user_engine(self, db) ====&lt;br /&gt;
&lt;br /&gt;
Зміна параметрів підключення для поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== dell_authorized_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Видалити користувача зі списку авторизованих&lt;br /&gt;
&lt;br /&gt;
==== drop_db_role(self, user_name) ====&lt;br /&gt;
&lt;br /&gt;
Видалення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== get_all_subclasses(cls) ====&lt;br /&gt;
&lt;br /&gt;
==== Пошук підкласів ====&lt;br /&gt;
&lt;br /&gt;
==== get_authorized_users(self) ====&lt;br /&gt;
&lt;br /&gt;
Отримати список авторизованих користувачів&lt;br /&gt;
&lt;br /&gt;
==== get_current_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Повертає об’єкт поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_current_user() ====&lt;br /&gt;
&lt;br /&gt;
==== get_menu_url(self) ====&lt;br /&gt;
&lt;br /&gt;
Повертає список url активних пунктів меню&lt;br /&gt;
&lt;br /&gt;
==== get_project_setting(self) ====&lt;br /&gt;
&lt;br /&gt;
Форма зміни проекту&lt;br /&gt;
&lt;br /&gt;
==== get_user_counterparts_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного контрагента&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_counterparts_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного контрагента&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_project_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного проекту користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_project_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного проекту користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_stoages_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного складу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_stoages_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_storage_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного складу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_storage_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_structural_division_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного підрозділу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_structural_division_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_structural_division_id_tree(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук всіх підрозділів за ієрархією від поточного підрозділу користувача у форматі tuple (&#039;id1&#039;, &#039;id2&#039;, &#039;id3&#039;)&lt;br /&gt;
&lt;br /&gt;
==== init_db(self) ====&lt;br /&gt;
&lt;br /&gt;
Підключення db_uri для вибраної бази даних&lt;br /&gt;
&lt;br /&gt;
==== init_db_custom(self, key) ====&lt;br /&gt;
&lt;br /&gt;
Підключення custom db_uri за ключем.&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук і ініціалізація файлу з підключення до бази даних&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri_custom(self) ====&lt;br /&gt;
&lt;br /&gt;
Зчитує всі підключення до бази даних з файлу db_custom.yml і зберігає їх у словник.&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук і ініціалізація файлу з підключення до бази даних для поточного користуача&lt;br /&gt;
&lt;br /&gt;
==== init_db_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Підключення db_uri для користувача&lt;br /&gt;
&lt;br /&gt;
==== init_lm(self, app) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація логін-менеджера&lt;br /&gt;
&lt;br /&gt;
==== kill_user_sessions(self, target_username) ====&lt;br /&gt;
&lt;br /&gt;
Завершення сесії підключення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== search_class_dict(self, parent_class=None) ====&lt;br /&gt;
&lt;br /&gt;
==== Рекурсивний пошук властивостей нащадків базового класу ====&lt;br /&gt;
&lt;br /&gt;
==== search_class_prop(path_objs) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Отримуємо значення з path_objs для розширення поточного класу&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== search_menu_items(self) ====&lt;br /&gt;
&lt;br /&gt;
Search menu items&lt;br /&gt;
&lt;br /&gt;
==== search_menu_items_category(self) ====&lt;br /&gt;
&lt;br /&gt;
Search menu items category&lt;br /&gt;
&lt;br /&gt;
==== search_static_files(self) ====&lt;br /&gt;
&lt;br /&gt;
==== url_map(self) ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id = K2.generate_id()&lt;br /&gt;
usr_perm = K2().get_user_permissions()&lt;br /&gt;
K2.get_platform()&lt;br /&gt;
yml_path = K2.search_yml(&#039;users&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== clear_logging_messages() ====&lt;br /&gt;
&lt;br /&gt;
Clear all logging message by user&lt;br /&gt;
&lt;br /&gt;
==== compare_versions(version1, version2) ====&lt;br /&gt;
&lt;br /&gt;
порівняння версій&lt;br /&gt;
&lt;br /&gt;
==== create_system_settings() ====&lt;br /&gt;
&lt;br /&gt;
==== dump_stacks() ====&lt;br /&gt;
&lt;br /&gt;
Request information about the running threads of the current process.&lt;br /&gt;
&lt;br /&gt;
:return: A tuple containing:&lt;br /&gt;
&lt;br /&gt;
* A sequence of text lines detailing the stacks of running&lt;br /&gt;
&lt;br /&gt;
threads and greenlets. (One greenlet will duplicate one thread,&lt;br /&gt;
&lt;br /&gt;
the current thread and greenlet.)&lt;br /&gt;
&lt;br /&gt;
* The number of greenlets.&lt;br /&gt;
&lt;br /&gt;
==== generate_id() ====&lt;br /&gt;
&lt;br /&gt;
Генерація ID&lt;br /&gt;
&lt;br /&gt;
==== get_active_lang_list() ====&lt;br /&gt;
&lt;br /&gt;
Визначення id поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_current_user_role_name() ====&lt;br /&gt;
&lt;br /&gt;
Отрмання rolename поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== get_locale() ====&lt;br /&gt;
&lt;br /&gt;
Визначення поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_locale_id() ====&lt;br /&gt;
&lt;br /&gt;
Визначення id поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_path_abs(caller_file) ====&lt;br /&gt;
&lt;br /&gt;
Абсолютний шлях до файлу, в якому виконується код.&lt;br /&gt;
&lt;br /&gt;
Виклик K2.get_path_abs(__file__)&lt;br /&gt;
&lt;br /&gt;
__file__ -стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.&lt;br /&gt;
&lt;br /&gt;
==== get_path_to_root(caller_file) ====&lt;br /&gt;
&lt;br /&gt;
Відносний шлях до рута.&lt;br /&gt;
&lt;br /&gt;
Виклик K2.get_path_to_root(__file__).&lt;br /&gt;
&lt;br /&gt;
__file__ - стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.&lt;br /&gt;
&lt;br /&gt;
==== get_platform() ====&lt;br /&gt;
&lt;br /&gt;
Визначення операційної системи&lt;br /&gt;
&lt;br /&gt;
==== get_user_permissions() ====&lt;br /&gt;
&lt;br /&gt;
Retrieve user permissions based on the URL.&lt;br /&gt;
&lt;br /&gt;
This method fetches permissions for the current user based on the URL they are accessing.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: A dictionary containing the user permissions, including &#039;roleid&#039; and various permission flags&lt;br /&gt;
&lt;br /&gt;
such as &#039;r&#039; (read), &#039;w&#039; (write), &#039;i&#039; (insert), &#039;d&#039; (delete), &#039;c&#039; (create), &#039;exp&#039; (export), &#039;imp&#039; (import), &#039;del_&#039; (undelete), &#039;settable&#039; (set table), &#039;cutpast&#039; (cut and paste), &#039;enable&#039; (enable), and &#039;active&#039; (active).&lt;br /&gt;
&lt;br /&gt;
If the user is a superadmin, a default set of permissions is returned.&lt;br /&gt;
&lt;br /&gt;
If no permissions are found for the user, an empty dictionary is returned.&lt;br /&gt;
&lt;br /&gt;
Raises:&lt;br /&gt;
&lt;br /&gt;
Exception: If an error occurs during database query execution.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
current_user_permissions = K2().get_user_permissions()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== get_user_role(user_id) ====&lt;br /&gt;
&lt;br /&gt;
Отрмання roleid користувача&lt;br /&gt;
&lt;br /&gt;
==== ins_search_comp() ====&lt;br /&gt;
&lt;br /&gt;
Вивід списку компонент з файлу components.yml у всіх шляхах пошуку&lt;br /&gt;
&lt;br /&gt;
==== load_babel_translation_directories() ====&lt;br /&gt;
&lt;br /&gt;
Завантаження перекладів&lt;br /&gt;
&lt;br /&gt;
==== load_logging_message_by_id(error_id: str) ====&lt;br /&gt;
&lt;br /&gt;
Load a logging message by its error_id from the error log file.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
error_id (str): The ID of the error to load.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: The logging message if found, None otherwise.&lt;br /&gt;
&lt;br /&gt;
==== load_logging_messages(page_url: str) ====&lt;br /&gt;
&lt;br /&gt;
Load logging messages for the curren page from the error log file.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
name (str): Name of the object (page) to load messages for.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: A dictionary containing formatted log messages, the count of &#039;error&#039; messages, and the count of &#039;warning&#039; messages.&lt;br /&gt;
&lt;br /&gt;
==== log_entry(error_id, status, message, name) ====&lt;br /&gt;
&lt;br /&gt;
==== logging_message(status, message, page_url=None, show_message=True) ====&lt;br /&gt;
&lt;br /&gt;
Send a logging message to the client via Socket.IO.&lt;br /&gt;
&lt;br /&gt;
This method emits a message to the client with a given status and message content.&lt;br /&gt;
&lt;br /&gt;
The message is sent to a room identified by the current user&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
status (str): The status of the message (e.g., cls.log_error - &#039;ERROR&#039;, cls.log_warning - &#039;WARNING&#039;, cls.log_success - &#039;SUCCESS&#039;).&lt;br /&gt;
&lt;br /&gt;
message (str): The content of the message to be sent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page_url(str): url of page with Errors.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
show_message (bool): True - save log and show windows, False - only save_log&lt;br /&gt;
&lt;br /&gt;
Приклад використання функції:&lt;br /&gt;
&lt;br /&gt;
K2.logging_message(K2.log_error, &#039;Operation completed with error.&#039;)&lt;br /&gt;
&lt;br /&gt;
K2.logging_message(K2.log_success, &#039;Operation completed successfully.&#039;1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
K2.logging_message(status=K2.log_success, message=&#039;Operation completed successfully.&#039;, page_url=&#039;/kadm/users&#039;, show_message=False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
==== namemenu(url) ====&lt;br /&gt;
&lt;br /&gt;
Add identificators to url page&lt;br /&gt;
&lt;br /&gt;
==== save_logging_message(error_id, status, message, name) ====&lt;br /&gt;
&lt;br /&gt;
Save a logging message to the stack.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
status (str): The status of the message (e.g., cls.log_error - &#039;ERROR&#039;, cls.log_warning - &#039;WARNING&#039;, cls.log_success - &#039;SUCCESS&#039;).&lt;br /&gt;
&lt;br /&gt;
message (str): The content of the message to be saved.&lt;br /&gt;
&lt;br /&gt;
name (str): Name of object where the message originated.&lt;br /&gt;
&lt;br /&gt;
==== search_babel_translation_directories() ====&lt;br /&gt;
&lt;br /&gt;
Пошук файлів з перекладами&lt;br /&gt;
&lt;br /&gt;
==== search_comp_names() ====&lt;br /&gt;
&lt;br /&gt;
Вивід списку ідентифікаторів компонент&lt;br /&gt;
&lt;br /&gt;
у всіх шляхах пошуку&lt;br /&gt;
&lt;br /&gt;
Rerurn: list of components identificators&lt;br /&gt;
&lt;br /&gt;
==== search_yml(name_yml) ====&lt;br /&gt;
&lt;br /&gt;
Search for a yml file in the caller directories of subclasses.&lt;br /&gt;
&lt;br /&gt;
This method searches for a yml file with a specified name in the caller directories of all subclasses of K2Obj.&lt;br /&gt;
&lt;br /&gt;
The search is performed in the &#039;yml&#039; subdirectory of each caller directory.&lt;br /&gt;
&lt;br /&gt;
Args:&lt;br /&gt;
&lt;br /&gt;
name_yml: The name of the yml file to search for (without the &#039;.yml&#039; extension).&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
The caller directory where the yml file was found, or None if the file was not found.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
To search for a yml file named &#039;users.yml&#039;, call this method as follows:&lt;br /&gt;
&lt;br /&gt;
K2.search_yml(&#039;users&#039;)&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Obj ===&lt;br /&gt;
&lt;br /&gt;
З цього класу створюються всі об’єкти системи К2. Він має основну базову функціональність, що розширюється та розвивається та яка є у всіх класів системи&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Властивості класу ====&lt;br /&gt;
&lt;br /&gt;
name #Назва компоненти.&lt;br /&gt;
&lt;br /&gt;
version #Версія компоненти&lt;br /&gt;
&lt;br /&gt;
==== Властивості інстансу ====&lt;br /&gt;
&lt;br /&gt;
self._name_yml #назва конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._name_yml_tree #назва конфігураційного файлу з деревом&lt;br /&gt;
&lt;br /&gt;
self._new_buttons #назва кнопки&lt;br /&gt;
&lt;br /&gt;
self._name_yml_master #назва конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._send_params #параметри для конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._send_group_params #параметри групи&lt;br /&gt;
&lt;br /&gt;
self._report_id #id звіту&lt;br /&gt;
&lt;br /&gt;
self._data_source #датасети&lt;br /&gt;
&lt;br /&gt;
self._off_buttons #вимкнути кнопки&lt;br /&gt;
&lt;br /&gt;
self._row_selection #вибір з рядка&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== Методи інстансу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
==== __init__(self) ====&lt;br /&gt;
&lt;br /&gt;
Initialize self. See help(type(self)) for accurate signature.&lt;br /&gt;
&lt;br /&gt;
==== content(self) ====&lt;br /&gt;
&lt;br /&gt;
==== create_names_yml(self, name_yml: str = &#039;&#039;, name_yml_tree: str = &#039;&#039;, ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
name_yml_master: str = &#039;&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== search_class_prop(path_objs) ====&lt;br /&gt;
&lt;br /&gt;
==== Пошук властивостей для розширення класу ====&lt;br /&gt;
&lt;br /&gt;
==== select_grid(self) ====&lt;br /&gt;
&lt;br /&gt;
==== show_grid(self) ====&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2admin_menus ===&lt;br /&gt;
&lt;br /&gt;
==== Даний клас формує список пунктів меню для конкретного користувача ====&lt;br /&gt;
&lt;br /&gt;
=== Клас k2data ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2datasync ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2logging ===&lt;br /&gt;
&lt;br /&gt;
==== Класk2mail ====&lt;br /&gt;
&lt;br /&gt;
==== Класk2notifications ====&lt;br /&gt;
&lt;br /&gt;
=== Клас k2path ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2secur ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2settings ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2trans ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2upd ===&lt;br /&gt;
&lt;br /&gt;
== Класи компонент ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Site ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Grid ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2WMS ===&lt;br /&gt;
&lt;br /&gt;
=== K2UpdateRemainder ===&lt;br /&gt;
&lt;br /&gt;
=== Клас для оновлення залишків на основі даних з отриманих від клієнтів. ===&lt;br /&gt;
&lt;br /&gt;
Відповідає за обробку даних з логів, створення/оновлення записів про залишки товарів та керування їх статусами (новий, стабільний, старий).&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== __init__() ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація класу.&lt;br /&gt;
Викликає конструктор батьківського класу K2Docs.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
Відсутні.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
Об&#039;єкт класу K2UpdateRemainder.&lt;br /&gt;
&lt;br /&gt;
==== update_pub_sub_remainder() ====&lt;br /&gt;
&lt;br /&gt;
Оновлення залишків на основі даних Pub/Sub.&lt;br /&gt;
Витягує нові залишки з логів, додає їх у таблицю k2remainder_by_parties, оновлює статуси існуючих записів та видаляє застарілі залишки.&lt;br /&gt;
&lt;br /&gt;
Логіка статусів:&lt;br /&gt;
&lt;br /&gt;
&#039;new&#039; – нові залишки, отримані в поточному оновленні.&lt;br /&gt;
&lt;br /&gt;
&#039;stable&#039; – залишки, які підтвердились та доступні користувачам.&lt;br /&gt;
&lt;br /&gt;
&#039;old&#039; – застарілі дані, що підлягають видаленню.&lt;br /&gt;
&lt;br /&gt;
Алгоритм роботи:&lt;br /&gt;
&lt;br /&gt;
Отримує список pub_sub_list_id з логів k2pubsub_logs.&lt;br /&gt;
&lt;br /&gt;
Витягує дані про залишки (inventSumLines).&lt;br /&gt;
&lt;br /&gt;
Вставляє нові записи у таблицю k2remainder_by_parties зі статусом &#039;new&#039;.&lt;br /&gt;
&lt;br /&gt;
Масово оновлює статуси залишків:&lt;br /&gt;
&lt;br /&gt;
Видаляє застарілі (&#039;old&#039;).&lt;br /&gt;
&lt;br /&gt;
Переводить стабільні (&#039;stable&#039;) в старі (&#039;old&#039;).&lt;br /&gt;
&lt;br /&gt;
Нові (&#039;new&#039;) переводить у стабільні (&#039;stable&#039;).&lt;br /&gt;
&lt;br /&gt;
Фіксує зміни у базі (commit).&lt;br /&gt;
&lt;br /&gt;
У разі помилки виконує відкат (rollback).&lt;br /&gt;
&lt;br /&gt;
==== _insert_new_pub_sub_nomenclature(session, nomenclature_data) ====&lt;br /&gt;
&lt;br /&gt;
Додавання нової номенклатури.&lt;br /&gt;
Перевіряє наявність номенклатури у таблиці k2nomenclature. Якщо запису немає – створює його.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
session (Session) – об&#039;єкт сесії бази даних.&lt;br /&gt;
&lt;br /&gt;
nomenclature_data (dict) – дані про номенклатуру:&lt;br /&gt;
&lt;br /&gt;
itemId (str) – ідентифікатор номенклатури.&lt;br /&gt;
&lt;br /&gt;
itemName (str) – назва товару.&lt;br /&gt;
&lt;br /&gt;
unitId (str) – одиниця виміру (конвертується за фіксованим списком).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
Нічого.&lt;br /&gt;
&lt;br /&gt;
Винятки:&lt;br /&gt;
&lt;br /&gt;
Логує помилку у разі невдалої вставки даних.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2CRM ===&lt;br /&gt;
&lt;br /&gt;
Цей клас представляє CRM модуль, який забезпечує роботу з різними розділами CRM системи такими як:&lt;br /&gt;
&lt;br /&gt;
управління лідами&lt;br /&gt;
- замовлення&lt;br /&gt;
&lt;br /&gt;
* рахунки&lt;br /&gt;
&lt;br /&gt;
* звіти&lt;br /&gt;
&lt;br /&gt;
* налаштування системи CRM&lt;br /&gt;
&lt;br /&gt;
=== Клас K2CRM наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу. ===&lt;br /&gt;
&lt;br /&gt;
=== K2DocsCRM ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2DocsCRM є частиною системи K2CRM і наслідується від K2Obj. Він надає доступ до ключових глобальних налаштувань та ресурсів, необхідних для роботи з документами або іншими функціями CRM. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути ====&lt;br /&gt;
&lt;br /&gt;
database:&lt;br /&gt;
&lt;br /&gt;
База даних, доступна через глобальний об&#039;єкт K2.db.&lt;br /&gt;
&lt;br /&gt;
Призначення: Використовується для зберігання та обробки даних, пов&#039;язаних з CRM.&lt;br /&gt;
&lt;br /&gt;
time_zone:&lt;br /&gt;
&lt;br /&gt;
Часовий пояс системи, визначений глобальним об&#039;єктом K2.timezone.&lt;br /&gt;
&lt;br /&gt;
Призначення: Забезпечує коректну обробку часу в межах системи.&lt;br /&gt;
&lt;br /&gt;
domain:&lt;br /&gt;
&lt;br /&gt;
Домен, на якому працює CRM, отримується з глобального об&#039;єкта K2.domain.&lt;br /&gt;
&lt;br /&gt;
Призначення: Використовується для побудови URL-адрес або інших задач, пов&#039;язаних з доменним середовищем.&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create_contact() - Цей метод створює контакт на основі даних існуючого ліда. Лід і контакт взаємодіють через базу даних, де дані ліда переносяться в таблицю контактів.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
==== Метод очікує вхідний JSON, що містить ідентифікатор ліда (lead_id) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє чи було надано lead_id. Якщо lead_id не надано то повертається помилка.&lt;br /&gt;
&lt;br /&gt;
Шукає ліда в таблиці k2lead за наданим параметром.&lt;br /&gt;
&lt;br /&gt;
Якщо лід знайдено то створюється новий запис у таблиці k2contacts на основі даних ліда.&lt;br /&gt;
&lt;br /&gt;
У разі помилки скасовує транзакцію і повертає опис помилки.&lt;br /&gt;
&lt;br /&gt;
==== Моделі які використовуються ====&lt;br /&gt;
&lt;br /&gt;
K2Lead. Таблиця яка містить дані про лідів.&lt;br /&gt;
&lt;br /&gt;
k2contacts. Таблиця, в яку додається новий контакт на основі даних ліда.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_lead() - Цей метод перевіряє, чи існує контакт із заданим номером телефону у базі даних (k2contacts). Якщо знайдено, оновлює дані ліда (ім&#039;я, прізвище, email) у переданому об&#039;єкті.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Отримає вхідний JSON, що містить options із даними для перевірки.&lt;br /&gt;
&lt;br /&gt;
З options[‘dataField’] отримує номер телефону (phone)&lt;br /&gt;
&lt;br /&gt;
Виконує SQL-запит до таблиці k2contacts для пошуку контакту за номером телефону.&lt;br /&gt;
&lt;br /&gt;
Якщо контакт знайдено то відбувається оновлення даних у options[‘dataField’] (name, surname, email, lead_id)&lt;br /&gt;
&lt;br /&gt;
Якщо контакт не знайдено то для полів name, surname, email встановлюється значення None.&lt;br /&gt;
&lt;br /&gt;
У разі помилки повертає повідомлення з помилкою.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crm_data(route, data) - Цей метод отримує дані із відповідних таблиць з бази даних на основі переданих параметрів для подальшого оформлення друкованої форми документів у компоненті k2CRM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Створює порожній словник result_dict, який буде наповнюватись даними та парсить вхідні дані data у форматі JSON і зберігає їх у result_dict[‘Header’].&lt;br /&gt;
&lt;br /&gt;
Формує SQL-запити для витягування даних із таблиць бази даних (Товари, Організація, Контрагент, Склад, Договір, Відповідальна особа, Клієнт).&lt;br /&gt;
&lt;br /&gt;
Для кожного запиту виконується SQL-запит та результат додається до result_dict.&lt;br /&gt;
&lt;br /&gt;
Результати запитів конвертуються у словники (row_asdict) для зручного JSON-формату.&lt;br /&gt;
&lt;br /&gt;
Успішний результат повертається у форматі JSON із ключем data. У разі помилки застосовується лог помилки і повертається повідомлення з помилкою.&lt;br /&gt;
&lt;br /&gt;
process_options - Метод обробляє різні параметри, передані через JSON-запит, і налаштовує об&#039;єкти типу K2Grid для роботи з даними в залежності від значення ключа name у вхідних даних.&lt;br /&gt;
&lt;br /&gt;
Основні операції:&lt;br /&gt;
&lt;br /&gt;
Обробка k2doc_rows_detail:&lt;br /&gt;
&lt;br /&gt;
Ім&#039;я YML: &#039;k2doc_rows_detail&#039;.&lt;br /&gt;
&lt;br /&gt;
Вимикаються кнопки: add, delete, printReport.&lt;br /&gt;
&lt;br /&gt;
Передаються параметри: row_id та storage_id.&lt;br /&gt;
&lt;br /&gt;
Обробка k2doc_move:&lt;br /&gt;
&lt;br /&gt;
Ім&#039;я YML: &#039;k2doc_move&#039;.&lt;br /&gt;
&lt;br /&gt;
Вимикаються кнопки: add, edit, delete, printReport.&lt;br /&gt;
&lt;br /&gt;
Передаються параметри: doc_id.&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Метод очікує вхідні дані у форматі JSON і доступ до них здійснюється через request.json.&lt;br /&gt;
&lt;br /&gt;
Перевіряється значення ключа name у вхідних даних:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Якщо name == &#039;k2doc_rows_detail&#039;:&lt;br /&gt;
Виділяється row_id із переданих даних. Створюється об’єкт K2Grid з іменем yml “&#039;k2doc_rows_detail”. Вимикаються кнопки add, delete, printReport на панелі інструментів. Отримується storage_id через метод self.get_storage_id(). Параметри row_id та storage_id передаються через send_params.&lt;br /&gt;
Якщо name == &#039;k2doc_move&#039;:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Виділяється doc_id із вхідних даних. Створюється об&#039;єкт K2Grid з іменем yml &#039;k2doc_move&#039;. Вимикаються кнопки add, edit, delete, printReport на панелі інструментів. Параметри (doc_id) передаються через send_params.&lt;br /&gt;
&lt;br /&gt;
Повернення результату у форматі JSON&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Report ===&lt;br /&gt;
&lt;br /&gt;
Цей клас забезпечує генерацію та друк звітів за допомогою API Stimulsoft.&lt;br /&gt;
&lt;br /&gt;
==== Основні можливості модуля ====&lt;br /&gt;
&lt;br /&gt;
створення звітів за допомогою конструктора звітів&lt;br /&gt;
&lt;br /&gt;
управління друкованими формами&lt;br /&gt;
&lt;br /&gt;
генерація друкованих документів&lt;br /&gt;
&lt;br /&gt;
==== взаємодія з API Stimulsoft для візуалізації та експорту звітів ====&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Report наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу.&lt;br /&gt;
Також клас K2Report є батьківським класом для K2ReportEmbed та K2ReportDesigner ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(sql=[]) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація класу. Отримує шлях до каталогу файлу, що викликав ініціалізацію.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
sql (list, опціонально): Список SQL-запитів.&lt;br /&gt;
&lt;br /&gt;
==== create_report(sql=None, data_source=None) ====&lt;br /&gt;
&lt;br /&gt;
Створення звіту. Відображає HTML-сторінку редактора або переглядача звітів.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
sql (dict, опціонально): SQL-запити.&lt;br /&gt;
&lt;br /&gt;
data_source (dict, опціонально): Джерело даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
HTML-сторінку редактора або переглядача звітів.&lt;br /&gt;
&lt;br /&gt;
==== get_report(file_name) ====&lt;br /&gt;
&lt;br /&gt;
Отримання звіту за його ім&#039;ям.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
file_name (str): Назва файлу звіту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Файл звіту або помилку 404, якщо файл не знайдено.&lt;br /&gt;
&lt;br /&gt;
==== execute_query(query, params=None) ====&lt;br /&gt;
&lt;br /&gt;
Виконує SQL-запит.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
query (str): SQL-запит.&lt;br /&gt;
&lt;br /&gt;
params (dict, опціонально): Параметри запиту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Результат виконання запиту.&lt;br /&gt;
&lt;br /&gt;
==== get_report_designer(file_name, design_type_id) ====&lt;br /&gt;
&lt;br /&gt;
Отримує дизайнер звіту за типом звіту.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
file_name (str): Назва файлу.&lt;br /&gt;
&lt;br /&gt;
design_type_id (str): Тип дизайну (1 - звіт, 2 - дашборд).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Файл дизайну або помилку 404.&lt;br /&gt;
&lt;br /&gt;
==== add_reports_type(name, data) ====&lt;br /&gt;
&lt;br /&gt;
Додає тип звіту до групи звітів.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
name (str): Назва типу звіту.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані для оновлення.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
bool: True, якщо успішно.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportEmbed ===&lt;br /&gt;
&lt;br /&gt;
K2ReportEmbed - Компонент для вбудовування звітів у веб-додаток. Дозволяє отримувати та відображати звіти з бази даних на основі їх ідентифікаторів.&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(reports_id: List[str]) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізує екземпляр класу K2ReportEmbed.&lt;br /&gt;
&lt;br /&gt;
Аргументи:&lt;br /&gt;
&lt;br /&gt;
reports_id (List[str]) – список ідентифікаторів звітів.&lt;br /&gt;
&lt;br /&gt;
==== get_report_data() -&amp;gt; Optional[List[Dict[str, Any]]] ====&lt;br /&gt;
&lt;br /&gt;
Отримує дані звітів з бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Optional[List[Dict[str, Any]]] – список даних звітів або None, якщо сталася помилка.&lt;br /&gt;
&lt;br /&gt;
Опис: Метод виконує запит до бази даних для отримання інформації про звіти, джерела даних та формує структуру JSON-даних. Він включає наступні дані для кожного звіту:&lt;br /&gt;
&lt;br /&gt;
report_name – Назва звіту.&lt;br /&gt;
&lt;br /&gt;
file_name – Ім&#039;я файлу звіту.&lt;br /&gt;
&lt;br /&gt;
json_data_list – JSON-структура, що містить дані для звіту.&lt;br /&gt;
&lt;br /&gt;
Якщо під час виконання запитів виникає помилка, вона логуватиметься у системному журналі помилок&lt;br /&gt;
&lt;br /&gt;
Приклад вбудовування звітів на веб-сторінку&lt;br /&gt;
&lt;br /&gt;
==== Бекенд (Flask) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@k2production.route(&#039;/test_dashboard&#039;, methods=[&#039;GET&#039;])&lt;br /&gt;
def test_dashboard():&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot; Index page &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reports_id = [&#039;b452a5ae84f9e92e75eb0467c196fd71&#039;, &#039;1673a4fab757fb6c5df970fdc6ee680c&#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;49952f397efff44d7ce0e5cb9aa625fb&#039;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k2report_embed = K2ReportEmbed(reports_id)&lt;br /&gt;
return render_template(&#039;k2dashboard_production/k2dashboard_production.html&#039;,&lt;br /&gt;
dashboard_settings=k2report_embed)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Фронтенд (Jinja-шаблон) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% extends template_name + &#039;/base.html&#039; %}&lt;br /&gt;
{% block content %}&lt;br /&gt;
{% if error %}&lt;br /&gt;
{{ error }}&lt;br /&gt;
{% else %}&lt;br /&gt;
{% include dashboard_settings.template %}&lt;br /&gt;
{% endif %}&lt;br /&gt;
{% endblock %&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportDesigner ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportDesigner надає функціональність для створення, редагування та перегляду звітів і дашбордів. Він взаємодіє з базою даних, управляє файлами звітів та генерує JSON-дані для подальшого використання. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== designer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку редагування друкованої форми.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки редагування.&lt;br /&gt;
&lt;br /&gt;
==== viewer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку перегляду друкованої форми.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки перегляду.&lt;br /&gt;
&lt;br /&gt;
==== dashboard_viewer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку перегляду дашборду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки перегляду дашборду.&lt;br /&gt;
&lt;br /&gt;
==== dashboard_designer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку редагування дашборду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки редагування дашборду.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from=None, date_to=None)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Створює JSON-дані на основі джерел даних та періоду.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
datasource_value (list): Список SQL-запитів.&lt;br /&gt;
&lt;br /&gt;
datasource_keys (list): Список ключів для джерел даних.&lt;br /&gt;
&lt;br /&gt;
datasource_is_counterpart_id (list): Список флагів, що вказують на наявність counterpart_id.&lt;br /&gt;
&lt;br /&gt;
datasource_is_storage_id (list): Список флагів, що вказують на наявність storage_id.&lt;br /&gt;
&lt;br /&gt;
period (int): Період вибірки даних.&lt;br /&gt;
&lt;br /&gt;
date_from (str, опціонально): Початкова дата періоду.&lt;br /&gt;
&lt;br /&gt;
date_to (str, опціонально): Кінцева дата періоду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
dict: Словник з результатами запитів або помилкою.&lt;br /&gt;
&lt;br /&gt;
==== Приклад використання ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
datasource_value = [&amp;quot;SELECT * FROM table1&amp;quot;, &amp;quot;SELECT * FROM table2&amp;quot;]&lt;br /&gt;
datasource_keys = [&amp;quot;table1_data&amp;quot;, &amp;quot;table2_data&amp;quot;]&lt;br /&gt;
datasource_is_counterpart_id = [True, False]&lt;br /&gt;
datasource_is_storage_id = [False, True]&lt;br /&gt;
period = 1&lt;br /&gt;
date_from = &amp;quot;2023-01-01&amp;quot;&lt;br /&gt;
date_to = &amp;quot;2023-12-31&amp;quot;&lt;br /&gt;
json_data = k2_designer.json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from, date_to)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== save_report_id() ====&lt;br /&gt;
&lt;br /&gt;
Зберігає ідентифікатор та налаштування звіту в JSON-файл.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Response: JSON-відповідь про результат збереження.&lt;br /&gt;
&lt;br /&gt;
==== mrt_report_create(report_id, design_type_id=None) ====&lt;br /&gt;
&lt;br /&gt;
Створює MRT-файл звіту на основі шаблону.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
report_id (str): Ідентифікатор звіту.&lt;br /&gt;
&lt;br /&gt;
design_type_id (str, опціонально): Тип дизайну звіту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: Ім&#039;я створеного файлу або помилка.&lt;br /&gt;
&lt;br /&gt;
==== table_report_data(datasource_value, datasource_keys) ====&lt;br /&gt;
&lt;br /&gt;
Обробляє дані з SQL-запитів для кожного джерела даних і повертає їх у вигляді JSON.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
datasource_value (list): Список SQL-запитів для виконання.&lt;br /&gt;
&lt;br /&gt;
datasource_keys (list): Список ключів, які відповідають кожному SQL-запиту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
dict: Словник, де ключі — це значення з datasource_keys, а значення — дані у форматі JSON для кожного запиту.&lt;br /&gt;
&lt;br /&gt;
==== save_info_report_designer() ====&lt;br /&gt;
&lt;br /&gt;
Зберігає інформацію про репорт та генерує файл MRT.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Response: JSON-об&#039;єкт із результатами генерації звіту та повідомленням про успішність.&lt;br /&gt;
&lt;br /&gt;
==== data_source_lists_creating(group_reports_id) ====&lt;br /&gt;
&lt;br /&gt;
Створює списки джерел даних для звіту.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
group_reports_id (str): Ідентифікатор групи звітів.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
list: Списки джерел даних.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Production ===&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
Схема вибору обслуговування терміналу&lt;br /&gt;
&lt;br /&gt;
=== Клас K2LogbookTMDoc ===&lt;br /&gt;
&lt;br /&gt;
=== Клас для управління логбуком технічного обслуговування (ТО). Забезпечує функціональність для створення, перегляду, редагування записів логбука ТО, роботи з параметрами завдань та обладнання, а також підготовки даних про запчастини. ===&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== k2logbook_tm() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку логбука технічного обслуговування.&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон сторінки логбука.&lt;br /&gt;
&lt;br /&gt;
==== take_logbook_tm(task_id) ====&lt;br /&gt;
&lt;br /&gt;
Створює форму логбука для конкретного завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
task_id (str): Ідентифікатор завдання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон форми логбука.&lt;br /&gt;
&lt;br /&gt;
==== edit_logbook_tm(logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Редагує запис логбука технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id (str): Ідентифікатор запису логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон сторінки редагування.&lt;br /&gt;
&lt;br /&gt;
==== select_current_step(connection, logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Вибирає поточний активний крок логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id (str): Ідентифікатор запису логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: Ідентифікатор поточного кроку.&lt;br /&gt;
&lt;br /&gt;
==== planned_tm(data, connection) ====&lt;br /&gt;
&lt;br /&gt;
Налаштовує параметри grid для запланованого технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані завдання.&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Налаштування grid.&lt;br /&gt;
&lt;br /&gt;
==== unplanned_tm(data, connection) ====&lt;br /&gt;
&lt;br /&gt;
Налаштовує параметри grid для незапланованого технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані завдання.&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Налаштування grid.&lt;br /&gt;
&lt;br /&gt;
==== write_logbook_params(data) ====&lt;br /&gt;
&lt;br /&gt;
Зберігає параметри логбука в JSON-файл.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані для збереження.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь про успішне збереження.&lt;br /&gt;
&lt;br /&gt;
==== read_logbook_params() ====&lt;br /&gt;
&lt;br /&gt;
Зчитує параметри логбука з JSON-файлу поточного користувача.&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Збережені параметри логбука.&lt;br /&gt;
&lt;br /&gt;
==== fill_logbook_tm_rows(data) ====&lt;br /&gt;
&lt;br /&gt;
Заповнює рядки логбука технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри для заповнення рядків.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True при успішному заповненні, False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== pull_spare_parts_data() ====&lt;br /&gt;
&lt;br /&gt;
Витягує та підготовлює дані про запчастини для логбука.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з результатом операції та даними про запчастини.&lt;br /&gt;
&lt;br /&gt;
==== send_params_to_k2logbook_spare_parts(data) ====&lt;br /&gt;
&lt;br /&gt;
Формує параметри та SQL-запит для отримання даних про запчастини.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Інформація про запчастини або False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== instruments_and_equipment_parts_params() ====&lt;br /&gt;
&lt;br /&gt;
Отримує параметри інструментів та запчастин для обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з результатом операції або повідомленням про помилку.&lt;br /&gt;
&lt;br /&gt;
==== task_step_form() ====&lt;br /&gt;
&lt;br /&gt;
Формує форму кроку завдання технічного обслуговування.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з параметрами кроку або повідомленням про помилку.&lt;br /&gt;
&lt;br /&gt;
==== is_unplanned_step_form(step_data) ====&lt;br /&gt;
&lt;br /&gt;
Обробляє форму кроку для позапланованого ТО.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
step_data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: ID кроку або JSON з помилкою.&lt;br /&gt;
&lt;br /&gt;
==== save_step(data) ====&lt;br /&gt;
&lt;br /&gt;
Зберігає дані кроку (номенклатуру).&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True при успіху, False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== end_step(data, session_id, connection, post_request) ====&lt;br /&gt;
&lt;br /&gt;
Завершує крок ТО. Обробляє запчастини, час, статус.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
session_id (str): ID сесії.&lt;br /&gt;
&lt;br /&gt;
connection (опціонально): Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
post_request (bool): Чи це постобробка.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON або False.&lt;br /&gt;
&lt;br /&gt;
==== step_image_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє наявність зображень для кроку.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (є зображення), False (немає або помилка).&lt;br /&gt;
&lt;br /&gt;
==== step_data_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє коректність даних про запчастини.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (дані валідні), False (невалідні або помилка).&lt;br /&gt;
&lt;br /&gt;
==== decline_task() ====&lt;br /&gt;
&lt;br /&gt;
Відхиляє завдання. Деактивує запис у логбуці.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== write_user_comment() ====&lt;br /&gt;
&lt;br /&gt;
Додає коментар користувача до кроку.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат збереження.&lt;br /&gt;
&lt;br /&gt;
==== end_step_manager(data) ====&lt;br /&gt;
&lt;br /&gt;
Керує завершенням кроку. Перевіряє матеріали, зображення.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== detail_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє відповідність номенклатури обладнанню.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (відповідність є), False (немає або помилка).&lt;br /&gt;
&lt;br /&gt;
==== send_params_to_k2mount_point_form() ====&lt;br /&gt;
&lt;br /&gt;
Формує параметри для форми монтажних точок обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Параметри форми (точки монтування, URL зображення схеми).&lt;br /&gt;
&lt;br /&gt;
==== change_scheme_equipment() ====&lt;br /&gt;
&lt;br /&gt;
Оновлює схему обладнання шляхом заміни монтажних точок.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== pass_familiarisation() ====&lt;br /&gt;
&lt;br /&gt;
Позначає завдання як ознайомлене та оновлює його статус.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
Примітка:&lt;br /&gt;
 Функціонал створення акту списання закоментований.&lt;br /&gt;
&lt;br /&gt;
==== create_write_off_act_logbook(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Створює акт списання для логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані для акту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (акт створено), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== create_doc_rows_for_write_of_act(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Створює рядки документу для акту списання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані документу.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (рядки створено), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== write_off_part_logbook(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Списати частину обладнання з логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані для списання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 Нічого (помилки обробляються через rollback).&lt;br /&gt;
&lt;br /&gt;
==== end_logbook() ====&lt;br /&gt;
&lt;br /&gt;
Завершує роботу з журналом ТО.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== spare_parts_check() ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє наявність запасних частин для журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат перевірки (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== equipment_qr_confirmation() ====&lt;br /&gt;
&lt;br /&gt;
Підтверджує відповідність QR-коду обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат перевірки (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== add_new_equipment_parts(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Додає нові частини обладнання до БД.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані про частини обладнання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== material_quantity() ====&lt;br /&gt;
&lt;br /&gt;
Отримує інформацію про кількість матеріалів.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Дані про кількість матеріалів.&lt;br /&gt;
&lt;br /&gt;
==== create_unplanned_task(data) ====&lt;br /&gt;
&lt;br /&gt;
Створює незаплановане завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data: Дані для створення завдання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== take_material_by_qr() ====&lt;br /&gt;
&lt;br /&gt;
Резервує матеріал за допомогою QR-коду.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== return_material_by_qr() ====&lt;br /&gt;
&lt;br /&gt;
Повертає матеріал за QR-кодом.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== requires_partner() ====&lt;br /&gt;
&lt;br /&gt;
Встановлює статус завдання &amp;quot;потребує партнера&amp;quot;.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
&lt;br /&gt;
==== join_task() ====&lt;br /&gt;
&lt;br /&gt;
Додає користувача до завдання та змінює статус на &amp;quot;in_work&amp;quot;.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== e_report_logbook(logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Генерує звіт для журналу ТО у форматі HTML.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id: ID журналу.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 HTML: Відображення звіту.&lt;br /&gt;
&lt;br /&gt;
==== get_all_employee_image() ====&lt;br /&gt;
&lt;br /&gt;
Отримує всі зображення журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Список URL зображень.&lt;br /&gt;
&lt;br /&gt;
==== get_employee_image() ====&lt;br /&gt;
&lt;br /&gt;
Отримує зображення конкретного рядка журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Список URL зображень.&lt;br /&gt;
&lt;br /&gt;
==== get_image_logbook(image_data) ====&lt;br /&gt;
&lt;br /&gt;
Перетворює шляхи зображень у URL.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
image_data: Дані зображень з БД.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 list: Список URL&lt;br /&gt;
&lt;br /&gt;
==== confirm_task() ====&lt;br /&gt;
&lt;br /&gt;
Підтверджує завершення завдання. Надсилає сповіщення.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== send_on_revision_task() ====&lt;br /&gt;
&lt;br /&gt;
Надсилає завдання на доопрацювання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
&lt;br /&gt;
==== send_to_the_task_list_revision() ====&lt;br /&gt;
&lt;br /&gt;
Надсилає завдання на доопрацювання та деактивує виконавців.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== change_task_employee(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Оновлює виконавців завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Нові виконавці та рядки.&lt;br /&gt;
&lt;br /&gt;
==== change_step_status_revision(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Скидає статус виконання кроків.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Ідентифікатори кроків.&lt;br /&gt;
&lt;br /&gt;
==== change_task_status_revision(connection, data, status) ====&lt;br /&gt;
&lt;br /&gt;
Змінює статус завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Ідентифікатор завдання.&lt;br /&gt;
&lt;br /&gt;
status: Новий статус (за замовчуванням in_work).&lt;br /&gt;
&lt;br /&gt;
=== Клас K2EquipmentFunction ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2EquipmentFunction є підкласом K2Obj і призначений для роботи з функціональністю, пов&#039;язаною з обладнанням у системі K2. Він містить методи для обробки запитів на затвердження змін у технічній документації обладнання. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути ====&lt;br /&gt;
&lt;br /&gt;
path_class: &#039;components/k2production/k2production/k2equipment&#039;&lt;br /&gt;
&lt;br /&gt;
file_class: &#039;k2equipment&#039;&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== init(self) ====&lt;br /&gt;
&lt;br /&gt;
Конструктор класу, який викликає конструктор батьківського класу K2Obj.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
send_approval_request_from_hook(self, data) - Метод для відправлення запиту на затвердження змін у технічній карті обладнання.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Параметри ====&lt;br /&gt;
&lt;br /&gt;
data (dict): Словник з даними, що містить:&lt;br /&gt;
&lt;br /&gt;
equipment_type_id (int): Ідентифікатор типу обладнання&lt;br /&gt;
&lt;br /&gt;
changed_fields (dict): Словник зі зміненими полями та їх значеннями&lt;br /&gt;
&lt;br /&gt;
==== Логіка роботи ====&lt;br /&gt;
&lt;br /&gt;
Перевірка наявності записів з parentid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Перевіряє наявність записів у таблиці k2tm_fields з parentid != &#039;0&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Якщо записів немає, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Отримання інформації про тип обладнання:&lt;br /&gt;
&lt;br /&gt;
Витягує equipment_type_name та equipment_type_code з таблиці k2equipment_type&lt;br /&gt;
&lt;br /&gt;
Якщо тип обладнання не знайдено, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Пошук затверджувачів:&lt;br /&gt;
&lt;br /&gt;
Отримує список активних користувачів для затвердження з таблиці k2users_for_approval&lt;br /&gt;
&lt;br /&gt;
Якщо затверджувачів не знайдено, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Формування повідомлення:&lt;br /&gt;
&lt;br /&gt;
Створює опис змін у форматі &amp;quot;поле: старе_значення → нове_значення&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Формує URL для сторінки затвердження&lt;br /&gt;
&lt;br /&gt;
Відправка запиту на затвердження:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Використовує K2Notifications.send_approval_request() для відправки повідомлення&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Передає список затверджувачів, ідентифікатор об&#039;єкта, URL та опис змін&lt;br /&gt;
&lt;br /&gt;
==== Повертає ====&lt;br /&gt;
&lt;br /&gt;
У разі успіху: JSON з повідомленням про успішну відправку (код 200)&lt;br /&gt;
&lt;br /&gt;
У разі помилки: JSON з описом помилки (код 404 або 500)&lt;br /&gt;
&lt;br /&gt;
==== Залежності ====&lt;br /&gt;
&lt;br /&gt;
Потребує доступу до бази даних через self.db&lt;br /&gt;
&lt;br /&gt;
==== Використовує клас K2Notifications для відправки повідомлень ====&lt;br /&gt;
&lt;br /&gt;
Працює з конфігурацією домену через K2.domain&lt;br /&gt;
&lt;br /&gt;
== K2 Cloud ERP Javascript ==&lt;br /&gt;
&lt;br /&gt;
==== createImageSliderModal(images, containerId = null) ====&lt;br /&gt;
&lt;br /&gt;
Створює слайдер зображень у контейнері або модальному вікні.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
images: Масив URL-адрес зображень.&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера для вставки слайдера (необов’язково).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Ідентифікатор створеного каруселя або модального вікна.&lt;br /&gt;
&lt;br /&gt;
Якщо зображення відсутні, показує повідомлення та повертає null.&lt;br /&gt;
&lt;br /&gt;
==== showBootstrapLoader(containerId) ====&lt;br /&gt;
&lt;br /&gt;
Додає анімацію завантаження у вказаний контейнер.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера, у який буде вставлений індикатор завантаження.&lt;br /&gt;
&lt;br /&gt;
==== removeBootstrapLoader(containerId) ====&lt;br /&gt;
&lt;br /&gt;
Видаляє анімацію завантаження з контейнера.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера, з якого потрібно прибрати індикатор завантаження.&lt;br /&gt;
&lt;br /&gt;
==== showUserAlert(message, type = &#039;light&#039;) ====&lt;br /&gt;
&lt;br /&gt;
Відображає сповіщення користувача у вигляді Bootstrap Toast&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
message: Текст повідомлення. type: Тип сповіщення (primary, success, danger, warning, info, light). За замовчуванням &#039;light&#039;.&lt;br /&gt;
&lt;br /&gt;
== Стилі (Назва) ==&lt;br /&gt;
&lt;br /&gt;
Подзаголовок&lt;br /&gt;
&lt;br /&gt;
Заголовок 1&lt;br /&gt;
&lt;br /&gt;
Заголовок 2&lt;br /&gt;
&lt;br /&gt;
Заголовок 3&lt;br /&gt;
&lt;br /&gt;
Заголовок 4&lt;br /&gt;
&lt;br /&gt;
Заголовок 5&lt;br /&gt;
&lt;br /&gt;
Заголовок 6&lt;br /&gt;
&lt;br /&gt;
Звичвйний текст&lt;br /&gt;
&lt;br /&gt;
== Ілюстрації з документа ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_Cloud_ERP_Python_01.png|Ілюстрація K2 Cloud ERP Python|посилання=Файл:K2_Cloud_ERP_Python_01.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP]]&lt;br /&gt;
* [[K2 ERP]]&lt;br /&gt;
* [[Python]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Документація для розробників]]&lt;br /&gt;
* [[K2 Cloud ERP Javascript]]&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категорія:K2 ERP]]&lt;br /&gt;
[[index.php?title=Категорія:K2 Cloud ERP]]&lt;br /&gt;
[[index.php?title=Категорія:Python]]&lt;br /&gt;
[[index.php?title=Категорія:Документація K2]]&lt;br /&gt;
[[index.php?title=Категорія:Документація для розробників]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D0%B8_%D1%82%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8_K2_ERP_Python&amp;diff=122</id>
		<title>Класи та команди K2 ERP Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D0%B8_%D1%82%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8_K2_ERP_Python&amp;diff=122"/>
		<updated>2026-04-28T21:13:37Z</updated>

		<summary type="html">&lt;p&gt;R: Створена сторінка: {{Картка документації K2 | назва = K2 Cloud ERP Python для розробників | система = K2 Cloud ERP | мова = Python | тип = Документація для розробників }}  &amp;#039;&amp;#039;&amp;#039;K2 Cloud ERP Python для розробників&amp;#039;&amp;#039;&amp;#039; — документація з вимогами до створення компонентів, структури пакетів, системних класів, API, ко...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Картка документації K2&lt;br /&gt;
| назва = K2 Cloud ERP Python для розробників&lt;br /&gt;
| система = K2 Cloud ERP&lt;br /&gt;
| мова = Python&lt;br /&gt;
| тип = Документація для розробників&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;K2 Cloud ERP Python для розробників&#039;&#039;&#039; — документація з вимогами до створення компонентів, структури пакетів, системних класів, API, компонентних класів і допоміжних JavaScript-функцій системи [[K2 Cloud ERP]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== K2 Cloud ERP Python ==&lt;br /&gt;
&lt;br /&gt;
Команда для автоматичної генерації html файлу з документацією по док стрінгах:&lt;br /&gt;
 pydoc -w k2/k2obj.py, де k2/k2obj.py - шлях до файлу з корня&lt;br /&gt;
&lt;br /&gt;
== Вимоги до створення компонент ==&lt;br /&gt;
&lt;br /&gt;
==== Компоненти, які публікуються в K2 Cloud ERP повинні мати щонайменше такі атрибути ====&lt;br /&gt;
&lt;br /&gt;
ORM структури. Структури, які потрібні для даної компоненти. (файл models.py)&lt;br /&gt;
&lt;br /&gt;
==== Головний клас компоненти, роути та api (файл views.py) ====&lt;br /&gt;
&lt;br /&gt;
Додаткові об’єкти компоненти. Додаткові класи від яких залежить функціонал компоненти. (каталог objects/)&lt;br /&gt;
&lt;br /&gt;
Хуки. Використовуються для розширення або зміни поведінки стандартних методів системи (файл hooks.py)&lt;br /&gt;
&lt;br /&gt;
Зележності від інших компонент. (файл requirements-components.txt)&lt;br /&gt;
 приклад:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k2log==2.0.0.2&lt;br /&gt;
k2grid==2.0.4.1&lt;br /&gt;
k2form==2.0.1.27&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python залежності, якщо є. (файл requirements.txt)&lt;br /&gt;
&lt;br /&gt;
Readme.md. Файл в якому написана ціль компоненти, як її використовувати. Та різні моменти, які потрібно знати програмістам, адмінам та користувачам&lt;br /&gt;
&lt;br /&gt;
Історія змін. Документ, в якому описуються зміни текстом, зрозумілим для користувачів. (файл history.txt)&lt;br /&gt;
&lt;br /&gt;
Структура бази даних. На даний час, в форматі SQL power Architech. (каталог doc/schema)&lt;br /&gt;
&lt;br /&gt;
Бізнес-процеси, схеми роботи, які були втілені в проудкті. В форматі Draw.io. (каталог doc/business_processes)&lt;br /&gt;
&lt;br /&gt;
Інструкція користувача. Де розписано, як користуватись продуктом. Інструкція користувача повинна автоматично підтягуватись системою документації K2 Cloud ERP, додаючи розділ документації для цього продукту і надаючи можливість пошуку інформації в документації. Зберігається в каталозі: doc/user_manual)&lt;br /&gt;
&lt;br /&gt;
Документацію для розробників, що генерується автоматично з коментарів. Зберігається в каталозі: doc/developer_documentation )&lt;br /&gt;
&lt;br /&gt;
(потрібно завершити автоматичне збирання із компонент)&lt;br /&gt;
&lt;br /&gt;
Документація для розробників (не обов’язково, але желательно). Додатково, якщо потрібно, щось додатково відмітити. Каталог doc/additional_developer_docs)&lt;br /&gt;
&lt;br /&gt;
Приклади програмного коду з використанням компонент. Які автоматично з’являються в Examples при встановленні компоненти. І по яким можна протестувати функціонал. /examples (потрібно вирішити як додавати)&lt;br /&gt;
&lt;br /&gt;
Віджети. Дашборди та інші візуальні елементи для вставки на головну сторінку та інші сторінки, які можна додавати автоматично. (потрібно вирішити як додавати) /widgets&lt;br /&gt;
&lt;br /&gt;
Юніт тести. Написати де і яка структура. Юніт тести повинні автоматично знаходитись системою і використовуватись для загального тестування системи. Каталог /tests (потрібно завершити автоматичне збирання із компонент)&lt;br /&gt;
&lt;br /&gt;
Локалізації. В К2 використовуються щонайменше: українська та англійська мова. Ядро повинно вміти робити переклади і давати можливість працювати з перекладами стороннім користувачам, покращуючи якість перекладу. Зберігається в каталозі:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/languages/en/LC_MESSAGES/messages.po&lt;br /&gt;
/languages/en/LC_MESSAGES/messages.mo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Демо-дані. Це дані, які розгортаються на демо-базі даних для демонстрації роботи з продуктом. (потрібно вирішити як додавати)&lt;br /&gt;
&lt;br /&gt;
Файли ресурсів (зображення, тексти): Каталог /static&lt;br /&gt;
&lt;br /&gt;
YML, якщо є. Каталог /yml&lt;br /&gt;
&lt;br /&gt;
Іконки, які будуть використовуватись для представлення компоненти. Каталог /static/img&lt;br /&gt;
&lt;br /&gt;
Авторство. Якщо К2, то в форматі, як прийнято в цілому для К2, якщо сторонній розробник - інформація про стороннього розробника. Copyright © 2000-2025 К2®, Rudiuk Serhii. All rights reserved.&lt;br /&gt;
&lt;br /&gt;
Шаблони, якщо є. Вказуємо каталог. Звертаю увагу, що К2 Cloud ERP повинна мати змогу використовувати не обмежену кількість шаблонів. Шаблони повинні бути так розроблені, щоб не конфліктувати з глобальними шаблонами системи. Каталог /templates&lt;br /&gt;
&lt;br /&gt;
==== Приклад дерева структури компоненти ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
components/&lt;br /&gt;
└── k2adm/&lt;br /&gt;
├── k2adm/&lt;br /&gt;
│ ├── data/&lt;br /&gt;
│ ├── languages/&lt;br /&gt;
│ ├── static/&lt;br /&gt;
│ ├── templates/&lt;br /&gt;
│ ├── yml/&lt;br /&gt;
│ ├── tests/&lt;br /&gt;
│ ├── examples/&lt;br /&gt;
│ ├── widgets/&lt;br /&gt;
│ ├── __init__.py&lt;br /&gt;
│ ├── objects/&lt;br /&gt;
│ ├── users/users.py&lt;br /&gt;
│ ├── roles/roles.py&lt;br /&gt;
│ ├── forms.py&lt;br /&gt;
│ ├── history.txt&lt;br /&gt;
│ ├── hooks.py&lt;br /&gt;
│ ├── models.py&lt;br /&gt;
│ ├── views.py│&lt;br /&gt;
├── __init__.py&lt;br /&gt;
├── doc/&lt;br /&gt;
├── schema/&lt;br /&gt;
├── business_processes/&lt;br /&gt;
├── user_manual/&lt;br /&gt;
├── developer_documentation/&lt;br /&gt;
├── additional_developer_docs/&lt;br /&gt;
├── history.txt&lt;br /&gt;
├── requirements-components.txt&lt;br /&gt;
├── requirements.txt&lt;br /&gt;
├── setup.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Системні класи ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2 ===&lt;br /&gt;
&lt;br /&gt;
Ядро системи K2CloudERP.&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Властивості класу ====&lt;br /&gt;
&lt;br /&gt;
domain_name #назва домену&lt;br /&gt;
&lt;br /&gt;
domain_protocol #протокол&lt;br /&gt;
&lt;br /&gt;
domain #домен&lt;br /&gt;
&lt;br /&gt;
port #порт&lt;br /&gt;
&lt;br /&gt;
db #підключення до БД&lt;br /&gt;
&lt;br /&gt;
default_language #мова за замовчуванням&lt;br /&gt;
&lt;br /&gt;
==== Властивості інстансу ====&lt;br /&gt;
&lt;br /&gt;
==== self.secur #властивість що підключає до ядра клас безпеки ====&lt;br /&gt;
&lt;br /&gt;
self.path #властивість що підключає до ядра клас пошуку шляхів по ієрархії self.data #властивість що підключає до ядра клас синхронізації даних&lt;br /&gt;
&lt;br /&gt;
==== self.settings #властивість що підключає до ядра клас збереження та пошуку налаштувань ====&lt;br /&gt;
&lt;br /&gt;
==== self.notifications #властивість що підключає до ядра клас створення та відправки сповіщень ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати домен&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().domain ====&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== Методи інстансу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати id поточного контрагента&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_id() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# отримати список встановлених компонент&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().component_list() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# отримати назву поточного проекту&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_name() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#отримати id поточного користувача&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().get_current_user() ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#створити користувача на рівні БД&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== K2().create_db_role(user_name, password) ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(self, *args, **kwargs) ====&lt;br /&gt;
&lt;br /&gt;
Initialize self. See help(type(self)) for accurate signature.&lt;br /&gt;
&lt;br /&gt;
==== add_authorized_users(self, user_id, login) ====&lt;br /&gt;
&lt;br /&gt;
Додати користувача до списку авторизованих&lt;br /&gt;
&lt;br /&gt;
==== check_authorized_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Перевірити чи користувач активний&lt;br /&gt;
&lt;br /&gt;
==== check_logout_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Авторизовані користувачі&lt;br /&gt;
&lt;br /&gt;
==== component_list() ====&lt;br /&gt;
&lt;br /&gt;
Пошук встановлених компонент&lt;br /&gt;
&lt;br /&gt;
==== create_db_file_config_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Створення файлу з параметрами підключенням до БД для користувача&lt;br /&gt;
&lt;br /&gt;
==== create_db_role(self, user_name, password) ====&lt;br /&gt;
&lt;br /&gt;
Створення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== current_template(self) ====&lt;br /&gt;
&lt;br /&gt;
Search current template&lt;br /&gt;
&lt;br /&gt;
==== db_custom_engine(self, db) ====&lt;br /&gt;
&lt;br /&gt;
Зміна custom параметрів підключення&lt;br /&gt;
&lt;br /&gt;
==== db_user_engine(self, db) ====&lt;br /&gt;
&lt;br /&gt;
Зміна параметрів підключення для поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== dell_authorized_users(self, user_id) ====&lt;br /&gt;
&lt;br /&gt;
Видалити користувача зі списку авторизованих&lt;br /&gt;
&lt;br /&gt;
==== drop_db_role(self, user_name) ====&lt;br /&gt;
&lt;br /&gt;
Видалення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== get_all_subclasses(cls) ====&lt;br /&gt;
&lt;br /&gt;
==== Пошук підкласів ====&lt;br /&gt;
&lt;br /&gt;
==== get_authorized_users(self) ====&lt;br /&gt;
&lt;br /&gt;
Отримати список авторизованих користувачів&lt;br /&gt;
&lt;br /&gt;
==== get_current_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Повертає об’єкт поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_current_user() ====&lt;br /&gt;
&lt;br /&gt;
==== get_menu_url(self) ====&lt;br /&gt;
&lt;br /&gt;
Повертає список url активних пунктів меню&lt;br /&gt;
&lt;br /&gt;
==== get_project_setting(self) ====&lt;br /&gt;
&lt;br /&gt;
Форма зміни проекту&lt;br /&gt;
&lt;br /&gt;
==== get_user_counterparts_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного контрагента&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_counterparts_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного контрагента&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_counterparts_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_project_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного проекту користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_project_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного проекту користувача&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_project_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_stoages_name(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук назви поточного складу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_stoages_name() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_storage_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного складу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_storage_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_structural_division_id(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук id поточного підрозділу&lt;br /&gt;
&lt;br /&gt;
==== K2().get_user_structural_division_id() ====&lt;br /&gt;
&lt;br /&gt;
==== get_user_structural_division_id_tree(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук всіх підрозділів за ієрархією від поточного підрозділу користувача у форматі tuple (&#039;id1&#039;, &#039;id2&#039;, &#039;id3&#039;)&lt;br /&gt;
&lt;br /&gt;
==== init_db(self) ====&lt;br /&gt;
&lt;br /&gt;
Підключення db_uri для вибраної бази даних&lt;br /&gt;
&lt;br /&gt;
==== init_db_custom(self, key) ====&lt;br /&gt;
&lt;br /&gt;
Підключення custom db_uri за ключем.&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук і ініціалізація файлу з підключення до бази даних&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri_custom(self) ====&lt;br /&gt;
&lt;br /&gt;
Зчитує всі підключення до бази даних з файлу db_custom.yml і зберігає їх у словник.&lt;br /&gt;
&lt;br /&gt;
==== init_db_uri_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Пошук і ініціалізація файлу з підключення до бази даних для поточного користуача&lt;br /&gt;
&lt;br /&gt;
==== init_db_user(self) ====&lt;br /&gt;
&lt;br /&gt;
Підключення db_uri для користувача&lt;br /&gt;
&lt;br /&gt;
==== init_lm(self, app) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація логін-менеджера&lt;br /&gt;
&lt;br /&gt;
==== kill_user_sessions(self, target_username) ====&lt;br /&gt;
&lt;br /&gt;
Завершення сесії підключення користувача на рівні БД&lt;br /&gt;
&lt;br /&gt;
==== search_class_dict(self, parent_class=None) ====&lt;br /&gt;
&lt;br /&gt;
==== Рекурсивний пошук властивостей нащадків базового класу ====&lt;br /&gt;
&lt;br /&gt;
==== search_class_prop(path_objs) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Отримуємо значення з path_objs для розширення поточного класу&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== search_menu_items(self) ====&lt;br /&gt;
&lt;br /&gt;
Search menu items&lt;br /&gt;
&lt;br /&gt;
==== search_menu_items_category(self) ====&lt;br /&gt;
&lt;br /&gt;
Search menu items category&lt;br /&gt;
&lt;br /&gt;
==== search_static_files(self) ====&lt;br /&gt;
&lt;br /&gt;
==== url_map(self) ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id = K2.generate_id()&lt;br /&gt;
usr_perm = K2().get_user_permissions()&lt;br /&gt;
K2.get_platform()&lt;br /&gt;
yml_path = K2.search_yml(&#039;users&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== clear_logging_messages() ====&lt;br /&gt;
&lt;br /&gt;
Clear all logging message by user&lt;br /&gt;
&lt;br /&gt;
==== compare_versions(version1, version2) ====&lt;br /&gt;
&lt;br /&gt;
порівняння версій&lt;br /&gt;
&lt;br /&gt;
==== create_system_settings() ====&lt;br /&gt;
&lt;br /&gt;
==== dump_stacks() ====&lt;br /&gt;
&lt;br /&gt;
Request information about the running threads of the current process.&lt;br /&gt;
&lt;br /&gt;
:return: A tuple containing:&lt;br /&gt;
&lt;br /&gt;
* A sequence of text lines detailing the stacks of running&lt;br /&gt;
&lt;br /&gt;
threads and greenlets. (One greenlet will duplicate one thread,&lt;br /&gt;
&lt;br /&gt;
the current thread and greenlet.)&lt;br /&gt;
&lt;br /&gt;
* The number of greenlets.&lt;br /&gt;
&lt;br /&gt;
==== generate_id() ====&lt;br /&gt;
&lt;br /&gt;
Генерація ID&lt;br /&gt;
&lt;br /&gt;
==== get_active_lang_list() ====&lt;br /&gt;
&lt;br /&gt;
Визначення id поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_current_user_role_name() ====&lt;br /&gt;
&lt;br /&gt;
Отрмання rolename поточного користувача&lt;br /&gt;
&lt;br /&gt;
==== get_locale() ====&lt;br /&gt;
&lt;br /&gt;
Визначення поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_locale_id() ====&lt;br /&gt;
&lt;br /&gt;
Визначення id поточної мови&lt;br /&gt;
&lt;br /&gt;
==== get_path_abs(caller_file) ====&lt;br /&gt;
&lt;br /&gt;
Абсолютний шлях до файлу, в якому виконується код.&lt;br /&gt;
&lt;br /&gt;
Виклик K2.get_path_abs(__file__)&lt;br /&gt;
&lt;br /&gt;
__file__ -стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.&lt;br /&gt;
&lt;br /&gt;
==== get_path_to_root(caller_file) ====&lt;br /&gt;
&lt;br /&gt;
Відносний шлях до рута.&lt;br /&gt;
&lt;br /&gt;
Виклик K2.get_path_to_root(__file__).&lt;br /&gt;
&lt;br /&gt;
__file__ - стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.&lt;br /&gt;
&lt;br /&gt;
==== get_platform() ====&lt;br /&gt;
&lt;br /&gt;
Визначення операційної системи&lt;br /&gt;
&lt;br /&gt;
==== get_user_permissions() ====&lt;br /&gt;
&lt;br /&gt;
Retrieve user permissions based on the URL.&lt;br /&gt;
&lt;br /&gt;
This method fetches permissions for the current user based on the URL they are accessing.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: A dictionary containing the user permissions, including &#039;roleid&#039; and various permission flags&lt;br /&gt;
&lt;br /&gt;
such as &#039;r&#039; (read), &#039;w&#039; (write), &#039;i&#039; (insert), &#039;d&#039; (delete), &#039;c&#039; (create), &#039;exp&#039; (export), &#039;imp&#039; (import), &#039;del_&#039; (undelete), &#039;settable&#039; (set table), &#039;cutpast&#039; (cut and paste), &#039;enable&#039; (enable), and &#039;active&#039; (active).&lt;br /&gt;
&lt;br /&gt;
If the user is a superadmin, a default set of permissions is returned.&lt;br /&gt;
&lt;br /&gt;
If no permissions are found for the user, an empty dictionary is returned.&lt;br /&gt;
&lt;br /&gt;
Raises:&lt;br /&gt;
&lt;br /&gt;
Exception: If an error occurs during database query execution.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
current_user_permissions = K2().get_user_permissions()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== get_user_role(user_id) ====&lt;br /&gt;
&lt;br /&gt;
Отрмання roleid користувача&lt;br /&gt;
&lt;br /&gt;
==== ins_search_comp() ====&lt;br /&gt;
&lt;br /&gt;
Вивід списку компонент з файлу components.yml у всіх шляхах пошуку&lt;br /&gt;
&lt;br /&gt;
==== load_babel_translation_directories() ====&lt;br /&gt;
&lt;br /&gt;
Завантаження перекладів&lt;br /&gt;
&lt;br /&gt;
==== load_logging_message_by_id(error_id: str) ====&lt;br /&gt;
&lt;br /&gt;
Load a logging message by its error_id from the error log file.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
error_id (str): The ID of the error to load.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: The logging message if found, None otherwise.&lt;br /&gt;
&lt;br /&gt;
==== load_logging_messages(page_url: str) ====&lt;br /&gt;
&lt;br /&gt;
Load logging messages for the curren page from the error log file.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
name (str): Name of the object (page) to load messages for.&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
dict: A dictionary containing formatted log messages, the count of &#039;error&#039; messages, and the count of &#039;warning&#039; messages.&lt;br /&gt;
&lt;br /&gt;
==== log_entry(error_id, status, message, name) ====&lt;br /&gt;
&lt;br /&gt;
==== logging_message(status, message, page_url=None, show_message=True) ====&lt;br /&gt;
&lt;br /&gt;
Send a logging message to the client via Socket.IO.&lt;br /&gt;
&lt;br /&gt;
This method emits a message to the client with a given status and message content.&lt;br /&gt;
&lt;br /&gt;
The message is sent to a room identified by the current user&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
status (str): The status of the message (e.g., cls.log_error - &#039;ERROR&#039;, cls.log_warning - &#039;WARNING&#039;, cls.log_success - &#039;SUCCESS&#039;).&lt;br /&gt;
&lt;br /&gt;
message (str): The content of the message to be sent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
page_url(str): url of page with Errors.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
show_message (bool): True - save log and show windows, False - only save_log&lt;br /&gt;
&lt;br /&gt;
Приклад використання функції:&lt;br /&gt;
&lt;br /&gt;
K2.logging_message(K2.log_error, &#039;Operation completed with error.&#039;)&lt;br /&gt;
&lt;br /&gt;
K2.logging_message(K2.log_success, &#039;Operation completed successfully.&#039;1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
K2.logging_message(status=K2.log_success, message=&#039;Operation completed successfully.&#039;, page_url=&#039;/kadm/users&#039;, show_message=False)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
==== namemenu(url) ====&lt;br /&gt;
&lt;br /&gt;
Add identificators to url page&lt;br /&gt;
&lt;br /&gt;
==== save_logging_message(error_id, status, message, name) ====&lt;br /&gt;
&lt;br /&gt;
Save a logging message to the stack.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
status (str): The status of the message (e.g., cls.log_error - &#039;ERROR&#039;, cls.log_warning - &#039;WARNING&#039;, cls.log_success - &#039;SUCCESS&#039;).&lt;br /&gt;
&lt;br /&gt;
message (str): The content of the message to be saved.&lt;br /&gt;
&lt;br /&gt;
name (str): Name of object where the message originated.&lt;br /&gt;
&lt;br /&gt;
==== search_babel_translation_directories() ====&lt;br /&gt;
&lt;br /&gt;
Пошук файлів з перекладами&lt;br /&gt;
&lt;br /&gt;
==== search_comp_names() ====&lt;br /&gt;
&lt;br /&gt;
Вивід списку ідентифікаторів компонент&lt;br /&gt;
&lt;br /&gt;
у всіх шляхах пошуку&lt;br /&gt;
&lt;br /&gt;
Rerurn: list of components identificators&lt;br /&gt;
&lt;br /&gt;
==== search_yml(name_yml) ====&lt;br /&gt;
&lt;br /&gt;
Search for a yml file in the caller directories of subclasses.&lt;br /&gt;
&lt;br /&gt;
This method searches for a yml file with a specified name in the caller directories of all subclasses of K2Obj.&lt;br /&gt;
&lt;br /&gt;
The search is performed in the &#039;yml&#039; subdirectory of each caller directory.&lt;br /&gt;
&lt;br /&gt;
Args:&lt;br /&gt;
&lt;br /&gt;
name_yml: The name of the yml file to search for (without the &#039;.yml&#039; extension).&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
&lt;br /&gt;
The caller directory where the yml file was found, or None if the file was not found.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&lt;br /&gt;
To search for a yml file named &#039;users.yml&#039;, call this method as follows:&lt;br /&gt;
&lt;br /&gt;
K2.search_yml(&#039;users&#039;)&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Obj ===&lt;br /&gt;
&lt;br /&gt;
З цього класу створюються всі об’єкти системи К2. Він має основну базову функціональність, що розширюється та розвивається та яка є у всіх класів системи&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Властивості класу ====&lt;br /&gt;
&lt;br /&gt;
name #Назва компоненти.&lt;br /&gt;
&lt;br /&gt;
version #Версія компоненти&lt;br /&gt;
&lt;br /&gt;
==== Властивості інстансу ====&lt;br /&gt;
&lt;br /&gt;
self._name_yml #назва конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._name_yml_tree #назва конфігураційного файлу з деревом&lt;br /&gt;
&lt;br /&gt;
self._new_buttons #назва кнопки&lt;br /&gt;
&lt;br /&gt;
self._name_yml_master #назва конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._send_params #параметри для конфігураційного файлу&lt;br /&gt;
&lt;br /&gt;
self._send_group_params #параметри групи&lt;br /&gt;
&lt;br /&gt;
self._report_id #id звіту&lt;br /&gt;
&lt;br /&gt;
self._data_source #датасети&lt;br /&gt;
&lt;br /&gt;
self._off_buttons #вимкнути кнопки&lt;br /&gt;
&lt;br /&gt;
self._row_selection #вибір з рядка&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== Методи інстансу ====&lt;br /&gt;
&lt;br /&gt;
Приклад використання:&lt;br /&gt;
&lt;br /&gt;
==== __init__(self) ====&lt;br /&gt;
&lt;br /&gt;
Initialize self. See help(type(self)) for accurate signature.&lt;br /&gt;
&lt;br /&gt;
==== content(self) ====&lt;br /&gt;
&lt;br /&gt;
==== create_names_yml(self, name_yml: str = &#039;&#039;, name_yml_tree: str = &#039;&#039;, ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
name_yml_master: str = &#039;&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== search_class_prop(path_objs) ====&lt;br /&gt;
&lt;br /&gt;
==== Пошук властивостей для розширення класу ====&lt;br /&gt;
&lt;br /&gt;
==== select_grid(self) ====&lt;br /&gt;
&lt;br /&gt;
==== show_grid(self) ====&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2admin_menus ===&lt;br /&gt;
&lt;br /&gt;
==== Даний клас формує список пунктів меню для конкретного користувача ====&lt;br /&gt;
&lt;br /&gt;
=== Клас k2data ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2datasync ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2logging ===&lt;br /&gt;
&lt;br /&gt;
==== Класk2mail ====&lt;br /&gt;
&lt;br /&gt;
==== Класk2notifications ====&lt;br /&gt;
&lt;br /&gt;
=== Клас k2path ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2secur ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2settings ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2trans ===&lt;br /&gt;
&lt;br /&gt;
=== Клас k2upd ===&lt;br /&gt;
&lt;br /&gt;
== Класи компонент ==&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Site ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Grid ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2WMS ===&lt;br /&gt;
&lt;br /&gt;
=== K2UpdateRemainder ===&lt;br /&gt;
&lt;br /&gt;
=== Клас для оновлення залишків на основі даних з отриманих від клієнтів. ===&lt;br /&gt;
&lt;br /&gt;
Відповідає за обробку даних з логів, створення/оновлення записів про залишки товарів та керування їх статусами (новий, стабільний, старий).&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== __init__() ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація класу.&lt;br /&gt;
Викликає конструктор батьківського класу K2Docs.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
Відсутні.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
Об&#039;єкт класу K2UpdateRemainder.&lt;br /&gt;
&lt;br /&gt;
==== update_pub_sub_remainder() ====&lt;br /&gt;
&lt;br /&gt;
Оновлення залишків на основі даних Pub/Sub.&lt;br /&gt;
Витягує нові залишки з логів, додає їх у таблицю k2remainder_by_parties, оновлює статуси існуючих записів та видаляє застарілі залишки.&lt;br /&gt;
&lt;br /&gt;
Логіка статусів:&lt;br /&gt;
&lt;br /&gt;
&#039;new&#039; – нові залишки, отримані в поточному оновленні.&lt;br /&gt;
&lt;br /&gt;
&#039;stable&#039; – залишки, які підтвердились та доступні користувачам.&lt;br /&gt;
&lt;br /&gt;
&#039;old&#039; – застарілі дані, що підлягають видаленню.&lt;br /&gt;
&lt;br /&gt;
Алгоритм роботи:&lt;br /&gt;
&lt;br /&gt;
Отримує список pub_sub_list_id з логів k2pubsub_logs.&lt;br /&gt;
&lt;br /&gt;
Витягує дані про залишки (inventSumLines).&lt;br /&gt;
&lt;br /&gt;
Вставляє нові записи у таблицю k2remainder_by_parties зі статусом &#039;new&#039;.&lt;br /&gt;
&lt;br /&gt;
Масово оновлює статуси залишків:&lt;br /&gt;
&lt;br /&gt;
Видаляє застарілі (&#039;old&#039;).&lt;br /&gt;
&lt;br /&gt;
Переводить стабільні (&#039;stable&#039;) в старі (&#039;old&#039;).&lt;br /&gt;
&lt;br /&gt;
Нові (&#039;new&#039;) переводить у стабільні (&#039;stable&#039;).&lt;br /&gt;
&lt;br /&gt;
Фіксує зміни у базі (commit).&lt;br /&gt;
&lt;br /&gt;
У разі помилки виконує відкат (rollback).&lt;br /&gt;
&lt;br /&gt;
==== _insert_new_pub_sub_nomenclature(session, nomenclature_data) ====&lt;br /&gt;
&lt;br /&gt;
Додавання нової номенклатури.&lt;br /&gt;
Перевіряє наявність номенклатури у таблиці k2nomenclature. Якщо запису немає – створює його.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
session (Session) – об&#039;єкт сесії бази даних.&lt;br /&gt;
&lt;br /&gt;
nomenclature_data (dict) – дані про номенклатуру:&lt;br /&gt;
&lt;br /&gt;
itemId (str) – ідентифікатор номенклатури.&lt;br /&gt;
&lt;br /&gt;
itemName (str) – назва товару.&lt;br /&gt;
&lt;br /&gt;
unitId (str) – одиниця виміру (конвертується за фіксованим списком).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
Нічого.&lt;br /&gt;
&lt;br /&gt;
Винятки:&lt;br /&gt;
&lt;br /&gt;
Логує помилку у разі невдалої вставки даних.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2CRM ===&lt;br /&gt;
&lt;br /&gt;
Цей клас представляє CRM модуль, який забезпечує роботу з різними розділами CRM системи такими як:&lt;br /&gt;
&lt;br /&gt;
управління лідами&lt;br /&gt;
- замовлення&lt;br /&gt;
&lt;br /&gt;
* рахунки&lt;br /&gt;
&lt;br /&gt;
* звіти&lt;br /&gt;
&lt;br /&gt;
* налаштування системи CRM&lt;br /&gt;
&lt;br /&gt;
=== Клас K2CRM наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу. ===&lt;br /&gt;
&lt;br /&gt;
=== K2DocsCRM ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2DocsCRM є частиною системи K2CRM і наслідується від K2Obj. Він надає доступ до ключових глобальних налаштувань та ресурсів, необхідних для роботи з документами або іншими функціями CRM. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути ====&lt;br /&gt;
&lt;br /&gt;
database:&lt;br /&gt;
&lt;br /&gt;
База даних, доступна через глобальний об&#039;єкт K2.db.&lt;br /&gt;
&lt;br /&gt;
Призначення: Використовується для зберігання та обробки даних, пов&#039;язаних з CRM.&lt;br /&gt;
&lt;br /&gt;
time_zone:&lt;br /&gt;
&lt;br /&gt;
Часовий пояс системи, визначений глобальним об&#039;єктом K2.timezone.&lt;br /&gt;
&lt;br /&gt;
Призначення: Забезпечує коректну обробку часу в межах системи.&lt;br /&gt;
&lt;br /&gt;
domain:&lt;br /&gt;
&lt;br /&gt;
Домен, на якому працює CRM, отримується з глобального об&#039;єкта K2.domain.&lt;br /&gt;
&lt;br /&gt;
Призначення: Використовується для побудови URL-адрес або інших задач, пов&#039;язаних з доменним середовищем.&lt;br /&gt;
&lt;br /&gt;
==== Властивості ====&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create_contact() - Цей метод створює контакт на основі даних існуючого ліда. Лід і контакт взаємодіють через базу даних, де дані ліда переносяться в таблицю контактів.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
==== Метод очікує вхідний JSON, що містить ідентифікатор ліда (lead_id) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє чи було надано lead_id. Якщо lead_id не надано то повертається помилка.&lt;br /&gt;
&lt;br /&gt;
Шукає ліда в таблиці k2lead за наданим параметром.&lt;br /&gt;
&lt;br /&gt;
Якщо лід знайдено то створюється новий запис у таблиці k2contacts на основі даних ліда.&lt;br /&gt;
&lt;br /&gt;
У разі помилки скасовує транзакцію і повертає опис помилки.&lt;br /&gt;
&lt;br /&gt;
==== Моделі які використовуються ====&lt;br /&gt;
&lt;br /&gt;
K2Lead. Таблиця яка містить дані про лідів.&lt;br /&gt;
&lt;br /&gt;
k2contacts. Таблиця, в яку додається новий контакт на основі даних ліда.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_lead() - Цей метод перевіряє, чи існує контакт із заданим номером телефону у базі даних (k2contacts). Якщо знайдено, оновлює дані ліда (ім&#039;я, прізвище, email) у переданому об&#039;єкті.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Отримає вхідний JSON, що містить options із даними для перевірки.&lt;br /&gt;
&lt;br /&gt;
З options[‘dataField’] отримує номер телефону (phone)&lt;br /&gt;
&lt;br /&gt;
Виконує SQL-запит до таблиці k2contacts для пошуку контакту за номером телефону.&lt;br /&gt;
&lt;br /&gt;
Якщо контакт знайдено то відбувається оновлення даних у options[‘dataField’] (name, surname, email, lead_id)&lt;br /&gt;
&lt;br /&gt;
Якщо контакт не знайдено то для полів name, surname, email встановлюється значення None.&lt;br /&gt;
&lt;br /&gt;
У разі помилки повертає повідомлення з помилкою.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crm_data(route, data) - Цей метод отримує дані із відповідних таблиць з бази даних на основі переданих параметрів для подальшого оформлення друкованої форми документів у компоненті k2CRM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Створює порожній словник result_dict, який буде наповнюватись даними та парсить вхідні дані data у форматі JSON і зберігає їх у result_dict[‘Header’].&lt;br /&gt;
&lt;br /&gt;
Формує SQL-запити для витягування даних із таблиць бази даних (Товари, Організація, Контрагент, Склад, Договір, Відповідальна особа, Клієнт).&lt;br /&gt;
&lt;br /&gt;
Для кожного запиту виконується SQL-запит та результат додається до result_dict.&lt;br /&gt;
&lt;br /&gt;
Результати запитів конвертуються у словники (row_asdict) для зручного JSON-формату.&lt;br /&gt;
&lt;br /&gt;
Успішний результат повертається у форматі JSON із ключем data. У разі помилки застосовується лог помилки і повертається повідомлення з помилкою.&lt;br /&gt;
&lt;br /&gt;
process_options - Метод обробляє різні параметри, передані через JSON-запит, і налаштовує об&#039;єкти типу K2Grid для роботи з даними в залежності від значення ключа name у вхідних даних.&lt;br /&gt;
&lt;br /&gt;
Основні операції:&lt;br /&gt;
&lt;br /&gt;
Обробка k2doc_rows_detail:&lt;br /&gt;
&lt;br /&gt;
Ім&#039;я YML: &#039;k2doc_rows_detail&#039;.&lt;br /&gt;
&lt;br /&gt;
Вимикаються кнопки: add, delete, printReport.&lt;br /&gt;
&lt;br /&gt;
Передаються параметри: row_id та storage_id.&lt;br /&gt;
&lt;br /&gt;
Обробка k2doc_move:&lt;br /&gt;
&lt;br /&gt;
Ім&#039;я YML: &#039;k2doc_move&#039;.&lt;br /&gt;
&lt;br /&gt;
Вимикаються кнопки: add, edit, delete, printReport.&lt;br /&gt;
&lt;br /&gt;
Передаються параметри: doc_id.&lt;br /&gt;
&lt;br /&gt;
Логіка роботи:&lt;br /&gt;
&lt;br /&gt;
Метод очікує вхідні дані у форматі JSON і доступ до них здійснюється через request.json.&lt;br /&gt;
&lt;br /&gt;
Перевіряється значення ключа name у вхідних даних:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Якщо name == &#039;k2doc_rows_detail&#039;:&lt;br /&gt;
Виділяється row_id із переданих даних. Створюється об’єкт K2Grid з іменем yml “&#039;k2doc_rows_detail”. Вимикаються кнопки add, delete, printReport на панелі інструментів. Отримується storage_id через метод self.get_storage_id(). Параметри row_id та storage_id передаються через send_params.&lt;br /&gt;
Якщо name == &#039;k2doc_move&#039;:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Виділяється doc_id із вхідних даних. Створюється об&#039;єкт K2Grid з іменем yml &#039;k2doc_move&#039;. Вимикаються кнопки add, edit, delete, printReport на панелі інструментів. Параметри (doc_id) передаються через send_params.&lt;br /&gt;
&lt;br /&gt;
Повернення результату у форматі JSON&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Report ===&lt;br /&gt;
&lt;br /&gt;
Цей клас забезпечує генерацію та друк звітів за допомогою API Stimulsoft.&lt;br /&gt;
&lt;br /&gt;
==== Основні можливості модуля ====&lt;br /&gt;
&lt;br /&gt;
створення звітів за допомогою конструктора звітів&lt;br /&gt;
&lt;br /&gt;
управління друкованими формами&lt;br /&gt;
&lt;br /&gt;
генерація друкованих документів&lt;br /&gt;
&lt;br /&gt;
==== взаємодія з API Stimulsoft для візуалізації та експорту звітів ====&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Report наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу.&lt;br /&gt;
Також клас K2Report є батьківським класом для K2ReportEmbed та K2ReportDesigner ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(sql=[]) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізація класу. Отримує шлях до каталогу файлу, що викликав ініціалізацію.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
sql (list, опціонально): Список SQL-запитів.&lt;br /&gt;
&lt;br /&gt;
==== create_report(sql=None, data_source=None) ====&lt;br /&gt;
&lt;br /&gt;
Створення звіту. Відображає HTML-сторінку редактора або переглядача звітів.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
sql (dict, опціонально): SQL-запити.&lt;br /&gt;
&lt;br /&gt;
data_source (dict, опціонально): Джерело даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
HTML-сторінку редактора або переглядача звітів.&lt;br /&gt;
&lt;br /&gt;
==== get_report(file_name) ====&lt;br /&gt;
&lt;br /&gt;
Отримання звіту за його ім&#039;ям.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
file_name (str): Назва файлу звіту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Файл звіту або помилку 404, якщо файл не знайдено.&lt;br /&gt;
&lt;br /&gt;
==== execute_query(query, params=None) ====&lt;br /&gt;
&lt;br /&gt;
Виконує SQL-запит.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
query (str): SQL-запит.&lt;br /&gt;
&lt;br /&gt;
params (dict, опціонально): Параметри запиту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Результат виконання запиту.&lt;br /&gt;
&lt;br /&gt;
==== get_report_designer(file_name, design_type_id) ====&lt;br /&gt;
&lt;br /&gt;
Отримує дизайнер звіту за типом звіту.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
file_name (str): Назва файлу.&lt;br /&gt;
&lt;br /&gt;
design_type_id (str): Тип дизайну (1 - звіт, 2 - дашборд).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Файл дизайну або помилку 404.&lt;br /&gt;
&lt;br /&gt;
==== add_reports_type(name, data) ====&lt;br /&gt;
&lt;br /&gt;
Додає тип звіту до групи звітів.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
name (str): Назва типу звіту.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані для оновлення.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
bool: True, якщо успішно.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportEmbed ===&lt;br /&gt;
&lt;br /&gt;
K2ReportEmbed - Компонент для вбудовування звітів у веб-додаток. Дозволяє отримувати та відображати звіти з бази даних на основі їх ідентифікаторів.&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== __init__(reports_id: List[str]) ====&lt;br /&gt;
&lt;br /&gt;
Ініціалізує екземпляр класу K2ReportEmbed.&lt;br /&gt;
&lt;br /&gt;
Аргументи:&lt;br /&gt;
&lt;br /&gt;
reports_id (List[str]) – список ідентифікаторів звітів.&lt;br /&gt;
&lt;br /&gt;
==== get_report_data() -&amp;gt; Optional[List[Dict[str, Any]]] ====&lt;br /&gt;
&lt;br /&gt;
Отримує дані звітів з бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Optional[List[Dict[str, Any]]] – список даних звітів або None, якщо сталася помилка.&lt;br /&gt;
&lt;br /&gt;
Опис: Метод виконує запит до бази даних для отримання інформації про звіти, джерела даних та формує структуру JSON-даних. Він включає наступні дані для кожного звіту:&lt;br /&gt;
&lt;br /&gt;
report_name – Назва звіту.&lt;br /&gt;
&lt;br /&gt;
file_name – Ім&#039;я файлу звіту.&lt;br /&gt;
&lt;br /&gt;
json_data_list – JSON-структура, що містить дані для звіту.&lt;br /&gt;
&lt;br /&gt;
Якщо під час виконання запитів виникає помилка, вона логуватиметься у системному журналі помилок&lt;br /&gt;
&lt;br /&gt;
Приклад вбудовування звітів на веб-сторінку&lt;br /&gt;
&lt;br /&gt;
==== Бекенд (Flask) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@k2production.route(&#039;/test_dashboard&#039;, methods=[&#039;GET&#039;])&lt;br /&gt;
def test_dashboard():&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot; Index page &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
reports_id = [&#039;b452a5ae84f9e92e75eb0467c196fd71&#039;, &#039;1673a4fab757fb6c5df970fdc6ee680c&#039;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;49952f397efff44d7ce0e5cb9aa625fb&#039;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
k2report_embed = K2ReportEmbed(reports_id)&lt;br /&gt;
return render_template(&#039;k2dashboard_production/k2dashboard_production.html&#039;,&lt;br /&gt;
dashboard_settings=k2report_embed)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Фронтенд (Jinja-шаблон) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{% extends template_name + &#039;/base.html&#039; %}&lt;br /&gt;
{% block content %}&lt;br /&gt;
{% if error %}&lt;br /&gt;
{{ error }}&lt;br /&gt;
{% else %}&lt;br /&gt;
{% include dashboard_settings.template %}&lt;br /&gt;
{% endif %}&lt;br /&gt;
{% endblock %&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportDesigner ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2ReportDesigner надає функціональність для створення, редагування та перегляду звітів і дашбордів. Він взаємодіє з базою даних, управляє файлами звітів та генерує JSON-дані для подальшого використання. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути класу ====&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== designer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку редагування друкованої форми.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки редагування.&lt;br /&gt;
&lt;br /&gt;
==== viewer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку перегляду друкованої форми.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки перегляду.&lt;br /&gt;
&lt;br /&gt;
==== dashboard_viewer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку перегляду дашборду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки перегляду дашборду.&lt;br /&gt;
&lt;br /&gt;
==== dashboard_designer() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку редагування дашборду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: HTML-шаблон сторінки редагування дашборду.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from=None, date_to=None)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Створює JSON-дані на основі джерел даних та періоду.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
datasource_value (list): Список SQL-запитів.&lt;br /&gt;
&lt;br /&gt;
datasource_keys (list): Список ключів для джерел даних.&lt;br /&gt;
&lt;br /&gt;
datasource_is_counterpart_id (list): Список флагів, що вказують на наявність counterpart_id.&lt;br /&gt;
&lt;br /&gt;
datasource_is_storage_id (list): Список флагів, що вказують на наявність storage_id.&lt;br /&gt;
&lt;br /&gt;
period (int): Період вибірки даних.&lt;br /&gt;
&lt;br /&gt;
date_from (str, опціонально): Початкова дата періоду.&lt;br /&gt;
&lt;br /&gt;
date_to (str, опціонально): Кінцева дата періоду.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
dict: Словник з результатами запитів або помилкою.&lt;br /&gt;
&lt;br /&gt;
==== Приклад використання ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
datasource_value = [&amp;quot;SELECT * FROM table1&amp;quot;, &amp;quot;SELECT * FROM table2&amp;quot;]&lt;br /&gt;
datasource_keys = [&amp;quot;table1_data&amp;quot;, &amp;quot;table2_data&amp;quot;]&lt;br /&gt;
datasource_is_counterpart_id = [True, False]&lt;br /&gt;
datasource_is_storage_id = [False, True]&lt;br /&gt;
period = 1&lt;br /&gt;
date_from = &amp;quot;2023-01-01&amp;quot;&lt;br /&gt;
date_to = &amp;quot;2023-12-31&amp;quot;&lt;br /&gt;
json_data = k2_designer.json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from, date_to)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== save_report_id() ====&lt;br /&gt;
&lt;br /&gt;
Зберігає ідентифікатор та налаштування звіту в JSON-файл.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Response: JSON-відповідь про результат збереження.&lt;br /&gt;
&lt;br /&gt;
==== mrt_report_create(report_id, design_type_id=None) ====&lt;br /&gt;
&lt;br /&gt;
Створює MRT-файл звіту на основі шаблону.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
report_id (str): Ідентифікатор звіту.&lt;br /&gt;
&lt;br /&gt;
design_type_id (str, опціонально): Тип дизайну звіту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
str: Ім&#039;я створеного файлу або помилка.&lt;br /&gt;
&lt;br /&gt;
==== table_report_data(datasource_value, datasource_keys) ====&lt;br /&gt;
&lt;br /&gt;
Обробляє дані з SQL-запитів для кожного джерела даних і повертає їх у вигляді JSON.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
datasource_value (list): Список SQL-запитів для виконання.&lt;br /&gt;
&lt;br /&gt;
datasource_keys (list): Список ключів, які відповідають кожному SQL-запиту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
dict: Словник, де ключі — це значення з datasource_keys, а значення — дані у форматі JSON для кожного запиту.&lt;br /&gt;
&lt;br /&gt;
==== save_info_report_designer() ====&lt;br /&gt;
&lt;br /&gt;
Зберігає інформацію про репорт та генерує файл MRT.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Response: JSON-об&#039;єкт із результатами генерації звіту та повідомленням про успішність.&lt;br /&gt;
&lt;br /&gt;
==== data_source_lists_creating(group_reports_id) ====&lt;br /&gt;
&lt;br /&gt;
Створює списки джерел даних для звіту.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
group_reports_id (str): Ідентифікатор групи звітів.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
list: Списки джерел даних.&lt;br /&gt;
&lt;br /&gt;
=== Клас K2Production ===&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
Схема вибору обслуговування терміналу&lt;br /&gt;
&lt;br /&gt;
=== Клас K2LogbookTMDoc ===&lt;br /&gt;
&lt;br /&gt;
=== Клас для управління логбуком технічного обслуговування (ТО). Забезпечує функціональність для створення, перегляду, редагування записів логбука ТО, роботи з параметрами завдань та обладнання, а також підготовки даних про запчастини. ===&lt;br /&gt;
&lt;br /&gt;
==== Методи класу ====&lt;br /&gt;
&lt;br /&gt;
==== k2logbook_tm() ====&lt;br /&gt;
&lt;br /&gt;
Відображає сторінку логбука технічного обслуговування.&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон сторінки логбука.&lt;br /&gt;
&lt;br /&gt;
==== take_logbook_tm(task_id) ====&lt;br /&gt;
&lt;br /&gt;
Створює форму логбука для конкретного завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
task_id (str): Ідентифікатор завдання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон форми логбука.&lt;br /&gt;
&lt;br /&gt;
==== edit_logbook_tm(logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Редагує запис логбука технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id (str): Ідентифікатор запису логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: HTML-шаблон сторінки редагування.&lt;br /&gt;
&lt;br /&gt;
==== select_current_step(connection, logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Вибирає поточний активний крок логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id (str): Ідентифікатор запису логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: Ідентифікатор поточного кроку.&lt;br /&gt;
&lt;br /&gt;
==== planned_tm(data, connection) ====&lt;br /&gt;
&lt;br /&gt;
Налаштовує параметри grid для запланованого технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані завдання.&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Налаштування grid.&lt;br /&gt;
&lt;br /&gt;
==== unplanned_tm(data, connection) ====&lt;br /&gt;
&lt;br /&gt;
Налаштовує параметри grid для незапланованого технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані завдання.&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до бази даних.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Налаштування grid.&lt;br /&gt;
&lt;br /&gt;
==== write_logbook_params(data) ====&lt;br /&gt;
&lt;br /&gt;
Зберігає параметри логбука в JSON-файл.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані для збереження.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь про успішне збереження.&lt;br /&gt;
&lt;br /&gt;
==== read_logbook_params() ====&lt;br /&gt;
&lt;br /&gt;
Зчитує параметри логбука з JSON-файлу поточного користувача.&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Збережені параметри логбука.&lt;br /&gt;
&lt;br /&gt;
==== fill_logbook_tm_rows(data) ====&lt;br /&gt;
&lt;br /&gt;
Заповнює рядки логбука технічного обслуговування.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри для заповнення рядків.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True при успішному заповненні, False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== pull_spare_parts_data() ====&lt;br /&gt;
&lt;br /&gt;
Витягує та підготовлює дані про запчастини для логбука.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з результатом операції та даними про запчастини.&lt;br /&gt;
&lt;br /&gt;
==== send_params_to_k2logbook_spare_parts(data) ====&lt;br /&gt;
&lt;br /&gt;
Формує параметри та SQL-запит для отримання даних про запчастини.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри логбука.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 dict: Інформація про запчастини або False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== instruments_and_equipment_parts_params() ====&lt;br /&gt;
&lt;br /&gt;
Отримує параметри інструментів та запчастин для обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з результатом операції або повідомленням про помилку.&lt;br /&gt;
&lt;br /&gt;
==== task_step_form() ====&lt;br /&gt;
&lt;br /&gt;
Формує форму кроку завдання технічного обслуговування.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Відповідь з параметрами кроку або повідомленням про помилку.&lt;br /&gt;
&lt;br /&gt;
==== is_unplanned_step_form(step_data) ====&lt;br /&gt;
&lt;br /&gt;
Обробляє форму кроку для позапланованого ТО.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
step_data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 str: ID кроку або JSON з помилкою.&lt;br /&gt;
&lt;br /&gt;
==== save_step(data) ====&lt;br /&gt;
&lt;br /&gt;
Зберігає дані кроку (номенклатуру).&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Параметри кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True при успіху, False при помилці.&lt;br /&gt;
&lt;br /&gt;
==== end_step(data, session_id, connection, post_request) ====&lt;br /&gt;
&lt;br /&gt;
Завершує крок ТО. Обробляє запчастини, час, статус.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
session_id (str): ID сесії.&lt;br /&gt;
&lt;br /&gt;
connection (опціонально): Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
post_request (bool): Чи це постобробка.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON або False.&lt;br /&gt;
&lt;br /&gt;
==== step_image_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє наявність зображень для кроку.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (є зображення), False (немає або помилка).&lt;br /&gt;
&lt;br /&gt;
==== step_data_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє коректність даних про запчастини.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (дані валідні), False (невалідні або помилка).&lt;br /&gt;
&lt;br /&gt;
==== decline_task() ====&lt;br /&gt;
&lt;br /&gt;
Відхиляє завдання. Деактивує запис у логбуці.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== write_user_comment() ====&lt;br /&gt;
&lt;br /&gt;
Додає коментар користувача до кроку.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат збереження.&lt;br /&gt;
&lt;br /&gt;
==== end_step_manager(data) ====&lt;br /&gt;
&lt;br /&gt;
Керує завершенням кроку. Перевіряє матеріали, зображення.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== detail_check(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє відповідність номенклатури обладнанню.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data (dict): Дані кроку.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (відповідність є), False (немає або помилка).&lt;br /&gt;
&lt;br /&gt;
==== send_params_to_k2mount_point_form() ====&lt;br /&gt;
&lt;br /&gt;
Формує параметри для форми монтажних точок обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Параметри форми (точки монтування, URL зображення схеми).&lt;br /&gt;
&lt;br /&gt;
==== change_scheme_equipment() ====&lt;br /&gt;
&lt;br /&gt;
Оновлює схему обладнання шляхом заміни монтажних точок.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== pass_familiarisation() ====&lt;br /&gt;
&lt;br /&gt;
Позначає завдання як ознайомлене та оновлює його статус.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
Примітка:&lt;br /&gt;
 Функціонал створення акту списання закоментований.&lt;br /&gt;
&lt;br /&gt;
==== create_write_off_act_logbook(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Створює акт списання для логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані для акту.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (акт створено), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== create_doc_rows_for_write_of_act(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Створює рядки документу для акту списання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані документу.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (рядки створено), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== write_off_part_logbook(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Списати частину обладнання з логбука.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані для списання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 Нічого (помилки обробляються через rollback).&lt;br /&gt;
&lt;br /&gt;
==== end_logbook() ====&lt;br /&gt;
&lt;br /&gt;
Завершує роботу з журналом ТО.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== spare_parts_check() ====&lt;br /&gt;
&lt;br /&gt;
Перевіряє наявність запасних частин для журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат перевірки (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== equipment_qr_confirmation() ====&lt;br /&gt;
&lt;br /&gt;
Підтверджує відповідність QR-коду обладнання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат перевірки (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== add_new_equipment_parts(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Додає нові частини обладнання до БД.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Дані про частини обладнання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== material_quantity() ====&lt;br /&gt;
&lt;br /&gt;
Отримує інформацію про кількість матеріалів.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Дані про кількість матеріалів.&lt;br /&gt;
&lt;br /&gt;
==== create_unplanned_task(data) ====&lt;br /&gt;
&lt;br /&gt;
Створює незаплановане завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
data: Дані для створення завдання.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 bool: True (успіх), False (помилка).&lt;br /&gt;
&lt;br /&gt;
==== take_material_by_qr() ====&lt;br /&gt;
&lt;br /&gt;
Резервує матеріал за допомогою QR-коду.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== return_material_by_qr() ====&lt;br /&gt;
&lt;br /&gt;
Повертає матеріал за QR-кодом.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції (успіх або помилка).&lt;br /&gt;
&lt;br /&gt;
==== requires_partner() ====&lt;br /&gt;
&lt;br /&gt;
Встановлює статус завдання &amp;quot;потребує партнера&amp;quot;.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
&lt;br /&gt;
==== join_task() ====&lt;br /&gt;
&lt;br /&gt;
Додає користувача до завдання та змінює статус на &amp;quot;in_work&amp;quot;.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== e_report_logbook(logbook_fields_tm_id) ====&lt;br /&gt;
&lt;br /&gt;
Генерує звіт для журналу ТО у форматі HTML.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
logbook_fields_tm_id: ID журналу.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 HTML: Відображення звіту.&lt;br /&gt;
&lt;br /&gt;
==== get_all_employee_image() ====&lt;br /&gt;
&lt;br /&gt;
Отримує всі зображення журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Список URL зображень.&lt;br /&gt;
&lt;br /&gt;
==== get_employee_image() ====&lt;br /&gt;
&lt;br /&gt;
Отримує зображення конкретного рядка журналу.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Список URL зображень.&lt;br /&gt;
&lt;br /&gt;
==== get_image_logbook(image_data) ====&lt;br /&gt;
&lt;br /&gt;
Перетворює шляхи зображень у URL.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
image_data: Дані зображень з БД.&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
 list: Список URL&lt;br /&gt;
&lt;br /&gt;
==== confirm_task() ====&lt;br /&gt;
&lt;br /&gt;
Підтверджує завершення завдання. Надсилає сповіщення.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== send_on_revision_task() ====&lt;br /&gt;
&lt;br /&gt;
Надсилає завдання на доопрацювання.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Підтвердження операції.&lt;br /&gt;
&lt;br /&gt;
==== send_to_the_task_list_revision() ====&lt;br /&gt;
&lt;br /&gt;
Надсилає завдання на доопрацювання та деактивує виконавців.&lt;br /&gt;
Повертає:&lt;br /&gt;
 JSON: Результат операції.&lt;br /&gt;
&lt;br /&gt;
==== change_task_employee(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Оновлює виконавців завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Нові виконавці та рядки.&lt;br /&gt;
&lt;br /&gt;
==== change_step_status_revision(connection, data) ====&lt;br /&gt;
&lt;br /&gt;
Скидає статус виконання кроків.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Ідентифікатори кроків.&lt;br /&gt;
&lt;br /&gt;
==== change_task_status_revision(connection, data, status) ====&lt;br /&gt;
&lt;br /&gt;
Змінює статус завдання.&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
connection: Підключення до БД.&lt;br /&gt;
&lt;br /&gt;
data: Ідентифікатор завдання.&lt;br /&gt;
&lt;br /&gt;
status: Новий статус (за замовчуванням in_work).&lt;br /&gt;
&lt;br /&gt;
=== Клас K2EquipmentFunction ===&lt;br /&gt;
&lt;br /&gt;
=== Клас K2EquipmentFunction є підкласом K2Obj і призначений для роботи з функціональністю, пов&#039;язаною з обладнанням у системі K2. Він містить методи для обробки запитів на затвердження змін у технічній документації обладнання. ===&lt;br /&gt;
&lt;br /&gt;
==== Атрибути ====&lt;br /&gt;
&lt;br /&gt;
path_class: &#039;components/k2production/k2production/k2equipment&#039;&lt;br /&gt;
&lt;br /&gt;
file_class: &#039;k2equipment&#039;&lt;br /&gt;
&lt;br /&gt;
==== Методи ====&lt;br /&gt;
&lt;br /&gt;
==== init(self) ====&lt;br /&gt;
&lt;br /&gt;
Конструктор класу, який викликає конструктор батьківського класу K2Obj.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
send_approval_request_from_hook(self, data) - Метод для відправлення запиту на затвердження змін у технічній карті обладнання.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Параметри ====&lt;br /&gt;
&lt;br /&gt;
data (dict): Словник з даними, що містить:&lt;br /&gt;
&lt;br /&gt;
equipment_type_id (int): Ідентифікатор типу обладнання&lt;br /&gt;
&lt;br /&gt;
changed_fields (dict): Словник зі зміненими полями та їх значеннями&lt;br /&gt;
&lt;br /&gt;
==== Логіка роботи ====&lt;br /&gt;
&lt;br /&gt;
Перевірка наявності записів з parentid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Перевіряє наявність записів у таблиці k2tm_fields з parentid != &#039;0&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Якщо записів немає, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Отримання інформації про тип обладнання:&lt;br /&gt;
&lt;br /&gt;
Витягує equipment_type_name та equipment_type_code з таблиці k2equipment_type&lt;br /&gt;
&lt;br /&gt;
Якщо тип обладнання не знайдено, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Пошук затверджувачів:&lt;br /&gt;
&lt;br /&gt;
Отримує список активних користувачів для затвердження з таблиці k2users_for_approval&lt;br /&gt;
&lt;br /&gt;
Якщо затверджувачів не знайдено, повертає помилку 404&lt;br /&gt;
&lt;br /&gt;
Формування повідомлення:&lt;br /&gt;
&lt;br /&gt;
Створює опис змін у форматі &amp;quot;поле: старе_значення → нове_значення&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Формує URL для сторінки затвердження&lt;br /&gt;
&lt;br /&gt;
Відправка запиту на затвердження:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Використовує K2Notifications.send_approval_request() для відправки повідомлення&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Передає список затверджувачів, ідентифікатор об&#039;єкта, URL та опис змін&lt;br /&gt;
&lt;br /&gt;
==== Повертає ====&lt;br /&gt;
&lt;br /&gt;
У разі успіху: JSON з повідомленням про успішну відправку (код 200)&lt;br /&gt;
&lt;br /&gt;
У разі помилки: JSON з описом помилки (код 404 або 500)&lt;br /&gt;
&lt;br /&gt;
==== Залежності ====&lt;br /&gt;
&lt;br /&gt;
Потребує доступу до бази даних через self.db&lt;br /&gt;
&lt;br /&gt;
==== Використовує клас K2Notifications для відправки повідомлень ====&lt;br /&gt;
&lt;br /&gt;
Працює з конфігурацією домену через K2.domain&lt;br /&gt;
&lt;br /&gt;
== K2 Cloud ERP Javascript ==&lt;br /&gt;
&lt;br /&gt;
==== createImageSliderModal(images, containerId = null) ====&lt;br /&gt;
&lt;br /&gt;
Створює слайдер зображень у контейнері або модальному вікні.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
images: Масив URL-адрес зображень.&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера для вставки слайдера (необов’язково).&lt;br /&gt;
&lt;br /&gt;
Повертає:&lt;br /&gt;
&lt;br /&gt;
Ідентифікатор створеного каруселя або модального вікна.&lt;br /&gt;
&lt;br /&gt;
Якщо зображення відсутні, показує повідомлення та повертає null.&lt;br /&gt;
&lt;br /&gt;
==== showBootstrapLoader(containerId) ====&lt;br /&gt;
&lt;br /&gt;
Додає анімацію завантаження у вказаний контейнер.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера, у який буде вставлений індикатор завантаження.&lt;br /&gt;
&lt;br /&gt;
==== removeBootstrapLoader(containerId) ====&lt;br /&gt;
&lt;br /&gt;
Видаляє анімацію завантаження з контейнера.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
containerId: Ідентифікатор контейнера, з якого потрібно прибрати індикатор завантаження.&lt;br /&gt;
&lt;br /&gt;
==== showUserAlert(message, type = &#039;light&#039;) ====&lt;br /&gt;
&lt;br /&gt;
Відображає сповіщення користувача у вигляді Bootstrap Toast&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Параметри:&lt;br /&gt;
&lt;br /&gt;
message: Текст повідомлення. type: Тип сповіщення (primary, success, danger, warning, info, light). За замовчуванням &#039;light&#039;.&lt;br /&gt;
&lt;br /&gt;
== Стилі (Назва) ==&lt;br /&gt;
&lt;br /&gt;
Подзаголовок&lt;br /&gt;
&lt;br /&gt;
Заголовок 1&lt;br /&gt;
&lt;br /&gt;
Заголовок 2&lt;br /&gt;
&lt;br /&gt;
Заголовок 3&lt;br /&gt;
&lt;br /&gt;
Заголовок 4&lt;br /&gt;
&lt;br /&gt;
Заголовок 5&lt;br /&gt;
&lt;br /&gt;
Заголовок 6&lt;br /&gt;
&lt;br /&gt;
Звичвйний текст&lt;br /&gt;
&lt;br /&gt;
== Ілюстрації з документа ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_Cloud_ERP_Python_01.png|Ілюстрація K2 Cloud ERP Python&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 Cloud ERP]]&lt;br /&gt;
* [[K2 ERP]]&lt;br /&gt;
* [[Python]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Документація для розробників]]&lt;br /&gt;
* [[K2 Cloud ERP Javascript]]&lt;br /&gt;
&lt;br /&gt;
[[Категорія:K2 ERP]]&lt;br /&gt;
[[Категорія:K2 Cloud ERP]]&lt;br /&gt;
[[Категорія:Python]]&lt;br /&gt;
[[Категорія:Документація K2]]&lt;br /&gt;
[[Категорія:Документація для розробників]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Cloud_ERP_Python_01.png&amp;diff=121</id>
		<title>Файл:K2 Cloud ERP Python 01.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_Cloud_ERP_Python_01.png&amp;diff=121"/>
		<updated>2026-04-28T21:13:27Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=120</id>
		<title>Головна сторінка</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0&amp;diff=120"/>
		<updated>2026-04-28T21:11:52Z</updated>

		<summary type="html">&lt;p&gt;R: Класи та команди K2 ERP Python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Про систему K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]] — це комплексна система управління підприємством, яка об’єднує фінанси, бухгалтерію, продажі, склад, закупівлі, документообіг, CRM, аналітику та галузеві модулі в єдиному цифровому середовищі. Система допомагає автоматизувати щоденні процеси, зменшити ручну роботу й кількість помилок, контролювати ресурси в реальному часі, швидше обробляти заявки та документи, бачити повну картину бізнесу й приймати точні управлінські рішення на основі актуальних даних. Завдяки модульності, хмарному доступу та гнучкому налаштуванню K2 ERP підходить для компаній різного масштабу й допомагає бізнесу працювати прозоріше, ефективніше та впевнено масштабуватися.&lt;br /&gt;
&lt;br /&gt;
== Сайти K2 ERP ==&lt;br /&gt;
[[Ресурси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для користувачів ==&lt;br /&gt;
&lt;br /&gt;
[[Початок роботи з K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Хмара K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бухгалтерія K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Управлінський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[CRM K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Складський облік K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтернет-магазин K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 VDoc]]&lt;br /&gt;
&lt;br /&gt;
[[Галузеві рішення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Звіти та аналітика K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Поширені питання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
== Для програмістів ==&lt;br /&gt;
&lt;br /&gt;
[[Архітектура K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Встановлення K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Розгортання K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Створення модулів K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[База даних K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[API K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Інтеграції K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[K2 CMS]]&lt;br /&gt;
&lt;br /&gt;
[[Розробка веб-інтерфейсів K2]]&lt;br /&gt;
&lt;br /&gt;
[[Бізнес-процеси K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Права доступу K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Рекомендації для розробників K2]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 ERP Python]]&lt;br /&gt;
&lt;br /&gt;
[[Стандарти UI K2 2025]]&lt;br /&gt;
&lt;br /&gt;
== Атестаційні завдання по K2 ERP ==&lt;br /&gt;
&lt;br /&gt;
[[Атестаційні завдання по K2 ERP]]&lt;br /&gt;
&lt;br /&gt;
[[Регламент K2]]&lt;br /&gt;
&lt;br /&gt;
== K2 ERP PHP ==&lt;br /&gt;
&lt;br /&gt;
[[Практична робота в K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Інструкція по розгортанню K2 ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Класи та команди K2 Cloud ERP PHP]]&lt;br /&gt;
&lt;br /&gt;
== Робота в K2 ==&lt;br /&gt;
[[Налаштування WireGuard]]&lt;br /&gt;
&lt;br /&gt;
== Довідник та модулі ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 CMS]]&lt;br /&gt;
* [[K2 VDoc (Електронний документообіг)]]&lt;br /&gt;
* [[Ліцензійна політика K2]]&lt;br /&gt;
&lt;br /&gt;
== Навігація за категоріями ==&lt;br /&gt;
Усі статті бази знань автоматично групуються за категоріями:&lt;br /&gt;
&lt;br /&gt;
* [[:Категорія:ERP-системи|ERP-системи]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення, розроблене в Україні|Українське ПЗ]]&lt;br /&gt;
* [[:Категорія:Програмне забезпечення для бізнесу|ПЗ для бізнесу]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Інформацію про роботу з цією вікі можна знайти на сторінці [[mediawikiwiki:Special:MyLanguage/Help:Contents|Довідка:Вміст]].&lt;br /&gt;
&lt;br /&gt;
== Деякі корисні ресурси ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список налаштувань];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Часті питання з приводу MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Розсилка повідомлень про появу нових версій MediaWiki];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локалізувати MediaWiki своєю мовою]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Дізнатися, як боротися зі спамом у своїй вікі]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%B8_UI_K2_2025&amp;diff=119</id>
		<title>Стандарти UI K2 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%B8_UI_K2_2025&amp;diff=119"/>
		<updated>2026-04-28T21:09:57Z</updated>

		<summary type="html">&lt;p&gt;R: Створена сторінка: {{Картка документації K2 | назва = Стандарти UI K2 2025 | система = K2 | тип = UI-стандарти | рік = 2025 }}  &amp;#039;&amp;#039;&amp;#039;Стандарти UI K2 2025&amp;#039;&amp;#039;&amp;#039; — документ, який описує єдині підходи до реалізації дизайнів, контролів, компонентів та програмної частини у проектах K2.  __TOC__  == Мета ==  Цей док...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Картка документації K2&lt;br /&gt;
| назва = Стандарти UI K2 2025&lt;br /&gt;
| система = K2&lt;br /&gt;
| тип = UI-стандарти&lt;br /&gt;
| рік = 2025&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стандарти UI K2 2025&#039;&#039;&#039; — документ, який описує єдині підходи до реалізації дизайнів, контролів, компонентів та програмної частини у проектах K2.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Мета ==&lt;br /&gt;
&lt;br /&gt;
Цей документ призначений для того, щоб різні співробітники і партнери компанії К2 розмовляли одне з одним однаковою мовою, коли йде реалізація дизайнів, контролів, програмної частини у різних проектах.&lt;br /&gt;
&lt;br /&gt;
Веб-проекти відрізняються від звичайних проектів тим, що майже завжди адаптуються під дизайн, необхідний клієнту. Тобто, зовнішній вигляд компоненту може змінюватись в залежності від потреб сайту, при цьому, компонента не повинна переписуватись і повинна працювати на одній і тій же програмній реалізації.&lt;br /&gt;
&lt;br /&gt;
Компоненти повинні з самого початку передбачати свою кастомізацію під певний дизайн.&lt;br /&gt;
&lt;br /&gt;
Увага: різні компоненти можуть конфліктувати одне з одним. Тому дуже важливо правильно підбирати контроли, щоб не конфліктували друг з другом.&lt;br /&gt;
&lt;br /&gt;
* P.S. Дуже стара версія стандартів (10-20 річної давнини): https://docs.google.com/document/d/1LjNHDyISGVkk7AnhXfWnTL9xChJqzKHchfTcVrTYWk8/edit&lt;br /&gt;
&lt;br /&gt;
== Карти ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_01.png|міні|центр|Ілюстрація до розділу «Карти»]]&lt;br /&gt;
&lt;br /&gt;
=== OpenStreet ===&lt;br /&gt;
&lt;br /&gt;
* https://tomickigrzegorz.github.io/leaflet-examples/#10.matching-all-markers-to-the-map-view&lt;br /&gt;
&lt;br /&gt;
* https://leafletjs.com/&lt;br /&gt;
&lt;br /&gt;
=== Карти 3D ===&lt;br /&gt;
&lt;br /&gt;
* https://mapplic.com/maps/apartment&lt;br /&gt;
&lt;br /&gt;
== Інструментарій ==&lt;br /&gt;
&lt;br /&gt;
SQL Power Architech - моделювання структури бази даних:&lt;br /&gt;
&lt;br /&gt;
* https://bestofbi.com/architect-download/&lt;br /&gt;
&lt;br /&gt;
DBAver - редактор бази даних&lt;br /&gt;
&lt;br /&gt;
* https://dbeaver.com/download/&lt;br /&gt;
&lt;br /&gt;
* Редактор структури бази даних (для можливого використання редактора): https://www.drawdb.app/editor&lt;br /&gt;
&lt;br /&gt;
== Шаблони ==&lt;br /&gt;
&lt;br /&gt;
Багато прикладів роботи компонентів та їх поводження можна побачити в різних шаблонах.&lt;br /&gt;
&lt;br /&gt;
* https://adminlte.io/themes/AdminLTE/index2.html#&lt;br /&gt;
&lt;br /&gt;
* https://appstack.bootlab.io/dashboard-default.html&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=88616&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=28117&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/product/keen-the-ultimate-bootstrap-admin-theme/&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=5824&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=1666&lt;br /&gt;
&lt;br /&gt;
* https://themes.getbootstrap.com/preview/?theme_id=21888&lt;br /&gt;
&lt;br /&gt;
== Google-теми ==&lt;br /&gt;
&lt;br /&gt;
* https://themewagon.com/themes/tailadmin/&lt;br /&gt;
&lt;br /&gt;
* https://startbootstrap.com/previews/material-admin-pro&lt;br /&gt;
&lt;br /&gt;
* https://startbootstrap.com/previews/sb-admin-pro-angular&lt;br /&gt;
&lt;br /&gt;
== Грід PHP Grid ==&lt;br /&gt;
&lt;br /&gt;
* https://www.gridphp.com/demo-center/&lt;br /&gt;
&lt;br /&gt;
== AG-Grid ==&lt;br /&gt;
&lt;br /&gt;
* https://www.ag-grid.com/example/&lt;br /&gt;
&lt;br /&gt;
== Telerik ==&lt;br /&gt;
&lt;br /&gt;
* https://www.telerik.com/&lt;br /&gt;
&lt;br /&gt;
* https://www.telerik.com/support/demos&lt;br /&gt;
&lt;br /&gt;
== Report ==&lt;br /&gt;
&lt;br /&gt;
* Stimul Report: https://demo.stimulsoft.com/#Net/BusinessInvoice&lt;br /&gt;
&lt;br /&gt;
== Набори прикладів різних UI компонентів ==&lt;br /&gt;
&lt;br /&gt;
В наборах ви можете побачити багато різних компонентів. Якісь компоненти ми можемо не описати в цьому документі, але потрібно бачити їх можливості і при необхідності - використовувати.&lt;br /&gt;
&lt;br /&gt;
* Syncfusion: https://ej2.syncfusion.com/vue/documentation/toolbar/responsive-mode&lt;br /&gt;
&lt;br /&gt;
* jQWidgets: https://www.jqwidgets.com/jquery-widgets-demo/&lt;br /&gt;
&lt;br /&gt;
* DHX (рекомендовано до використання): https://snippet.dhtmlx.com/i7cfddkl&lt;br /&gt;
&lt;br /&gt;
* Різні UI-компоненти Telerik (більше під .Net): https://demos.telerik.com/kendo-ui/&lt;br /&gt;
&lt;br /&gt;
* DevExpress (більше .Net): https://www.devexpress.com/support/demos/#&lt;br /&gt;
&lt;br /&gt;
== VueRibbon: https://www.vueribbon.com/home ==&lt;br /&gt;
&lt;br /&gt;
* MetroUI: https://korzh.com/metroui#licensing&lt;br /&gt;
&lt;br /&gt;
* https://themes.org.ua/pandora/index.html#forms-extended&lt;br /&gt;
&lt;br /&gt;
* https://metroui.org.ua/ribbon-menu.html&lt;br /&gt;
&lt;br /&gt;
== Інструменти протопіювання дизайну ==&lt;br /&gt;
&lt;br /&gt;
За допомогою цих інструментів ви можете зробити схему елементів дизайну.&lt;br /&gt;
&lt;br /&gt;
Microsoft Visio - графічний редактор для ділової графіки. Дозволяє створити схеми користувацького інтерфейсу та ділову графіку для проекту.&lt;br /&gt;
&lt;br /&gt;
* https://wireframe.cc&lt;br /&gt;
&lt;br /&gt;
== Моделювання структури бази даних ==&lt;br /&gt;
&lt;br /&gt;
* https://bestofbi.com/products/sql-power-architect-data-modeling/ - SQL Power Architech.&lt;br /&gt;
&lt;br /&gt;
== Види компонентів ==&lt;br /&gt;
&lt;br /&gt;
== Меню ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_02.png|міні|центр|Ілюстрація до розділу «Меню»]]&lt;br /&gt;
&lt;br /&gt;
Меню можуть бути: верхнє, нижнє, бокове (справа, або зліва), контекстне та інше.&lt;br /&gt;
&lt;br /&gt;
Контекстне меню - з’являється тоді, коли ми клацаємо на елементі лівою клавішею миші. Можливі і інші варіанти визову контекстного меню.&lt;br /&gt;
&lt;br /&gt;
Меню можуть мати багато рівнів. Тому, повинно бути розуміння скільки рівнів меню передбачає і як поводяться різні рівні меню.&lt;br /&gt;
&lt;br /&gt;
Останнім часом для меню з великою кількістю пунктів стали передбачати полосу пошуку елемента меню по назві, або ключовому слову.&lt;br /&gt;
&lt;br /&gt;
* Приклади: https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxmenu/index.htm#demos/jqxmenu/defaultfunctionality.htm&lt;br /&gt;
&lt;br /&gt;
* https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxmenu/index.htm#demos/jqxmenu/minimized.htm&lt;br /&gt;
&lt;br /&gt;
=== Контектне меню ===&lt;br /&gt;
&lt;br /&gt;
* https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxmenu/index.htm#demos/jqxmenu/contextmenu.htm&lt;br /&gt;
&lt;br /&gt;
== Таймлайн ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_03.png|міні|центр|Ілюстрація до розділу «Таймлайн»]]&lt;br /&gt;
&lt;br /&gt;
За допомогою Таймлайну можна показати красиво розвиток в часі дій.&lt;br /&gt;
&lt;br /&gt;
Приклад:&lt;br /&gt;
&lt;br /&gt;
* https://adminlte.io/themes/AdminLTE/pages/UI/timeline.html&lt;br /&gt;
&lt;br /&gt;
== Тулбари ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_04.png|міні|центр|Ілюстрація до розділу «Тулбари»]]&lt;br /&gt;
&lt;br /&gt;
Панель інструментів призначена для вибору команд.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxtoolbar/index.htm#demos/jqxtoolbar/defaultfunctionality.htm&lt;br /&gt;
&lt;br /&gt;
== Закладки (TabStrip) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_05.png|міні|центр|Ілюстрація до розділу «Закладки (TabStrip)»]]&lt;br /&gt;
&lt;br /&gt;
Дозволяють розташувати інформацію по різним сторінкам. Розподіляючи інформацію по смислу.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://demos.telerik.com/kendo-ui/tabstrip/tab-position&lt;br /&gt;
&lt;br /&gt;
== Ribbon-інтерфейс ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_06.png|міні|центр|Ілюстрація до розділу «Ribbon-інтерфейс»]]&lt;br /&gt;
&lt;br /&gt;
Це інтерфейс в стилі Ms Office 2013.&lt;br /&gt;
&lt;br /&gt;
== Приклади: https://snippet.dhtmlx.com/9ckg47ro?text=Ribbon ==&lt;br /&gt;
&lt;br /&gt;
* https://www.vueribbon.com/home&lt;br /&gt;
&lt;br /&gt;
== Таблиці (гриди) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_07.png|міні|центр|Ілюстрація до розділу «Таблиці (гриди)»]]&lt;br /&gt;
&lt;br /&gt;
За допомогою гридів автоматизуються значні частини табличних даних.&lt;br /&gt;
&lt;br /&gt;
Ми використовуємо в своїй практиці PHPGrid та AG-Grid.&lt;br /&gt;
&lt;br /&gt;
Приклади роботи та функціоналу PHPGrid:&lt;br /&gt;
&lt;br /&gt;
* https://www.gridphp.com/demo-center/&lt;br /&gt;
&lt;br /&gt;
Приклади AG-Grid:&lt;br /&gt;
&lt;br /&gt;
* https://www.ag-grid.com/example/&lt;br /&gt;
&lt;br /&gt;
=== Master-Detail ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_08.png|міні|центр|Ілюстрація до розділу «Master-Detail»]]&lt;br /&gt;
&lt;br /&gt;
Це можливість показати співвідношення таблиць один до багатьох:&lt;br /&gt;
&lt;br /&gt;
Приклад:&lt;br /&gt;
&lt;br /&gt;
* https://www.gridphp.com/demo-center/&lt;br /&gt;
&lt;br /&gt;
=== Під-гридом Master-Detail ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_09.png|міні|центр|Ілюстрація до розділу «Під-гридом Master-Detail»]]&lt;br /&gt;
&lt;br /&gt;
=== Multy-грід (Tab-грід) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_10.png|міні|центр|Ілюстрація до розділу «Multy-грід (Tab-грід)»]]&lt;br /&gt;
&lt;br /&gt;
== Кнопки ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_11.png|міні|центр|Ілюстрація до розділу «Кнопки»]]&lt;br /&gt;
&lt;br /&gt;
Приклад зовнішнього вигляду кнопок:&lt;br /&gt;
&lt;br /&gt;
* https://adminlte.io/themes/AdminLTE/pages/UI/buttons.html&lt;br /&gt;
&lt;br /&gt;
== Кнопка може мати список (меню) ==&lt;br /&gt;
&lt;br /&gt;
== Кнопки можуть мати картинку на підпис ==&lt;br /&gt;
&lt;br /&gt;
Кнопки можуть розміщуватись не тільки горизонтально, але й вертикально:&lt;br /&gt;
&lt;br /&gt;
== Спліттери (Splitter) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_12.png|міні|центр|Ілюстрація до розділу «Спліттери (Splitter)»]]&lt;br /&gt;
&lt;br /&gt;
Призначення спліттерів - рухати області-контейнери між собою. Таким чином, дозволяючи користувачу збільшити, або зменшити якісь частини інтерфейсу.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxsplitter/index.htm#demos/jqxsplitter/defaultfunctionality.htm&lt;br /&gt;
&lt;br /&gt;
== Карти ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_13.png|міні|центр|Ілюстрація до розділу «Карти»]]&lt;br /&gt;
&lt;br /&gt;
== Прогрес-бари ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_14.png|міні|центр|Ілюстрація до розділу «Прогрес-бари»]]&lt;br /&gt;
&lt;br /&gt;
== Слайдери ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_15.png|міні|центр|Ілюстрація до розділу «Слайдери»]]&lt;br /&gt;
&lt;br /&gt;
За допомогою слайдеру можна вказувати диапазони зміни даних.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://adminlte.io/themes/AdminLTE/pages/UI/sliders.html&lt;br /&gt;
&lt;br /&gt;
== Звіти (Reports) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_16.png|міні|центр|Ілюстрація до розділу «Звіти (Reports)»]]&lt;br /&gt;
&lt;br /&gt;
Звіти - це різновид інформації, яка підготовується для друку.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://demo.stimulsoft.com/#Net/Order&lt;br /&gt;
&lt;br /&gt;
== PivotGrid (OLAP), BI ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_17.png|міні|центр|Ілюстрація до розділу «PivotGrid (OLAP), BI»]]&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://demo.stimulsoft.com/#Net/DashboardInsuranceSales2014-2022&lt;br /&gt;
&lt;br /&gt;
== Вікна ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_18.png|міні|центр|Ілюстрація до розділу «Вікна»]]&lt;br /&gt;
&lt;br /&gt;
Модальне вікно - це вікно, яке виринає та не дає переключитись на інші дії, поки не даш відповідь, яке задає модальне вікно.&lt;br /&gt;
&lt;br /&gt;
* Приклад модальних вікон: https://adminlte.io/themes/AdminLTE/pages/UI/modals.html&lt;br /&gt;
&lt;br /&gt;
Технічно, для вікон рекомендується займати максимальний простір екрану, який має сенс для певної здачі. Тому має сенс мати змогу змінити розмір вікна, розширити його.&lt;br /&gt;
&lt;br /&gt;
Елементи вікна повинні теж позіціонуватись так, щоб займати весь простір та легко читатись.&lt;br /&gt;
&lt;br /&gt;
== Suite (комплект) ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:K2_UI_Standards_2025_19.png|міні|центр|Ілюстрація до розділу «Suite (комплект)»]]&lt;br /&gt;
&lt;br /&gt;
Це стилистично росташований комплекс компонент.&lt;br /&gt;
&lt;br /&gt;
* Приклад: https://snippet.dhtmlx.com/85fbitnu?mode=wide&lt;br /&gt;
&lt;br /&gt;
== Додаткові ілюстрації ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
K2_UI_Standards_2025_20.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_21.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_22.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_23.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_24.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_25.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_26.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_27.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_28.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_29.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_30.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_31.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_32.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_33.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_34.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_35.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_36.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_37.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_38.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_39.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_40.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_41.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_42.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_43.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_44.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_45.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_46.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_47.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_48.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_49.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_50.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_51.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_52.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_53.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_54.png|Ілюстрація UI K2&lt;br /&gt;
K2_UI_Standards_2025_55.png|Ілюстрація UI K2&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Див. також ==&lt;br /&gt;
&lt;br /&gt;
* [[K2 ERP]]&lt;br /&gt;
* [[K2 Cloud ERP]]&lt;br /&gt;
* [[UI]]&lt;br /&gt;
* [[UX]]&lt;br /&gt;
* [[Адміністративна панель]]&lt;br /&gt;
* [[Таблиці]]&lt;br /&gt;
* [[Грід]]&lt;br /&gt;
&lt;br /&gt;
[[Категорія:K2 ERP]]&lt;br /&gt;
[[Категорія:UI]]&lt;br /&gt;
[[Категорія:Стандарти K2]]&lt;br /&gt;
[[Категорія:Документація K2]]&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_55.png&amp;diff=118</id>
		<title>Файл:K2 UI Standards 2025 55.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_55.png&amp;diff=118"/>
		<updated>2026-04-28T21:07:44Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_54.png&amp;diff=117</id>
		<title>Файл:K2 UI Standards 2025 54.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_54.png&amp;diff=117"/>
		<updated>2026-04-28T21:07:42Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_53.png&amp;diff=116</id>
		<title>Файл:K2 UI Standards 2025 53.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_53.png&amp;diff=116"/>
		<updated>2026-04-28T21:07:39Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_52.png&amp;diff=115</id>
		<title>Файл:K2 UI Standards 2025 52.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_52.png&amp;diff=115"/>
		<updated>2026-04-28T21:07:36Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_51.png&amp;diff=114</id>
		<title>Файл:K2 UI Standards 2025 51.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_51.png&amp;diff=114"/>
		<updated>2026-04-28T21:07:34Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_50.png&amp;diff=113</id>
		<title>Файл:K2 UI Standards 2025 50.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_50.png&amp;diff=113"/>
		<updated>2026-04-28T21:07:31Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_49.png&amp;diff=112</id>
		<title>Файл:K2 UI Standards 2025 49.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_49.png&amp;diff=112"/>
		<updated>2026-04-28T21:07:29Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_48.png&amp;diff=111</id>
		<title>Файл:K2 UI Standards 2025 48.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_48.png&amp;diff=111"/>
		<updated>2026-04-28T21:07:25Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_47.png&amp;diff=110</id>
		<title>Файл:K2 UI Standards 2025 47.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_47.png&amp;diff=110"/>
		<updated>2026-04-28T21:07:22Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_46.png&amp;diff=109</id>
		<title>Файл:K2 UI Standards 2025 46.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_46.png&amp;diff=109"/>
		<updated>2026-04-28T21:07:21Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_45.png&amp;diff=108</id>
		<title>Файл:K2 UI Standards 2025 45.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_45.png&amp;diff=108"/>
		<updated>2026-04-28T21:07:18Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_44.png&amp;diff=107</id>
		<title>Файл:K2 UI Standards 2025 44.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_44.png&amp;diff=107"/>
		<updated>2026-04-28T21:07:15Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_43.png&amp;diff=106</id>
		<title>Файл:K2 UI Standards 2025 43.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_43.png&amp;diff=106"/>
		<updated>2026-04-28T21:07:13Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_42.png&amp;diff=105</id>
		<title>Файл:K2 UI Standards 2025 42.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_42.png&amp;diff=105"/>
		<updated>2026-04-28T21:07:12Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_41.png&amp;diff=104</id>
		<title>Файл:K2 UI Standards 2025 41.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_41.png&amp;diff=104"/>
		<updated>2026-04-28T21:07:11Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
	<entry>
		<id>https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_40.png&amp;diff=103</id>
		<title>Файл:K2 UI Standards 2025 40.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.erp.kyiv.ua/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:K2_UI_Standards_2025_40.png&amp;diff=103"/>
		<updated>2026-04-28T21:07:08Z</updated>

		<summary type="html">&lt;p&gt;R: Файл завантажений з MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Файл завантажений з MsUpload&lt;/div&gt;</summary>
		<author><name>R</name></author>
	</entry>
</feed>