Разработчики, долгое время работающие с платформой 1С:Предприятие 7.7, часто сталкиваются с проблемой ограниченности интерфейса конфигуратора. Одной из самых раздражающих проблем является маленькое, нерастягиваемое окно выбора слоев на формах. Когда количество слоев в сложной обработке или документе превышает 5–7 штук, работа превращается в мучение: элементы списка не помещаются, названия обрезаются, а риск выбрать не тот слой возрастает. В этой статье мы подробно разберем, как решить эту проблему раз и навсегда, изменив ресурсы самой платформы.
Разберем ситуацию: интерфейс конфигуратора 1С 7.7 создавался в эпоху мониторов с низким разрешением. Размеры диалоговых окон жестко прописаны в программных модулях (библиотеках) в виде ресурсов. Штатных настроек для изменения размеров этих окон в самой программе не предусмотрено. Однако мы можем воспользоваться редактором ресурсов, чтобы изменить параметры этих диалогов непосредственно в файлах локализации 1С.
Основным файлом, отвечающим за русскоязычный интерфейс платформы, является 1crcrus.dll. Он находится в каталоге BIN, куда установлена платформа 1С. Именно в нем хранятся описания форм, меню и диалогов, которые мы видим при работе в конфигураторе.
Проанализируем инструменты, которые нам понадобятся для внесения изменений:
1crcrus.dll в безопасное место.Рассмотрим подробнее процесс модификации окна слоев. Выясним причину неудобства: в стандартном виде диалог имеет фиксированную высоту, которая не позволяет видеть длинный список слоев.
Выполним следующие действия по шагам:
1crcrus.dll (путь по умолчанию: C:\Program Files (x86)\1Cv77\BIN\1crcrus.dll).Посмотрим на структуру описания диалога. Нам нужно изменить координаты и размеры самого окна и элемента ListBox внутри него. Рассмотрим пример того, как может выглядеть измененный код ресурса:
1138 DIALOGEX 0, 0, 250, 220
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Слои"
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
FONT 8, "MS Sans Serif"
{
CONTROL "", 1056, "ListBox", LBS_NOTIFY | LBS_MULTIPLESEL | LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 5, 5, 240, 180
CONTROL "ОК", 1, "Button", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 130, 195, 50, 14
CONTROL "Отмена", 2, "Button", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 185, 195, 50, 14
}
В этом примере мы увеличили ширину до 250 единиц и высоту до 220. Элемент ListBox (с идентификатором 1056) теперь занимает почти все пространство, а кнопки управления смещены вниз. После внесения изменений необходимо нажать кнопку "Compile Script" и сохранить файл.
Разберем по шагам, какие еще окна стоит увеличить для комфортной работы. Опытные разработчики рекомендуют обратить внимание на следующие идентификаторы в 1crcrus.dll:
Проанализируем альтернативный способ навигации, который не требует правки ресурсов. Если вам нужно быстро переключаться между слоями, не обязательно каждый раз прицельно кликать мышкой. При открытом окне выбора слоев можно использовать клавиши PageUp и PageDown. Это позволяет перемещаться по списку слоев мгновенно. Однако это не решает проблему визуального контроля имен слоев, поэтому правка DLL остается более предпочтительным вариантом.
Выясним, как еще можно улучшить работу в конфигураторе 1С 7.7. Существует проект OpenConf, который представляет собой мощный Plugin-Manager для конфигуратора. Рассмотрим его преимущества в контексте нашей темы:
DynamicWrapperX можно написать скрипт, который будет находить дескриптор (HWND) этого поля и передавать ему фокус по нажатию определенной комбинации клавиш.Пример логики работы такого скрипта (упрощенно):
// Получаем хэндл главного окна конфигуратора
var hMain = WinApi.FindWindow("V7MainFrame", null);
// Ищем дочернее окно панели инструментов
var hToolBar = WinApi.FindWindowEx(hMain, 0, "ToolbarWindow32", null);
// Находим ComboBox поиска и посылаем сообщение о фокусе
WinApi.SendMessage(hSearchCombo, WM_SETFOCUS, 0, 0);
Проанализируем ситуацию с масштабированием. На современных мониторах с высоким разрешением (4K и выше) шрифты в конфигураторе 1С 7.7 могут выглядеть очень мелкими. Если вы изменили размеры окон в 1crcrus.dll, но они все равно кажутся маленькими из-за системного масштабирования (DPI), рекомендуется создать манифест-файл для 1cv7.exe.
Создадим текстовый файл с именем 1cv7.exe.manifest в папке BIN со следующим содержанием:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
</assembly>
Это заставит систему более корректно отрисовывать элементы управления старого приложения, учитывая ваши правки в ресурсах.
Мы рассмотрели комплексный подход к модернизации интерфейса конфигуратора "семерки". Подведем итог: изменение файла 1crcrus.dll через редактор ресурсов является самым эффективным способом сделать окно выбора слоев удобным. Не забывайте сохранять модифицированный файл отдельно, так как при переустановке платформы он будет заменен на стандартный. Совместное использование правки ресурсов и инструментов типа OpenConf позволяет сделать работу в 1С 7.7 практически такой же комфортной, как в современных средах разработки.