Зміст
Введення
I. Технічне завдання на проектування
1. Постановка завдання
2. Вимоги до системи
3. Користувачі системи
4. Етапи розробки
II. Інфологіческое проектування
1. Обстеження предметної області
2. Опис користувачів
3. Запити та регламентні задачі
4. Опис алгоритму роботи програми
5. Словник даних
III. Даталогіческое проектування
1. Вибір СУБД
2. Даталогіческая модель
3. Опис програми
IV. Програми
1. Дискета з текстами програми.
2. Схема даних.
3. Текст програми у твердій копії.
Введення
Однією з найскладніших завдань для фірми, що займається торговельною діяльністю, є точний і упорядкований облік матеріальних засобів. При дуже великому обороті первинних документів стає дуже складним їх упорядкування. Як правило, багато фірм до цих пір, при такому стрімкому розвитку комп'ютерної техніки та програмного забезпечення, що не мають чітко налагодженого комп'ютерного обліку.
Однією з проблем недосконалості методів ведення обліку - є недалекоглядність керівництва фірм. Та це факт, що це потребує чимало коштів, але якщо порахувати збитки від розрізненості обліку, розбіжності залишків на складі з залишками з документообігу і навіть просто спокою, а не нервозності у колективі, то стає очевидним, що фірмі потрібна автоматизація.
Нехай для початку це буде невелика програма, з малим набором функцій, але правильною структурою, і безпомилковим рахунком і облік стане набагато простіше. Просто подумати про те, щоб побачити рух певного товару за останній місяць, при середній інтенсивності продажів, і стає зрозуміло, що при «паперовому» обліку це просто нереально. Але при комп'ютерному обліку - немає нічого простіше (один запит).
В даному курсовому проекті представлена довідкова частини програми, що автоматизує складський облік на малих і середніх підприємствах. Найбільшу увагу в курсовому проекті направлено на побудову правильних структур баз даних, тобто на даталогіческое проектування.
Глава 1. Технічне завдання на проектування
1.1. Постановка завдання
Виділимо предметну область. Це облік товарообігу на фірмі що займається торговельною діяльністю. Сюди входить і облік товарів на складі (на декількох складах), оформлення документів по відвантаженню і під час оприбуткування товару на склад, ведення реєстру постачальників і покупців, облік взаєморозрахунків з юридичними та приватними особами та отримання звітної інформації про його продаж.
Спроектувати всю систему цілком для навчальних цілей не має сенсу, тому в даному проекті основним завданням ставиться правильна організації структури збереження інформації (тобто структури баз даних.), Алгоритмів вводу, читання, коректування інформації. А сама програма є довідкову систему, яка продемонструє приклад доступу до інформації, що зберігається.
1.2. Вимоги до системи.
Головною вимогою даного курсового проекту є правильні структури даних, тому і вимоги до проектованої системі в основному будуть складатися з вимог до правильної організації структур баз даних та їх взаємозв'язку.
Вимоги до розробляється системі:
* Чітка і логічна структура баз даних;
* Наявність мінімум третє нормальної форми для всіх створюваних структур даних;
* Наявність логічно грамотних зв'язків між компонентами структури даних;
* Способи отримання інформації з спроектованої системи.
Що стосується вимог до апаратних ресурсів, то тут все залежить від розмірів автоматизується обліку, але для даного проекту достатнім буде платформа на основі 386 процесора і операційної системи ДОС.
1.3. Користувачі системи
Дана проектована система призначена для дуже широкого кола користувачів.
Першими користувачами цієї системи будуть комірник та/або менеджер, тому що вони будуть вводить первинні документи. У міру потреби вони можуть вилучати документи, змінювати вже існуючі документи, додавати інформацію про нових покупців, формувати звіти для відстеження неточностей в обліку. Але цими людьми коло користувачів не закінчується.
Система може бути використана бухгалтером для отримання інформації про суми прибуткових і витратних накладних, догах постачальникам, і боргів клієнтів нам. Крім того вони можуть брати участь в цій системі, наприклад, вводити виписки з банку, які будуть погашати заборгованості.
Для головного менеджера фірми система теж може становити інтерес. Наприклад, він може подивитися обсяги продажів, товарообігу за певний період, визначити товар користується, що приносить найбільший дохід (самий товар, який продається) і отримати іншу статистичну інформацію.
1.4. Етапи розробки
Основними етапами розробки системи є:
1) розробка техніко-економічного обгрунтування проекту;
2) розробка технічного завдання на проектування;
3) збір вихідного матеріалу для проектування;
4) оформлення проекту (документування інформаційної системи та програмного забезпечення, підготовка текстової записки);
5) подання курсового проекту на кафедру; захист курсового проекту в разі написання курсового проекту, або передача системи замовнику та продовження роботи з нею в режимі супроводу.
Терміни та склад робіт узгоджуються з викладачем і оформляються представленим в додатках «Завданням на курсове проектування».
Приймання здійснюється викладачем шляхом надання студентом демонстрації роботи системи на контрольних прикладах, захисту проектних і програмних рішень.
Глава 2. Інфологіческое проектування
2.1. Обстеження предметної області.
Перш ніж розпочати будь-яке проектування необхідно проаналізувати предметну область.
Для аналізу предметної області було вибрано конкретна фірма, і на її прикладі досліджувалися інформаційні потреби менеджера, комірника, бухгалтера та інших користувачів системи.
При більш детальному розгляді роботи менеджера був виявлений перелік документів і типових операцій, необхідних для ведення обліку. Для оприбуткування товару використовувалися документи або прибуткова накладна, або повернення від покупця. Витрата товару оформлявся або видаткової накладної, або повернення постачальнику.
Після виявлення повного переліку необхідних документів і виконуваних типових операцій була розроблена складна структура баз даних (приведена нижче) основною вимогою до якої - були універсальність, логічність, наочність.
Для проектування структур баз даних були формалізовані первинні документи (виділено реквізитних мінімум, проаналізовано зв'язки між ними) і сформовані структури записів БД. Потім шляхом нормалізації структур даних вони були зведені до структур даних, що задовольняє вимогам 3нф.
2.2. Опис користувачів
Для даної системи може існувати безліч категорій користувачів, але пропонована програма передбачає користувача, якому необхідна довідкова інформація.
Для кожної гарної системи завжди повинен існувати адміністратор, який буде супроводжувати систему, усувати помилки, а при розширенні предметної області допрацьовувати програмні модулі.
Що стосується кінцевих користувачів, то тут можуть бути майже всі співробітники фірми, причому для кожного співробітника може бути запрограмований тип доступу (читання, зміна, додавання, видалення тощо) до документів, довідників, регістрів та іншої інформації в системі.
2.3. Запити та регламентні задачі
Для проектованої системи основним запитом є запит на отримання руху по певному товару за конкретний проміжок часу. Цей запит виконується на підставі даних зберігаються в базах даних, які можна умовно віднести до «Регістр».
Також у системі можуть реалізовані наступні запити:
* Інформація про борг клієнта (або нашому борг клієнту)
* Будь-яка інформація, яка може бути отримана на підставі документів (наприклад, сума відвантажень клієнта за певний період, і ін)
Регламентний завданням для проектованої системи є розрахунок обсягів продажів (наприклад, за готівковий або безготівковий розрахунок).
Для додається програми регламентним запитом є отримання інформації про залишки товарів і рух товару за документами і висновок отриманої інформації в відеоформу.
2.4. Опис алгоритму роботи системи
У цьому розділі, описується: яким чином повинна функціонувати проектована система на підставі обраної предметної області.
Розглянемо ланцюжок документів, які необхідно оформити для відпуску товару при розрахунку за безготівковий розрахунок.
Спочатку клієнт вибирає потрібний йому товар у необхідній кількості. На підставі цієї заявки (можливо усній) менеджер виписує цьому клієнтові рахунок для оплати. У випадку, якщо клієнт ще не існує в системі, то його необхідно додати. Коли клієнтові виписаний рахунок, це не говорить про те, що товар клієнту відданий, але документ в систему введений. Для цього цей вид документів не враховується в базах враховують рух товарів (назвемо їх регістрами). Пізніше, коли клієнт оплатив, виписаний йому рахунок, і гроші потрапили на наш розрахунковий рахунок, бухгалтер вводить виписку з банку, відповідним документом, наприклад, «прихід грошей на рахунок». Відповідно в системі з'являється наш борг клієнту на суму, яку він сплатив. Через деякий час клієнт приходить, щоб отримати свій товар і тоді менеджер виписує йому видаткову накладну і податкову накладну за безготівковим розрахунком (можна ввести на підставі раніше виписаного рахунку). При виписуванні накладної система автоматично заносить інформацію про те, що клієнту було віддано товар на суму зазначену в накладній, і таким чином погашає наш борг клієнта. Крім цього документ проходить по регістрах рухів і залишків товарів, тобто інформація про кількість проданого товару заноситься у відповідні бази даних.
На підставі виданої клієнту накладної, комірник віддає товар. Таким чином, ми отримали чітку систему відвантаження товару.
Процедура відвантаження товару за готівковий розрахунок відбувається аналогічним чином, тільки рахунок при цьому не виписується, гроші оформляються документом «прибутковий касовий ордер» або іншим подібним і при оформленні накладних вказується що продаж здійснена за готівковий розрахунок.
Надходження товару на склад може виникати в двох випадках. По-перше, при надходженні товару від постачальника, а по-друге, при поверненні товару від покупця.
У першому випадку оформляється прибуткова накладна від постачальника за готівковий або безготівковий розрахунок, а гроші постачальнику (мається на увазі в системі) віддаємо документом «платіжне доручення» або «видатковий касовий ордер» або іншим документом.
Якщо оформляється повернення від покупця, то процедура ідентична, тільки в накладній вказується відповідний ознака накладної.
2.5. Словник даних
Словник даних, необхідних для зберігання в проектованої системі виходить дуже об'ємним. Тому зараз наводиться тільки словник даних для документів. Для згаданих вище документів необхідно зберігати такі реквізити:
№ пп Найменування елемента даних Назва Скаляр/масив/вх/вих/розрахунковий Довжина байт Обмеження цілосності Примітки
1. Номер документа Number Скаляр 10 Маска ##### Значення формується автоматично
2. Дата оформлення Date Скаляр 8 Маска 99.99.99
3. Вид документа DocType Скаляр 3 Маска 999
4. Ознака накладної Priznak Скаляр 3 Маска 999 Має сенс тільки для накладної
5. Фірма Firm Скаляр 20
6. Клієнт Klient Скаляр 150
7. Вид продажу SailType Скаляр 20
8. Склад Sklad Скаляр 20
9.
10. Підстава для виписки документа Osnov Скаляр 50
11. Автор документа Author Скаляр 3 Маска 999
12. Найменування товару. Tovar Скаляр 70
13. Ціна за одиницю Price Скаляр, вхідні 10, 2 Маска 9999999.99
14. Кількість Kol Скаляр, вхід 10, 3 Маска 999999.999
15. Сума Sum Скаляр, розрахунковий 12, 2
16. ПДВ NDS Скаляр, розрахунковий 12, 2
17 Проведено Proveden Логічний 1 Проходить документ по регістрах чи ні
Глава 3. Даталогіческое проектування.
3.1. Вибір СУБД
Для реалізації спроектованої системи могла б підійти будь-яка СУБД середнього рівня (наприклад, Microsoft Access). Але в рамках даного курсового проекту система повинна бути реалізована в середовищі FoxPro. І ця система цілком підходить для складання програми, яка обслуговує проектовану систему, а саме:
* СУБД є спеціалізованою програмою для роботи з реляційними БД, що значно спрощує процес даталогіческого проектування;
* У неї потужний підхід, зручний для програмування додатків середньої складності;
* Наявність великої кількості майстрів дозволяє швидко створювати зручний для кінцевих користувачів інтерфейс, формувати красиві звіти
Ця система дуже вимоглива до апаратних ресурсів і може виконуватися на будь-якому комп'ютері на якому встановлена система Windows (та сама СУБД)
* Окремі утиліти дозволяють створювати кінцевий виконуваний файл, і тоді це дуже значно спрощує розповсюдження програми.
*
3.2. Даталогіческая модель
Після докладного аналізу предметної області на етапі інфологіческого проектування були отримані реквізити баз даних. Після цього було проведено розподіл цих реквізитів по записах БД, потім бази були декомпозіровани до тих пір, поки не вийшли структури, що задовольняють вимогам третього нормальної форми і володіють мінімальної надмірністю (хоча надмірність має бути присутня для прискорення процесів обробки інформації). У результаті були отримані файли баз даних з наступними структурами:
Спочатку наведемо бази, які можна умовно віднести до довідників. Це означає, що в них зберігається інформація, яка використовується іншими базами.
Tovar.dbf - Довідник товарів
Назва поля Тип Довжина Опис
Kod Numeric 5 Код товару
Name Character 20 Найменування товару
PriceIn Numeric 6,2 Вхідна ціна
PriceOut Numeric 6,2 Продажна ціна
Unit Character 5 Одиниця виміру
Proizvod Numeric 3 Код виробника
Proizv.dbf - Довідник з виробниками
Назва поля Тип Довжина Опис
Kod Numeric 3 Код виробника
Name Character 10 Повна назва виробника
Coment Character 30 Інформація про виробника
Sklad.dbf - Довідник складів
Назва поля Тип Довжина Опис
Kod Numeric 3 Код складу
Name Character 25 Повна назва складу
Users.dbf - Довідник користувачів системи
Назва поля Тип Довжина Опис
Kod Numeric 2 Код співробітника
Name Character 25 Ім'я та По-батькові співробітника
Passport Character 15 Серія та номер паспорта
Address Character 50 Адреса співробітника
Status Numeric 1 Статус співробітника як користувача
Firms.dbf - Довідник фірм за якими ведеться облік
Назва поля Тип Довжина Опис
Kod Numeric 2 Код фірми
Name Character 25 Повна назва фірми
Address Character 50 Адреса фірми
Tel Character 15 Телефони
RS Numeric 14 Розрахунковий рахунок
OKPO Numeric 8 Код ОКПО
MFO Numeric 6 Код МФО банку
Bank Character 15 Назва банку
Klients.dbf - Довідник клієнтів (постачальників і покупців)
Назва поля Тип Довжина Опис
Kod Numeric 2 Код клієнта
Name Character 25 Повна назва клієнта
Address Character 50 Адреса клієнта
Tel Character 15 Телефони
RS Numeric 14 Розрахунковий рахунок
OKPO Numeric 8 Код ОКПО
MFO Numeric 6 Код МФО банку
Bank Character 15 Назва банку
Doctype.dbf - Довідник типів накладних
Назва поля Тип Довжина Опис
Kod Numeric 3 Код
Name Character 10 Назва документа
Coment Character 30 Розшифровка назви
Sailtype.dbf - Довідник видів продажів
Назва поля Тип Довжина Опис
Kod Numeric 1 Код
Name Character 10 Вид продажу
Coment Character 30 Розшифровка виду
PriznDoc.dbf - Довідник ознак накладних
Назва поля Тип Довжина Опис
Kod Numeric 1 Код
Name Character 10 Ознака накладної
Coment Character 30 Розшифровка ознаки
Наступні дві бази в сукупності й представляють собою документ (в одному зберігаються шапки, в іншому - табличні частини)
DocumShp.dbf - Шапки документів
Назва поля Тип Довжина Опис
Number Character 10 Номер документа
Date Date 8 Дата оформлення документа
Type Numeric 3 Тип накладної
Firm Numeric 3 Фірма від якої випіс. накладна
Sklad Numeric 3 Складдля документа
Klient Numeric 3 Клієнт на якого випіс. Наклей
Osnov Character 50 Підстава документа
Positions Numeric 3 Кількість позицій у накладній
SailType Numeric 1 Вид продажу
Priznak Numeric 1 Ознака накладної
Author Numeric 2 Автор документа (співробітник)
Proveden Logical 1 Пройшов Чи док-т по регістрах?
DocumTbl.dbf - Табличні частини документів
Назва поля Тип Довжина Опис
Tovar Numeric 5 Код товару
Kol Numeric 4 Кількість
Price Numeric 6,2 Ціна (по якій продали)
Docum Character 10 Номер документа
Наступна і остання група являє собою бази в яких відображається реальний рух чого-небудь. Назвемо їх регістрами.
Rests.dbf - Регістр залишків товарів
Назва поля Тип Довжина Опис
Tovar Numeric 5 Код товару
Sklad Numeric 3 Склад
Rest Numeric 5 Залишок товару
Motion.dbf - Регістр руху залишків
Назва поля Тип Довжина Опис
Tovar Numeric 5 Товар
Kolvo Numeric 4 Кількість
Date Date 8 Дата
Docnum Character 10 Номер Документа
Duties.dbf - Регістр залишків взаєморозрахунків
Назва поля Тип Довжина Опис
Klient Numeric 3 Клієнт
Duty Numeric 12,2 Поточний борг (або кредит)
Mduty.dbf - Регістр рухів взаєморозрахунків з клієнтами
Назва поля Тип Довжина Опис
Klient Numeric 3 Клієнт
Sum Numeric 12,2 Сума
Date Date 8 Дата
Docum Character 10 Номер документа
Тепер коротко опишемо призначення кожного довідника.
Довідник товарів призначений для зберігання товарів. Причому код повинен бути унікальним у всьому довіднику. Кожен товар має прибуткову і продажну ціни, од. вимірювання і виробника, який зберігається в довіднику виробники.
Довідник виробники зберігає код виробника та його повне найменування. Поле Coment призначене для додаткової інформації по виробнику.
Довідник склад містить код і назва всіх складів у системі.
У довіднику клієнтів зберігається вся необхідна інформація про фірму-покупця або фірмі-постачальнику. У той час як у довіднику фірм зберігається інформація про наших фірмах, тобто фірмах від імені яких ми працюємо.
Довідник Вид Накладной зберігає в собі всі види документів, які можуть бути видані системою. Наприклад:
* Прибуткова накладна;
* Видаткова накладна;
* Рахунок;
* Переміщення;
* Податкова накладна
та інші.
Довідник види продажів може містити інформацію такого роду: зана; ЗаБН; Вкредіт. Що буде означати, як була проведена операція - за готівку, безготівкові гроші або в кредит.
Довідник співробітників зберігає всіх можливих користувачів системи і коротку інформацію про них, причому кожному з них можна вказати статус. Наприклад: 1-Адміністратор;
2-Менеджер; 3-Бухгалтер, і т.д. А вже програміст визначить для кого які можливості доступні, а які недоступні.
Довідник ознак накладної зберігає інформацію Наступного виду, наприклад: 1-Продаж; 2-Повернення Постачальнику; 3 - Купівля; 4-Повернення Покупцю.
База даних в якій зберігаються шапки документів - просто зберігає всі необхідні реквізити документа. Унікальним у всій системі є номер документа. Він спеціально оголошений текстовим. За цим номером в базі, яка зберігає табличні частини, ми може відшукати ті позиції, які належать до цього документа. Якщо побудувати індексний файл по полю Number (він побудований в системі), то став на перший елемент, що відповідає цьому документу, можна отримати всі інші елементи по порядку, тому що в шапці документа зберігається кількість рядків у ньому.
Регістри залишків товарів зберігають залишки товарів по кожному складу окремо. Виходить як таблиця, де стовпці відповідають складам, а рядки - товарам, а на перетині - буде кількість товару на конкретному складі.
У регістрі руху залишків товарів відображається кожна операція, над цим товаром (прихід чи витрата) і вказується, який документ здійснив даний рух і коли.
Регістри взаєморозрахунків ідентичні регістрів залишків, тільки враховують рух грошових коштів.
3.3. Опис програми
Програма є довідкову систему, яка покликана показати, яким чином можна отримати доступ до заносяться в систему інформації. У програмі реалізована система додавання нового товару, як приклад додавання інформації в довідник.
Сама програма пропонує вибрати товар і показує всю інформацію про товар, залишок цього товару на складі, і всі рухи з даного товару. Нижче наведені види екранів.
V. Висновки
У результаті спроектована надійна, логічна, гнучка структура даних, яка задовольняє вимогам 3 еталі, наочна і може бути легко змінена або доповнена. На базі спроектованої системи даних може бути написаний серйозний програмний продукт, який надалі може бути використаний дуже широким колом фірм, що займаються торговельною діяльністю.
Схема даних
IV. Додаток.
Clear
Clear all
Set date to German
Set talk off
Close Databases
Set exact off
Set safety off
Use tovar
Index on name to tovar
Select b
Use Proizv
Index on name to proizv
Select c
Use Sklad
Index on kod to sklad
Select d
Use Motion
Index on kod to motion
Select a
Set safety on
Flag =. T.
KodTov = 0
Define Window Main From 3,3 To 24,77 Title 'Програма Довідник по товарах';
Double Float Close Shadow Color
Activate Window Main
@ 1,1
Define Menu MMenu Bar At Line 1 KEY ALT + Z MARK CHR (254)
Define Pad SelTov of MMenu Prompt '
Define Pad NewTovar of MMenu Prompt '
Define Pad Quit of MMenu Prompt 'В
On Selection Menu MMenu Do CheckSelection With Pad ()
Do While Flag
Activate Menu MMenu
EndDo
Deactivate Window Main
Quit
Procedure CheckSelection
Parameters pad
Do Case
Case pad = 'QUIT'
Flag =. F.
Case pad = 'SELTOV'
Do SelectTovar
Case pad = 'NEWTOVAR'
Do AddTovar
EndCase
Return
Procedure SelectTovar
Select Tovar
Go top
Define PopUp Tov From 2,1 To 10,22 Prompt Fields Tovar-> Name
On Selection PopUp Tov Do Inf
Activate PopUp Tov
Return
Procedure Inf
Recn = Recno ()
KodTov = Tovar-> Kod
PrvKod = Tovar-> Proizvod
*********************** Шукаємо назва постачальника *************< br />
Select Proizv
Go top
Locate For Kod = PrvKod
IF Found ()
Prv = Proizv-> Name
Else
Prv = Str (Tovar-> Proizvod)
EndIF
*********************** Беремо дані по складу **************< br />
Select Sklad
Locate For Kod = KodTov
IF Found ()
Ost = Str (Kol, 4)
Rest = Str (MinRest, 4)
Else
Ost = "ні"
Rest = ""
EndIF
*********************** Виводимо інформацію про товар ***********< br />
Clear
Select Tovar
Go Top
Go Recn
@ 3,35 say "Од" + "Прибуткова" + "Роздрібна"
@ 4,8 say "Код" + "найменування" + "Змін" + "Ціна" + "Ціна" + "Виробник"
@ 6,1 say Str (Kod) + "" + Name + "" + Unit + "" + Str (PriceIn, 6,2) + "" + Str (PriceOut, 6,2) + "" + Prv
@ 8,1 say "Мінімальний залишок на складі" + Rest
@ 9,1 say "Поточний баланс на складі" + Ost
*********************** Вибираємо руху по товару ***********< br />
Select Motion
Locate For Kod = KodTov
@ 11,1 say "Руху обраного товару:"
@ 12,38 say "Документ"
@ 13,20 say "Рух Дата номер Вид"
i = 1
Do While Found () =. T.
@ 14 + i, 24 say str (Kolvo, 4) + "" + DtoC (Date) + "" + DocNum + "" + DocVid
i = i +1
Continue
EndDo
Deactivate PopUp Tov
Return
Function CP
Select Proizv
IF VarProizvod = 0
Define PopUp pr from 1,40 to 8,51 prompt Fields Proizv-> Name
On Selection PopUp Pr Do Cp1
Activate PopUp Pr
VarProizvod = Proizv-> Kod
Deactivate PopUp Pr
EndIF
Select Tovar
Return
Procedure CP1
VarProizvod = Kod
Deactivate PopUp Pr
Return
Procedure AddTovar
Select Tovar
Flag2 =. T.
VarKod = 0
Store Space (20) To VarName
VarPriceIn = 0
VarPriceOut = 0
Store Space (5) To VarUnit
VarProizvod = 0
Define Window AddTov From 4,4 To 17,66 Panel Title 'новий товар' In Window Main
Activate Window AddTov
Do While Flag2
@ 1,1 say "Код" get VarKod picture "999"
@ 3,1 say "назва" get VarName
@ 5,1 say "Вхідна ціна" get VarPriceIn picture "999.99"
@ 5,23 say "Продажна ціна" get VarPriceOut picture "999.99"
@ 7,1 say "Одиниця Изм" get VarUnit
@ 7,23 say "Виробник" get VarProizvod valid CP () picture "99"
@ 9,1 Get But Function '* h Ok; Скасувати' size 1,8 default 1
read
@ 10,15 say ""
IF But = 1
Append Blank
Replace Kod With VarKod
Replace Name With VarName
Replace PriceIN With VarPriceIn
Replace PriceOut With VarPriceOut
Replace Unit with VarUnit
Replace Proizvod With VarProizvod
Flag =. F.
EndIF
IF But = 2
Flag2 =. F.
EndIF
EndDo
Deactivate Window AddTov
Return
12