Windows Автоматизированное размещение лифтов в панели состояний

  • Автор темы Автор темы Andi
  • Дата начала Дата начала

Andi

Сотрудник
Команда LKDS
Клиент - серверное решение используется все шире. На одном сервере может быть много клиентов, имеющих доступ к разному набору лифтов, размеры мониторов разные. Для решения проблемы рационального размещения прямоугольников лифтов в панели состояния SPult были введены "профили" пользователей. Этим инструментом пользуются, но это достаточно трудоёмко - переделывать профили (т.е. размещения в произвольных группах для конкретных пользователей) при появлении новых лифтов.

Проблема автоматизированного размещения лифтов в панели состояний уже обсуждалась в теме по SPult, но в связи с важностью проблемы вынес обсуждение отдельную тему.

Что бы обсуждать предметно, была разработана программа AvtoTable доступная по ссылке

В неё можно загрузить XML файл структуры от MPultPro (MPultPro.XML), загруженные структуры SPult, выгруженную структур LKDSDisp (LKDSDispStruct.XML): AvtoTable1.png AvtoTable2.png Далее можно прорисовать любой диспетчерский пункт: AvtoTable3.png назначить дополнительные параметры размещения: AvtoTable4.png AvtoTable5.png AvtoTable6.png и получить, например, такое размещение: AvtoTable7.png Можно менять размеры окна.

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

Вложения

  • AvtoTable1.png
    AvtoTable1.png
    15.5 KB · Просмотры: 1
  • AvtoTable2.png
    AvtoTable2.png
    120.5 KB · Просмотры: 1
  • AvtoTable3.png
    AvtoTable3.png
    26.2 KB · Просмотры: 1
  • AvtoTable4.png
    AvtoTable4.png
    38.3 KB · Просмотры: 1
  • AvtoTable5.png
    AvtoTable5.png
    29 KB · Просмотры: 1
  • AvtoTable6.png
    AvtoTable6.png
    29.2 KB · Просмотры: 1
  • AvtoTable7.png
    AvtoTable7.png
    87 KB · Просмотры: 1
Андрей Ефименко написал(а):
Клиент - серверное решение используется все шире. На одном сервере может быть много клиентов, имеющих доступ к разному набору лифтов, размеры мониторов разные. Для решения проблемы рационального размещения прямоугольников лифтов в панели состояния SPult были введены "профили" пользователей. Этим инструментом пользуются, но это достаточно трудоёмко - переделывать профили (т.е. размещения в произвольных группах для конкретных пользователей) при появлении новых лифтов.

Проблема автоматизированного размещения лифтов в панели состояний уже обсуждалась в теме по SPult, но в связи с важностью проблемы вынес обсуждение отдельную тему.

Что бы обсуждать предметно, была разработана программа AvtoTable доступная по ссылке

В неё можно загрузить XML файл структуры от MPultPro (MPultPro.XML), загруженные структуры SPult, выгруженную структур LKDSDisp (LKDSDispStruct.XML): Вложение IPB #1384 Вложение IPB #1385 Далее можно прорисовать любой диспетчерский пункт: Вложение IPB #1386 назначить дополнительные параметры размещения: Вложение IPB #1387 Вложение IPB #1388 Вложение IPB #1389 и получить, например, такое размещение: Вложение IPB #1390 Можно менять размеры окна.

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


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

При вызове контекстного меню определенной улицы и выборе "Параметры размещения улицы" алгоритм тот же, что и описанный выше (с двумя блоками) с поправкой на то, что изменения применяются к одной улице.

По размещению: В "Параметрах отображения дома" не хватает пункта "С разделителем в одно место+наименование", при выборе которого в пустой клетке разделения прописывается номер дома.

Так же на 1 улице может быть всего 1 дом с одним лифтом, и выделять для такой улицы целых 2 строки экрана, которые будут почти пустые, негуманно, а обозначить улицу надо. Можно ввести параметр типа"Совмещать не полностью занятые строки"
То есть производится проверка, если следующая улица помещается в предыдущую строку, то она переносится вверх, и так далее.Соответственно между улицами делается 1 пропуск, если в настройках выбрано указывать наименование дома, то 2 пропуска, и во втором указывается наименование дома.

Так же, в дополнение к вышеописанному параметру можно сделать дополнительный параметр типа"Совмещать улицы не по порядку" при выборе которого происходит проверка и если выше есть полупустая строка к ней присоединяется улица, которая помещается в эту строку, пусть даже c разных концов экрана.

При добавлении новых лифтов в улицу, на которой было мало лифтов происходит проверка, если все улицы, которые были на данной строке помещаются, то все остается без изменений, если не помещается последняя, она спускается на новую строку, но если выбрано "совмещение не по порядку" происходит проверка, и при наличии места выше(или ниже) она перемещается туда. Потом происходит проверка n-1 улицы данной строки, и алгоритм тот же. При уменьшении количества домов(лифтов) алгоритм примерно тот же.
 
Последнее редактирование модератором:
Kranch написал(а):
Для применения настройки ко всей диспетчерской целиком не хватает контекстного меню "Параметры размещения диспетчерской" которое появляется при нажатии на название диспетчерской.
А вообще было бы удобней, что бы при вызове контекстного меню Диспетчерской, и выборе"Параметры размещения диспетчерской" появлялось появлялось окно с 2 блоками:
-Первый блок -меню из "Параметры размещения улицы "
-Второй блок -меню из "Параметры размещения дома"
При изменениях в данных блоках применяются параметры для всех улиц и домов размещения. Впоследствии можно откорректировать определенную улицу или дом отдельно.

При вызове контекстного меню определенной улицы и выборе "Параметры размещения улицы" алгоритм тот же, что и описанный выше (с двумя блоками) с поправкой на то, что изменения применяются к одной улице.

По размещению: В "Параметрах отображения дома" не хватает пункта "С разделителем в одно место+наименование", при выборе которого в пустой клетке разделения прописывается номер дома.

Так же на 1 улице может быть всего 1 дом с одним лифтом, и выделять для такой улицы целых 2 строки экрана, которые будут почти пустые, негуманно, а обозначить улицу надо. Можно ввести параметр типа"Совмещать не полностью занятые строки" если выбран данный параметр, то:[Вложение IPB #1391 отсутствует в исходной базе]
То есть производится проверка, если следующая улица помещается в предыдущую строку, то она переносится вверх, и так далее.Соответственно между улицами делается 1 пропуск, если в настройках выбрано указывать наименование дома, то 2 пропуска, и во втором указывается наименование дома.

Так же, в дополнение к вышеописанному параметру можно сделать дополнительный параметр типа"Совмещать улицы не по порядку" при выборе которого происходит проверка и если выше есть полупустая строка к ней присоединяется улица, которая помещается в эту строку, пусть даже c разных концов экрана.[Вложение IPB #1392 отсутствует в исходной базе]

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

Предложения понятны, буду реализовывать и попутно выкладывать доработанную программу.
 
Андрей Ефименко написал(а):
Предложения понятны, буду реализовывать и попутно выкладывать доработанную программу.


Ещё, для нас было бы актуально, что бы можно было поменять цвет фона с белого на любой. Можно это организовать либо настройках "Параметры размещения диспетчерской" по типу, как это реализовано в размещении в"виде произвольных групп", в "цвет фона группы", либо, как это реализовано сейчас, через ключ. Так же, было бы удобно, если эти настройки выполнялись через создание профиля, а клиент уже подтягивал эти настройки.

Хотя, система профилей больше подходит вот для чего. У нас некоторые прорабы, и некоторые механики просят доступ к лифтам, которые они обслуживают. Сейчас мы думаем, как это можно организовать, и получается, что на текущий момент придется для каждого создавать отдельную группу(а их всего может быть 32), с их лифтами, и давать им к ней доступ для просмотра.Что не есть удобно. Так же у нас забиты справочные параметры лифта(то есть каждый лифт на сервере привязан к прорабу+механику). Соответственно, было бы удобно дать пользователю доступ ко всем лифтам, но ограничивать видимость и взаимодействие с лифтом фильтром "профиль". При подключении SPult, или ASpult вбиваем пользователя, пароль, в поле "профиль" данные из справочных параметров лифта(допустим, что забито в поле "Бригадир"), и при подключении сервер подгружает файл не со всеми доступными лифтами, этого пользователя, а только те лифты, у которых в поле "Бригадир" предварительно записаны нужные данные. Права определяются настройкой пользователя. Можно добавить "наследование" то есть, если механик ушел в отпуск, и нужно его лифты передать на просмотр другому, то делаем Профиль нового механика наследником профиля старого механика, и при заходе в ASpult ему отображаются лифты 2х профилей. Конечно, это все ИМХО, и расписано, как было бы удобнее нашей организации.
 
Последнее редактирование модератором:
Kranch написал(а):
Ещё, для нас было бы актуально, что бы можно было поменять цвет фона с белого на любой. Можно это организовать либо настройках "Параметры размещения диспетчерской" по типу, как это реализовано в размещении в"виде произвольных групп", в "цвет фона группы", либо, как это реализовано сейчас, через ключ. Так же, было бы удобно, если эти настройки выполнялись через создание профиля, а клиент уже подтягивал эти настройки.

Хотя, система профилей больше подходит вот для чего. У нас некоторые прорабы, и некоторые механики просят доступ к лифтам, которые они обслуживают. Сейчас мы думаем, как это можно организовать, и получается, что на текущий момент придется для каждого создавать отдельную группу(а их всего может быть 32), с их лифтами, и давать им к ней доступ для просмотра.Что не есть удобно. Так же у нас забиты справочные параметры лифта(то есть каждый лифт на сервере привязан к прорабу+механику). Соответственно, было бы удобно дать пользователю доступ ко всем лифтам, но ограничивать видимость и взаимодействие с лифтом фильтром "профиль". При подключении SPult, или ASpult вбиваем пользователя, пароль, в поле "профиль" данные из справочных параметров лифта(допустим, что забито в поле "Бригадир"), и при подключении сервер подгружает файл не со всеми доступными лифтами, этого пользователя, а только те лифты, у которых в поле "Бригадир" предварительно записаны нужные данные. Права определяются настройкой пользователя. Можно добавить "наследование" то есть, если механик ушел в отпуск, и нужно его лифты передать на просмотр другому, то делаем Профиль нового механика наследником профиля старого механика, и при заходе в ASpult ему отображаются лифты 2х профилей. Конечно, это все ИМХО, и расписано, как было бы удобнее нашей организации.

Это все касается клиент-серверного решения в целом. Ограниченное число групп лифтов, к которым даётся доступ и права существенно упрощает реализацию ПО, но и накладывает ограничения на дробление доступа. Если использовать профили и в группах разместить не все лифты, то действительно в панели состояний будут только лифты, которые присутствую в группах размещения в профиле, но в дереве все равно будут все лифты и в ASPult будут все лифты.

При разработки нашего "облака" (LKDSCloud) было введено понятие "организации", причем в разных организациях может быть описан один и тот же лифт. Наверное можно было бы и в LKDSDisp ввести понятие "организации", тогда каждая организация может иметь свои 32 группы лифтов по доступу и ограничение на число групп по доступу будет снято. "Организацией" может быть, например, хозяин лифтов - ТСЖ, в этой организации только лифты данного ТСЖ для наблюдения за ними самим ТСЖ, а "объединенная организация" содержит все лифты и предназначена для диспетчеризации.
 
Kranch написал(а):
Для применения настройки ко всей диспетчерской целиком не хватает контекстного меню "Параметры размещения диспетчерской" которое появляется при нажатии на название диспетчерской.
А вообще было бы удобней, что бы при вызове контекстного меню Диспетчерской, и выборе"Параметры размещения диспетчерской" появлялось появлялось окно с 2 блоками:
-Первый блок -меню из "Параметры размещения улицы "
-Второй блок -меню из "Параметры размещения дома"
При изменениях в данных блоках применяются параметры для всех улиц и домов размещения. Впоследствии можно откорректировать определенную улицу или дом отдельно.

При вызове контекстного меню определенной улицы и выборе "Параметры размещения улицы" алгоритм тот же, что и описанный выше (с двумя блоками) с поправкой на то, что изменения применяются к одной улице.

По размещению: В "Параметрах отображения дома" не хватает пункта "С разделителем в одно место+наименование", при выборе которого в пустой клетке разделения прописывается номер дома.

Так же на 1 улице может быть всего 1 дом с одним лифтом, и выделять для такой улицы целых 2 строки экрана, которые будут почти пустые, негуманно, а обозначить улицу надо. Можно ввести параметр типа"Совмещать не полностью занятые строки" если выбран данный параметр, то:[Вложение IPB #1391 отсутствует в исходной базе]
То есть производится проверка, если следующая улица помещается в предыдущую строку, то она переносится вверх, и так далее.Соответственно между улицами делается 1 пропуск, если в настройках выбрано указывать наименование дома, то 2 пропуска, и во втором указывается наименование дома.

Так же, в дополнение к вышеописанному параметру можно сделать дополнительный параметр типа"Совмещать улицы не по порядку" при выборе которого происходит проверка и если выше есть полупустая строка к ней присоединяется улица, которая помещается в эту строку, пусть даже c разных концов экрана.[Вложение IPB #1392 отсутствует в исходной базе]

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

Выложен следующий вариант Программы демонстрации авторазмещения

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

Параметры следующие: AvtoTable8.png

Опять же хотел бы получить отзывы.
 

Вложения

  • AvtoTable8.png
    AvtoTable8.png
    16.1 KB · Просмотры: 1
Андрей Ефименко написал(а):
Выложен следующий вариант Программы демонстрации авторазмещения

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

Параметры следующие: Вложение IPB #1396

Опять же хотел бы получить отзывы.


Ответил в ЛС
 
Андрей Ефименко написал(а):
Выложен следующий вариант Программы демонстрации авторазмещения

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

Параметры следующие: Вложение IPB #1396

Опять же хотел бы получить отзывы.

Очередной вариант.

Сделаны косметические изменения:

1) можно менять цвет фона всей панели
2) Надписи делаются посередине строки по высоте.
3) Номера домов выравниваются вправо
4) Если наименование улицы или номер дома не помещается полностью, то строка обрезается и в конце "..."
5) Если используются разделители улиц, но номер первого дома пишется в этом разделителе, т.е. экономится одно место на одну улицу
6) Размер шрифта надписей меняется в зависимости от размера одного места (прямоугольника лифта)
 
AvtoTable9.png

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

1. Если строка улицы начинает размещается НЕ с начала строки панели, но может поместиться в строку панели целиком, то можно задать режим "Целиком на строке", при котором строка данной улицы будет размещаться с начала следующей строки панели состояний.
2. Режим "Полное наименование" позволяет выводить полное наименование улицы.
3. Добавлены всплывающие подсказки на дома и улицы
 

Вложения

  • AvtoTable9.png
    AvtoTable9.png
    17.6 KB · Просмотры: 1
Выложен следующий вариант автоматического размещения с дополнительными возможностями:

1. Если задать режим "Целиком на строке", то улица обводится рамкой. Если при этом улица занимает несколько строк, то пустые горизонтальные интервалы убираются.
2. Добавлена возможность указания цвета первого прямоугольника улицы.
3. Оптимизировано размещение и размер шрифта подписи для дома.
 
Последнее редактирование модератором:
Выложен практически последний вариант автоматического размещения:

1. Добавлена возможность задавать цвет фона улицы. Цвет фона всей панели размещения и улицы может быть задан в дереве адресов по правой кнопке мыши либо в самой панели размещения по правой кнопке мыши - над наименованием улицы задаётся цвет фона улицы, на свободном поле панели размещения задаётся цвет фона всей панели.

2. Убрана возможность влиять на размещение, т.е. размещение всегда делается максимально информативным.

3. Из наименования улицы в панели размещения убирается "ул." "пер."
 
Последнее редактирование модератором:
Номер дома если не вмещается в клетку, то обрезается. Может есть смысл добавлять клеток пока не вместится весь номер? Информативность не максимальна.
2017_05_12_15_32_53.png
 

Вложения

  • 2017_05_12_15_32_53.png
    2017_05_12_15_32_53.png
    46.4 KB · Просмотры: 1
Последнее редактирование модератором:
Думаю:

1. уменьшать шрифт. Ну чтоб 5знаков в поле входило, а если больше то 3знака и 2 точки.. Не видел ещё длиней номера.

или

2. сделать пропуск изначально в 2 клетки.
 
revit написал(а):
Номер дома если не вмещается в клетку, то обрезается. Может есть смысл добавлять клеток пока не вместится весь номер? Информативность не максимальна.
Вложение IPB #1414


котяра написал(а):
Думаю:

1. уменьшать шрифт. Ну чтоб 5знаков в поле входило, а если больше то 3знака и 2 точки.. Не видел ещё длиней номера.

или

2. сделать пропуск изначально в 2 клетки.


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

Выложен очередной вариант программы:

1) Уменьшен шрифт, используемый при прорисовке названия улицы и убрано многоточие.
2) Уменьшен шрифт, используемый при прорисовке номера дома и убрано многоточие.
3) Фон панели не влияет на фон улиц. Т.е. при изменении фона панели, фон улицы не меняется.
4) Можно задать фон сразу всем улицам из меню на уровне диспетчерского пункта. При этом фон меняется сразу у всех улиц. Можно, конечно, потом задать фон и для конкретной улицы из меню на уровне улицы.
 
Да бывают длинные. Но на моем скрине все номера вида хх-х т.е номер с буквой 11-Д и т.п.
 
revit написал(а):
Да бывают длинные. Но на моем скрине все номера вида хх-х т.е номер с буквой 11-Д и т.п.

А в новой версии программы наименования домов так же не помещаются? У нас наименования типа: 122А и 114/8 полностью отображаются на пустой ячейке.
 
Последнее редактирование модератором:
В новом номера вида хх-х полностью видны, но вот ххх-х или ххх/х уже не помещаются. В целом лучше чем было.
 
Выложен очередной вариант программы:

1) Немного увеличен шрифт, используемый при прорисовке названия улицы.
2) Улицы на одной строке разделяются. Разделение производится путем увеличения на одну позицию (на одно "место") ширины рамки левой улицы.
3) Рамка последней или единственной улицы на строке увеличивается по ширине так, что бы рамка не налезала на прямоугольник последнего лифта. Правда при этом возникает вероятность наползания таких рамок на границу панели.
 
В номерах вида ХХХ-Х или ХХХ/Х последний знак не виден. Место для переноса этого знака есть в квадратике. Может его переносить во вторую строку с привязкой к правому краю?
dneprXXX.jpg
 

Вложения

  • dneprXXX.jpg
    dneprXXX.jpg
    130.7 KB · Просмотры: 1
Последнее редактирование модератором:
revit написал(а):
В номерах вида ХХХ-Х или ХХХ/Х последний знак не виден. Место для переноса этого знака есть в квадратике. Может его переносить во вторую строку с привязкой к правому краю?
Вложение IPB #1415

Выложен очередной вариант программы:

1) В подсказке к лифту дополнительно выдаётся адрес ЛБ в сети "Обь" в виде <Подсеть>:<УМ>:<Слот>
2) Длинные номера домов выдаются в две строки.
 
Назад
Сверху