Урок 4 — Связка объектов «Сделка»

В предыдущем уроке мы изучили с вами новое значение по умолчанию parent для полей-ссылок. В этом разделе мы познакомимся с новым системным объектом «Сделка».

Для начала о проблеме. В первом прототипе мы разработали структуру базы, которая позволяла вести учет частичных платежей и отгрузок (уроки 456). Вот так выглядела эта структура.

Эта схема проста и удобна, если мы продаем по одному виду продукта. Например, мы продали 5 автомобилей. Деньги по ним пришли пришли двумя платежами, 50% предоплата и 50% по факту отгрузки. Отгрузка частями по этой схеме тоже возможна. 

Но если нам нам нужно продать разные продукты в рамках одной сделки, провести по этой сделке платежи и отгрузки, то эта схема становится неудобной. Почему? Главное неудобство в том, что нам придется разбивать платежи, чтобы часть оплаты зафиксировать на один продукт, а часть на другой. Не будет видно общей суммы платежа. Тоже касается и отгрузок.

Именно по этой причине в системе был введен объект, который решает эту проблему. Зовут его Сделка. Это даже не объект, а несколько объектов связанных между собой. Рассмотрим их подробнее.

Начнем с определения. Сделка здесь обозначает продажу одного или нескольких продуктов/услуг за один период времени. Например, в январе вы продали клиенту карандаши и ластики, а в феврале вы продали этому же клиенту ручки и линейки. Будет две сделки, одна в январе, другая в феврале. Таким образом с одним клиентом может быть множество сделок с разным набором продуктов/услуг.

Вот как будет выглядеть описанная часть схемы со сделкой.

Но здесь нет привязки платежа к продукту. Это значит, что в будущем, когда в программе появятся отчеты, нам будет сложно построить отчет по деньгам в разрезе продуктов. Чтобы это было возможно нужно следующее отношение объектов. Показана только часть, касающаяся платежей.

Мы добавили общий дочерний объект «Продукт — Платеж» для объектов «Продукт» и «Платеж». В этом объекте и будут связи платежа с продуктами.

На этой схеме описан следующий случай продажи.

Мы продаем клиенту карандашей на 8 рублей и ластиков на 6 рублей. Общая сумма сделки составляет 14 рублей. На дворе кризис и у клиента имеются финансовые трудности. Он просит отгрузить товар по 50% предоплате, остальное обещает погасить в ближайшие полгода. Входим в положение клиента и соглашаемся.

Клиент платит 7 рублей. В объект «Платеж» мы добавляем 7 рублей, далее программа САМА добавляет в объект «Продукт — Платеж» две записи, одну для карандаша (4 рубля), другую для ластика (3 рубля). Почему получилось такое разделение по деньгам на 3 и 4 рубля? Все просто. Программа разделила платеж пропорционально стоимости продуктов. Вернее даже пропорционально суммам, которые осталось заплатить по каждому продукту.

Суммирующими полями все автоматически посчиталось и мы видим сколько заплатили по каждому продукту и по сделке в целом. Суммирующие поля на схеме отмечены закрашенными овалами.

Аналогичная связь объектов реализована и для отгрузок. Для объектов «Продукт» и «Отгрузка» добавлен общий дочерний объект «Продукт — Отгрузка».

Далее показана полная структура объектов для Сделки.

Вроде бы сложно все получается. Но для пользователя все выглядит очень просто. Во-первых, объекты «Продукт — Платеж» и «Продукт — Отгрузка» пользователю показывать совсем не обязательно (даже вредно). Во-вторых, все сводится к простым и понятным действиям: добавил продукт, добавил платеж, добавил отгрузку.

Давайте посмотрим как это будет выглядеть в программе.

Откройте Сделки (из меню Данные — Сделки) и создайте новую сделку. Здесь мы намеренно не добавляем сделку из карточки клиента — сейчас это не важно.

Добавьте продукт Карандаш. В поле «Продукт» выберите Карандаш, в поле «К оплате» укажите 8 и в поле «К отгрузке» укажите 8.

Добавьте продукт Ластик, к оплате 6, к отгрузке 3.

Список продуктов сформирован. Автоматически посчитана общая сумма сделки и общее количество к отгрузке.

Допустим от клиента пришли деньги. Добавим платеж в 7 рублей на вкладке Платежи. В этом окне достаточно только ввести цифру 7 (дата установилась автоматически, галочки на продуктах, за которые пришли деньги, установились автоматически).

Теперь отгрузим половину продуктов. На вкладке «Отгрузки» добавим отгрузку и для каждого продукта укажем половину общего количества.

Обратите внимание на столбец «Отгружено», он выделен цветом, в нем можно менять значения. По умолчанию, программа устанавливает там то количество продуктов, которое осталось отгрузить.

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

Здесь мы видим полную информацию как по сделке (к оплате, оплачено, к отгрузке, отгружено) так и по каждому продукту сделки. Все просто и наглядно.

Интересно, что скажет клиент, получив бандеролью полтора ластика?

На этом все. Приступайте изучать третий прототип.