Сначала хотелось бы ввести несколько тезисов о том, о чём будет написано в этой статье:
1. Пост посвящён процессу создания и конечному продукту для станции технического обслуживания автомобилей (далее СТО).
2. Программа написана на языке программирования Delphi в среде программирования Embarcadero Delphi 10 Seattle.
3. В программе используется подключение к FTP-серверу, базы данных SQLite, взаимодействие с реестром компьютера (OS Windows).
4. «Garage» разработана для OS Windows и OS Android.
5. Различные темы оформления созданы с помощью библиотеки нестандартных компонентов AlphaControls.
Итак, пожалуй, начнём.
Ни для кого не секрет, что для получения высокого дохода с любого бизнеса одним из главных атрибутов является не только само предоставление качественных товаров и услуг, но и грамотная систематизация информации о клиентах и бизнесе в целом. Если использовать терминологию, то была создана полноценная CRM-система.
Система управления взаимоотношениями с клиентами (CRM, CRM-система, сокращение от англ. Customer Relationship Management) — прикладное программное обеспечение для организаций, предназначенное для автоматизации стратегий взаимодействия с заказчиками (клиентами), в частности, для повышения уровня продаж, оптимизации маркетинга и улучшения обслуживания клиентов путём сохранения информации о клиентах и истории взаимоотношений с ними, установления и улучшения бизнес-процессов и последующего анализа результатов.
Именно для этой цели был создан программный продукт «Garage», о возможностях которого я подробно опишу чуть ниже. Сразу стоит отметить, что статья создана для демонстрации возможностей среды Embarcadero Delphi 10 Seattle, выслушивания замечаний и предложений, касающихся дальнейшего развития продукта, все советы и пожелания будут учтены и по возможности воплощены в жизнь. «Почему Delphi?» — спросите вы. Наверное, потому что это мой первый и единственный язык программирования, в который я серьёзно углубился, а узнав о возможности разработки на различные платформы, все вопросы о выборе языка сразу отпали.
Продукт создавался и согласовывался непосредственно с работниками отрасли СТО, поэтому функционал адаптирован и специализирован конкретно под них. Надеюсь, каждый прочитавший эту статью узнает что-то о языке программирования, рассматриваемой среде разработки, о взаимодействии с базами данных, либо же о самой специализации работников СТО.
Сначала пара слов о самой среде разработки. Начиная с версии Rad Studio XE5 появляется поддержка разработки на устройства, под платформой iOS, OS Android на языках Delphi и C++. Начиная с этого момента начинается резкий рост популярности этой среды. Выход Rad Studio 10 Seattle посвящён Windows 10, в ней реализовано огромное количество возможностей и API, помогающий программисту сделать наиболее «приятным» своё приложение для Windows 10.
Что касается мультиплатформенности. Вы можете проектировать дизайн программы в зависимости от диагонали экрана целевого девайса. Например, для Android-устройств можно проектировать под диагональ 3,5", 4", 5", 7", 10", а так же Google Glass. Аналогично с продуктами под системой iOS. Все необходимые SDK можно удобно загрузить встроенными средствами, это максимально упрощает начало разработки приложений.
Что касается взаимодействия с базами данных. Были созданы процедура SQL() и функция Field(). SQL() имеет 2 передаваемых параметра: первый — название базы данных, а второй — сам запрос к базе. Функция Field() возвращает текстовое значение из базы данных после выполнения процедуры SQL() с оператором SELECT. Эта функция имеет 1 параметр — название колонки, значение из которой нужно получить. Ну и также прикреплю алгоритм сохранения изображений, используя WinAPI для указания директории картинки.
Кроме того для безопасного хранения данных был создан свой алгоритм. Он основан на так называемой «Азбуке», которая состоит из символов латиницы, кириллицы верхнего и нижнего регистра, десяти цифр и нескольких знаков пунктуации. Принцип ширфования похож на алгоритм Цезаря, но сложность состоит в том, что все символы перемешаны между собой. Поэтому даже зная алгоритм придётся потратить достаточное количество времени для расшифрования. Конечно, можно было использовать стандартные средства SQLite для шифрования, но всегда хочется попробовать себя в разных областях и научиться чему-то новому, поэтому в данном случае я решил освоить элементарный уровень криптографии.
Также можете ознакомиться с даталогической и концептуальной моделью основной базы данных, которая хранит все данные.
При каждом запуске программы выполняется проверка наличия необходимых баз данных, таблиц и значений по умолчанию. Если они отсутствуют, то создаются автоматически. Поэтому .exe файл полностью независим и не требуется никакая установка (раньше инсталляция выполнялась с помощью Smart Install Maker, но ввиду обновлений программы в базах данных появляются новые таблицы и значения, поэтому для простоты распространения было принято решение не компилировать при каждом обновлении новый инсталлятор с новыми базами данных, а дополнять просто старые необходимыми значениями).
Теперь что касается самого продукта. «Garage» начал разрабатываться 21 июня 2015. Ни много, ни мало, прошло 9 месяцев. 9 месяцев кодинга, дебага, ловли ошибок, тестирования, читания форумов и документации. И всё это привело к этому детищу со следующим функционалом:
1. Календарь
Функционал
Пора уже наконец-то отказаться от бумажных календарей для записи клиентов на посещение СТО. С помощью интегрированного календаря программы Garage пользователь может редактировать его не только с рабочего места (где бумажный календарь обычно и хранился), но и дома, и даже в дороге. Благодаря синхронизации всей информации пользователь может следить за расписанием и записывать клиентов на будущее с помощью любого компьютера или планшета с платформой OS Android.
Реализация
Весь календарь разбит по неделям и представлен в виде массива 7х20. 7 дней недели и 20 временных отрезков. 8:00, 8:30, 9:00… Сохранение данных в базу данных происходит при каждом нажатии кнопки во время редактирования таблицы (TStringGrid). Поэтому вероятность потери данных при экстренных случаях, как и в остальных случаях, сведена практически к нулю. Также реализован Compact-режим календаря, который «сворачивает» его, убирая все пустые строки для экономии рабочего пространства. На скриншотах ниже приведены оба состояния календаря, в компактном и развёрнутом виде.
2. База данных клиентов
Функционал
В программе «Garage» реализована база данных клиентов, которая позволяет хранить всю основную информацию о каждом человеке, который хоть раз посещал бизнес. Среди них:
— имя, номер телефона (для обратной связи, рекламы и СМС-рассылки);
— марка, модель, номер машины;
— история всех посещений;
— стоимость всех оказанных услуг в 3 валютах;
— сохранение до 4 изображений к каждому клиенту;
— добавление заметок к в истории посещений, конкретно к клиенту и к каждой фотографии.
Реализация
В базе данных SQLite в таблице Clients хранятся все подробные данные о каждом клиенте. Изображения сохраняются в типе данных «Blob», алгоритм взаимодействия с ними немного сложнее, чем с обычной текстовой информацией, для тех, кто не знаком с базами данных, необходимо будет почитать немного справочной литературы, а не лезть напролом, надеясь на свой богатый опыт и навыки, но если знать как делать, это не составляет никакого труда. Вообще вся программа строится на примитивных SQL-запросах, т.к. нет необходимости в большем.
3. Прейскурант
Функционал
Теперь список всех товаров и услуг удобно хранится в прейскуранте, который можно экспортировать на несколько компьютеров за пару действий. Товары и услуги хранят само название, стоимость в конкретной валюте, примерное время выполнения (работы) и личные заметки. Кроме того, в прейскуранте автоматически производится пересчёт стоимости в 3 валюты: гривны, евро и доллары. Эта конвертация происходит согласно актуальному курсу валют, который синхронизируется с НБУ, ПриватБанк или ПУМБ (по выбору пользователя). Либо же можно установить свой курс валют, по которому комфортно высчитывать стоимости.
Реализация
Синхронизация валют происходит благодаря парсингу с сайта minfin.com.ua. Да, в программе ещё не реализованы рубли и российские банки, когда создавал её — не подумал об этом, так что чуть позже добавлю. Количество видимых таблиц можно изменять от 1 до 10, а так же количество строк в каждой из таблиц, чтобы уменьшать занимаемое пространство программой.
4. Контроль работников
Функционал
В программе реализована регистрация по уникальным лицензионным ключам двух типов. Пользователи, обладающие Boss-лицензией, способны привязывать к своему аккаунту других пользователей. После этого открывается доступ к контролю расписания и базы данных клиентов своих работников. Количество привязываемых аккаунтов не ограничено. Таким образом начальник или менеджер СТО может следить за занятостью подчинённых.
Реализация:
Все данные о клиентах, ежедневнике и т.д. берутся из базы данных SQLite. Контроль работников возможен при наличии необходимой лицензии, тогда открывается доступ к загрузке баз данных других пользователей с FTP-сервера, а так же подключаться к ним для демонстрации содержимого в наглядном виде.
5. Статистика
Функционал
В «Garage» реализован пункт статистики, который позволяет отслеживать результаты работы бизнеса по различным критериям. Результаты наглядно представляются в виде двух диаграм, проанализировав которые можно делать выводы о проделанной работе и выбирать путь дальнейшего развитию бизнеса. Как пример, отследить посещаемость СТО по марке машин, и, вывев наиболее посещаемый тип, подстраивать свои услуги конкретно под него.
Для пользователей, обладающих Boss-лицензией, доступна возможность анализировать эффективность своих работников, после чего принимать необходимые меры по повышению их производительности.
Реализация
Диаграммы строятся на основе стандартного компонента TChart. Все значения берутся после выборки необходимых данных из базы данных SQLite. Boss может переключаться между целевой базой данной, после чего получит результат анализа работы своих подчинённых. Некоторые критерии статистики имеют мультивалютную значимость, тип валюты можно переключать и получать тот же график, но согласно текущему курсу.
6. Обновление
Функционал
Регулярно выходят всё более новые версии программы, и чтобы пользователь не следил сам и постоянно не переустанавливал её, реализована удобная система обновлений. Каждый раз при авторизации выполняется поиск новых обновлений, при их наличии пользователю предлагается обновиться. При стабильном интернет-соединении, обновление проходит за несколько секунд, после чего новая версия автоматически запускается, максимально упрощая получение последних версий продукта.
Реализация
При успешной авторизации с FTP-сервера производится загрузка файла Version.txt. Сравнивается значение из этого файла со значением, которое хранится внутри самой программы. При обнаружении несоответствия предлагается обновить программу. При подтверждении запроса процесс закрывается, запускается приложение Update.exe, которое заменяет устаревшую версию более свежую, скачивая файл Garage.exe с FTP-сервера. В нём уже заложено новое значение версии, поэтому при повторной авторизации не будет предложения обновления.
7. OS Android
Программа Garage так же доступна под устройства на платформе Anroid с диагональю экрана 10,1 дюйм. Пока что спроектирована только под такой большой экран, т.к. работа с большими таблицами на маленьком экране не очень удобная. В ней доступен практически тот же функционал, что и в версии для OS Windows. Так же выполняется авторизация и синхронизация всех данных. На ней только отсутствуют функции WinAPI, регистрация и смена внешнего вида (т.к. она реализована средствами нестандартной библиотеки AlphaControls, доступной только для OS Windows). Как недостаток разработки под OS Android средствами Embarcadero стоит отметить неудобную навигацию в поле проектирования приложения под большую диагональ устройства. Для размещения компонентов в разных частях экрана приходится использовать ползунки. Кроме того они всё время тормозят на слабых машинах, а компиляция средненького проекта может длиться до 15 минут (опять-таки на слабых машинах).
8. Дополнительно
В настройках программы можно добавить её в автозагрузку. При каждом запуске компьютера, она будет автоматически запускаться. Данная функция реализована путём записи и удаления значений в реестр машины. Garage предусматривает несколько стилей оформления, которые пользователь может выбрать по свему вкусу, тем самым не навязывается свой единый дизайн, конечно, при желании, можно поставить стандартный стиль.
Отдаю дань уважения тем, кто набрался смелости и прочитал весь посто от начала до конца, надеюсь, было интересно. Если есть какие-то вопросы, замечания, предложения — пишите в комментариях. Если же что-то упустил — обязательно дополню статью. Рассчитываю на здоровую критику без предвзятостей. Всем удачи!
Автор: korsour