Вывод в windows-проводнике названия баз в каталоге кластера 1С и каталогах локального кэша и настроек пользователя


Вывод в windows-проводнике названия баз в каталоге кластера 1С и каталогов локального кэша и настроек пользователя.
Используется создание файла desktop.ini, который автоматически размещается в подкаталогах кластера 1С.
Теперь станет немного проще определить прямо в windows-проводнике, что, к примеру, каталог fd531400-428c-41c0-954f-b910bb5cc552 это именно база ERP.

Возможно, существует много обработок которые анализируют файл 1CV8Clst.lst, выводят из него данные в человеческом, позволяют удалить каталоги несуществующих баз, предоставляют другие сервисные возможности и т.д. Да что там говорить, я и сам когда-то в качестве развлечения тоже делал различные варианты парсера этого файла.

Однако что интересно, я не смог найти на Инфостарте упоминания файла desktop.ini или уникального идентификатора {F29F85E0-4FF9-1068-AB91-08002B27B3D9}.

А между тем, несложно сложив одно с другим, мы получаем возможность задать некоторые свойства каталога (что, как мне кажется, невозможно сделать интерактивно), которые будут видны в отдельных колонках в проводнике Windows при выводе в режиме "таблица". Если кому-то, как и мне, надоело видеть в каталоге "reg_1541" безликие УИДы, это можно легко исправить — всего-то создать desktop.ini нужного формата и включить отображение колонки "Название".

После успешного тестирования этой идеи я решил создать обработку, которая максимально упростила бы этот процесс и привнесла в  него возможности произвольной настройки. В итоге получилось следующее:

  • выбираем место выполнения кода (клиент или сервер).
  • выбираем или указываем каталог кластера 1С (с учётом контекста; помним что выполнение возможно на клиенте и на сервере). Например каталог "C:Test" при работе с сервера и "\Server1CC$Test" при работе с клиента это суть одно и то же, вопрос только в авторизации доступа.
  • нажимаем "Создать desktip.ini". После этого:
  • проверяется доступ к каталогу.
  • считывается и парсится файл 1CV8Clst.lst.
  • считываются подкаталоги кластера.
  • в каждом подкаталоге создаётся файл desktop.ini, формирующийся по заданному шаблону, используя данные из 1CV8Clst.lst и любой код на языке 1С.
  • теперь в windows-проводнике каталога кластера можно отобразить колонки, заполненные нашими данными. Данные могут появиться не мгновенно, но в пределах десятка секунд.

Информации о desktop.ini довольно мало, и иное его использование (кроме задания тех свойств про которые я упоминал) у меня не получилось. Даже свойство "Комментарий" почему-то не работает, не говоря уже о более экзотических вариантах типа установки индивидуальной иконки для папки (хотя описано и такое, и ещё куча прочих). Однако лёгкая возможность настройки произвольного шаблона создания файла даёт возможность поэкспериментировать самостоятельно.

Ссылки к размышлению (https://msdn.microsoft.com/en-us/library/ms692560, https://hwiegman.home.xs4all.nl/desktopini.html) есть в обработке.

Обработка прилагается, собственно идея не так уж сложна, так что основной объём кода — это обвязка, интерфейс, удобства и настройки. Ах да, управляемые формы.
Результаты работы — на скриншотах. Буду рад, если кому-то пригодится.

Upd. 17.11.2024 — "Хочу такую же для локального кэша и для настроек пользователя!" (с)
Теперь нужно выбрать ещё и "Режим работы" — каталог кластера или каталоги пользователя. Первый режим (для кластера) работает по старому, а во втором (каталоги пользователя) каталог выбирать уже не нужно, используются AppData и LocalAppData. Второй режим можно включить только в случае выполнения кода на клиенте. Шаблоны для двух режимов — разные.
Схема работы во втором режиме:
— считываются и парсятся файлы ibases.v8i из каталогов %APPDATA%1C1Cv81, %APPDATA%1C1CEstart;
— в каталоге %APPDATA%1C1CEstart считываются указанные в файле 1CEStart.cfg параметры CommonInfoBases, и указанные в них файлы ibases.v8i тоже считываются и парсятся;
— считываются подкаталоги %APPDATA%1C1Cv81, 1Cv82, 1Cv8, %LOCALAPPDATA%1C1Cv81, 1Cv82, 1Cv8
— в каждом подкаталоге создаётся файл desktop.ini, формирующийся по заданному шаблону, используя данные из ibases.v8i (поиск по УИД) и любой код на языке 1С

NB! в настоящее время наименее производительным местом является разбор файла-шаблона, который осуществляется много раз и посимвольно (для каждого подкаталога). В результате при большом количестве подкаталогов формирование файлов может затянуться на несколько лишних секунд, хотя парсинг, фактически, каждый раз выполняется один и тот же. Не оптимизировал, т.к. обработка не предполагается для частого запуска. Удаляйте из шаблона лишние комментарии и неиспользуемые параметры.

P.S. не знаю можно ли скачивать обновление без $m, получится ли обновить предыдущий файл; так что выложил новый в то же место как v2. Если что не так, то скачавшие первую версию могут написать, вышлю вторую.

23 Comments

  1. guy_septimiy

    Полезно.

    Плюс

    Reply
  2. Йожкин Кот

    Очень здорово! Хочу такую же для локального кэша и для настроек пользователя!

    Reply
  3. cleaner_it

    Очень даже полезно, молодец)

    Reply
  4. nomadon

    клева

    Reply
  5. Darklight

    Забавно, +

    Reply
  6. Brawler

    Подайте кто нить идею самой 1С.

    Прогеры платформы, могли бы такое тоже спокойно замутить))

    P.S.

    Я бы наверное поступил несколько иначе при оформлении ini файла.

    В такой ситуации имя папки в проводнике заменяется на указанное в ini файле.

    Например

    [.ShellClassInfo]
    InfoTip=Супер база!!!
    IconFile=ico.ico
    IconIndex=0
    LocalizedResourceName=Супер база!!! [9a0b6c4b-c564-4b66-8e14-9c0b8f565564]

    IconFile — путь к файлу иконки ежели очень нужно, в данном случае она лежит в этой же папке

    Reply
  7. Alias

    (6)

    Однако лёгкая возможность настройки произвольного шаблона создания файла даёт возможность поэкспериментировать самостоятельно.

    Скажите, а Вы сами проверяли указанный вариант? Работало? На какой ОС?

    Использование иных параметров (кроме задания тех свойств про которые я упоминал) у меня не получилось. Даже свойство «Комментарий» почему-то не работает, не говоря уже о более экзотических вариантах.

    Конечно я пробовал и «несколько иначные» варианты. У меня на WinServ2008R2 и Win7Pro не взлетели. Если у Вас есть успешный опыт использования иных вариантов — делитесь 🙂

    Reply
  8. Brawler

    (7) Это точно вопросы ко мне? Цитаты просто не из моего сообщения. Я в замешательстве.

    Reply
  9. Alias

    (8) Прошу прощения, вопросы к Вам. 🙂 а цитаты из текста публикации, которые заранее ответили на сообщение. В частности, на Ваше «Я бы наверное поступил несколько иначе» есть ответ в тексте — «лёгкая возможность даёт поэкспериментировать»; а на «использовать LocalizedResourceName» — «я пробовал у меня не получилось».

    Reply
  10. Brawler

    (9) У папки должен быть установлен атрибут «Только чтение», только так начинает показывать.

    Атрибут устанавливать рекомендую не при помощи проводника винды)))

    Reply
  11. Alias

    (10) Спасибо, да, действительно сработало. Видимо нужно в настройки вывести отдельно галочку «Устанавливать атрибут Только чтение», чтобы для желающих обеспечить возможность такого отображения…

    Для себя я не хочу менять отображаемое имя, опасаюсь. Нужна всё же какая-то стабильность 🙂 а то видим имя одно, а по факту оно другое — это может ввести в ступор.

    Reply
  12. Brawler

    (11)

    Для себя я не хочу менять отображаемое имя, опасаюсь. Нужна всё же какая-то стабильность 🙂 а то видим имя одно, а по факту оно другое — это может ввести в ступор.

    Поэтому я в примере и заключил в квадратные скобки GUID базы, ну чтобы не вызывать внутренние противоречия.

    Reply
  13. LexSeIch

    Интересная статья. Будет время попробую на практике. Спасибо!

    Reply
  14. Vyatcheslav

    Очень оригинально, спасибо!

    Reply
  15. 7OH

    У вас ошибка в шаблоне по-умолчанию в ШаблонПоУмолчаниюКаталогПользователя.

    М.Получить(

    У структуры не такого метода — там должно быть

    ИсточникДанных.Получить(

    Reply
  16. Fatov_DI

    (15)

    У себя исправил так М.НаименованиеВСписке

    Reply
  17. kolya_tlt

    идентификаторы зачем было замазывать? это же не пароли от карточки банковской

    Reply
  18. kuzyara

    Колонки отображаются автоматически, или их через диалог «Выбор столбцов в таблице» нужно включать?

    Reply
  19. Alias

    (18) К сожалению, включить самому. Я не знаю где хранятся эти настройки (отображаемых колонок)… Если бы знал — подумал бы как включить их автоматически. Буду рад любой информации 🙂

    Reply
  20. spogo

    Ошибка при разборе файла списка на баз на строках типа:

    //Folder=/ИмяПапки

    Reply
  21. Alias

    (20) Такая строка не является штатной… Документация по структуре v8i — https://its.1c.ru/db/v8312doc#bookmark:adm:TI000000368

    Если такая строка появилась путём ручной корректировки файла — что ж, всего предусмотреть невозможно 🙂

    Обработка гарантированно умеет работать с форматом файла, описанным в документации. Иные варианты требуют хоть и простейшей, но всё же доработки.

    P.S. Хотите я дополню код чтобы строки файла v8i, начинающиеся с «//», пропускались?

    Reply
  22. spogo

    (21) ручной корректировки не было. Спасибо сам поправлю.

    Reply
  23. Zhilyakovdr

    В шаблоне по умолчанию поправьте М.Получить(«Имя базы 1С») на ИсточникДанных.Получить(«Имя базы 1С»)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *