Подмена заголовка 1С

Публикация № 959920

Программирование - Работа с интерфейсом

Windows Администрирование Программирование Утилиты Настройки Удобные доработки.

24
Подстановка имени базы данных в начало заголовка окон с программой 1С (конфигуратор и предприятие). Удобно при одновременной работе с большим количеством баз данных. Скрипт интересен будет как для программистов, так и для администраторов баз данных. Заголовок можно менять для любой программы, не только для 1С, для этого требуется немного исправить скрипт. Программисту 1С не составит труда переделать скрипт.

Когда ведется разработка с несколькими базами, устаешь кликать на значок "Показать информацию о программе". Предлагаю небольшой скрипт для удобства. Скрипт уже включен в поставку программы Faster, его надо только активировать.

Программу можно скачать здесь: Многофункциональный ускоритель Faster

Для тех кто не пользуется автоподстановкой в программе - отключите "Перехват клавиш и мыши" (см. рис. 2).

Вот сам скрипт (его можно переписать под себя, как вам удобно, язык похож на 1С) :

// корректируем заголовок во всех запущенных 1С
// в начало заголовка добавляем имя базы данных
// если Компьютеры.Запрос возвращает ошибку, то вероятно на компьютере не запущена служба WMI
// данный скрипт лучше запускать в отдельном потоке, для этого добавьте код в скрипт'Старт'
// НС="Подмена заголовка 1С";
// Если(Окна.Есть(НС,"TFormMainDefy")=0)Тогда Скрипты.Запустить(, НС, 5);Конец;

Окна1С = Окна.Определить(, "V8TopLevelFrame");
Для Окно1С Из Окна1С Цикл
    ЗаголовокБыл = Окно1С.'Заголовок окна';
    ПервыйСимвол = Строки.Подстрока(ЗаголовокБыл, 1, 1);
    Если (Строки.Есть(ПервыйСимвол, ".,:,·")) Тогда Продолжить; Конец;
    ИдОкна = Окно1С.'Идентификатор окна';
    Список = Компьютеры.Запрос("SELECT CommandLine FROM WIN32_Process WHERE ProcessId="+Окна.Процесс(ИдОкна));
    Если (Список<=0) Тогда
        Сообщить("Ошибка при вызове Компьютеры.Запрос", Ошибки.Строка(Список));
        Этот.Отмечен = 0; // отключаем автовыполнение скрипт
        Возврат;
    Конец;
    Для Объект Из Список Цикл
        Стр = Объект.Текст;
        Если (Строки.Подстрока(Стр, 1, 11)="CommandLine") Тогда
            // Сообщить(Стр);
            ИмяБД            = "";
            ПрефиксИмени     = "";
            ПараметрыКоманды = Строки.Разделить(Стр, " ", , """");
            Для Параметр Из ПараметрыКоманды Цикл
                Если (Строки.Подстрока(Параметр, 1, 2)="/F") Тогда // файловая база
                    ИмяБД = Параметр; ПрефиксИмени = ".";
                    Прервать;
                Конец;
                Если (Строки.Подстрока(Параметр, 1, 2)="/S") Тогда // серверная база
                    ИмяБД = Параметр; ПрефиксИмени = ":";
                    Прервать;
                Конец;
                Если (Строки.Подстрока(Параметр, 1, 7)="/IBName") Тогда // имя базы в списке баз стартера 1С
                    ИмяБД = Строки.Заменить(Параметр, "IBName", ""); ПрефиксИмени = "·";
                    Прервать;
                Конец;
            Конец;
            Если (ИмяБД<>"") Тогда
                Поз = Строки.Найти(ИмяБД, Символы.ОС, 1, 1);
                Если (Поз=0) Тогда Поз = Строки.Найти(ИмяБД, "/", 1, 1); Конец;
                ИмяБД          = Строки.Подстрока(ИмяБД, Поз+1, Строки.Длина(Параметр)-Поз);
                ИмяБД          = Строки.Заменить(ИмяБД,  """",  "");
                ЗаголовокНовый = ПрефиксИмени            +      ИмяБД + " - "+ ЗаголовокБыл;
                // Сообщить(ЗаголовокНовый);
                Окна.Заголовок(ИдОкна, ЗаголовокНовый);
            Иначе
                Сообщить("ИмяБД не определено", Стр);
            Конец;
        Конец;
    Конец;
Конец;

 

24

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. CheBurator 3386 10.12.18 00:17 Сейчас в теме
А просто скрипт, который будет работать в виндах без дополнительных "окружений" - не...?
2. moolex 789 10.12.18 07:26 Сейчас в теме
(1) Без дополнительных окружений - надо писать на английском...
А я программист 1С - я привык думать и программировать на русском.
Надо любить свой язык, спасибо 1С за это...
Да и не было бы 1С и этого сайта, если бы компания 1С выбрала основной язык программирования на английском...
Я знаю много языков программирования и занимаюсь кодом 20 лет, но писать код и думать на родном языке оказалось проще...
Это факт.
DarkUser; K_Ilia; +2 1 Ответить
3. kuzyara 742 04.01.19 09:03 Сейчас в теме
4. moolex 789 04.01.19 10:22 Сейчас в теме
5. slawa 25 23.01.19 16:21 Сейчас в теме
Пишет ошибку: "Ошибка при вызове Компьютеры.Запрос - Доступ запрещен"

WMI запущен и отвечает
PS C:\Users\Slawa> get-wmiobject Win32_OperatingSystem
SystemDirectory : C:\Windows\system32
Organization :
BuildNumber : 14393
RegisteredUser :
SerialNumber : 00378-20000-00003-AA087
Version : 10.0.14393

Пробовал запустить faster через "Запуск от имени администратора" - не помогло

Windows 10 х64
6. moolex 789 24.01.19 22:51 Сейчас в теме
Вероятно исправил, обновите программу, и проверьте...
7. slawa 25 25.01.19 01:04 Сейчас в теме
Ошибка ушла
Но выявилась новая:
Пишет:
ИмяБД не определено - CommandLine="C:\Program Files (x86)\1cv8\8.3.13.1644\bin\1cv8.exe" DESIGNER /IBName"ХФ ДВИ ОПТ SQL" /ConfigurationRepositoryF "D:\DataBase\ХранилищеКонфигураций\ХФБухОпт30" /ConfigurationRepositoryN "SlawaWork" ...

Поставил вывод Параметра в цикле "Для Параметр Из ПараметрыКоманды Цикл"
Получил:
Параметр - CommandLine="C:\Program Files (x86)\1cv8\8.3.13.1644\bin\1cv8.exe" DESIGNER /IBName"ХФ ДВИ ОПТ SQL"
Параметр - /ConfigurationRepositoryF
Параметр - "D:\DataBase\ХранилищеКонфигураций\ХФБухОпт30" /ConfigurationRepositoryN
Параметр - "SlawaWork" /ConfigurationRepositoryP
...

Похоже ПараметрыКоманды = Строки.Разделить(Стр, " ", , """"); работает неверно
8. moolex 789 26.01.19 14:06 Сейчас в теме
(7) Я выполнил простой скрипт в Faster на основе ваших данных, все работает корректно, разделяет на строки правильно:
CommandLine="""C:\Program Files (x86)\1cv8\8.3.13.1644\bin\1cv8.exe"" DESIGNER /IBName""ХФ ДВИ ОПТ SQL"" /ConfigurationRepositoryF ""D:\DataBase\ХранилищеКонфигураций\ХФБухОпт30"" /ConfigurationRepositoryN ""SlawaWork""";
Сообщить(CommandLine);
СписокСтрок = Строки.Разделить(CommandLine," ",,"""");
Для Строка Из СписокСтрок Цикл
	Сообщить(Строка); 
Конец;
9. slawa 25 26.01.19 16:59 Сейчас в теме
CommandLine="CommandLine=""C:\Program Files (x86)\1cv8\8.3.13.1644\bin\1cv8.exe"" DESIGNER /IBName""ХФ ДВИ Розн SQL"" /ConfigurationRepositoryF ""D:\DataBase\ХранилищеКонфигураций\ХФБухРозн30"" /ConfigurationRepositoryN ""SlawaWork"" /ConfigurationRepositoryP ""1111"" /AppAutoCheckMode /AppAutoCheckVersion /AppAutoInstallLastVersion+";

такая не работает
10. slawa 25 26.01.19 17:06 Сейчас в теме
вот
Прикрепленные файлы:
12. moolex 789 26.01.19 22:47 Сейчас в теме
(10) На скриншоте видно что перед и после слова DESIGNER не пробел...
скопируйте в буфер данную строку и в Faster (два раза правый Ctrl) можно посмотреть что за символы там (закладка Строки).
А когда вы копируете сюда (в сообщения то они превращаются в пробелы) и все работает...
11. slawa 25 26.01.19 17:16 Сейчас в теме
еще
Прикрепленные файлы:
13. slawa 25 27.01.19 07:37 Сейчас в теме
Там по два пробела до и после
14. moolex 789 27.01.19 09:31 Сейчас в теме
(13) сделайте пока замену двух пробеллов на один:
ПараметрыКоманды = Строки.Разделить(Строки.Заменить(Стр,"   "," "), " ", , """");

я посмотрю проблему разделения строки при двух пробелах...
15. slawa 25 27.01.19 12:02 Сейчас в теме
Это заработало

А эта строка не работает:
"C:\Program Files (x86)\1cv8\8.3.13.1644\bin\1cv8.exe" DESIGNER /IBConnectionString "File=""D:\ПроектыВрем\_ХФ Розн 3.0.57.10 CFG"";" /AppAutoCheckMode

Добавил в скрипт:
Если (Строки.Подстрока(Параметр, 2, 5)="File=") Тогда // файловая база
ИмяБД = Параметр; ПрефиксИмени = ".";
Прервать;
Конец;
Не помогло

Перед добавленным фрагментом вывел:
Сообщить(Строки.Подстрока(Параметр, 2, 5));
Сообщить((Строки.Подстрока(Параметр, 2, 5)="File="));
Получил:
File=
0

Не пойму в чем проблема
16. moolex 789 27.01.19 12:16 Сейчас в теме
(15)
"File=""D:\ПроектыВрем\_ХФ Розн 3.0.57.10 CFG""

Здесь два раза в двойные кавычки обернута строка, зачем?
17. slawa 25 27.01.19 12:40 Сейчас в теме
Я не знаю
Пользуюсь для запуска стартером https://infostart.ru/public/274485/
18. moolex 789 28.01.19 00:51 Сейчас в теме
(17)
Исправлено, обновите программу, и проверьте...
19. slawa 25 28.01.19 03:49 Сейчас в теме
20. vkozak 28.01.19 11:20 Сейчас в теме
Зачем так сложно?
В модуле управляемого приложения, в процедуре "При начале работы системы".
Читаем имя рабочей базы и меняем заголовок.
ТекЗаголовок=ПолучитьЗаголовокКлиентскогоПриложения();
СтрокаДобавления=ВРег(СтрокаСоединенияИнформационнойБазы());
УстановитьЗаголовокКлиентскогоПриложения(СтрокаДобавления+ТекЗаголовок);

Собственно и всех проблем!
21. moolex 789 28.01.19 14:45 Сейчас в теме
(20) А если конфигураций разных много и все на поставке...? А как вашим способом поменять в конфигураторе заголовок?
22. vkozak 28.01.19 14:59 Сейчас в теме
Зачем менять заголовок в конфигураторе не понятно.
"На поставке", это что значит? Не снято с сопровождения?
Так используйте расширение конфигурации.
23. moolex 789 28.01.19 15:24 Сейчас в теме
(22) Если открыто 10 конфигураторов, то это просто удобно...
24. slawa 25 06.02.19 14:33 Сейчас в теме
Не меняется заголовок самого окна в режиме Предприятие, хотя в скриншотах панели задач заголовок изменён.
Наверное сама 1С-ка мешает
Нельзя ли это исправить?
Видеть что за база запущена не лишне было-бы.
Прикрепленные файлы:
25. v.l. 419 25.04.19 10:26 Сейчас в теме
Как быть линуксовым клиентам?
решение не универсальное.
26. slawa 25 25.04.19 14:41 Сейчас в теме
да уж :)
каждый делает под себя и делится тем, что сделал
и за это ему огромное спасибо

ну нету у автора линукса :)
Оставьте свое сообщение