Регістри в K2 ERP: відмінності між версіями
R (обговорення | внесок) Немає опису редагування |
R (обговорення | внесок) Немає опису редагування |
||
| Рядок 66: | Рядок 66: | ||
</pre> | </pre> | ||
=== Вимоги до версії | === Вимоги до версії === | ||
{{Note|'''Мінімальна версія — 1.0.0''' (реліз від 15.03.2026). Саме в ній додано <code>$wgDiagramsDefaultFormat</code>, без якого документ рендериться в PNG і ER-діаграми розділу 9 стають нечитабельними. Автор супроводжує підняття мажорної версії до 1 формулюванням, що проєкт вийшов на стабільність.}} | {{Note|'''Мінімальна версія — 1.0.0''' (реліз від 15.03.2026). Саме в ній додано <code>$wgDiagramsDefaultFormat</code>, без якого документ рендериться в PNG і ER-діаграми розділу 9 стають нечитабельними. Автор супроводжує підняття мажорної версії до 1 формулюванням, що проєкт вийшов на стабільність.}} | ||
{{Note|'''Інфобокс на mediawiki.org станом на дату складання ТЗ застарілий''' — показує версію 0.10.0 (2022) і сумісність «MediaWiki ≤ 1.39», тоді як у репозиторії 27 релізів і остання — 1.0.0 від 15.03.2026. '''Джерело істини — GitHub''' (<nowiki>https://github.com/samwilson/diagrams-extension/releases</nowiki>), а не інфобокс вікі-сторінки | {{Note|'''Інфобокс на mediawiki.org станом на дату складання ТЗ застарілий''' — показує версію 0.10.0 (2022) і сумісність «MediaWiki ≤ 1.39», тоді як у репозиторії 27 релізів і остання — 1.0.0 від 15.03.2026. '''Джерело істини — GitHub''' (<nowiki>https://github.com/samwilson/diagrams-extension/releases</nowiki>), а не інфобокс вікі-сторінки.}} | ||
=== Кодування: обов'язкове налаштування === | |||
{{Note|'''Найчастіша поломка цього документа.''' Якщо кирилиця в діаграмах виводиться як <code>◆◆◆◆◆◆</code> (U+FFFD), проблема '''не в шрифтах''', а в кодуванні. Java до версії 18 бере <code>file.encoding</code> з локалі процесу. Якщо веб-сервер працює з <code>LANG=C</code> або без локалі, PlantUML читає вхід як US-ASCII, і '''кожен байт UTF-8 понад 127 перетворюється на окремий <code>�</code>'''.}} | |||
'''Як відрізнити дві різні проблеми:''' | |||
{| class="wikitable" | |||
! Симптом !! Діагноз !! Що робити | |||
|- | |||
| <code>����</code> — ромби зі знаком питання (U+FFFD). Кількість символів '''більша''' за кількість літер оригіналу: 1 кирилична літера → 2 ромби, стрілка <code>→</code> → 3 ромби || '''Кодування.''' Байти UTF-8 декодовані як ASCII/Latin-1 — по одному <code>�</code> на байт || Розділ нижче, п. «Виправлення» | |||
|- | |||
| <code>□□□□</code> — порожні прямокутники (tofu). Кількість '''збігається''' з кількістю літер || '''Шрифти.''' Кодування правильне, але у шрифті немає гліфів кирилиці || <code>apt install fonts-dejavu fonts-liberation</code>. У документі вже проставлено <code>skinparam defaultFontName "DejaVu Sans"</code> і <code>fontname="DejaVu Sans"</code> для GraphViz | |||
|- | |||
| <code>пÑивÑÑ</code> — «мохібейк» із латиниці з діакритикою || Подвійне перекодування UTF-8 ↔ Latin-1 || Перевірити <code>$wgDiagramsServiceUrl</code> — сервіс віддає не UTF-8 | |||
|} | |||
'''Діагностика (на сервері вікі):''' | |||
<syntaxhighlight lang="bash"> | |||
# 1. Що каже сам PlantUML про своє кодування | |||
java -jar /usr/share/plantuml/plantuml.jar -version | grep -i "Default Encoding" | |||
# Default Encoding: UTF-8 <- норма | |||
# Default Encoding: ANSI_X3.4-1968 <- ЦЕ ПРИЧИНА (це US-ASCII) | |||
# Default Encoding: ISO-8859-1 <- ЦЕ ПРИЧИНА | |||
# 2. Локаль процесу веб-сервера (а не вашого shell — вони різні!) | |||
sudo -u www-data env | grep -E 'LANG|LC_' | |||
# порожньо або LANG=C / LANG=POSIX -> причина | |||
# 3. Відтворення поза MediaWiki — ізолює проблему від вікі | |||
printf '@startuml | |||
A -> B : кирилиця та стрілка â | |||
@enduml | |||
' | java -jar /usr/share/plantuml/plantuml.jar -pipe -tsvg > /tmp/test.svg | |||
grep -c 'кирилиця' /tmp/test.svg # 1 = добре; 0 = поламано | |||
# 4. Чи є шрифти з кирилицею | |||
java -jar /usr/share/plantuml/plantuml.jar -printfonts | grep -i dejavu | |||
</syntaxhighlight> | |||
'''Виправлення''' (за спаданням надійності — досить одного, але п. 1–2 разом надійніші): | |||
<syntaxhighlight lang="php"> | |||
// LocalSettings.php | |||
// СПОСІБ 1 (рекомендований): задати кодування явно в команді PlantUML. | |||
// $wgDiagramsLocalCommands перевизначає команди локального рендерингу. | |||
$wgDiagramsLocalCommands = [ | |||
'plantuml' => '/usr/bin/java -Dfile.encoding=UTF-8 ' | |||
. '-jar /usr/share/plantuml/plantuml.jar -charset UTF-8', | |||
]; | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash"> | |||
# СПОСІБ 2: локаль процесу веб-сервера (systemd drop-in) | |||
# /etc/systemd/system/php8.2-fpm.service.d/locale.conf | |||
[Service] | |||
Environment=LANG=C.UTF-8 | |||
Environment=LC_ALL=C.UTF-8 | |||
# далі: systemctl daemon-reload && systemctl restart php8.2-fpm | |||
# СПОСІБ 3 (найчистіший): Java 18+. | |||
# JEP 400 зробив UTF-8 кодуванням за замовчуванням незалежно від локалі ОС — | |||
# проблема зникає структурно, без прапорців. | |||
java -version | |||
</syntaxhighlight> | |||
{{Note|Спосіб 3 усуває цілий клас проблем і не лише для PlantUML. Якщо на сервері вікі Java 17 або старіша — це найкраща інвестиція з трьох.}} | |||
=== Смоук-тест перед публікацією === | |||
Прогнати на цільовій вікі — по одному представнику кожного типу: | |||
{| class="wikitable" | {| class="wikitable" | ||
! # !! Що перевіряємо !! Де в документі !! Ознака успіху | ! # !! Що перевіряємо !! Де в документі !! Ознака успіху | ||
|- | |- | ||
| 1 || <code><nowiki><graphviz></nowiki></code> | | 1 || '''Кодування кирилиці''' || 9.1 (підписи зв'язків) || Читається «є регістром», а не <code>���</code>. '''Перевіряти першим''' — решта тестів без цього безглузді | ||
|- | |||
| 2 || Гліфи кирилиці у шрифті || 5.1, 6.1 || Немає <code>□□□</code> | |||
|- | |||
| 3 || <code><nowiki><graphviz></nowiki></code>: <code>rankdir</code>, <code>shape=record</code>, <code>cylinder</code> || 5.1, 6.1, 8.8, 9.5, Д.1, Д.8 || Діаграма рендериться, підписи не обрізані | |||
|- | |- | ||
| | | 4 || <code><nowiki><uml></nowiki></code> + <code>@startuml</code>, <code>entity</code>, <code>skinparam linetype ortho</code> || 9.1–9.4 || ER-модель із колонками та позначками PK/FK | ||
|- | |- | ||
| | | 5 || '''<code><nowiki><uml></nowiki></code> + <code>@startgantt</code>''' || '''7.5.1''' || Діаграма Ганта. '''Головний ризик:''' якщо розширення обгортає вміст у <code>@startuml</code> автоматично, <code>@startgantt</code> не спрацює | ||
|- | |- | ||
| | | 6 || <code>$wgDiagramsDefaultFormat = 'svg'</code> || будь-яка || У HTML сторінки <code><img src="…<b>.svg</b>"></code>, а не <code>.png</code> | ||
|- | |- | ||
| | | 7 || GraphViz присутній для PlantUML || 9.1–9.4 || Немає повідомлення «Dot executable does not exist». PlantUML використовує dot для розкладки — <code>plantuml</code> без <code>graphviz</code> зрендерить лише sequence-діаграми (7.1), а ER-моделі — ні | ||
|} | |} | ||
{{Note|'''Щодо п. | {{Note|'''Щодо п. 5.''' Документ використовує явні роздільники <code>@startuml…@enduml</code> / <code>@startgantt…@endgantt</code> всередині тегів. Це відповідає нормалізованій поведінці PlantUML: розробники вимагають <code>@startXYZ</code> усюди, зокрема з прапорцем <code>-pipe</code>, а можливість опускати роздільник збережена лише як застаріла опція для сумісності зі старими скриптами. Перевірити на живій вікі я не мав змоги — це єдине непідтверджене припущення розділу. Якщо <code>@startgantt</code> не відрендериться, замінити діаграму 7.5.1 на <code><nowiki><graphviz></nowiki></code> або повернути ASCII-схему з історії правок.}} | ||
=== Альтернативи та запасний варіант === | === Альтернативи та запасний варіант === | ||
| Рядок 338: | Рядок 413: | ||
rankdir=TB; | rankdir=TB; | ||
bgcolor="transparent"; | bgcolor="transparent"; | ||
node [shape=box, style="rounded,filled", fillcolor="#f5f5f5", fontname=" | node [shape=box, style="rounded,filled", fillcolor="#f5f5f5", fontname="DejaVu Sans", fontsize=10]; | ||
edge [fontname=" | edge [fontname="DejaVu Sans", fontsize=8]; | ||
R [label="РЕГІСТР\n(абстрактний об'єкт метаданих)", fillcolor="#dbe9ff"]; | R [label="РЕГІСТР\n(абстрактний об'єкт метаданих)", fillcolor="#dbe9ff"]; | ||
| Рядок 416: | Рядок 491: | ||
digraph ConfigTree { | digraph ConfigTree { | ||
rankdir=LR; bgcolor="transparent"; ranksep=0.35; nodesep=0.12; | rankdir=LR; bgcolor="transparent"; ranksep=0.35; nodesep=0.12; | ||
node [shape=box, style="filled,rounded", fontname=" | node [shape=box, style="filled,rounded", fontname="DejaVu Sans", fontsize=9, height=0.28]; | ||
edge [arrowhead=none, color="#9e9e9e"]; | edge [arrowhead=none, color="#9e9e9e"]; | ||
| Рядок 867: | Рядок 942: | ||
<uml> | <uml> | ||
@startuml | @startuml | ||
skinparam defaultFontName "DejaVu Sans" | |||
skinparam monochrome false | skinparam monochrome false | ||
skinparam shadowing false | skinparam shadowing false | ||
| Рядок 1036: | Рядок 1112: | ||
<uml> | <uml> | ||
@startgantt | @startgantt | ||
skinparam defaultFontName "DejaVu Sans" | |||
title Витіснення за періодом дії. Період реєстрації: січень 2026 | title Витіснення за періодом дії. Період реєстрації: січень 2026 | ||
caption Пріоритет витіснення: Лікарняний > Відпустка > Оклад | caption Пріоритет витіснення: Лікарняний > Відпустка > Оклад | ||
| Рядок 1819: | Рядок 1896: | ||
digraph Tables { | digraph Tables { | ||
rankdir=LR; bgcolor="transparent"; ranksep=0.6; nodesep=0.08; | rankdir=LR; bgcolor="transparent"; ranksep=0.6; nodesep=0.08; | ||
node [shape=box, style="filled,rounded", fontname=" | node [shape=box, style="filled,rounded", fontname="DejaVu Sans", fontsize=9, height=0.26]; | ||
edge [color="#9e9e9e", arrowhead=vee]; | edge [color="#9e9e9e", arrowhead=vee]; | ||
| Рядок 1870: | Рядок 1947: | ||
<uml> | <uml> | ||
@startuml | @startuml | ||
skinparam defaultFontName "DejaVu Sans" | |||
hide circle | hide circle | ||
skinparam linetype ortho | skinparam linetype ortho | ||
| Рядок 1978: | Рядок 2056: | ||
<uml> | <uml> | ||
@startuml | @startuml | ||
skinparam defaultFontName "DejaVu Sans" | |||
hide circle | hide circle | ||
skinparam linetype ortho | skinparam linetype ortho | ||
| Рядок 2086: | Рядок 2165: | ||
<uml> | <uml> | ||
@startuml | @startuml | ||
skinparam defaultFontName "DejaVu Sans" | |||
hide circle | hide circle | ||
skinparam linetype ortho | skinparam linetype ortho | ||
| Рядок 2202: | Рядок 2282: | ||
<uml> | <uml> | ||
@startuml | @startuml | ||
skinparam defaultFontName "DejaVu Sans" | |||
hide circle | hide circle | ||
skinparam linetype ortho | skinparam linetype ortho | ||
| Рядок 2304: | Рядок 2385: | ||
digraph ER { | digraph ER { | ||
rankdir=LR; bgcolor="transparent"; | rankdir=LR; bgcolor="transparent"; | ||
node [shape=record, fontname=" | node [shape=record, fontname="DejaVu Sans", fontsize=9, style=filled]; | ||
edge [fontname=" | edge [fontname="DejaVu Sans", fontsize=8]; | ||
MD [label="{md_register|id (PK)\lname\lkind\lperiodicity\lwrite_mode\l...}", fillcolor="#dbe9ff"]; | MD [label="{md_register|id (PK)\lname\lkind\lperiodicity\lwrite_mode\l...}", fillcolor="#dbe9ff"]; | ||
| Рядок 2933: | Рядок 3014: | ||
digraph Choose { | digraph Choose { | ||
rankdir=TB; bgcolor="transparent"; | rankdir=TB; bgcolor="transparent"; | ||
node [shape=box, style="rounded,filled", fontname=" | node [shape=box, style="rounded,filled", fontname="DejaVu Sans", fontsize=9]; | ||
edge [fontname=" | edge [fontname="DejaVu Sans", fontsize=8]; | ||
q1 [label="Що зберігаємо?", shape=diamond, fillcolor="#ffe0b2"]; | q1 [label="Що зберігаємо?", shape=diamond, fillcolor="#ffe0b2"]; | ||
| Рядок 3828: | Рядок 3909: | ||
digraph Posting { | digraph Posting { | ||
rankdir=LR; bgcolor="transparent"; | rankdir=LR; bgcolor="transparent"; | ||
node [shape=box, style="rounded,filled", fontname=" | node [shape=box, style="rounded,filled", fontname="DejaVu Sans", fontsize=9]; | ||
D [label="Документ\nВидаткова накладна №12\n05.07.2026", fillcolor="#fff8e1", shape=note]; | D [label="Документ\nВидаткова накладна №12\n05.07.2026", fillcolor="#fff8e1", shape=note]; | ||
| Рядок 3847: | Рядок 3928: | ||
label="ОДНА транзакція БД: усі 5 регістрів + підсумки + прапорець Проведений"; | label="ОДНА транзакція БД: усі 5 регістрів + підсумки + прапорець Проведений"; | ||
labelloc=b; fontname=" | labelloc=b; fontname="DejaVu Sans"; fontsize=10; | ||
} | } | ||
</graphviz> | </graphviz> | ||