Перейти до вмісту

Атестаційні завдання K2 ERP/WMS: відмінності між версіями

Матеріал з K2 ERP Wiki
Створена сторінка: {{Картка документації K2 | назва = Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та документообіг | система = K2 Cloud ERP | розділ = Оптова торгівля | тип = Атестаційне завдання для розробника }} '''Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та докумен...
 
Немає опису редагування
 
(Не показані 2 проміжні версії цього користувача)
Рядок 1: Рядок 1:
{{Картка документації K2
{{DISPLAYTITLE:Атестаційні завдання K2 ERP/WMS}}
| назва = Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та документообіг
| система = K2 Cloud ERP
| розділ = Оптова торгівля
| тип = Атестаційне завдання для розробника
}}


'''Атестаційне завдання K2 Cloud ERP — Оптова торгівля, FIFO та документообіг''' — практична задача для перевірки навичок розробника у побудові веб-рішення для обліку закупівель, продажів, послуг, партійного обліку, списання собівартості за FIFO та формування звітів.
'''Атестаційне завдання K2 ERP — WMS, оптова торгівля, FIFO та документообіг''' — це практична задача для перевірки навичок розробника або впроваджувача [[K2 ERP]] у побудові веб-рішення для складського обліку, закупівель, продажів, послуг, партійного обліку, списання собівартості за методом FIFO та формування звітів.
 
Завдання імітує роботу компанії, яка займається оптовою торгівлею: отримує товари від постачальників, продає їх клієнтам, надає додаткові послуги, формує документи, контролює залишки та аналізує прибуток.
 
<div style="border:3px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;">
'''Коротко.''' У межах завдання потрібно реалізувати повний ланцюжок складського й торгового документообігу: прибуткова накладна → замовлення → рахунок-фактура → видаткова накладна → податкова накладна, з контролем залишків і списанням собівартості за FIFO.
</div>


__TOC__
__TOC__


== Текст задачі ==
== Назва завдання ==
 
'''Оптова торгівля, WMS, FIFO та документообіг'''.
 
== Мета завдання ==
 
Мета завдання — перевірити здатність спеціаліста спроєктувати та реалізувати веб-рішення для обліку оптової торгівлі в K2 ERP.
 
У результаті має бути створене рішення, яке дозволяє:


Компанія займається оптовою торгівлею. Надходження товарів відображається документом '''«Прибуткова накладна»''', продаж — документом '''«Видаткова накладна»'''. Крім продажу товару можуть надаватися додаткові послуги, наприклад доставка. І послуги, і товари зазначаються в одній табличній частині.
* оформлювати надходження товарів;
* оформлювати замовлення клієнтів;
* створювати рахунки-фактури;
* створювати видаткові накладні;
* створювати податкові накладні;
* обліковувати товари та послуги в одній табличній частині;
* контролювати залишки перед продажем;
* забороняти проведення документа при нестачі товару;
* списувати собівартість за партіями методом FIFO;
* формувати звіти по продажах, прибутку та залишках.


Перед продажем компанія спочатку створює документ '''«Замовлення»'''. На основі документа '''«Замовлення»''' створюється '''«Рахунок-фактура»''', коли йде підтвердження замовлення і клієнт просить безготівковий рахунок.
<div style="border:3px solid #2e7d32; background:#e8f5e9; padding:14px; margin:16px 0;">
'''Головний принцип.''' WMS-завдання перевіряє не лише вміння зробити форми документів, а й розуміння руху товарів: що надійшло, що продано, з якої партії списано, яка собівартість і який залишок доступний на дату.
</div>


З документа '''«Рахунок-фактура»''' створюється документ '''«Видаткова накладна»'''. На основі видаткової накладної створюється '''«Податкова накладна»'''.
== Бізнес-сценарій ==


При проведенні видаткової накладної, якщо товару не вистачає, система повинна показувати попередження із зазначенням кількості нестачі та не дозволяти проводити документ.
Компанія займається оптовою торгівлею.


Списання собівартості має бути організоване за партіями за методом '''FIFO'''. Вважається, що документи заднім числом не запроваджуються, але старі документи можуть неоперативно переводитися.
Надходження товарів від постачальників оформлюється документом '''«Прибуткова накладна»'''. Продаж товарів клієнтам оформлюється документом '''«Видаткова накладна»'''.


Необхідно побудувати звіти:
Окрім продажу товарів, компанія може надавати додаткові послуги, наприклад доставку. Товари й послуги мають зазначатися в одній табличній частині документа, але облікова логіка для них різна: товари впливають на складські залишки, а послуги не повинні списуватися зі складу як товар.


* продаж товарів за період;
Перед продажем клієнту спочатку створюється документ '''«Замовлення»'''. На основі замовлення формується '''«Рахунок-фактура»''', коли клієнт підтверджує замовлення і просить безготівковий рахунок. На основі рахунку-фактури створюється '''«Видаткова накладна»'''. На основі видаткової накладної створюється '''«Податкова накладна»'''.
* прибутки за період;
* залишки товару на зазначену дату.


== Документообіг ==
== Документообіг ==
Рядок 37: Рядок 55:
# '''Податкова накладна'''.
# '''Податкова накладна'''.


Документи надходження оформлюються через '''прибуткову накладну'''. Документи продажу оформлюються через '''видаткову накладну'''.
Окремо оформлюється надходження товарів:
 
# '''Прибуткова накладна'''.
 
<div style="border:2px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;">
'''Логіка процесу.''' Прибуткова накладна збільшує залишки товарів. Видаткова накладна зменшує залишки товарів і списує собівартість за FIFO. Замовлення та рахунок-фактура готують продаж, але самі по собі не повинні списувати товар зі складу.
</div>
 
== Основні документи ==
 
{| class="wikitable" style="width:100%;"
! Документ
! Призначення
! Вплив на склад
|-
| '''Прибуткова накладна'''
| Фіксує надходження товарів і послуг
| Збільшує залишки товарів
|-
| '''Замовлення'''
| Фіксує намір клієнта купити товари або послуги
| Не списує товар
|-
| '''Рахунок-фактура'''
| Формує рахунок для оплати клієнтом
| Не списує товар
|-
| '''Видаткова накладна'''
| Оформлює продаж товарів і послуг
| Списує товари зі складу
|-
| '''Податкова накладна'''
| Формує податковий документ на основі реалізації
| Не змінює складські залишки напряму
|}
 
== Прибуткова накладна ==
 
Прибуткова накладна оформлює надходження товарів і послуг від постачальника.
 
Зазвичай вона має реєстр документів, у якому можна переглядати створені документи, шукати потрібну накладну, відкривати її та створювати нову.
 
=== Реєстр прибуткових накладних ===
 
Реєстр прибуткових накладних має дозволяти:
 
* переглядати список документів;
* шукати документи;
* відкривати існуючі документи;
* створювати нову прибуткову накладну;
* фільтрувати документи за датою, постачальником і статусом.


== Виконання задачі ==
=== Форма прибуткової накладної ===


# Побудувати структуру бази даних у графічному вигляді та продемонструвати її.
Форма прибуткової накладної має містити шапку документа й табличну частину.
# На основі графічної структури бази даних створити SQL для створення таблиць.
# Для вирішення задачі допускаються такі бази даних:
#* MySQL;
#* PostgreSQL;
#* SQLite.
# Веб-рішення має бути побудоване на фреймворку з відкритим вихідним кодом.
# При створенні сторінок документів усе має працювати без перезавантаження сторінок.
# Виконану роботу потрібно продемонструвати у вигляді веб-сторінки, доступної з інтернет-URL.
# При виконанні задачі потрібно зафіксувати час її виконання та повідомити його при здачі.
# При виконанні завдання потрібно використовувати об’єктно-орієнтований підхід.


== Пояснення до задачі ==
У шапці документа доцільно передбачити:


Пояснення нижче надане для розуміння того, які поля повинні бути у документах і яка має бути таблична частина. Усі форми повинні працювати без перезавантаження сторінки.
* номер;
* дату;
* постачальника;
* склад;
* статус;
* коментар.


=== Прибуткова накладна ===
У табличній частині мають бути товари й послуги.


Прибуток товарів та послуг оформлюється документом надходження товарів та послуг — '''прибутковою накладною'''.
=== Послуги в прибутковій накладній ===


Зазвичай це реєстр документів, у якому можна знайти раніше створені документи, а також створити новий документ.
Послуги мають обліковуватися в тій самій табличній частині, що й товари.


==== Реєстр прибуткових накладних ====
При цьому потрібно розрізняти тип рядка:


Реєстр повинен дозволяти переглядати, шукати та відкривати створені прибуткові накладні.
* товар;
* послуга.


==== Форма прибуткової накладної ====
Товар збільшує складські залишки. Послуга не повинна створювати складський залишок, але може впливати на суму документа, витрати або собівартість залежно від логіки реалізації.


При відкритті або створенні прибуткової накладної документ повинен містити шапку документа та табличну частину.
=== Друкована форма прибуткової накладної ===


У табличній частині мають бути товари та послуги.
Прибуткова накладна повинна мати друковану форму.


==== Послуги в прибутковій накладній ====
У друкованій формі потрібно показати постачальника, дату, номер документа, склад, табличну частину, кількість, ціни, суми та підсумки.


Послуги мають обліковуватися в тій самій табличній частині, що і товари.
== Видаткова накладна ==


==== Друкована форма прибуткової накладної ====
Видаткова накладна оформлює продаж товарів і послуг клієнту.


Документ повинен мати друковану форму.
=== Реєстр видаткових накладних ===


=== Реалізація товарів та послуг: видаткова накладна ===
Реєстр видаткових накладних має дозволяти переглядати, шукати, відкривати та створювати документи реалізації.


Продаж товарів і послуг оформлюється документом '''«Видаткова накладна»'''.
У реєстрі бажано показувати номер, дату, клієнта, суму, статус і документ-підставу.


==== Реєстр видаткових накладних ====
=== Форма видаткової накладної ===


Реєстр документів повинен дозволяти переглядати, шукати, відкривати та створювати видаткові накладні.
Форма видаткової накладної має містити шапку документа та табличну частину.


==== Реалізація послуг ====
У шапці документа потрібно передбачити:


Послуги повинні додаватися у табличну частину документа разом з товарами.
* номер;
* дату;
* клієнта;
* склад;
* документ-підставу;
* статус;
* коментар.


==== Друкована форма видаткової накладної ====
У табличній частині повинні бути товари й послуги.


Видаткова накладна повинна мати друковану форму.
=== Реалізація послуг ===
 
Послуги повинні додаватися у табличну частину видаткової накладної разом із товарами.
 
Послуга може входити в суму документа, але не повинна зменшувати складські залишки як товар.


== Звіт «Залишки по складу» ==
=== Друкована форма видаткової накладної ===


Потрібно реалізувати звіт '''«Залишки по складу»'''.
Видаткова накладна повинна мати друковану форму.


Звіт повинен показувати залишки товарів на складі на зазначену дату.
У друкованій формі потрібно показати клієнта, дату, номер, склад, товари, послуги, кількість, ціни, суми та підсумки.


== Вимоги до вибору рядків у видатковій накладній ==
== Контроль залишків ==


Вибір рядків у видатковій накладній має відбуватися з поточних залишків.
При проведенні видаткової накладної система має перевіряти наявність товарів на складі.


Якщо товару недостатньо, система повинна:
Якщо товару не вистачає, система повинна:


* показати попередження;
* показати попередження;
* вказати кількість нестачі;
* вказати кількість нестачі;
* заборонити проведення документа.
* не дозволити провести документ.


== FIFO ==
Наприклад, якщо користувач продає 10 одиниць товару, а на складі є лише 7, система повинна показати нестачу 3 одиниці й заблокувати проведення.
 
<div style="border:3px solid #b71c1c; background:#ffebee; padding:14px; margin:16px 0;">
'''Критично.''' Видаткова накладна не може бути проведена, якщо на складі недостатньо товару. Проведення “в мінус” у цьому завданні не допускається.
</div>


'''FIFO''' — метод списання, за яким фактично списується той товар, який першим надійшов.
== Вибір рядків у видатковій накладній ==


Посилання для довідки:
Вибір товарів у видатковій накладній має відбуватися з поточних залишків.


* https://uk.wikipedia.org/wiki/Алгоритм_заміщення_комірок_пам%27яті_FIFO
Користувач повинен бачити лише доступні товари або, принаймні, система повинна показувати фактичний залишок під час вибору товару.


У межах задачі FIFO використовується для списання собівартості товару за партіями.
Це зменшує ризик помилок і допомагає не створювати документи, які неможливо провести.


== Очікувані звіти ==
== FIFO ==


Необхідно побудувати такі звіти:
'''FIFO''' — це метод списання, за яким першим списується товар, що першим надійшов на склад.


=== Продаж товарів за період ===
У межах цього завдання FIFO використовується для списання собівартості товару за партіями.


Звіт має показувати реалізацію товарів за вибраний період.
Якщо на склад спочатку надійшло 5 одиниць товару по 100 грн, а потім ще 5 одиниць по 120 грн, то при продажу 6 одиниць собівартість має списуватися так:


=== Прибутки за період ===
* 5 одиниць × 100 грн;
* 1 одиниця × 120 грн.


Звіт має показувати прибуток за вибраний період з урахуванням собівартості, списаної за FIFO.
Таким чином, система має не просто зменшити загальний залишок, а правильно визначити, з яких партій списується товар і яка собівартість продажу.


=== Залишки товару на дату ===
<div style="border:2px solid #f57c00; background:#fff3e0; padding:14px; margin:16px 0;">
'''Важливо.''' Документи заднім числом у межах завдання не вводяться, але старі документи можуть неоперативно переводитися. Це потрібно враховувати при логіці проведення та FIFO.
</div>


Звіт має показувати залишки товару на зазначену дату.
== Партійний облік ==


== Цілі теста ==
Партійний облік потрібен для того, щоб система знала, з якого надходження списується товар.


* Побачити вміння будувати структуру бази даних.
Кожна прибуткова накладна має створювати партії товарів. Кожна видаткова накладна при проведенні повинна списувати товари з доступних партій за правилом FIFO.
* Побачити знання SQL та вміння роботи з базою даних.
* Побачити стиль написання програмного коду.
* Перевірити вміння використання веб-технологій для прикладних задач.
* Перевірити вміння використання об’єктно-орієнтованого програмування.
* Перевірити вміння використання AJAX у практичних завданнях.
* Перевірити вміння інтерпретації практичної задачі у веб-додаток.
* Перевірити вміння налаштувати веб-сервер для відображення проєкту у вебі.
* Побачити швидкість вирішення задач у вебі.


== Очікуваний результат ==
Мінімальні дані партії:


У результаті виконання атестаційного завдання має бути створене веб-рішення для оптової торгівлі, яке підтримує прибуткові накладні, замовлення, рахунки-фактури, видаткові накладні, податкові накладні, послуги в табличній частині, контроль залишків, списання собівартості за FIFO, друковані форми та звіти.
{| class="wikitable" style="width:100%;"
! Поле
! Опис
|-
| Товар
| Номенклатура, до якої належить партія
|-
| Склад
| Склад, на якому зберігається партія
|-
| Дата надходження
| Дата прибуткової накладної
|-
| Кількість початкова
| Скільки товару надійшло
|-
| Кількість залишку
| Скільки товару залишилося в партії
|-
| Собівартість
| Закупівельна ціна або облікова собівартість одиниці
|-
| Документ-підстава
| Прибуткова накладна, яка створила партію
|}


== Рекомендовані сутності бази даних ==
== Рекомендовані сутності бази даних ==
Рядок 173: Рядок 270:
* журнал змін документів.
* журнал змін документів.


== Критерії перевірки ==
== Вимоги до структури бази даних ==
 
Потрібно побудувати структуру бази даних у графічному вигляді та продемонструвати її.
 
На основі графічної структури потрібно створити SQL для створення таблиць.
 
Допускаються такі бази даних:
 
* MySQL;
* PostgreSQL;
* SQLite.
 
База даних повинна підтримувати документообіг, табличні частини документів, партійний облік, рухи товарів і рухи собівартості.
 
== Вимоги до веб-рішення ==
 
Веб-рішення має бути побудоване на фреймворку з відкритим вихідним кодом.
 
При створенні сторінок документів усе має працювати без повного перезавантаження сторінок.
 
Потрібно використовувати AJAX або аналогічний підхід для:
 
* створення документів;
* редагування документів;
* збереження рядків табличної частини;
* проведення документів;
* перевірки залишків;
* відображення попереджень.
 
Виконану роботу потрібно продемонструвати у вигляді веб-сторінки, доступної з інтернет-URL.
 
== Вимоги до програмної реалізації ==
 
Під час виконання завдання потрібно використовувати об’єктно-орієнтований підхід.
 
Код має бути структурованим, зрозумілим і придатним для підтримки.
 
Бажано розділити:
 
* моделі;
* контролери;
* сервіси проведення документів;
* сервіси розрахунку FIFO;
* сервіси звітів;
* шаблони друку;
* frontend-логіку;
* SQL або ORM-шар.
 
== Очікувані звіти ==
 
Необхідно побудувати три основні звіти.
 
== Звіт «Продаж товарів за період» ==
 
Звіт має показувати реалізацію товарів за вибраний період.
 
У звіті бажано передбачити:
 
* період;
* товар;
* клієнта;
* склад;
* кількість продажу;
* суму продажу;
* документ реалізації.
 
== Звіт «Прибутки за період» ==
 
Звіт має показувати прибуток за вибраний період з урахуванням собівартості, списаної за FIFO.
 
Мінімальна логіка:
 
<pre>
Прибуток = Сума продажу - Собівартість списання
</pre>
 
Звіт має показувати не лише виручку, а й собівартість та фінансовий результат.
 
== Звіт «Залишки товару на дату» ==
 
Звіт має показувати залишки товарів на складі на зазначену дату.
 
У звіті потрібно відображати:
 
* товар;
* склад;
* партію;
* кількість залишку;
* собівартість;
* суму залишку.
 
== Ілюстрації з документа ==
 
<gallery mode="packed" heights="180">
K2_Attestation_Wholesale_FIFO_01.png|Приблизний вигляд реєстру прибуткових накладних|посилання=Файл:K2_Attestation_Wholesale_FIFO_01.png
K2_Attestation_Wholesale_FIFO_02.png|Форма прибуткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_02.png
K2_Attestation_Wholesale_FIFO_03.png|Послуги у прибутковій накладній|посилання=Файл:K2_Attestation_Wholesale_FIFO_03.png
K2_Attestation_Wholesale_FIFO_04.png|Друкована форма прибуткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_04.png
K2_Attestation_Wholesale_FIFO_05.png|Реєстр видаткових накладних|посилання=Файл:K2_Attestation_Wholesale_FIFO_05.png
K2_Attestation_Wholesale_FIFO_06.png|Реалізація послуг у видатковій накладній|посилання=Файл:K2_Attestation_Wholesale_FIFO_06.png
K2_Attestation_Wholesale_FIFO_07.png|Друкована форма видаткової накладної|посилання=Файл:K2_Attestation_Wholesale_FIFO_07.png
K2_Attestation_Wholesale_FIFO_08.png|Звіт «Залишки по складу»|посилання=Файл:K2_Attestation_Wholesale_FIFO_08.png
K2_Attestation_Wholesale_FIFO_09.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_09.png
K2_Attestation_Wholesale_FIFO_10.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_10.png
</gallery>
 
== Практичне завдання ==
 
У межах атестації потрібно продемонструвати робочий сценарій.
 
Мінімальний сценарій:
 
# створити товари, послуги, контрагентів і склад;
# оформити прибуткову накладну;
# провести прибуткову накладну;
# перевірити створення партій;
# створити замовлення клієнта;
# створити рахунок-фактуру на основі замовлення;
# створити видаткову накладну на основі рахунку-фактури;
# додати в табличну частину товари й послуги;
# провести видаткову накладну;
# перевірити списання товарів за FIFO;
# створити податкову накладну на основі видаткової;
# сформувати друковані форми;
# сформувати звіт продажів;
# сформувати звіт прибутку;
# сформувати звіт залишків на дату;
# продемонструвати попередження при нестачі товару.
 
== Цілі тесту ==
 
Атестаційне завдання має перевірити:
 
* вміння будувати структуру бази даних;
* знання SQL та вміння працювати з базою даних;
* стиль написання програмного коду;
* використання веб-технологій для прикладних задач;
* використання об’єктно-орієнтованого програмування;
* використання AJAX у практичних завданнях;
* інтерпретацію бізнес-задачі у веб-додаток;
* налаштування веб-сервера для демонстрації проєкту;
* швидкість вирішення задачі.
 
== Очікуваний результат ==
 
У результаті виконання атестаційного завдання має бути створене веб-рішення для оптової торгівлі.
 
Рішення має підтримувати прибуткові накладні, замовлення, рахунки-фактури, видаткові накладні, податкові накладні, послуги в табличній частині, контроль залишків, списання собівартості за FIFO, друковані форми та звіти.
 
Робота має бути продемонстрована через веб-сторінку, доступну з інтернет-URL. Час виконання потрібно зафіксувати та повідомити при здачі.
 
== Критерії оцінювання ==


{| class="wikitable"
{| class="wikitable" style="width:100%;"
! Напрям перевірки !! Що перевіряється
! Напрям
! Бали
! Що перевіряється
|-
| Структура бази даних
| 15
| Повнота моделі даних, наявність документів, рядків, партій, рухів, складів, контрагентів і зв’язків
|-
| SQL
| 10
| Коректність SQL-скриптів для MySQL, PostgreSQL або SQLite
|-
|-
| Структура БД || Повнота моделі даних, наявність партій, документів, рядків, залишків і рухів
| Документообіг
| 15
| Ланцюжок замовлення, рахунку-фактури, видаткової та податкової накладної
|-
|-
| SQL || Коректність SQL-скриптів для MySQL, PostgreSQL або SQLite
| Прибуткові та видаткові накладні
| 15
| Реєстри, форми, табличні частини, товари й послуги, друковані форми
|-
|-
| Веб-рішення || Робота сторінок без перезавантаження
| AJAX та web-інтерфейс
| 10
| Створення, редагування, збереження й проведення документів без перезавантаження сторінки
|-
|-
| AJAX || Створення, редагування, проведення документів через AJAX
| FIFO
| 15
| Коректне списання собівартості за партіями
|-
|-
| FIFO || Коректне списання собівартості за партіями
| Контроль залишків
| 10
| Попередження про нестачу та заборона проведення документа
|-
|-
| Контроль залишків || Заборона проведення при нестачі товару
| Звіти
| 10
| Продажі, прибутки, залишки на дату
|-
|-
| Звіти || Продажі, прибутки, залишки на дату
| ООП і якість коду
| 10
| Структура коду, читабельність, підтримуваність, поділ логіки
|-
|-
| ООП || Об’єктно-орієнтована структура коду
| Демонстрація
| 5
| Доступний веб-URL і зафіксований час виконання
|-
|-
| Демонстрація || Доступний веб-URL і зафіксований час виконання
! Разом
! 115
! Максимальна оцінка
|}
|}


== Ілюстрації з документа ==
== Шкала оцінювання ==
 
{| class="wikitable" style="width:100%;"
! Бали
! Рівень
! Опис
|-
| 100–115
| Відмінно
| Рішення повністю працює, FIFO реалізовано коректно, звіти відповідають рухам, код структурований
|-
| 85–99
| Добре
| Основна логіка працює, є незначні недоліки без критичного впливу на результат
|-
| 70–84
| Зараховано
| Базовий документообіг працює, але є помилки або неповна реалізація окремих частин
|-
| 0–69
| Не зараховано
| Відсутня критична логіка: FIFO, контроль залишків, проведення документів або звіти
|}
 
== Критичні помилки ==
 
Критичними помилками вважаються ситуації, коли:
 
* видаткова накладна проводиться при нестачі товару;
* FIFO не працює або списує собівартість неправильно;
* прибуткова накладна не створює партії;
* видаткова накладна не списує товар зі складу;
* послуги помилково списуються зі складу як товар;
* звіт залишків не відповідає проведеним документам;
* звіт прибутку не враховує собівартість;
* немає зв’язку між замовленням, рахунком-фактурою, видатковою та податковою накладною;
* документи неможливо створювати або редагувати без перезавантаження сторінки, якщо це було вимогою реалізації.
 
<div style="border:3px solid #b71c1c; background:#ffebee; padding:14px; margin:16px 0;">
'''Умова складання.''' Завдання не може бути зараховане, якщо система не контролює залишки або не списує собівартість товарів за FIFO.
</div>
 
== Коротко ==


<gallery mode="packed" heights="180">
{| class="wikitable" style="width:100%;"
K2_Attestation_Wholesale_FIFO_01.png|Приблизний вигляд реєстру прибуткових накладних
! Питання
K2_Attestation_Wholesale_FIFO_02.png|Форма прибуткової накладної
! Відповідь
K2_Attestation_Wholesale_FIFO_03.png|Послуги у прибутковій накладній
|-
K2_Attestation_Wholesale_FIFO_04.png|Друкована форма прибуткової накладної
| Що потрібно створити?
K2_Attestation_Wholesale_FIFO_05.png|Реєстр видаткових накладних
| Веб-рішення для оптової торгівлі та WMS-обліку
K2_Attestation_Wholesale_FIFO_06.png|Реалізація послуг у видатковій накладній
|-
K2_Attestation_Wholesale_FIFO_07.png|Друкована форма видаткової накладної
| Який основний документообіг?
K2_Attestation_Wholesale_FIFO_08.png|Звіт «Залишки по складу»
| Замовлення → рахунок-фактура → видаткова накладна → податкова накладна
K2_Attestation_Wholesale_FIFO_09.png|Ілюстрація до атестаційного завдання
|-
K2_Attestation_Wholesale_FIFO_10.png|Ілюстрація до атестаційного завдання
| Як оформлюється надходження?
</gallery>
| Прибутковою накладною
|-
| Як оформлюється продаж?
| Видатковою накладною
|-
| Чи можуть бути послуги в документі?
| Так, товари й послуги мають бути в одній табличній частині
|-
| Що має робити система при нестачі товару?
| Показати кількість нестачі й заборонити проведення документа
|-
| Як списується собівартість?
| За партіями методом FIFO
|-
| Які звіти потрібні?
| Продажі за період, прибутки за період, залишки товару на дату
|}


== Див. також ==
== Див. також ==


* [[K2 Cloud ERP]]
* [[K2 Cloud ERP|K2 ERP]]
* [[Атестаційні завдання K2 ERP]]
* [[Атестаційні завдання K2 ERP]]
* [[Оптова торгівля]]
* [[Оптова торгівля]]
Рядок 222: Рядок 556:
* [[Видаткова накладна]]
* [[Видаткова накладна]]
* [[Звіт залишків по складу]]
* [[Звіт залишків по складу]]
* [[WMS]]
* [[Партійний облік]]
* [[Рахунок-фактура]]
* [[Податкова накладна]]


[[Категорія:K2 ERP]]
[[Категорія:K2 ERP]]
[[Категорія:K2 Cloud ERP]]
[[Категорія:Атестаційні завдання K2]]
[[Категорія:Атестаційні завдання K2]]
[[Категорія:WMS]]
[[Категорія:Складський облік]]
[[Категорія:Оптова торгівля]]
[[Категорія:Оптова торгівля]]
[[Категорія:Складський облік]]
[[Категорія:FIFO]]
[[Категорія:Партійний облік]]
[[Категорія:Корпоративна Wiki]]

Поточна версія на 18:12, 1 травня 2026


Атестаційне завдання K2 ERP — WMS, оптова торгівля, FIFO та документообіг — це практична задача для перевірки навичок розробника або впроваджувача K2 ERP у побудові веб-рішення для складського обліку, закупівель, продажів, послуг, партійного обліку, списання собівартості за методом FIFO та формування звітів.

Завдання імітує роботу компанії, яка займається оптовою торгівлею: отримує товари від постачальників, продає їх клієнтам, надає додаткові послуги, формує документи, контролює залишки та аналізує прибуток.

Коротко. У межах завдання потрібно реалізувати повний ланцюжок складського й торгового документообігу: прибуткова накладна → замовлення → рахунок-фактура → видаткова накладна → податкова накладна, з контролем залишків і списанням собівартості за FIFO.

Назва завдання

Оптова торгівля, WMS, FIFO та документообіг.

Мета завдання

Мета завдання — перевірити здатність спеціаліста спроєктувати та реалізувати веб-рішення для обліку оптової торгівлі в K2 ERP.

У результаті має бути створене рішення, яке дозволяє:

  • оформлювати надходження товарів;
  • оформлювати замовлення клієнтів;
  • створювати рахунки-фактури;
  • створювати видаткові накладні;
  • створювати податкові накладні;
  • обліковувати товари та послуги в одній табличній частині;
  • контролювати залишки перед продажем;
  • забороняти проведення документа при нестачі товару;
  • списувати собівартість за партіями методом FIFO;
  • формувати звіти по продажах, прибутку та залишках.

Головний принцип. WMS-завдання перевіряє не лише вміння зробити форми документів, а й розуміння руху товарів: що надійшло, що продано, з якої партії списано, яка собівартість і який залишок доступний на дату.

Бізнес-сценарій

Компанія займається оптовою торгівлею.

Надходження товарів від постачальників оформлюється документом «Прибуткова накладна». Продаж товарів клієнтам оформлюється документом «Видаткова накладна».

Окрім продажу товарів, компанія може надавати додаткові послуги, наприклад доставку. Товари й послуги мають зазначатися в одній табличній частині документа, але облікова логіка для них різна: товари впливають на складські залишки, а послуги не повинні списуватися зі складу як товар.

Перед продажем клієнту спочатку створюється документ «Замовлення». На основі замовлення формується «Рахунок-фактура», коли клієнт підтверджує замовлення і просить безготівковий рахунок. На основі рахунку-фактури створюється «Видаткова накладна». На основі видаткової накладної створюється «Податкова накладна».

Документообіг

Основний ланцюжок документів:

  1. Замовлення;
  2. Рахунок-фактура;
  3. Видаткова накладна;
  4. Податкова накладна.

Окремо оформлюється надходження товарів:

  1. Прибуткова накладна.

Логіка процесу. Прибуткова накладна збільшує залишки товарів. Видаткова накладна зменшує залишки товарів і списує собівартість за FIFO. Замовлення та рахунок-фактура готують продаж, але самі по собі не повинні списувати товар зі складу.

Основні документи

Документ Призначення Вплив на склад
Прибуткова накладна Фіксує надходження товарів і послуг Збільшує залишки товарів
Замовлення Фіксує намір клієнта купити товари або послуги Не списує товар
Рахунок-фактура Формує рахунок для оплати клієнтом Не списує товар
Видаткова накладна Оформлює продаж товарів і послуг Списує товари зі складу
Податкова накладна Формує податковий документ на основі реалізації Не змінює складські залишки напряму

Прибуткова накладна

Прибуткова накладна оформлює надходження товарів і послуг від постачальника.

Зазвичай вона має реєстр документів, у якому можна переглядати створені документи, шукати потрібну накладну, відкривати її та створювати нову.

Реєстр прибуткових накладних

Реєстр прибуткових накладних має дозволяти:

  • переглядати список документів;
  • шукати документи;
  • відкривати існуючі документи;
  • створювати нову прибуткову накладну;
  • фільтрувати документи за датою, постачальником і статусом.

Форма прибуткової накладної

Форма прибуткової накладної має містити шапку документа й табличну частину.

У шапці документа доцільно передбачити:

  • номер;
  • дату;
  • постачальника;
  • склад;
  • статус;
  • коментар.

У табличній частині мають бути товари й послуги.

Послуги в прибутковій накладній

Послуги мають обліковуватися в тій самій табличній частині, що й товари.

При цьому потрібно розрізняти тип рядка:

  • товар;
  • послуга.

Товар збільшує складські залишки. Послуга не повинна створювати складський залишок, але може впливати на суму документа, витрати або собівартість залежно від логіки реалізації.

Друкована форма прибуткової накладної

Прибуткова накладна повинна мати друковану форму.

У друкованій формі потрібно показати постачальника, дату, номер документа, склад, табличну частину, кількість, ціни, суми та підсумки.

Видаткова накладна

Видаткова накладна оформлює продаж товарів і послуг клієнту.

Реєстр видаткових накладних

Реєстр видаткових накладних має дозволяти переглядати, шукати, відкривати та створювати документи реалізації.

У реєстрі бажано показувати номер, дату, клієнта, суму, статус і документ-підставу.

Форма видаткової накладної

Форма видаткової накладної має містити шапку документа та табличну частину.

У шапці документа потрібно передбачити:

  • номер;
  • дату;
  • клієнта;
  • склад;
  • документ-підставу;
  • статус;
  • коментар.

У табличній частині повинні бути товари й послуги.

Реалізація послуг

Послуги повинні додаватися у табличну частину видаткової накладної разом із товарами.

Послуга може входити в суму документа, але не повинна зменшувати складські залишки як товар.

Друкована форма видаткової накладної

Видаткова накладна повинна мати друковану форму.

У друкованій формі потрібно показати клієнта, дату, номер, склад, товари, послуги, кількість, ціни, суми та підсумки.

Контроль залишків

При проведенні видаткової накладної система має перевіряти наявність товарів на складі.

Якщо товару не вистачає, система повинна:

  • показати попередження;
  • вказати кількість нестачі;
  • не дозволити провести документ.

Наприклад, якщо користувач продає 10 одиниць товару, а на складі є лише 7, система повинна показати нестачу 3 одиниці й заблокувати проведення.

Критично. Видаткова накладна не може бути проведена, якщо на складі недостатньо товару. Проведення “в мінус” у цьому завданні не допускається.

Вибір рядків у видатковій накладній

Вибір товарів у видатковій накладній має відбуватися з поточних залишків.

Користувач повинен бачити лише доступні товари або, принаймні, система повинна показувати фактичний залишок під час вибору товару.

Це зменшує ризик помилок і допомагає не створювати документи, які неможливо провести.

FIFO

FIFO — це метод списання, за яким першим списується товар, що першим надійшов на склад.

У межах цього завдання FIFO використовується для списання собівартості товару за партіями.

Якщо на склад спочатку надійшло 5 одиниць товару по 100 грн, а потім ще 5 одиниць по 120 грн, то при продажу 6 одиниць собівартість має списуватися так:

  • 5 одиниць × 100 грн;
  • 1 одиниця × 120 грн.

Таким чином, система має не просто зменшити загальний залишок, а правильно визначити, з яких партій списується товар і яка собівартість продажу.

Важливо. Документи заднім числом у межах завдання не вводяться, але старі документи можуть неоперативно переводитися. Це потрібно враховувати при логіці проведення та FIFO.

Партійний облік

Партійний облік потрібен для того, щоб система знала, з якого надходження списується товар.

Кожна прибуткова накладна має створювати партії товарів. Кожна видаткова накладна при проведенні повинна списувати товари з доступних партій за правилом FIFO.

Мінімальні дані партії:

Поле Опис
Товар Номенклатура, до якої належить партія
Склад Склад, на якому зберігається партія
Дата надходження Дата прибуткової накладної
Кількість початкова Скільки товару надійшло
Кількість залишку Скільки товару залишилося в партії
Собівартість Закупівельна ціна або облікова собівартість одиниці
Документ-підстава Прибуткова накладна, яка створила партію

Рекомендовані сутності бази даних

Для реалізації задачі доцільно передбачити такі сутності:

  • товари;
  • послуги;
  • контрагенти;
  • склади;
  • документи;
  • рядки документів;
  • партії товарів;
  • рухи товарів;
  • рухи собівартості;
  • рахунки-фактури;
  • податкові накладні;
  • користувачі;
  • журнал змін документів.

Вимоги до структури бази даних

Потрібно побудувати структуру бази даних у графічному вигляді та продемонструвати її.

На основі графічної структури потрібно створити SQL для створення таблиць.

Допускаються такі бази даних:

  • MySQL;
  • PostgreSQL;
  • SQLite.

База даних повинна підтримувати документообіг, табличні частини документів, партійний облік, рухи товарів і рухи собівартості.

Вимоги до веб-рішення

Веб-рішення має бути побудоване на фреймворку з відкритим вихідним кодом.

При створенні сторінок документів усе має працювати без повного перезавантаження сторінок.

Потрібно використовувати AJAX або аналогічний підхід для:

  • створення документів;
  • редагування документів;
  • збереження рядків табличної частини;
  • проведення документів;
  • перевірки залишків;
  • відображення попереджень.

Виконану роботу потрібно продемонструвати у вигляді веб-сторінки, доступної з інтернет-URL.

Вимоги до програмної реалізації

Під час виконання завдання потрібно використовувати об’єктно-орієнтований підхід.

Код має бути структурованим, зрозумілим і придатним для підтримки.

Бажано розділити:

  • моделі;
  • контролери;
  • сервіси проведення документів;
  • сервіси розрахунку FIFO;
  • сервіси звітів;
  • шаблони друку;
  • frontend-логіку;
  • SQL або ORM-шар.

Очікувані звіти

Необхідно побудувати три основні звіти.

Звіт «Продаж товарів за період»

Звіт має показувати реалізацію товарів за вибраний період.

У звіті бажано передбачити:

  • період;
  • товар;
  • клієнта;
  • склад;
  • кількість продажу;
  • суму продажу;
  • документ реалізації.

Звіт «Прибутки за період»

Звіт має показувати прибуток за вибраний період з урахуванням собівартості, списаної за FIFO.

Мінімальна логіка:

Прибуток = Сума продажу - Собівартість списання

Звіт має показувати не лише виручку, а й собівартість та фінансовий результат.

Звіт «Залишки товару на дату»

Звіт має показувати залишки товарів на складі на зазначену дату.

У звіті потрібно відображати:

  • товар;
  • склад;
  • партію;
  • кількість залишку;
  • собівартість;
  • суму залишку.

Ілюстрації з документа

Практичне завдання

У межах атестації потрібно продемонструвати робочий сценарій.

Мінімальний сценарій:

  1. створити товари, послуги, контрагентів і склад;
  2. оформити прибуткову накладну;
  3. провести прибуткову накладну;
  4. перевірити створення партій;
  5. створити замовлення клієнта;
  6. створити рахунок-фактуру на основі замовлення;
  7. створити видаткову накладну на основі рахунку-фактури;
  8. додати в табличну частину товари й послуги;
  9. провести видаткову накладну;
  10. перевірити списання товарів за FIFO;
  11. створити податкову накладну на основі видаткової;
  12. сформувати друковані форми;
  13. сформувати звіт продажів;
  14. сформувати звіт прибутку;
  15. сформувати звіт залишків на дату;
  16. продемонструвати попередження при нестачі товару.

Цілі тесту

Атестаційне завдання має перевірити:

  • вміння будувати структуру бази даних;
  • знання SQL та вміння працювати з базою даних;
  • стиль написання програмного коду;
  • використання веб-технологій для прикладних задач;
  • використання об’єктно-орієнтованого програмування;
  • використання AJAX у практичних завданнях;
  • інтерпретацію бізнес-задачі у веб-додаток;
  • налаштування веб-сервера для демонстрації проєкту;
  • швидкість вирішення задачі.

Очікуваний результат

У результаті виконання атестаційного завдання має бути створене веб-рішення для оптової торгівлі.

Рішення має підтримувати прибуткові накладні, замовлення, рахунки-фактури, видаткові накладні, податкові накладні, послуги в табличній частині, контроль залишків, списання собівартості за FIFO, друковані форми та звіти.

Робота має бути продемонстрована через веб-сторінку, доступну з інтернет-URL. Час виконання потрібно зафіксувати та повідомити при здачі.

Критерії оцінювання

Напрям Бали Що перевіряється
Структура бази даних 15 Повнота моделі даних, наявність документів, рядків, партій, рухів, складів, контрагентів і зв’язків
SQL 10 Коректність SQL-скриптів для MySQL, PostgreSQL або SQLite
Документообіг 15 Ланцюжок замовлення, рахунку-фактури, видаткової та податкової накладної
Прибуткові та видаткові накладні 15 Реєстри, форми, табличні частини, товари й послуги, друковані форми
AJAX та web-інтерфейс 10 Створення, редагування, збереження й проведення документів без перезавантаження сторінки
FIFO 15 Коректне списання собівартості за партіями
Контроль залишків 10 Попередження про нестачу та заборона проведення документа
Звіти 10 Продажі, прибутки, залишки на дату
ООП і якість коду 10 Структура коду, читабельність, підтримуваність, поділ логіки
Демонстрація 5 Доступний веб-URL і зафіксований час виконання
Разом 115 Максимальна оцінка

Шкала оцінювання

Бали Рівень Опис
100–115 Відмінно Рішення повністю працює, FIFO реалізовано коректно, звіти відповідають рухам, код структурований
85–99 Добре Основна логіка працює, є незначні недоліки без критичного впливу на результат
70–84 Зараховано Базовий документообіг працює, але є помилки або неповна реалізація окремих частин
0–69 Не зараховано Відсутня критична логіка: FIFO, контроль залишків, проведення документів або звіти

Критичні помилки

Критичними помилками вважаються ситуації, коли:

  • видаткова накладна проводиться при нестачі товару;
  • FIFO не працює або списує собівартість неправильно;
  • прибуткова накладна не створює партії;
  • видаткова накладна не списує товар зі складу;
  • послуги помилково списуються зі складу як товар;
  • звіт залишків не відповідає проведеним документам;
  • звіт прибутку не враховує собівартість;
  • немає зв’язку між замовленням, рахунком-фактурою, видатковою та податковою накладною;
  • документи неможливо створювати або редагувати без перезавантаження сторінки, якщо це було вимогою реалізації.

Умова складання. Завдання не може бути зараховане, якщо система не контролює залишки або не списує собівартість товарів за FIFO.

Коротко

Питання Відповідь
Що потрібно створити? Веб-рішення для оптової торгівлі та WMS-обліку
Який основний документообіг? Замовлення → рахунок-фактура → видаткова накладна → податкова накладна
Як оформлюється надходження? Прибутковою накладною
Як оформлюється продаж? Видатковою накладною
Чи можуть бути послуги в документі? Так, товари й послуги мають бути в одній табличній частині
Що має робити система при нестачі товару? Показати кількість нестачі й заборонити проведення документа
Як списується собівартість? За партіями методом FIFO
Які звіти потрібні? Продажі за період, прибутки за період, залишки товару на дату

Див. також