Атестаційні завдання K2 ERP/WMS: відмінності між версіями
R (обговорення | внесок) Виправлено УРЛ в кінці |
R (обговорення | внесок) Немає опису редагування |
||
| Рядок 1: | Рядок 1: | ||
'''Атестаційне завдання K2 ERP — | {{DISPLAYTITLE:Атестаційні завдання K2 ERP/WMS}} | ||
'''Атестаційне завдання 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> | |||
== Бізнес-сценарій == | |||
Компанія займається оптовою торгівлею. | |||
Надходження товарів від постачальників оформлюється документом '''«Прибуткова накладна»'''. Продаж товарів клієнтам оформлюється документом '''«Видаткова накладна»'''. | |||
Окрім продажу товарів, компанія може надавати додаткові послуги, наприклад доставку. Товари й послуги мають зазначатися в одній табличній частині документа, але облікова логіка для них різна: товари впливають на складські залишки, а послуги не повинні списуватися зі складу як товар. | |||
Перед продажем клієнту спочатку створюється документ '''«Замовлення»'''. На основі замовлення формується '''«Рахунок-фактура»''', коли клієнт підтверджує замовлення і просить безготівковий рахунок. На основі рахунку-фактури створюється '''«Видаткова накладна»'''. На основі видаткової накладної створюється '''«Податкова накладна»'''. | |||
== Документообіг == | == Документообіг == | ||
| Рядок 30: | Рядок 55: | ||
# '''Податкова накладна'''. | # '''Податкова накладна'''. | ||
Окремо оформлюється надходження товарів: | |||
# '''Прибуткова накладна'''. | |||
<div style="border:2px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;"> | |||
'''Логіка процесу.''' Прибуткова накладна збільшує залишки товарів. Видаткова накладна зменшує залишки товарів і списує собівартість за FIFO. Замовлення та рахунок-фактура готують продаж, але самі по собі не повинні списувати товар зі складу. | |||
</div> | |||
== Основні документи == | |||
{| class="wikitable" style="width:100%;" | |||
! Документ | |||
! Призначення | |||
! Вплив на склад | |||
|- | |||
| '''Прибуткова накладна''' | |||
| Фіксує надходження товарів і послуг | |||
| Збільшує залишки товарів | |||
|- | |||
| '''Замовлення''' | |||
| Фіксує намір клієнта купити товари або послуги | |||
| Не списує товар | |||
|- | |||
| '''Рахунок-фактура''' | |||
| Формує рахунок для оплати клієнтом | |||
| Не списує товар | |||
|- | |||
| '''Видаткова накладна''' | |||
| Оформлює продаж товарів і послуг | |||
| Списує товари зі складу | |||
|- | |||
| '''Податкова накладна''' | |||
| Формує податковий документ на основі реалізації | |||
| Не змінює складські залишки напряму | |||
|} | |||
== Прибуткова накладна == | |||
Прибуткова накладна оформлює надходження товарів і послуг від постачальника. | |||
Зазвичай вона має реєстр документів, у якому можна переглядати створені документи, шукати потрібну накладну, відкривати її та створювати нову. | |||
== | === Реєстр прибуткових накладних === | ||
Реєстр прибуткових накладних має дозволяти: | |||
* переглядати список документів; | |||
* шукати документи; | |||
* відкривати існуючі документи; | |||
* створювати нову прибуткову накладну; | |||
* фільтрувати документи за датою, постачальником і статусом. | |||
=== Форма прибуткової накладної === | |||
Форма прибуткової накладної має містити шапку документа й табличну частину. | |||
У шапці документа доцільно передбачити: | |||
* номер; | |||
* дату; | |||
* постачальника; | |||
* склад; | |||
* статус; | |||
* коментар. | |||
У табличній частині мають бути товари й послуги. | |||
=== Послуги в прибутковій накладній === | |||
Послуги мають обліковуватися в тій самій табличній частині, що й товари. | |||
При цьому потрібно розрізняти тип рядка: | |||
* товар; | |||
* послуга. | |||
Товар збільшує складські залишки. Послуга не повинна створювати складський залишок, але може впливати на суму документа, витрати або собівартість залежно від логіки реалізації. | |||
=== Друкована форма прибуткової накладної === | |||
Прибуткова накладна повинна мати друковану форму. | |||
У друкованій формі потрібно показати постачальника, дату, номер документа, склад, табличну частину, кількість, ціни, суми та підсумки. | |||
== | == Видаткова накладна == | ||
Видаткова накладна оформлює продаж товарів і послуг клієнту. | |||
=== | === Реєстр видаткових накладних === | ||
Реєстр видаткових накладних має дозволяти переглядати, шукати, відкривати та створювати документи реалізації. | |||
У реєстрі бажано показувати номер, дату, клієнта, суму, статус і документ-підставу. | |||
=== Форма видаткової накладної === | |||
Форма видаткової накладної має містити шапку документа та табличну частину. | |||
У шапці документа потрібно передбачити: | |||
* номер; | |||
* дату; | |||
* клієнта; | |||
* склад; | |||
* документ-підставу; | |||
* статус; | |||
* коментар. | |||
У табличній частині повинні бути товари й послуги. | |||
=== Реалізація послуг === | |||
Послуги повинні додаватися у табличну частину видаткової накладної разом із товарами. | |||
Послуга може входити в суму документа, але не повинна зменшувати складські залишки як товар. | |||
=== Друкована форма видаткової накладної === | |||
Видаткова накладна повинна мати друковану форму. | |||
У друкованій формі потрібно показати клієнта, дату, номер, склад, товари, послуги, кількість, ціни, суми та підсумки. | |||
== Контроль залишків == | |||
Якщо товару | При проведенні видаткової накладної система має перевіряти наявність товарів на складі. | ||
Якщо товару не вистачає, система повинна: | |||
* показати попередження; | * показати попередження; | ||
* вказати кількість нестачі; | * вказати кількість нестачі; | ||
* | * не дозволити провести документ. | ||
Наприклад, якщо користувач продає 10 одиниць товару, а на складі є лише 7, система повинна показати нестачу 3 одиниці й заблокувати проведення. | |||
''' | <div style="border:3px solid #b71c1c; background:#ffebee; padding:14px; margin:16px 0;"> | ||
'''Критично.''' Видаткова накладна не може бути проведена, якщо на складі недостатньо товару. Проведення “в мінус” у цьому завданні не допускається. | |||
</div> | |||
== Вибір рядків у видатковій накладній == | |||
Вибір товарів у видатковій накладній має відбуватися з поточних залишків. | |||
Користувач повинен бачити лише доступні товари або, принаймні, система повинна показувати фактичний залишок під час вибору товару. | |||
Це зменшує ризик помилок і допомагає не створювати документи, які неможливо провести. | |||
== FIFO == | |||
'''FIFO''' — це метод списання, за яким першим списується товар, що першим надійшов на склад. | |||
У межах цього завдання FIFO використовується для списання собівартості товару за партіями. | |||
Якщо на склад спочатку надійшло 5 одиниць товару по 100 грн, а потім ще 5 одиниць по 120 грн, то при продажу 6 одиниць собівартість має списуватися так: | |||
* 5 одиниць × 100 грн; | |||
* 1 одиниця × 120 грн. | |||
Таким чином, система має не просто зменшити загальний залишок, а правильно визначити, з яких партій списується товар і яка собівартість продажу. | |||
<div style="border:2px solid #f57c00; background:#fff3e0; padding:14px; margin:16px 0;"> | |||
'''Важливо.''' Документи заднім числом у межах завдання не вводяться, але старі документи можуть неоперативно переводитися. Це потрібно враховувати при логіці проведення та FIFO. | |||
</div> | |||
== | == Партійний облік == | ||
Партійний облік потрібен для того, щоб система знала, з якого надходження списується товар. | |||
Кожна прибуткова накладна має створювати партії товарів. Кожна видаткова накладна при проведенні повинна списувати товари з доступних партій за правилом FIFO. | |||
Мінімальні дані партії: | |||
{| class="wikitable" style="width:100%;" | |||
! Поле | |||
! Опис | |||
|- | |||
| Товар | |||
| Номенклатура, до якої належить партія | |||
|- | |||
| Склад | |||
| Склад, на якому зберігається партія | |||
|- | |||
| Дата надходження | |||
| Дата прибуткової накладної | |||
|- | |||
| Кількість початкова | |||
| Скільки товару надійшло | |||
|- | |||
| Кількість залишку | |||
| Скільки товару залишилося в партії | |||
|- | |||
| Собівартість | |||
| Закупівельна ціна або облікова собівартість одиниці | |||
|- | |||
| Документ-підстава | |||
| Прибуткова накладна, яка створила партію | |||
|} | |||
== Рекомендовані сутності бази даних == | == Рекомендовані сутності бази даних == | ||
| Рядок 166: | Рядок 270: | ||
* журнал змін документів. | * журнал змін документів. | ||
== | == Вимоги до структури бази даних == | ||
Потрібно побудувати структуру бази даних у графічному вигляді та продемонструвати її. | |||
На основі графічної структури потрібно створити SQL для створення таблиць. | |||
Допускаються такі бази даних: | |||
* MySQL; | |||
* PostgreSQL; | |||
* SQLite. | |||
База даних повинна підтримувати документообіг, табличні частини документів, партійний облік, рухи товарів і рухи собівартості. | |||
== Вимоги до веб-рішення == | |||
Веб-рішення має бути побудоване на фреймворку з відкритим вихідним кодом. | |||
При створенні сторінок документів усе має працювати без повного перезавантаження сторінок. | |||
Потрібно використовувати AJAX або аналогічний підхід для: | |||
* створення документів; | |||
* редагування документів; | |||
* збереження рядків табличної частини; | |||
* проведення документів; | |||
* перевірки залишків; | |||
* відображення попереджень. | |||
Виконану роботу потрібно продемонструвати у вигляді веб-сторінки, доступної з інтернет-URL. | |||
== Вимоги до програмної реалізації == | |||
Під час виконання завдання потрібно використовувати об’єктно-орієнтований підхід. | |||
Код має бути структурованим, зрозумілим і придатним для підтримки. | |||
Бажано розділити: | |||
* моделі; | |||
* контролери; | |||
* сервіси проведення документів; | |||
* сервіси розрахунку FIFO; | |||
* сервіси звітів; | |||
* шаблони друку; | |||
* frontend-логіку; | |||
* SQL або ORM-шар. | |||
== Очікувані звіти == | |||
Необхідно побудувати три основні звіти. | |||
== Звіт «Продаж товарів за період» == | |||
Звіт має показувати реалізацію товарів за вибраний період. | |||
У звіті бажано передбачити: | |||
* період; | |||
* товар; | |||
* клієнта; | |||
* склад; | |||
* кількість продажу; | |||
* суму продажу; | |||
* документ реалізації. | |||
== Звіт «Прибутки за період» == | |||
Звіт має показувати прибуток за вибраний період з урахуванням собівартості, списаної за FIFO. | |||
Мінімальна логіка: | |||
<pre> | |||
Прибуток = Сума продажу - Собівартість списання | |||
</pre> | |||
Звіт має показувати не лише виручку, а й собівартість та фінансовий результат. | |||
== Звіт «Залишки товару на дату» == | |||
Звіт має показувати залишки товарів на складі на зазначену дату. | |||
У звіті потрібно відображати: | |||
* товар; | |||
* склад; | |||
* партію; | |||
* кількість залишку; | |||
* собівартість; | |||
* суму залишку. | |||
== Ілюстрації з документа == | == Ілюстрації з документа == | ||
| Рядок 204: | Рядок 375: | ||
K2_Attestation_Wholesale_FIFO_10.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_10.png | K2_Attestation_Wholesale_FIFO_10.png|Ілюстрація до атестаційного завдання|посилання=Файл:K2_Attestation_Wholesale_FIFO_10.png | ||
</gallery> | </gallery> | ||
== Практичне завдання == | |||
У межах атестації потрібно продемонструвати робочий сценарій. | |||
Мінімальний сценарій: | |||
# створити товари, послуги, контрагентів і склад; | |||
# оформити прибуткову накладну; | |||
# провести прибуткову накладну; | |||
# перевірити створення партій; | |||
# створити замовлення клієнта; | |||
# створити рахунок-фактуру на основі замовлення; | |||
# створити видаткову накладну на основі рахунку-фактури; | |||
# додати в табличну частину товари й послуги; | |||
# провести видаткову накладну; | |||
# перевірити списання товарів за FIFO; | |||
# створити податкову накладну на основі видаткової; | |||
# сформувати друковані форми; | |||
# сформувати звіт продажів; | |||
# сформувати звіт прибутку; | |||
# сформувати звіт залишків на дату; | |||
# продемонструвати попередження при нестачі товару. | |||
== Цілі тесту == | |||
Атестаційне завдання має перевірити: | |||
* вміння будувати структуру бази даних; | |||
* знання SQL та вміння працювати з базою даних; | |||
* стиль написання програмного коду; | |||
* використання веб-технологій для прикладних задач; | |||
* використання об’єктно-орієнтованого програмування; | |||
* використання AJAX у практичних завданнях; | |||
* інтерпретацію бізнес-задачі у веб-додаток; | |||
* налаштування веб-сервера для демонстрації проєкту; | |||
* швидкість вирішення задачі. | |||
== Очікуваний результат == | |||
У результаті виконання атестаційного завдання має бути створене веб-рішення для оптової торгівлі. | |||
Рішення має підтримувати прибуткові накладні, замовлення, рахунки-фактури, видаткові накладні, податкові накладні, послуги в табличній частині, контроль залишків, списання собівартості за FIFO, друковані форми та звіти. | |||
Робота має бути продемонстрована через веб-сторінку, доступну з інтернет-URL. Час виконання потрібно зафіксувати та повідомити при здачі. | |||
== Критерії оцінювання == | |||
{| class="wikitable" style="width:100%;" | |||
! Напрям | |||
! Бали | |||
! Що перевіряється | |||
|- | |||
| Структура бази даних | |||
| 15 | |||
| Повнота моделі даних, наявність документів, рядків, партій, рухів, складів, контрагентів і зв’язків | |||
|- | |||
| SQL | |||
| 10 | |||
| Коректність SQL-скриптів для MySQL, PostgreSQL або SQLite | |||
|- | |||
| Документообіг | |||
| 15 | |||
| Ланцюжок замовлення, рахунку-фактури, видаткової та податкової накладної | |||
|- | |||
| Прибуткові та видаткові накладні | |||
| 15 | |||
| Реєстри, форми, табличні частини, товари й послуги, друковані форми | |||
|- | |||
| AJAX та web-інтерфейс | |||
| 10 | |||
| Створення, редагування, збереження й проведення документів без перезавантаження сторінки | |||
|- | |||
| FIFO | |||
| 15 | |||
| Коректне списання собівартості за партіями | |||
|- | |||
| Контроль залишків | |||
| 10 | |||
| Попередження про нестачу та заборона проведення документа | |||
|- | |||
| Звіти | |||
| 10 | |||
| Продажі, прибутки, залишки на дату | |||
|- | |||
| ООП і якість коду | |||
| 10 | |||
| Структура коду, читабельність, підтримуваність, поділ логіки | |||
|- | |||
| Демонстрація | |||
| 5 | |||
| Доступний веб-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> | |||
== Коротко == | |||
{| class="wikitable" style="width:100%;" | |||
! Питання | |||
! Відповідь | |||
|- | |||
| Що потрібно створити? | |||
| Веб-рішення для оптової торгівлі та WMS-обліку | |||
|- | |||
| Який основний документообіг? | |||
| Замовлення → рахунок-фактура → видаткова накладна → податкова накладна | |||
|- | |||
| Як оформлюється надходження? | |||
| Прибутковою накладною | |||
|- | |||
| Як оформлюється продаж? | |||
| Видатковою накладною | |||
|- | |||
| Чи можуть бути послуги в документі? | |||
| Так, товари й послуги мають бути в одній табличній частині | |||
|- | |||
| Що має робити система при нестачі товару? | |||
| Показати кількість нестачі й заборонити проведення документа | |||
|- | |||
| Як списується собівартість? | |||
| За партіями методом FIFO | |||
|- | |||
| Які звіти потрібні? | |||
| Продажі за період, прибутки за період, залишки товару на дату | |||
|} | |||
== Див. також == | == Див. також == | ||
| Рядок 215: | Рядок 556: | ||
* [[Видаткова накладна]] | * [[Видаткова накладна]] | ||
* [[Звіт залишків по складу]] | * [[Звіт залишків по складу]] | ||
* [[WMS]] | |||
* [[Партійний облік]] | |||
* [[Рахунок-фактура]] | |||
* [[Податкова накладна]] | |||
[[Категорія:K2 ERP]] | |||
[[Категорія:Атестаційні завдання K2]] | |||
[[Категорія:WMS]] | |||
[[Категорія:Складський облік]] | |||
[[Категорія:Оптова торгівля]] | |||
[[Категорія:FIFO]] | |||
[[Категорія:Партійний облік]] | |||
[[Категорія:Корпоративна Wiki]] | |||