Вывод имени базы 1С в панель задач (скрипт)

18.09.23

Разработка - Инструментарий разработчика

Скрипт, который показывает имя базы 1С среди приложений в панели задач.

Скачать исходный код

Наименование Файл Версия Размер
Скрипт (скомпилирован в .exe):
.exe 6,21Mb
89
.exe 1.2 6,21Mb 89 Скачать бесплатно

Сделал простой скриптик, который превращает вот это:



В это:



Он раз в некоторое время приводит окна 1С на панели задач в божеский вид. Удобно поставить в автозагрузку и наслаждаться тем, что 69 конфигураторов в панели задач отличаются хотя бы чем-нибудь.

Если понадобится кому-нибудь, кроме меня, буду рад.

 
 Код скрипта (Python)


v 1.1 от 26.08.2022
1. Добавлена работа с параметрами командной строки: /IBConnectionString, /S, /F

v 1.2 от 19.09.2022
1. Добавлен перехват исключений при получения класса открытого окна, чтобы не было ошибок при работе с окнами с непредсказуемым поведением.

Скрипт автоматизация

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    128477    694    389    

744

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    8750    25    6    

47

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    5011    13    2    

39

SALE! 15%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 3060 руб.

14.01.2013    179305    1088    0    

866

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15243    3    12    

38

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    100147    239    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28546    4    10    

17

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18673    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 25.08.22 08:15 Сейчас в теме
УстановитьЗаголовок (SetCaption)
Синтаксис:
УстановитьЗаголовок(<ПредставлениеКлиентскогоПриложения>)
Параметры:
<ПредставлениеКлиентскогоПриложения> (обязательный)
Тип: Строка.
Представление клиентского приложения.
Описание:
Устанавливает заголовок приложения, которое используется при формировании заголовков окон.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.

Только для конфа не работает(

З.Ы.
Не вижу смысла в периодическом запуске, лучше при запуске 1ски запускать и этот скрипт один раз
2. a_a_burlakov 287 25.08.22 08:37 Сейчас в теме
(1) Первоначально я планировал скрипт, который запускается только раз. Но упёрся в то, что в конфигураторе при открытии нового объекта заголовок окна всегда обновляется заново. Отсюда и периодический запуск. Много ресурсов, впрочем, он не кушает, по крайней мере на моих машинах. )

А "УстановитьЗаголовок()" - да, для конфигуратора (и следовательно, для моих целей) не подходит. С открытыми базами в режиме Предприятия обычно всё более-менее понятно, но вот конфигураторы меня всегда путают, если их открыто больше двух.
POWone; TMV; +2 Ответить
3. mikl79 118 25.08.22 09:58 Сейчас в теме
4. kraynev-navi 649 25.08.22 10:23 Сейчас в теме
Кроме /IBNAME неплохо бы предусмотреть еще запуск с параметрами /F, /S, /WS, /IBconnection. Посмотрел свои открытые - треть баз именно так открыто.
7. a_a_burlakov 287 25.08.22 10:52 Сейчас в теме
(4) А вы имеете в виду /IBConnectionString? Или /IBConnection - это какой-то новый параметр для EDT?

С параметрами этими не работал, но посмотрю. Буду благодарен, если скинете, как у вас примерно выглядит строка соединения с параметрами /IBConnection и /WS.
11. kraynev-navi 649 25.08.22 12:46 Сейчас в теме
(7) дважды описался.
У меня таких примеров нет, у меня /S, /F
/IBConnectionString - https://forum.infostart.ru/forum9/topic266747/
/WS примера не нашел.
a_a_burlakov; +1 Ответить
5. Slypower 2 25.08.22 10:44 Сейчас в теме
Скрипт "бомба", но столкнулся с тем, что он на запущенную базу не отработал. Запущено 5 баз (конфигураторы и предприятия), и на последнее предприятие не отрабатывает. Перезапуск не помогает( И на последующие запуски тоже, будто лимит окон есть, а потом все)))
8. a_a_burlakov 287 25.08.22 10:54 Сейчас в теме
(5) Скиньте, пожалуйста, как у вас строка соединения примерно выглядит. Скрипт глядит пока только на параметр "/IBName".
9. Slypower 2 25.08.22 11:23 Сейчас в теме
(8) Srvr="REM-S-09";Ref="Test_Bobrik_SOOO";
Как узнать, как запущено, с параметром "/IBName" или каким еще?
10. a_a_burlakov 287 25.08.22 12:37 Сейчас в теме
(9) Попробуйте через диспетчер задач. У меня в Windows 10 можно так:
- открыть диспетчер задач;
- открыть вкладку "Подробности";
- ПКМ по списку колонок, нажать "Выбрать столбцы";
- поставить галку на столбце "Командная строка".

Ещё можно в командную строку ввести:
WMIC path win32_process get Caption,Processid,Commandline
Slypower; +1 Ответить
12. Slypower 2 25.08.22 14:01 Сейчас в теме
(10) Запускается с параметром "/IBName" , но имя не отображается все равно(((
Не понятно, пока не работает только для 1й базы)))
13. a_a_burlakov 287 25.08.22 16:06 Сейчас в теме
(12) А как она называется, не секрет? Допускаю, что скрипт уходит в исключение на каком-то этапе.
14. Slypower 2 26.08.22 08:28 Сейчас в теме
(13) увидел, что 2 базы не имеют названия в предприятии, а в конфигураторе имеют) Сперва заметно, как имя появляется на панели, но затем меняется на "Предприятие"
Примеры:
Test_Bobrik_IOOO - название такое на панели
Test_Bobrik_SOOO - название "Предприятие".

Запуск под одним параметром с одного сервера
16. a_a_burlakov 287 26.08.22 15:56 Сейчас в теме
(14) Сегодня со скриптом поэкспериментировал на разных параметрах, и извините: не смог выяснить, что у вас за проблема может быть. С пустым именем скрипт отработать должен нормально. Но вот в чем у вас проблема, не могу предположить.
6. kraynev-navi 649 25.08.22 10:48 Сейчас в теме
(5), это скорее всего из-за (4)
a_a_burlakov; +1 Ответить
15. a_a_burlakov 287 26.08.22 15:54 Сейчас в теме
Добавлена работа с параметрами командной строки: /IBConnectionString, /S, /F.
17. Slypower 2 26.08.22 16:08 Сейчас в теме
(15) Спасибо, как ни странно, но теперь у меня все работает))))
18. a_a_burlakov 287 26.08.22 16:09 Сейчас в теме
(17) Вот это поворот, я не ожидал, но я рад. :)
19. usan 30.08.22 11:33 Сейчас в теме
С тонким клиентом не работает?
20. a_a_burlakov 287 30.08.22 12:48 Сейчас в теме
(19) Вы имеете в виду, когда мы подключаемся к веб-серверу через строку вида: "https://test.com/mybase"? Это не поддерживается, но запилить это просто. Когда руки дойдут, сделаю.

А вообще, напишите, пожалуйста, на всякий случай, как у вас выглядит командная строка, когда вы к своей базе подключаетесь. У меня нет баз, чтобы протестировать WS-соединение. Как смотреть командную строку, я в сообщении (10) писал.
21. usan 30.08.22 14:58 Сейчас в теме
(20) Нет, просто Предприятие в режиме тонкого клиента, IBName есть /IBName"Документооборот", но exe отличается от других 1cv8c.exe, может из-за этого?
22. a_a_burlakov 287 30.08.22 15:41 Сейчас в теме
(21) А, понял.

Поэкспериментировал - и интересно. Одна и та же база, которую я открываю тонким клиентом через платформу 8.3.13, и через 8.3.19 - открывают свои процессы по-разному. У одного процесса есть командная строка, у другого - пустая. Подозреваю, что в одном из случаев платформу запускает процесс через некоторый промежуточный этап, во время которого теряются параметры командной строки, которые можно было взять через Windows'кий API. Переменных окружения у процесса с этими данными тоже нет.

Видимо, с тонким клиентом для этого скрипта будут ограничения, связанные с платформой...
23. usan 30.08.22 18:28 Сейчас в теме
(22)
Разобрался, все работает, в моем случае все проще было, из-за
if not window_text.startswith(ib_name)

имя ИБ в списке было "Документооборот", а имя конфигурации "Документооборот 8 КОРП", которое 1С сама добавляет в заголовок окна в начало :)
a_a_burlakov; +1 1 Ответить
24. a_a_burlakov 287 30.08.22 19:06 Сейчас в теме
(23) Спасибо, поправлю чуток это условие. :)
25. jmw 60 05.09.22 06:33 Сейчас в теме
26. a_a_burlakov 287 05.09.22 07:56 Сейчас в теме
(25) Странное дело: на моей машине прям актуальный Касперский, который при сканировании файла ничего не показывает.

Погуглил это дело, и, судя по всему, дело в том, что скомпилированный .exe'шник включает в себя не только скрипт, но ещё и доп.библиотеки Пайтона, а главное - его интерпретатор (поэтому файл большой такой). От этого часто случаются ложные срабатывания.
27. Slypower 2 16.09.22 15:39 Сейчас в теме
Пользуюсь, но странности есть)
Под x86 работает, под x64 запущенном окне, не отрабатывают обычные формы.
Плюс появилась ошибка.
Прикрепленные файлы:
28. a_a_burlakov 287 19.09.22 07:10 Сейчас в теме
(27) Добавил обработку этой ошибки. Там дело было в том, что скрипт проходит циклом по всем открытым окнам, и пытается к ним обратиться. Но есть какие-то окна на вашей машине, которые вызывают исключение в момент самого первого обращения. Я плотно с Windows'кими сущностями не работал, поэтому просто обернул в попытку. Думаю, проблема исчезнет, если скачаете новую версию скрипта.
Slypower; +1 Ответить
29. Vasvas05 22 26.01.24 14:51 Сейчас в теме
+ красиво сделано
прогнал через chatgpt
import win32gui
import win32process
from psutil import Process
import schedule
import time

IB_PARAM_PREFIXES = ('/IBName', '/S', '/F')

def add_ibname_to_1C_window(hwnd, more) -> None:
    '''
    Если окно является окном 1С,
    то добавляет слева к его названию имя открытой базы.
    :param hwnd: Открытое окно Windows
    '''
    class_name = win32gui.GetClassName(hwnd)
    if 'V8TopLevelFrame' not in class_name:
        return

    window_text = win32gui.GetWindowText(hwnd)
    process_id = win32process.GetWindowThreadProcessId(hwnd)[1]
    process = Process(process_id)
    commandline = process.cmdline()

    ib_name = get_ib_name_from_commandline(commandline)
    if ib_name:
        set_window_text_with_ib_name(hwnd, window_text, ib_name)

def get_ib_name_from_commandline(commandline: list) -> str | None:
    '''
    Ищет имя информационной базы из командной строки 1С.
    :param commandline: Список строк, из которых состоит строка параметров процесса.
    :return:
    '''
    for param_prefix in IB_PARAM_PREFIXES:
        ib_name = find_ib_name_by_prefix(commandline, param_prefix)
        if ib_name:
            return ib_name

def find_ib_name_by_prefix(commandline: list, param_prefix: str) -> str | None:
    iter = (x for x in commandline if x.startswith(param_prefix) and '\\' in x)
    par = next(iter, '')
    if par:
        ib_name = par.split('\\')[-1].strip(' "\'')
        return ib_name

def set_window_text_with_ib_name(hwnd, window_text, ib_name):
    if not window_text.startswith(ib_name):
        win32gui.SetWindowText(hwnd, f'{ib_name} - {window_text}')

def windows_passage() -> None:
    '''
    Проходит по открытым окнам с указанной функцией.
    '''
    win32gui.EnumWindows(add_ibname_to_1C_window, None)

if __name__ == '__main__':
    istest = False
    if istest:
        windows_passage()
        raise SystemExit('Тестовый прогон закончен.')

    schedule.every(2).seconds.do(windows_passage)

    while True:
        schedule.run_pending()
        time.sleep(2)

Показать
Оставьте свое сообщение