-
Notifications
You must be signed in to change notification settings - Fork 19
Структура
- Хранение данных
- Графический движок
- Графический редактор
- Движок расчета спецификации
- Движок ценообразования
- Движок планирования и подготовки производства
- Библиотека интеграции
Важно: все подсистемы Заказа дилера тщательно изолированы одна от другой. Используются слабые связи между объектами
Физически, документы и справочники Заказа дилера хранятся в объектных NoSQL базах IndexedDB в браузере и CouchDB на сервере.
Для упрощения интеграции с учетными и CRM системами, структура наших объектов максимально приближена к схожим по назначению объектам в 1С и популярных технологических программах. Например, наш документ Расчет похож на Заказ клиента из типовых УТ 11, КА 2.0 или ERP 2.1, а справочник Соединения похож на аналогичный из Суперокон.
Есть и существенные отличия. Например, в строках документа Расчет есть информация о геометри и ссылки на Ведущую продукцию, позволяющие привязать к изделию дополнительные материалы и услуги. В технологических справочниках, в отличии от Суперокон, есть возможность использовать произвольные формулы, связи параметров, вычисляемые номенклатуры и характеристики и мн. др.
Наличие объектного прототипа иногда создавало трудности. Например, типовые 1С ориентированы на серийное, а не позаказное производство, а известные оконные программы, оперируют на эскизе только прямыми и дугами. Наши механизмы диспетчеризации позволяют при необходимости учесть состояние каждого полуфабриката на любом передале, а элементы профиля и раскладок могут принимать произвольные формы со множеством перегибов.
Мы исходили из предположения, что если учетные и технологические справочники будут похожи на те, с которыми пользователи встречались в программах предудущего поколения, это упростит для них освоение и переход на Заказ дилера
Ядро графического построителя базируется на библиотеке Paper.js и предоставляет объекты, описывающие поведение слоёв и элементов изделия. Для разделения ответственности, объекты построителя не содержат методов взаимодействия с пользователем. Для редактирования используют отдельные объекты (инструменты - tools) графического редактора.
. Scheme # Изделие
├─ Contour # Семейство внешний (рамных) контуров
│ ├─ Contour # Семейство вложенных (створочных) контуров
│ ├─ Profile # Профили текущего контура
│ │ └─ ProfileAddl # Доборные профили текущего профиля
│ ├─ Filling # Заполнения текущего контура
│ │ └─ Onlay # Раскладки текущего заполнения
│ ├─ FreeText # Блоки текста текущего контура
│ ├─ DimensionLine # Размерные линии элементов контура
│ └─ Visualisations # Ручки, петли, метки, ошибки
├─ DimensionLine # Габаритные размерные линии изделия
├─ DimensionLineCustom # Пользовательские размерные линии
└─ ProfileConnective # Соединительные профили
Унаследован от paper.Project - верхний уровень в иерархии элементов изделия. Основные свойства:
-
contours
- массив рамных контуров текущего изделия -
ox
- указатель наСправочникОбъект.ХарактеристикиНоменклатуры
- продукция редактируемой строки заказа
Унаследован от paper.Layer - описывает слой изделия. Может быть внешним (самостоятельным, рамным) контуром, либо вложенным контуром (створка). Вложенность - любая.
Графический редактор базируется на той же библиотеке Paper.js, что и графический движок и предоставляет инструменты (tools) для манипулирования свойствами элементов изделия. Сам инструмент ничего не знает про особенности профиля, раскладки или заполнения, но он может заставить перекраситься, сдвинуться, изогнуться и т.д. любой элемент или группу элементов.
Предусмотрена возможность добавлять и подключать к редактору дополнительные инструменты со сторны интерфейса пользователя без необходимости перекомпилировать код программы.
Для лучшего понимания, инструмент редактора можно рассматривать, как сценарий, последовательность действий по вставке, удалению или изменению свойств элементов изделия.
Унаследован от paper.PaperScope. В текущей версии, используется единственный экземпляр, в котором редактируется текущее изделие, но в структуру данных заложена возможность:
- создания нескольких редакторов в отдельных окнах (закладках)
- открытия нескольких изделий в одном окне для синхронного редактирования
Основные свойства:
-
projects
- массив редактируемых изделий -
tools
- массив инструментов, доступных в текущем редакторе
Делает снапшот текущего изделия через 0.7 сек. после окончания любой операции редактирования и позволяет вернуться к предыдущему состоянию. Не сохраняет промежуточные состояния. Например, если непрерывно тянуть или изгибать профиль в разные стороны, система запомнит только начальное и конечное состояние - микросдвиги внутри такта редактирования записаны не будут.
Позволяет скапировать в буфер обмена операционной системы JSON сериализацию текущего изделия или выделенного элемента
Аккордеон в правой части редактора, умеет сворачиваться, содержит:
- Дерево слоёв (контуров) изделия с кнопками добавления - удаления слоя
- Таблицу свойств текущего (выделенного) элемента с возможностью указать координаты вершин, ваиант вставки и соединения на концах профиля
- Таблицу свойств текущей (выделенной) створки с возможностью указать тип и параметры фурнитуры
- Таблицу свойств изделия и строки заказа с возможностью указать параметры изделия, количество и скидку
Позволяет:
- Выделить элемент для изменения его свойств или перемещения
- Выделить отдельные узлы и рычаги узлов для изменения геометрии
- Добавить новый узел (изгиб) (кнопка {+} на цифровой клавиатуре)
- Удалить выделенный узел (изгиб) (кнопки {del} или {-} на цифровой клавиатуре)
- Добавить новый элемент, делением текущего (кнопка {+} при нажатой кнопке {пробел})
- Удалить выделенный элемент (кнопки {del} или {-} на цифровой клавиатуре) Инструмент поддерживает перетаскивание как элементов целиком, так и отдельных узлов (вершин). Для изогнутых элементов, позволяет изменить размер и направление рычага изгиба. При перетаскивании с нажатым {Shift}, сдвиг мыши привязывается к лучам с шагом в 45° относительно начальной точки смещения.
Позволяет:
- Изменять масштаб эскиза (колёсико мыши либо click при нажатых {Alt} или {Ctrl})
- Двигать изделие в пределах области видимости (перетаскивание либо колёсико мыши при нажатых {Alt} или {Ctrl})
- Двигать изделие по вертикали (колёсико мыши при нажатой {Ctrl})
- Двигать изделие по горизонтали (колёсико мыши при нажатой {Shift})
Предназначен для рисования рам, импостов, стоек, ригелей, раскладок, соединителей и доборных профилей. Перед рисованием, необходимо уазать:
- Слой, в который будет добавлен элемент
- Тип, цвет и материал (вставку) элемента
Имеет двоякое назначение:
- Позволяет указать и изменить расстояние между любыми профилями изделия. Например, уравнять по высоте импост в двери с рамой окна в балконном блоке
- Позволяет добавить пользовательские размерные линии с привязкой к любым внешним и внутренним точкам любых профилей.