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

18.09.23

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?]
Скрипт (скомпилирован в .exe):
.exe 6,21Mb
96
96 Скачать бесплатно

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



В это:



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

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

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


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

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

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

См. также

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

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

10000 руб.

02.09.2020    152854    836    398    

846

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    4540    30    14    

40

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    20956    60    43    

107

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

OneRPA - платформа роботизации рутинных операций, в основе которой лежит платформа 1С:Предприятие. Данная платформа позволяет использовать современные технологии роботизации, не теряя при этом наработки, которые были созданы в ходе автоматизации. При этом платформа роботизации сохраняет все преимущества платформы 1С: гибкость, кроссплатформенность, мобильный и Web доступ, простоту расширения. Ну и конечно же роботы создаются и сопровождаются простыми специалистами 1С, при этом не обязательно программистами. Self hosted версия

300000 руб.

03.03.2021    14287    12    27    

36

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

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

10000 руб.

10.11.2023    9481    35    10    

57

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

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

18000 руб.

06.10.2023    14209    36    7    

69

SALE! %

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

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

4800 3840 руб.

14.01.2013    185907    1127    0    

899

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

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

15000 руб.

07.10.2021    16859    6    30    

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

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

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

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

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

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

Запуск под одним параметром с одного сервера
16. a_a_burlakov 288 26.08.22 15:56 Сейчас в теме
(14) Сегодня со скриптом поэкспериментировал на разных параметрах, и извините: не смог выяснить, что у вас за проблема может быть. С пустым именем скрипт отработать должен нормально. Но вот в чем у вас проблема, не могу предположить.
6. kraynev-navi 678 25.08.22 10:48 Сейчас в теме
(5), это скорее всего из-за (4)
a_a_burlakov; +1 Ответить
15. a_a_burlakov 288 26.08.22 15:54 Сейчас в теме
Добавлена работа с параметрами командной строки: /IBConnectionString, /S, /F.
17. Slypower 3 26.08.22 16:08 Сейчас в теме
(15) Спасибо, как ни странно, но теперь у меня все работает))))
18. a_a_burlakov 288 26.08.22 16:09 Сейчас в теме
(17) Вот это поворот, я не ожидал, но я рад. :)
19. usan 30.08.22 11:33 Сейчас в теме
С тонким клиентом не работает?
20. a_a_burlakov 288 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 288 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 288 30.08.22 19:06 Сейчас в теме
(23) Спасибо, поправлю чуток это условие. :)
25. jmw 61 05.09.22 06:33 Сейчас в теме
26. a_a_burlakov 288 05.09.22 07:56 Сейчас в теме
(25) Странное дело: на моей машине прям актуальный Касперский, который при сканировании файла ничего не показывает.

Погуглил это дело, и, судя по всему, дело в том, что скомпилированный .exe'шник включает в себя не только скрипт, но ещё и доп.библиотеки Пайтона, а главное - его интерпретатор (поэтому файл большой такой). От этого часто случаются ложные срабатывания.
27. Slypower 3 16.09.22 15:39 Сейчас в теме
Пользуюсь, но странности есть)
Под x86 работает, под x64 запущенном окне, не отрабатывают обычные формы.
Плюс появилась ошибка.
Прикрепленные файлы:
28. a_a_burlakov 288 19.09.22 07:10 Сейчас в теме
(27) Добавил обработку этой ошибки. Там дело было в том, что скрипт проходит циклом по всем открытым окнам, и пытается к ним обратиться. Но есть какие-то окна на вашей машине, которые вызывают исключение в момент самого первого обращения. Я плотно с Windows'кими сущностями не работал, поэтому просто обернул в попытку. Думаю, проблема исчезнет, если скачаете новую версию скрипта.
Slypower; +1 Ответить
29. Vasvas05 27 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)

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