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

Для конфигураций имеющих свой дизайн важно иметь возможность сменить не только картинки разделов для созданных подсистем, но и картинку рабочего стола, но менять ее нет возможности. Сама 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 Files1cv828.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 Files1cv828.2.16.352» и запускать 1С.

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

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

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

38 Comments

  1. bforce

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

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

    Если вам не интересна тема, то проходите мимо. Незачем демотивировать здоровый интерес к окружающему миру.

    Reply
  2. Abadonna

    Как говорил Ленин: «Мы пойдем другим путем». Да здравствует стиль планшетников! 😉 А за интерес к окружающему миру — плюс;)

    P.S. Это чуток доделанная БП 3.0

    Reply
  3. andrewks

    вызывает большой вопрос законность такого метода, получается патчинг, причём не БД, а длл-ки

    Reply
  4. Abadonna

    (4)

    получается патчинг, причём не БД, а длл-ки

    При сильном желании могут и докопаться.

    Reply
  5. mr zafod

    В web-приложение сидящее за ISS можно аттачить свой CSS файл, а там пишите все что хотите.

    Reply
  6. fishca

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

    Reply
  7. KillHunter

    да наплохая вариация!

    Reply
  8. serg_gres

    За работу и упорство плюс.

    Reply
  9. s_a_r_u_m_a_n

    (0) не совсем понятна цель, но + за искания, старания и результат заслужил

    Reply
  10. webester

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

    (5)

    При сильном желании могут и докопаться.

    Что значит докопаться? Это прямое нарушение лицензионного соглашения п4 пп2

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

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

    Reply
  11. Abadonna

    (11) Лично я плюс ставил за умение добиться поставленной цели. А само решение считаю, по меньшей мере, нерациональным, потому как оно не будет работать везде.

    А вот (3), имхо, идеальное: ничего не патчит, картинки какие хочешь, размеры кнопок какие хочешь, рядов-колонок сколько хочешь, под любого пользователя настраивается «на ходу» с моментальным результатом.

    Reply
  12. webester

    (12)Мне кажется это немного не то. Это не подсистемы с автоматическим заполнением по ролям. И область рабочего стола, которую пользователь может заполнить как ему удобно здесь не используется, я правильно понял?

    Reply
  13. Abadonna

    (13) 1. Это тонкий клиент, потому как БП 3.0 только на нем существует. И только на УФ

    2. Это не автоматическое заполнение по подсистемам (на мой взляд — излишнее), это справочник Рабочие Столы вот такого вида.

    P.S. Кнопки внедряются прямо в главное окно, никаких «прокладок» и т.п.

    Reply
  14. alexware

    Без сомнений ставлю плюс. Работа проделана большая. Кому-нибудь пригодится. Хочу отметить отличное изложение. Читается как детектив!

    Reply
  15. comol

    Извращенец (в хорошем смысле этого слова) 🙂

    Reply
  16. Raminus

    Интересная статейка 🙂

    Reply
  17. ixbit

    надо попробовать интересно автору +

    Reply
  18. AlexanderKai

    Огроменное спасибо. А никто не знает как в управляемом приложении вывести на рабочий стол аватар пользователя? Что-то я поискал и не нашел решения.

    Reply
  19. Evil Beaver

    Интересное исследование, но, к сожалению, без прикладных перпектив. Даже если у себя вы пропатчите платформу, после обновления ресурс может оказаться уже на другом месте. Что, после каждого обновления платформы будете каждый раз патчить backend?

    Reply
  20. ghostaz

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

    Reply
  21. zfilin

    Бесполезно, но за любопытство плюс.

    Reply
  22. asved.ru

    Бессмысленно и, я бы сказал, беспощадно. Корректировка ресурсов платформы как метод изменения интерфейса пригодна только для индивидуальных реализаций. Я, помнится, так в радминовский клиент пароль запиливал 🙂

    Reply
  23. dm.zay

    Смысл проделанной автором работы — есть.

    Хотел для своей разработки поменять иконку рабочего стола — после прочтения статьи отказываюсь от этой затеи.

    Reply
  24. wunderland

    (3) это просто форма с кнопками(картинками) а под ними команды?

    Reply
  25. sergey_s_

    Афтару респект

    Reply
  26. Famza

    Не мог пройти мимо. То что иконка рабочего стола не айс — дело вкуса, но всегда хочется сделать по-своему, так что автор — молодец. Но комменты повеселили.

    Reply
  27. AleksSF

    А попробуйте в свойствах конфигурации в разделе представление —

    Картинка основного раздела.

    Там кстати есть и картинки логотипа и заставки.

    Прежде чем копать глубоко, посмотрите не спеша на поверхности

    Reply
  28. ghostaz

    (28) AleksSF, важное замечание: вы говорите про 1С: Предприятие 8.3, а я про 8.2

    Reply
  29. KillHunter

    (29) ghostaz,

    важное замечание: вы говорите про 1С: Предприятие 8.3, а я про 8.2

    А почему бы не перейти на платформу 8.3 ?

    Reply
  30. ghostaz

    (30) KillHunter, на момент написания статьи этой возможности не было даже в 8.3

    Reply
  31. to_swim

    Такой вопросик.

    Может кто подскажет.

    1с когда запускаешь в вэб приложении через браузер. (например 1с82 УПП)

    там грузится рабочий стол.

    Как его можно изменить?

    его нет не в интерфейсе и нет в обработках.

    спасибо заранее

    Reply
  32. nghtmn_cmth

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

    Reply
  33. Nicholas

    (33) nghtmn_cmth,

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

    Мне вот тоже интересно. Пишу свою подсистему в комплексной автоматизации. Картинка рабочего стола получается именно такая как в статье. А хочется, чтобы она была маленькая, как, например, в ЗУП 3.0 (которая, кстати, развернута на том же компьютере и использует тот же релиз 1С:Предприятия).

    Reply
  34. Nicholas

    (32) to_swim, правой кнопкой мыши по основному разделу конфигурации, далее «открыть рабочую область начальной страницы».

    Reply
  35. Hamsik

    В 8.3 всё проще конечно) http://s018.radikal.ru/i502/1602/83/c89fd2469ad1.png

    Reply
  36. vik2006

    Зачем так мучиться та? В свойства конфигурации есть строка «Картинка Основного раздела». Вот туда помещаешь какую хошь картинку и будет тебе и всем щастье.

    Reply
  37. ghostaz

    (37) В 2012 такой возможности не было.

    Reply
  38. vik2006

    Да не вопрос.

    Reply

Leave a Comment

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