В предыдущем уроке мы изучили с вами новое значение по умолчанию parent для полей-ссылок. В этом разделе мы познакомимся с новым системным объектом «Сделка».
Для начала о проблеме. В первом прототипе мы разработали структуру базы, которая позволяла вести учет частичных платежей и отгрузок (уроки 4, 5, 6). Вот так выглядела эта структура.
Эта схема проста и удобна, если мы продаем по одному виду продукта. Например, мы продали 5 автомобилей. Деньги по ним пришли пришли двумя платежами, 50% предоплата и 50% по факту отгрузки. Отгрузка частями по этой схеме тоже возможна.
Но если нам нам нужно продать разные продукты в рамках одной сделки, провести по этой сделке платежи и отгрузки, то эта схема становится неудобной. Почему? Главное неудобство в том, что нам придется разбивать платежи, чтобы часть оплаты зафиксировать на один продукт, а часть на другой. Не будет видно общей суммы платежа. Тоже касается и отгрузок.
Именно по этой причине в системе был введен объект, который решает эту проблему. Зовут его Сделка. Это даже не объект, а несколько объектов связанных между собой. Рассмотрим их подробнее.
Начнем с определения. Сделка здесь обозначает продажу одного или нескольких продуктов/услуг за один период времени. Например, в январе вы продали клиенту карандаши и ластики, а в феврале вы продали этому же клиенту ручки и линейки. Будет две сделки, одна в январе, другая в феврале. Таким образом с одним клиентом может быть множество сделок с разным набором продуктов/услуг.
Вот как будет выглядеть описанная часть схемы со сделкой.
Но здесь нет привязки платежа к продукту. Это значит, что в будущем, когда в программе появятся отчеты, нам будет сложно построить отчет по деньгам в разрезе продуктов. Чтобы это было возможно нужно следующее отношение объектов. Показана только часть, касающаяся платежей.
Мы добавили общий дочерний объект «Продукт — Платеж» для объектов «Продукт» и «Платеж». В этом объекте и будут связи платежа с продуктами.
На этой схеме описан следующий случай продажи.
Мы продаем клиенту карандашей на 8 рублей и ластиков на 6 рублей. Общая сумма сделки составляет 14 рублей. На дворе кризис и у клиента имеются финансовые трудности. Он просит отгрузить товар по 50% предоплате, остальное обещает погасить в ближайшие полгода. Входим в положение клиента и соглашаемся.
Клиент платит 7 рублей. В объект «Платеж» мы добавляем 7 рублей, далее программа САМА добавляет в объект «Продукт — Платеж» две записи, одну для карандаша (4 рубля), другую для ластика (3 рубля). Почему получилось такое разделение по деньгам на 3 и 4 рубля? Все просто. Программа разделила платеж пропорционально стоимости продуктов. Вернее даже пропорционально суммам, которые осталось заплатить по каждому продукту.
Суммирующими полями все автоматически посчиталось и мы видим сколько заплатили по каждому продукту и по сделке в целом. Суммирующие поля на схеме отмечены закрашенными овалами.
Аналогичная связь объектов реализована и для отгрузок. Для объектов «Продукт» и «Отгрузка» добавлен общий дочерний объект «Продукт — Отгрузка».
Далее показана полная структура объектов для Сделки.
Вроде бы сложно все получается. Но для пользователя все выглядит очень просто. Во-первых, объекты «Продукт — Платеж» и «Продукт — Отгрузка» пользователю показывать совсем не обязательно (даже вредно). Во-вторых, все сводится к простым и понятным действиям: добавил продукт, добавил платеж, добавил отгрузку.
Давайте посмотрим как это будет выглядеть в программе.
Откройте Сделки (из меню Данные — Сделки) и создайте новую сделку. Здесь мы намеренно не добавляем сделку из карточки клиента — сейчас это не важно.
Добавьте продукт Карандаш. В поле «Продукт» выберите Карандаш, в поле «К оплате» укажите 8 и в поле «К отгрузке» укажите 8.
Добавьте продукт Ластик, к оплате 6, к отгрузке 3.
Список продуктов сформирован. Автоматически посчитана общая сумма сделки и общее количество к отгрузке.
Допустим от клиента пришли деньги. Добавим платеж в 7 рублей на вкладке Платежи. В этом окне достаточно только ввести цифру 7 (дата установилась автоматически, галочки на продуктах, за которые пришли деньги, установились автоматически).
Теперь отгрузим половину продуктов. На вкладке «Отгрузки» добавим отгрузку и для каждого продукта укажем половину общего количества.
Обратите внимание на столбец «Отгружено», он выделен цветом, в нем можно менять значения. По умолчанию, программа устанавливает там то количество продуктов, которое осталось отгрузить.
Теперь посмотрим на сделку.
Здесь мы видим полную информацию как по сделке (к оплате, оплачено, к отгрузке, отгружено) так и по каждому продукту сделки. Все просто и наглядно.
Интересно, что скажет клиент, получив бандеролью полтора ластика?
На этом все. Приступайте изучать третий прототип.