gifts2017

1С:Предприятие 8.2. Управляемая Форма. Меняем иконку рабочего стола.

Опубликовал Владимир Баданов (ghostaz) в раздел Администрирование - Сервисные утилиты

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

Но все же можно попытаться ее сменить.
Многим разработчикам 1С наверно понравился новый подход к интерфейсу в 1С:Предприятие 8.2. Теперь не надо надо мучиться с привязками элементов, не надо рассчитывать координаты элементов, не надо думать что отображать для одного пользователя, что для другого. 1С стала "умнее". Но есть вещи которые нельзя изменить, например, расположение основных элементов интерфейса (панель разделов, панель навигации и др.). Для конфигураций имеющих свой дизайн важно иметь возможность сменить не только картинки разделов для созданных подсистем, но и картинку рабочего стола, но менять ее нет возможности. Сама 1С объясняет это тем что интерфейс любой конфигурации должен быть унифицирован: "Дело не в одной картинке, а в общей стилистике для любых конфигураций. Важно чтобы пользователи привыкали к общему стилю и одинаково воспринимали одинаковые элементы в разных конфигурациях - это ускорит и освоение конфигураций и повседневную работу пользователей с ними." (http://partners.v8.1c.ru/forum/thread.jsp?id=714007)

Но все же можно попытаться ее сменить.
Ход мыслей простой - картинка где то должна храниться как файл, как поле БД, как часть файла, как ссылка. Надо только ее найти. Самый простой способ ее найти это запустить любую конфигурацию 1С в веб клиенте. Например УТ 11. Сделать это можно со страницы http://v8.1c.ru/trade/demo/index.htm или непосредственно http://demo-ma.1c.ru/trade.



Далее включаем режим разработчика, в Internet Explorer 9 это делается клавишей F12 либо через меню Настроек.


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


Выделим картинку рабочего стола.


Внизу приложения отобразится строка HTML разметки: ""

e1cib/convertPicture?sysver=8.2.15.318&url=e1csys%2Fbackend%2Fdesktop.png&w=48&h=48" становится понятно, что картинку  "desktop.png" из какого то системного хранилища  "e1csys/backend" передают в функцию конвертации картинки до размеров 48*48.

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

Просмотрев множество файлов из "C:\Program Files\1cv82\8.2.16.352", мое внимание привлекли файлы "backend.dll", "backend_ru.res" и "backend_root.res".
В файле "backend_root.re"s нашлось упоминание о "desktop.png". Я пробовал различные редакторы ресурсов, но видимо фирма 1с использует свой редактор. Если открыть этот файл в блокноте, то можно заметить, что файл состоит из двух частей, первая хранит названия ресурсов, а вторая ее данные.


Названия ресурсов перечислены без каких либо указаний на расположение, значит надо искать последовательно в этом файле. Следовательно надо подсчитать порядковый номер нашей картинки и найти по порядковому номеру ее данные из второй секции файла. Действий будет меньше если мы будем считать количество файлов с раширением "png", а во второй секции будем искать файл который содержит "‰PNG". Лучше использовать HEX-редактор. Я буду использовать WinHEX.
Итак найдем порядковый номер искомого файла среди файлов формата PNG.


Если долго жать F3 и считать количество нажатий то мы прийдем к записи "desktop.png". Для версии 8.2.16.352 он оказался 11-м.
Теперь найдем Начало данных этого файла. Для этого 11 раз нажмем F3 при установленном поиске "PNG". Не забудьте установить галочку "Match case", она дает указание, что поиск идет с учетом регистра символов.

Нажав F3 одиннадцать раз мы перешли на начало файла. Но как найти окончание файла? Для этого достаточно глянуть любой другой файл формата "PNG". Он заканчивается строкой "END®B`‚", мало того в файле  "backend_root.res" есть разделитель между ресурсами.
Ну так давайте выделим этот диапазон двоичных данных и сохраним в отдельный файл.
Мышкой протянем от начала файла.


И до следующего файла


Если вы выделяете файл так же как и я, вручную (а можно сохранить смешение начала и конца файла и виделить по адресам), то не пропустите разделитель, а то затрете другой файл.

Теперь скопируем выделенный блок в новый файл (Cntr+Shift+N). Так мы сможем проверить что нашли тот самый файл иконки рабочего стола и там же будем его править.




После просмотра сохраненной картинки, было понятно что хранятся они не последовательно. На 11й позиции была другая картинка. Пришлось скопировать другие блоки, что бы найти нашу картинку. Она оказалась на 18 месте.


Советую перед все эти действия выполнять на копиях файлов.

Теперь нам нужен графический редактор. Я буду использовать Paint. Меняем рисунок на свое предпочтение. Например так:


И теперь осталось поместить новый рисунок в файл ресурсов. Недостаток в том, что измененный файл должен быть не больше по размеру чем исходный. Возможно это не так, но файл большего размера у меня поместить не удалось.
Потому измененный файл надо подогнать под размер исходного файла. Откроем ИсходныйФайл.png и посмотрим размер:


Его размер 3145 байт.

Откроем ИзмененныйФайл.png и определим его размер.


Размер измененного файла - 2643 байта. Разница в размерах 502 байта.

Дополним измененный файл нулями до нужного размера:


Нажмем ОК и сохраним файл.


Откроем его в стандартными средствами, что бы убедится, что измененная картинка после дополнения не повредилась.

Теперь в WinHEX выделяем весь "ИзмененныйФайл.png" (Cntr+A) и копируем (Cntr+C). переходим к файлу "backend_root.res". Надо заменить блок с изображением рабочего стола на скопированную в буфер обмена  измененную пиктограмму рабочего стола. Перейдите на начало блока и вызовите команду Write(Cntr+B). Эта команда вставить содержимое буфера с заменой, а не с добавлением.


Проверьте что расмер файла  "backend_root.res" не изменился и сохраните.

Можно ложить файл обратно в папку  "C:\Program Files\1cv82\8.2.16.352" и запускать 1С.


Ну теперь интерфес точно стал унифицированным! Картинка заменилась только для толстого клиента, наверняка были найдены не все файлы где хранится картинка рабочего стола. Если у вас получится сделать изменение картинки для веб клиента или тонкого клиента, то поделитесь как вам это удалось. Помимо этого есть другие недостатки, например при обновлении платформы новый файл  "backend_root.res" может конфликтовать с вашим.

Результаты работы можно скачать тут http://yadi.sk/d/n329aa0TgpfK

Пишите свои комментарии, замечания и предложения. Буду рад, если эта статья вам поможет. 

Скачать файлы

Наименование Файл Версия Размер
Результат 29
.zip 138,68Kb
28.09.12
29
.zip 138,68Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Прилепский (IamAlexy) 28.09.12 23:12
более бессмысленного занятия придумать невозможно
2. Никита Коротаев (bforce) 29.09.12 00:31
Автор изучает то, что ему интересно. Увлечения у каждого свои и иногда бывает полезно отвлечься от рутины и заняться чем-нибудь необычным.

Да, можно спорить о том, насколько это полезно. Но, во-первых, не каждый способен задаться целью и довести начатое до конца. Во-вторых, не у каждого присутствует жажда познания и соответствующий багаж знаний, чтобы решать нестандартные задачи. В-третьи, а почему нет?! Я от многих слышал, что эта картинка им не по душе.

Если вам не интересна тема, то проходите мимо. Незачем демотивировать здоровый интерес к окружающему миру.
for_sale; FlagmanGK; alwiz3; s1ad; shatt; EarlyBird; LaNaite; sCHTASS; KovalOleg; +9 Ответить
3. Аркадий Кучер (Abadonna) 29.09.12 03:55
Как говорил Ленин: "Мы пойдем другим путем". Да здравствует стиль планшетников! ;) А за интерес к окружающему миру - плюс;)
P.S. Это чуток доделанная БП 3.0
Прикрепленные файлы:
sergey_s_; wunderland; ghostaz; EarlyBird; Hany; anton.fly7; +6 Ответить 2
4. andrewks 29.09.12 08:14
вызывает большой вопрос законность такого метода, получается патчинг, причём не БД, а длл-ки
5. Аркадий Кучер (Abadonna) 29.09.12 09:23
(4)
получается патчинг, причём не БД, а длл-ки

При сильном желании могут и докопаться.
6. Roman Biblbox (mr zafod) 29.09.12 11:25
В web-приложение сидящее за ISS можно аттачить свой CSS файл, а там пишите все что хотите.
7. Сергей Рудаков (fishca) 29.09.12 15:01
Спасибо за труды, давно руки чесались поменять эту дурацкую иконку.
8. Vlad (KillHunter) 29.09.12 18:07
9. Сергей Начина (serg_gres) 29.09.12 21:56
За работу и упорство плюс.
10. Роман (srv7) 29.09.12 22:53
(0) не совсем понятна цель, но + за искания, старания и результат заслужил
11. Роман Ложкин (webester) 30.09.12 09:23
Не понятен следующий момент: автор говорит, что нужна возможность изменять картинку у конфигураций со своим дизайном и патчит платформу. Как одно связано со вторым непонятно. Если у тебя тиражное решение, не будешь же ты поставлять для него отдельно патченную платформу, если ты пропатчишь платформу клиенту, у него картинка изменится во всех конфигурациях. Столько натуги результата почти нет, не говоря уже о том что это нарушение лицензионного соглашения. Согласен с (1)
(5)
При сильном желании могут и докопаться.

Что значит докопаться? Это прямое нарушение лицензионного соглашения п4 пп2
Вносить какие либо изменения в код программного продукта, содержимое баз данных и других наборов данных в которых система хранит информацию за исключением тех изменений которые вносятся штатными средствами входящими в состав программного продукта и описанными в сопроводительной документации

то есть описанное здесь, можно приравнять к установке эмулятора
Прикрепленные файлы:
12. Аркадий Кучер (Abadonna) 30.09.12 09:41
(11) Лично я плюс ставил за умение добиться поставленной цели. А само решение считаю, по меньшей мере, нерациональным, потому как оно не будет работать везде.
А вот (3), имхо, идеальное: ничего не патчит, картинки какие хочешь, размеры кнопок какие хочешь, рядов-колонок сколько хочешь, под любого пользователя настраивается "на ходу" с моментальным результатом.
13. Роман Ложкин (webester) 30.09.12 09:59
(12)Мне кажется это немного не то. Это не подсистемы с автоматическим заполнением по ролям. И область рабочего стола, которую пользователь может заполнить как ему удобно здесь не используется, я правильно понял?
14. Аркадий Кучер (Abadonna) 30.09.12 10:06
(13) 1. Это тонкий клиент, потому как БП 3.0 только на нем существует. И только на УФ
2. Это не автоматическое заполнение по подсистемам (на мой взляд - излишнее), это справочник Рабочие Столы вот такого вида.
P.S. Кнопки внедряются прямо в главное окно, никаких "прокладок" и т.п.
Прикрепленные файлы:
15. Алексей Верещагин (alexware) 01.10.12 05:24
Без сомнений ставлю плюс. Работа проделана большая. Кому-нибудь пригодится. Хочу отметить отличное изложение. Читается как детектив!
16. Олег Филиппов (comol) 01.10.12 09:09
Извращенец (в хорошем смысле этого слова) :)
17. Роман (Raminus) 01.10.12 09:41
18. Alex kirillov (ixbit) 02.10.12 07:26
надо попробовать интересно автору +
19. Александр Топольский (AlexanderKai) 02.10.12 17:46
Огроменное спасибо. А никто не знает как в управляемом приложении вывести на рабочий стол аватар пользователя? Что-то я поискал и не нашел решения.
20. Андрей Овсянкин (Evil Beaver) 03.10.12 09:06
Интересное исследование, но, к сожалению, без прикладных перпектив. Даже если у себя вы пропатчите платформу, после обновления ресурс может оказаться уже на другом месте. Что, после каждого обновления платформы будете каждый раз патчить backend?
21. Владимир Баданов (ghostaz) 03.10.12 10:39
Совершенно верно, при каждом обновлении платформы надо повторять эти действия заново. Это я описал в недостатках. Просто заказчик ставил такое тех задание и мне пришлось искать способы решения. Метод почти не годится к использованию, и сам я его не использую, т.к. моя конфигурация работает в основном через веб-клиент.
22. Александр Лапшин (zfilin) 04.10.12 13:30
Бесполезно, но за любопытство плюс.
23. Антон Стеклов (asved.ru) 04.10.12 14:39
Бессмысленно и, я бы сказал, беспощадно. Корректировка ресурсов платформы как метод изменения интерфейса пригодна только для индивидуальных реализаций. Я, помнится, так в радминовский клиент пароль запиливал :)
24. Дмитрий Зайцев (dm.zay) 29.10.12 20:04
Смысл проделанной автором работы - есть.
Хотел для своей разработки поменять иконку рабочего стола - после прочтения статьи отказываюсь от этой затеи.
25. Ловыгин Антон (wunderland) 13.11.12 18:22
(3) это просто форма с кнопками(картинками) а под ними команды?
26. Сергей Соловьев (sergey_s_) 28.11.12 11:37
27. Иван Иванов (Famza) 21.02.13 11:50
Не мог пройти мимо. То что иконка рабочего стола не айс - дело вкуса, но всегда хочется сделать по-своему, так что автор - молодец. Но комменты повеселили.
28. Aleksandr Filonov (AleksSF) 05.03.14 15:16
А попробуйте в свойствах конфигурации в разделе представление -
Картинка основного раздела.
Там кстати есть и картинки логотипа и заставки.
Прежде чем копать глубоко, посмотрите не спеша на поверхности
29. Владимир Баданов (ghostaz) 05.03.14 15:51
(28) AleksSF, важное замечание: вы говорите про 1С: Предприятие 8.3, а я про 8.2
30. Vlad (KillHunter) 05.03.14 16:10
(29) ghostaz,
важное замечание: вы говорите про 1С: Предприятие 8.3, а я про 8.2
А почему бы не перейти на платформу 8.3 ?
31. Владимир Баданов (ghostaz) 05.03.14 16:22
(30) KillHunter, на момент написания статьи этой возможности не было даже в 8.3
32. Sash zaitsev (to_swim) 07.10.14 11:40
Такой вопросик.

Может кто подскажет.
1с когда запускаешь в вэб приложении через браузер. (например 1с82 УПП)
там грузится рабочий стол.
Как его можно изменить?
его нет не в интерфейсе и нет в обработках.
спасибо заранее
33. Vitaly Suhorukov (nghtmn_cmth) 04.12.14 17:08
Интересно как конфигурация БП 3.0 меняет картинки, ведь файлы конфы теже
34. Nicholas Mikuslas (Nicholas) 03.07.15 13:43
(33) nghtmn_cmth,

Интересно как конфигурация БП 3.0 меняет картинки, ведь файлы конфы теже


Мне вот тоже интересно. Пишу свою подсистему в комплексной автоматизации. Картинка рабочего стола получается именно такая как в статье. А хочется, чтобы она была маленькая, как, например, в ЗУП 3.0 (которая, кстати, развернута на том же компьютере и использует тот же релиз 1С:Предприятия).
35. Nicholas Mikuslas (Nicholas) 03.07.15 13:45
(32) to_swim, правой кнопкой мыши по основному разделу конфигурации, далее "открыть рабочую область начальной страницы".
36. Вадим Попов (Hamsik) 17.02.16 20:57