Получил очередное задание на разработку расширения, которое добавляет несколько общих команд. Параметры команд определяются при установке и настройке расширения через конфигуратор, команды должны располагаться в отдельной группе в определённом заказчиком порядке, должно работать на любых конфигурациях (в т.ч. без БСП), с замка ничего не снимать.
Вроде бы ничего необычного, но у расширения есть группа команд, в которой команды должны следовать в определенном порядке. Логично, что нужно как-то задать порядок команд по умолчанию, но у 1С своя логика:
- Несмотря на порядок в конфигураторе команды отображаются сортированными по синониму в алфавитном порядке, внутри группы изменение порядка не предусмотрено
- Если создать форму и открыть настройку программного интерфейса мы можем изменять порядок команд сняв галку "Автоположение" (Статья Как управлять расположением команд в командной панели формы?)
- Можно формировать команды программно или использовать соответствующие механизмы БСП
- Так же порядок можно менять через "Изменить форму" в режиме предприятия
Сортировка по алфавиту это конечно удобно, но чаще команды нужно расположить в порядке частоты использования или согласно какой-либо логике бизнес-процесса. 1 отпадает.
Так как мы не знаем, к каким объектам будут подключены команды расширения - мы не можем "прописать" интерфейс заранее. К тому же это трудоёмко и требует изменения форм. 2 и 3 отпадают.
Метод 4 для этой задачи неудобен и ненадёжен, хотя право на жизнь имеет.
И вот, казалось, опять настал момент обругать 1С и сказать заказчику что "В 1С это невозможно", хотя... она же сортирует команды по алфавиту! Рано мы 1 списали.
Из 3-х команд на букву "О" одна отображалась в середине, а нужно было в начале. Запросто: меняем русскую "О" на латинскую "O" и команда встала в самый верх группы. Но после добавления ещё нескольких команд стало очевидно, что латинских букв может не хватать, да и названия нужно придумывать "правильные" для сортировки.
Вот тут и пришла идея использовать для сортировки в начале синонима непечатные символы! Но оказалось, что поле ввода синонима в конфигураторе их фильтрует и не даёт ввести. Та же история со специальными символами Unicode - работают только те, что выдают какой-либо пробельный символ, а перспективные U+200B Zero-Width Space, U+200C Zero Width Non-Joiner и U+200D Zero Width Joiner тоже фильтруются. Спустя пару часов путем перебора всё-таки удалось найти нужный символ - U+180E Mongolian Vowel Separator.
Итак, сама технология:
- В 1С располагаем команды в нужном порядке в дереве конфигуратора (так легче добавлять символ и не запутаться)
- Запускаем Word, в пустом документе на латинском вводим 180e
- Нажимаем Alt+X (шрифт переключится на Mongolian Baiti), затем Shift+← (выделяем символ), ну и Ctrl+C (Ctrl+Insert)
- Теперь в конфигураторе начиная со второй по счету команды добавляем в начало синонима скопированный символ Ctrl+V (Shift+Insert), в каждую следующую команду добавляем на один символ больше.
- F7 - вуаля, всё получилось!
В комментарии указываю вставленное количество символов, если предполагается расширение списка команд - вставляю сразу по несколько символов, например по 5.
Предлагаю поделиться мнениями, что же это получилось: простое решение, костыль, г??нокод (есть правильное типовое решение) или свой вариант.