Приветствую, уважаемое сообщество !
В данной публикации я хочу обзорно поведать об инструменте, который я разрабатываю.
Текущий уровень разработки вышел из этапов изучения и предварительного исследования и начал приобретать некие довольно четкие очертания, потому о нем можно начать рассказывать.
Графит это векторный правщик схем и диаграмм. Графит является настольным оконным exe приложением.
Для запуска Графита нет необходимости установки программы под правами админа. Можно просто скачать, запустить и работать.
Общий макет Графита должен выглядеть как обычная типовая среда рисования.
Основными элементами Графита являются примитивы:
*) Фигура;
*) Соединитель;
*) Отображалка;
Элемент "Фигура"
Фигура может быть представлена в виде: Прямоугольник, Овал, Многоугольник.
Конечно, для фигур имеется полный набор свойств рисования: Цвет фона, Цвет рамки, Узор рамки, Надписи и остальные.
Элемент "Соединитель"
Соединитель это просто линия, соединяющая фигуры или отображалки.
Конечно, для соединителя имеется полный набор свойств рисования: Цвет линии, Толщина линии, Узор линии, Окончания и прочие свойства.
Элемент "Отображалка"
Отображалка должна показывать svg картинку, полученную из шаблона через шаблонщик.
Отображалка является вместилищем следующих подчиненных объектов:
*) Шаблон svg;
*) Объект свойств;
При изменении свойств объекта отображалки, должно выполняться перестроение svg текста на основании svg шаблона с учетом новых значений свойств.
Полученный svg текст должен отображаться в отображалке.
Какую задачу должен решать Графит
Графит должен предоставлять возможность рисования 1С морд следующем потоке работ:
*) Заказчик обращается со свой задачей;
*) Аналитик или приказчик пишет тз и рисует 1С морды вне 1С конфигуратора без отвлечения программиста;
*) Заказчик прощелкивает прототип нехотя поглядывая в тз;
*) Пара итераций согласования с Заказчиком;
*) Оценка трудоемкости;
*) Программисту отдается согласованное и готовое тз в работу;
*) Заказчик получает результат работы почти полностью похожий на прототип;
Я занимаюсь разработкой веб-кабинетов для 1С из прототипирование часто бывает очень нужно.
Даже нарисовать простой набросок и согласовать его с Заказчиком это надо:
*) Из рисовалки сохранить картинку в файл;
*) Картинку отправить по почте или отправить в скайп;
*) Если надо изменить картинку, то это новый файл, который тоже надо отправить Заказчику;
Задача чуть упрощается, если картинки давать через гиперссылку на свое размещение.
Но в любом случае исходники картинки надо хранить для возможности повторной правки.
На текущий момент мною и моей командой применяется Adobe xd. Но, как и во всем сшашном, минусов больше чем плюсов.
*) Нет возможности создания автоматизованных шаблонов с логикой;
*) Файл картинки и файл исходников это два разных файла;
*) Для надо иметь последнюю версию windows 10;
*) Для публикации результата работ надо иметь платную подписку;
Суммируя, основная цель разработки Графита это:
*) Быстрое создание прототипа 1С морды аналитиком или приказчиком без привлечения 1С программиста;
*) Возможность отправки картинок на свое размещение (на своих серверах или у поставщика размещения сайта) прямо из Графита;
*) Возможность скреплять картинки гиперссылками для переходов между экранами;
*) Высокая правдоподобность нарисованных морд соответствующим 1С элементам формы;
*) Возможность расширения и изменения набора элементов конечным работником программы;
*) Возможность создания автоматизованных шаблонов с логикой;
*) Возможность повторно править эту же картинку без отдельных исходников прямо с размещения;
Центральное хранилище картинок
Считаю, что использовать центральное хранилище на своем размещении это более правильно.
Если у вас есть сайт, то создать поддомен это бесплатно.
Нет зависимости от сторонних веб-сервисов. Особенно от тех, у которых свой формат хранилища и свой движок отрисовки.
Ведь если вы сделаете картинку на стороннем веб-сервисе, то без сервиса она вам бесполезна.
Графит же предполагается раздавать бесплатно и вы сами себе хозяин.
Никаких внешних зависимостей:
*) Открытый текстовый формат шаблонов;
*) Свой настольный движок рисования на основе svg формата;
*) Отображение итогового svg в любом обозревателе;
*) Свои ресурсы для размещения в интернете;
Не оскудеет рука дающего.
Себе сделаю, сообществу планирую отдавать бесплатно.
Рисование
Данный этап сейчас в работе и картинки примеров показаны примерные.
Рисование 1С морд должно выполняться на основании шаблонов путем перетаскивания подключенного шаблона на поле рисования.
Шаблон это файл xml формата, в котором должны быть описаны:
*) Свойства отображалки, которая должна быть создана на основании шаблона;
На основании этих свойств должны создаваться управляторы на панели свойств, через которые должны изменяться значения свойств (флажки, списки выбора, поля ввода);
*) Логика построения svg текста в зависимости от значений параметров;
*) Каркас svg шаблона;
Снимок перетаскивания
Для примера рассмотрим шаблон поля ввода. При изменении настроек изменяется состав кнопок, совсем как в конфигураторе.
Сейчас на картинке обновление обозревателя происходит в ручном режиме. т.к. это еще разрабатывается.
Это фундаментальный механизм, который должен быть встроен в Графит и обновление будет происходить автоматически при установке галочки на панели свойств.
Построение поля ввода на основании параметров
Созданную морду дальнейшем можно выгрузить в svg файл.
Для Графита формат svg является не родным для хранения. В этот формат происходит только выгрузка.
Родным форматом является текстовый xml формат особой структуры.
Возможность повторно править эту же картинку без отдельных исходников должна быть достигнута использованием обычного svg формата, в котором "спрятан" текст, который понимает Графит.
Текст родного формата Графита должен быть сохранен одной строкой в base64 в первой строке в комментарии (открывашка: формат svg это обычный xml формат).
В приложенных файлах есть пример такой картинки, это уже запрограммировано.
Снимок svg с xml.
Шаблонщик
Шаблонщик это движок, который должен получить xml описание шаблона с параметрами и должен отдать итоговый svg текст, который должен быть отображен в отображалке на поле рисования.
Шаблонщик поддерживает программирование на русском языке (вражеского нет и не планируется).
На текущий момент шаблонщик поддерживает блоки:
*) Создание переменных {Присвоить}
*) Условия {Если}
*) Циклы {ДляКаждого}
Набор 15+ функций, например:
*) СкорЛП();
*) СтрРазделить();
*) ЕслиТогда();
*) Остальные функции;
Типы переменных:
*) Строка;
*) Число;
*) Массив;
В приложенных файлах есть архив в консольным шаблонщиком и шаблоном поля ввода. Пример программирования шаблона можно посмотреть в этом файле.
Для получения готового результата из шаблона, надо вызвать команду: demo.exe Шаблон.xml a.svg. В файле a.svg будет готовый svg файл, который можно открыть обозревателе для просмотра.
Набор шаблонов "Купец"
Данный набор шаблонов будет содержать элементы 1С морд. В основном это стиль "Такси".
Уже готовы элементы:
*) Главное окно;
*) Флажок;
*) Радио;
*) Тумблер;
*) Поле ввода;
Снимок готовых элементов набора "Купец"
Для каждого элемента стараюсь закладывать те возможности, которые есть для исходного элемента в конфигураторе.
Например для флажка это следующие свойства.
Снимок свойств флажка
Планы работ
Как оказалось, это довольно тяжелая, дорогая и кропотливая работа.
Программирование только одного шаблона это почти 300 строк кода Ёшаблонщика.
Сделано:
*) Продумана концепция и прописана во внутреннем тз на разработку;
*) Шаблонщик в базовом варианте;
*) Среда рисования и примитивы;
*) Отображалка svg в базовом варианте;
*) Внутренний xml формат Графита (чтение и запись);
*) Частичная выгрузка в svg с вложением xml в комментарии для возможности повторной правки;
*) Базовые элементы набора шаблонов "Купец".
План дальнейшей работы:
*) Изменить формат шаблона (Добавить описание управляторов для Графита);
*) Есть некоторые ошибки в работе шаблонщика;
*) В шаблонщике расширить функционал для работы с массивами;
*) Прописать функционал подключения шаблонов к Графиту (подключение из папки при пуске);
*) Прописать создание управляторов на панели свойств при выборе отображалки на поле рисования;
*) Прописать изменение свойств отображалки через панель свойств;
*) Прописать сохранение отображалок в svg формат (сейчас сохраняются только фигуры и соединители);
Еще работать и работать, да.
Пока это вся поверхностная информация, которую я хотел поведать сообществу о создаваемой разработке.
В следующих публикациях надеюсь более подробно описать моменты, которые были здесь только упомянуты.
Также постараюсь описывать и выкладывать результаты работы для ознакомления.