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

18.09.23

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

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

Скачать файл

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

Наименование Бесплатно
Скрипт (скомпилирован в .exe):
.exe 6,21Mb ver:1.2
102
102 Скачать бесплатно

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



В это:



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

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

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


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

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

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

См. также

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

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

12000 руб.

02.09.2020    171814    962    403    

924

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

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

8400 руб.

20.08.2024    14329    109    46    

108

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

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

22200 руб.

06.10.2023    17287    43    15    

75

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

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

9360 руб.

17.05.2024    27283    96    48    

138

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

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

15000 руб.

10.11.2023    11907    45    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191247    1152    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

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

20000 руб.

07.10.2021    18090    7    32    

42

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1117    2    0    

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

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

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

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

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

Погуглил это дело, и, судя по всему, дело в том, что скомпилированный .exe'шник включает в себя не только скрипт, но ещё и доп.библиотеки Пайтона, а главное - его интерпретатор (поэтому файл большой такой). От этого часто случаются ложные срабатывания.
27. Slypower 3 16.09.22 15:39 Сейчас в теме
Пользуюсь, но странности есть)
Под x86 работает, под x64 запущенном окне, не отрабатывают обычные формы.
Плюс появилась ошибка.
Прикрепленные файлы:
28. a_a_burlakov 290 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)

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