Бипуим: Документация
8-800-505-24-05Сайт Бипиум
  • 😎Отвечаем на ваши вопросы
  • 🎂Версии и обновления
  • ❗Обновление до версии 2.0
  • Документация
    • 🆕С чего начать
      • Регистрация и вход
      • Создаем каталоги и записи
      • Формируем отчёты
      • Настраиваем правовую политику
      • Применяем автоматизации
    • ⚙️Конструктор данных
      • Отделы
      • Каталоги
        • Редактирование структуры
        • Настройка отображения
        • Поиск и фильтрация
        • Импорт записей
          • 📗Импорт из Excel
        • Экспорт записей
        • Активность
      • Системные каталоги
        • Сотрудники
        • События
        • Внешние запросы
        • Сценарии
        • Процессы
        • Доступ к сервисам
        • Вебхуки
      • Виды
      • Записи
    • 📊Отчеты
      • Графики
    • 🔑Права
      • Правила
      • Привилегии
      • Правовые группы
      • Правовые виды
      • Права на поля
      • Комбинация прав
    • 🤖Автоматизации
      • События
        • Изменение данных
        • Внешние запросы
      • Сценарии
        • Компоненты
          • Начало процесса
          • Конец процесса
          • Таймер
          • Ошибка
          • Шлюз «ИЛИ» (условное ветвление)
          • Шлюз «И» (распараллеливание)
          • Получить запись
          • Найти записи
          • Изменить запись
          • Создать запись
          • Удалить запись
          • Структура каталога
          • Загрузить файл
          • Сгенерировать документ
          • Назначение переменных
          • Код (Javascript)
          • Веб-запрос
          • SQL-запрос
          • Конвертер
          • Парсер
          • Запуск процесса
          • Получение почты
          • Отправка почты
          • Соединяющая линия
          • Отправить сообщение
        • Переменные
        • Выражения
        • Входные и выходные параметры компонентов
        • Примеры настройки
          • Условие
          • Цикл
      • Ограничения
  • Лицензии
    • 🌐Тип лицензирования
  • Примеры
    • 🔑Права доступа к данным
    • 🤖Автоматизации
      • Выгрузка файлов на Яндекс Диск
      • Отправка на больничный
      • Автоматизация оплаты счетов
      • Создание наименований записей
      • Расчет скидок для клиентов
      • Запрет на создание дубликатов в каталоге
      • Автозаполнение данных по ИНН
      • Переброс данных между связанными каталогами
      • Очередь сценариев
      • Отслеживание заявок с сайта помощью UTM-меток
      • Просрочка задач по дедлайну
      • Реализация механизма согласования записей
      • Массовое изменение записей
      • Создание каталога для рассылки почты
      • Перенос данных между системами Бипиума
      • Импорт данных из Excel
      • Генерация счет-фактуры
      • Генерация excel-отчетов
      • Планировщик задач
      • Импорт банковских выписок
      • Производственный календарь
      • Складской учет
  • Интеграции
    • 🥂Методы интеграции
      • Интеграция данных
        • API
        • Вебхуки (webhooks)
      • Интеграция интерфейса
        • Веб-формы
        • Веб-расширения
      • Примеры интеграций
        • Тильда
          • Прием данных с формы Tilda
          • Интеграция веб-интерфейса в Tilda
        • Интеграция с сервисом «DaData»
        • Интеграция c «Единой информационной системой в сфере закупок»
        • Мессенджеры
          • Интеграция с Telegram-ботом
        • Почтовые сервисы
          • UniSender
          • MailChimp
        • Сервисы Google
          • Google Calendar
        • Телефония
          • Oktell
            • Панель телефонии Oktell
            • Компонент Bpium в Oktell
        • 1C
    • 🔌API
      • Данные
        • Каталоги (Catalogs)
        • Записи (Records)
        • Связи (Relations)
        • Истории (Histories)
        • Файлы (Files)
        • Отделы (Sections)
        • Виды (Views)
        • Сообщения (Messages)
      • Агрегация
        • Разложения (Values)
        • Сводка (Totals)
      • Отчеты
        • Дашборды (Boards)
        • Графики (Widgets)
      • Поисковые выборки
        • Доступные связи (AvailableRecords)
        • Доступные условия фильтра (AvailableFilterRecords)
        • Сотрудники (Users)
        • Контакты (Contacts)
      • Права (Rights)
      • Профиль (Profile/me)
  • Установка на сервер
    • 🧱Архитектура
      • Варианты разворачивания
    • 🖥️Требования
    • 📂Установка как служба
    • 🛳️Установка через Docker
    • 🎛️Мультидоменная среда
    • 🆘Материалы
      • TLS/SSL Сертификат
      • Параметры config.env
        • Для Bpium
        • Для Bpium S3
        • Для Bpium BPM
      • Запуск
      • Обсуживание
        • Активация
        • Обновление
        • Бэкап и восстановление базы
        • Брендирование (Whitelabel)
        • Удаление
      • Перенос базы из облака
      • Возможные проблемы в ходе установки и работы
  • Обучение
    • Базовый курс
      • Урок 1. Отделы
      • Урок 2. Каталоги с данными
      • Урок 3. Карточки записей
      • Урок 4. Связи между данными
      • Урок 5. Фильтры и виды
      • Урок 6. Приглашение сотрудников
      • Урок 7. Права доступа к данным
      • Урок 8. Графические отчеты
      • Урок 9. Бизнес-процессы
      • Урок 10. Интеграции
    • Технический курс
      • Урок 1. Принцип работы автоматизаций
      • Урок 2. Первая автоматизация изнутри
      • Урок 3. Валидация данных
      • Урок 4. Простые вычисления
      • Урок 5. Расчет суммы заказа
      • Урок 6. Генерация счетов/документов
      • Урок 7. Рассылка почтовых сообщений
      • Урок 8. Прием внешних данных
      • Урок 9. Отправка данных на сторонние сервисы
    • Паттерны проектирования ИС
      • Унификация
      • Упорядоченность
      • Разделение
      • Актуализация
      • Вынос параметров
      • Выделение позиций
      • Слияние
      • Дублирование
      • Типизация
      • Информирование
Powered by GitBook
On this page
  • Описание
  • Проблематика
  • Ручное заполнение полей идентичными значениями
  • Усложнение фильтрации и ведения отчетности
  • Невозможность формирования динамического количества позиций
  • Невозможность добавления одного товара в заказы в разных количествах
  • Применение паттерна
  1. Обучение
  2. Паттерны проектирования ИС

Выделение позиций

PreviousВынос параметровNextСлияние

Last updated 7 months ago

Описание

Выделяйте отдельные параметры бизнес-объектов в отдельные сущности (каталоги)

Данный паттерн легко можно спутать с паттерном . Смысл у них похожий, но ключевое отличие в том, что в паттерне мы рекомендуем хранить информацию по каждому бизнес-объекту в отдельном каталоге, а в текущем паттерне Выделение позиций мы рекомендуем выделять некоторые параметры одного бизнес-объекта в отдельные объекты системы.

Проблематика

Рассмотрим проблемы несоблюдения паттерна выделения позиций на примере системы учета заказов, спроектированной на Бипиуме.

Заказ состоит из номенклатуры с указанием товаров и их количества. В одном заказе может быть номенклатура из нескольких различных товаров.

Если при проектировании не использовался паттерн и Выделение позиций, то в системе будет настроен единственный каталог - "Заказы":

На примере настроенного каталога можем выделить следующие проблемы:

  • Ручное заполнение полей идентичными значениями

  • Усложнение фильтрации и ведения отчетности

  • Невозможность формирования динамического количества позиций

Ручное заполнение полей идентичными значениями

В настроенном каталоге есть поля, которые заполняются текстовым значением вместо использования связей с дополнительными каталогами:

  • Клиент

  • Товар 1

  • Товар 2

Например: по одному клиенту в системе может быть несколько заказов. Во втором заказе по клиенту нужно вновь указывать его наименование вручную.

Такой подход увеличивает время заполнения полей в записи: каждое поле заполняется вручную вместо выбора уже заполненного ранее значения.

Кроме этого при добавлении дополнительных полей связанных с клиентом или товарами карточка заказа будет увеличиваться, затрудняя навигацию.

Усложнение фильтрации и ведения отчетности

Из-за ручного ввода значений вероятность орфографических ошибок многократно увеличивается. В связи с этим возможна некорректная фильтрация записей в каталоге.

Например, по одному и тому же клиенту заведено 2 заказа. В одном из них допущена орфографическая ошибка в наименовании клиента:

При попытке отфильтровать все заказы по клиенту система выдаст только один заказ, хотя фактически по клиенту сформировано два заказа:

Также будет затруднена фильтрация всех заказов по определенному товару. Предположим, что во втором заказе клиент хочет заказать те же товары, но названия товаров теперь расположены в других полях:

При попытке получить все заказы с монитором получаем только один заказ вместо двух:

Такое происходит из-за того, что во втором заказе монитор указан в поле “Товар 2”, а не “Товар 1”.

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

Невозможность формирования динамического количества позиций

В примере рассмотренном выше есть возможность заполнения номенклатуры, состоящей из двух товаров. При этом, если клиент закажет три разных товара, то в системе не будет возможности указать все три в рамках одной записи.

Для того, чтобы сформировать такой заказ:

  • Сотрудникам необходимо создать дополнительную запись и дозаполнить в ней “лишний” товар.

  • Разработчику системы нужно добавлять новые поля для каждого нового случая увеличения товаров в номенклатуре.

Невозможность добавления одного товара в заказы в разных количествах

Рассмотрим реализацию того же функционала формирования заказов в примере, когда "Количество" является атрибутом "Товара":

Предположим, что клиент делает второй заказ и также заказывает кресло, но в ином количестве.

По причине того, что мы берем тот же товар из того же каталога и укажем другое количество, у нас перезапишется количество товара и в первом заказе.

Действие вполне логичное, но в нашем контексте абсолютно некорректное.

В общем случае подобная ситуация может привести ко многим проблемам, связанным с несоответствием текущего состояния записей к их фактическому состоянию, а следовательно к некорректным данным, влияющие на текущие бизнес-процессы.

Применение паттерна

Были добавлены каталоги:

  • Клиенты: каталог с базой всех клиентов в системе

  • Товары: каталог с базой товаров, доступных к заказу

  • Позиции заказа: каталог-прослойка с указанием товара и его количества. Это как раз таки та самая отдельная сущность, которая была выведена из бизнес-объекта "Заказ" как отдельная сущность. "Позиция заказа" не является отдельным бизнес-объектом - это параметр заказа, выделенный в отдельный каталог.

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

Добавлять новые позиции товаров можно прямо внутри записи заказа

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

Мы часто сталкиваемся с тем, что пользователи применяют паттерн : для бизнес-объекта "Товар" создается отдельный каталог, но при этом "Количество" определяют как атрибут товара.

Теперь рассмотрим реализацию системы учета заказов с использованием паттерна и Выделение позиций:

Разделение
Разделение
Разделение
Разделение
Разделение
Здесь наименование заполнено корректно
А здесь в наименовании допущена ошибка: