В процессе разработки и сопровождения систем на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с ситуацией, когда печатная форма отчета ведет себя «непредсказуемо». У одного пользователя таблица отображается с сеткой, у другого — без; у одного зафиксированы шапки, а у другого — нет. Для более стабильной работы часто применяют улучшенную обработку внешних печатных форм, но причина странного поведения обычно кроется в механизме сохранения индивидуальных настроек табличного документа (движок Moxel). Давайте подробно разберем, где именно система хранит эти данные и как ими управлять.
В отличие от более современных версий платформы, 1С 7.7 практически не использует файлы для хранения пользовательских настроек печатных форм. Вместо этого вся информация записывается в системный реестр Windows. Рассмотрим структуру этого пути подробнее. Настройки хранятся в ветке текущего пользователя (HKEY_CURRENT_USER), что объясняет, почему настройки одного и того же человека могут различаться при входе на разных серверах или компьютерах.
Стандартный путь к настройкам выглядит следующим образом:
HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<ИмяБазы>\V7\<ИмяПользователя>\Moxel\
Здесь мы можем выделить несколько ключевых узлов:
Default.Проанализируем содержимое раздела Moxel. Если в программном коде при вызове метода Опции() или ПараметрыСтраницы() был указан строковый идентификатор, то в реестре появится папка с соответствующим именем. Если идентификатор не задан, настройки «сваливаются» в раздел Default, что часто приводит к путанице между разными отчетами.
Метод Опции() в 1С 7.7 используется для управления визуальным представлением таблицы на экране. Давайте вспомним его синтаксис и выясним, как параметры коррелируют с данными в реестре:
Таб.Опции(Сетка, Заголовки, ФиксацияСтр, ФиксацияСтолб, ОпцииПечати, РазмерОкна);
Рассмотрим подробнее параметр ОпцииПечати. Это строковый идентификатор, который является ключом для поиска настроек в реестре. Если вам требуется быстрое универсальное решение для вывода таблицы значений в красивом виде, идентификатор опций поможет сохранить пользовательские предпочтения по оформлению.
Важно понимать приоритетность:
Опции().В то время как Опции() отвечают за экран, метод ПараметрыСтраницы() управляет выводом на бумагу. Выясним причину, по которой настройки часто «слетают» при смене принтера.
Таб.ПараметрыСтраницы(Ориентация, Масштаб, ЧислоСтраниц, ПоляСлева, ПоляСправа, ПоляСверху, ПоляСнизу, ПоляКолонтитулов, ФлагПечатиЗаголовков, ПовторятьПечатьЗаголовков);
Все эти значения также сохраняются в реестре в привязке к конкретному идентификатору опций. Чтобы текст гарантированно помещался в ячейки печатной формы, иногда целесообразно использовать механизм масштабирования шрифта. Однако здесь есть критический нюанс: настройки страницы в реестре жестко связаны с драйвером принтера, установленным в системе по умолчанию на момент сохранения. Если администратор заменил принтер или обновил драйвер, структура бинарных данных в реестре может стать несовместимой.
Проанализируем ситуацию, часто встречающуюся в крупных компаниях: на терминальном сервере работают 50 человек, и у двоих из них отчеты печатаются «криво». Поскольку ветка HKEY_CURRENT_USER у каждого пользователя своя, настройки одного пользователя никак не влияют на другого. Кроме проблем с таблицами, пользователи в терминале часто просят исправить потерю окна сообщений, что также связано с индивидуальными настройками интерфейса.
Выясним, как быстро решить проблему некорректных настроек без переписывания кода:
regedit).HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<База>\V7\<Пользователь>\Moxel\.Опции) и удалите его целиком.Иногда требуется принудительно «сбросить» пользовательские настройки программным путем. В штатном наборе команд 1С 7.7 нет функции удаления разделов реестра, но мы можем воспользоваться объектом WScript.Shell. Рассмотрим пример кода, который очищает настройки перед выводом таблицы:
ИмяОпций = "МойОтчет_НастройкиПечати";
ИмяПользователя = ИмяПользователя();
ПутьРеестра = "HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\ТестБаза\V7\" + ИмяПользователя + "\Moxel\" + ИмяОпций + "\";
Попытка
sh = СоздатьОбъект("WScript.Shell");
sh.RegDelete(ПутьРеестра);
Исключение
// Если ветки нет, возникнет ошибка, которую мы просто игнорируем
КонецПопытки;
Таб = СоздатьОбъект("Таблица");
Таб.Опции(1, 1, 1, 1, ИмяОпций);
// Далее формирование таблицы
Такой подход гарантирует, что пользователь всегда будет получать отчет с теми параметрами (поля, ориентация), которые задумал разработчик, независимо от того, что он настраивал в прошлый раз.
Стоит упомянуть и файл 1CV7.CFG, который располагается в каталоге пользователя в папке базы данных. Несмотря на то, что параметры Moxel там не хранятся, в этом файле фиксируются общие настройки интерфейса, положения окон и панелей инструментов. Если очистка реестра не помогла исправить странное поведение окон отчетов, стоит обратить внимание и на этот файл, однако для параметров страницы приоритетным всегда остается реестр.
Подведем итог: для эффективного управления печатными формами в 1С 7.7 необходимо четко контролировать строковые идентификаторы в методах Опции() и ПараметрыСтраницы(). Использование уникальных имен позволяет гибко настраивать каждый отчет, а понимание структуры реестра дает возможность быстро исправлять ошибки отображения у конкретных пользователей.