Как устранить вылеты 1С 7.7 при печати из-за ошибки Moxel.dll у конкретного пользователя?

Системный администратор 1С v7.7
← На главную

Мы рассмотрим распространенную и крайне неприятную проблему: вылет программы 1С 7.7 с ошибкой APPCRASH, ссылающейся на модуль Moxel.dll при попытке печати. Эта ошибка, часто сопровождаемая кодом исключения c0000005 (нарушение прав доступа), обычно проявляется спонтанно и затрагивает конкретных пользователей, работающих в терминальном доступе (RDP) на Windows Server 2008 R2. Проблема усугубляется тем, что после вылета программы принтер может временно исчезать из списка доступных устройств в сессии пользователя. Давайте детально проанализируем возможные причины, такие как некорректные данные, передаваемые в библиотеку Moxel.dll для формирования документа, или ошибки при взаимодействии с драйвером принтера, и предложим комплексные решения.

1. Работа с кэшем пользователя и настройками 1С

Мы начнем наше системное исследование с тщательной проверки и, при необходимости, очистки пользовательских настроек в 1С. Часто причиной нестабильной работы и вылетов программы могут быть поврежденные или некорректно сохраненные параметры, которые 1С пытается использовать при формировании печатных форм через модуль Moxel.dll. Эти параметры могут быть как общими для 1С, так и специфическими для настроек печати конкретных документов.

  1. Удаление базы из списка и добавление заново при запуске 1С:

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

    Порядок действий:

    1. При запуске 1С 7.7, когда появляется окно выбора баз, выделите проблемную базу.
    2. Нажмите кнопку «Удалить» (или аналогичную, в зависимости от версии стартера 1С). Подтвердите удаление.
    3. После удаления нажмите «Добавить» и заново укажите путь к файловой базе данных, присвоив ей то же или новое имя.
    4. Попробуйте войти в 1С под проблемным пользователем и протестировать печать.
  2. Очистка каталога пользователя usr в директории базы данных:

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

    1. Поиск каталога пользователя: Для того чтобы найти этот каталог, мы должны обратиться к конфигуратору 1С. Запустите 1С в режиме Конфигуратор (обычно это доступно администратору системы).

      • Перейдите в меню «Администрирование» -> «Пользователи».
      • Выберите учетную запись проблемного пользователя из списка и откройте ее свойства.
      • В окне свойств пользователя мы обнаружим путь к его каталогу usr. Обычно он находится внутри основной директории базы данных и имеет имя, совпадающее с логином пользователя (например, D:\1CBases\МояБаза\USR\ИМЯ_ПОЛЬЗОВАТЕЛЯ). Запишите или запомните этот путь.
    2. Принятие решения об очистке: После того как мы обнаружили каталог, у нас есть несколько вариантов. Самый радикальный и часто эффективный — это полное удаление содержимого этого каталога или самого каталога пользователя. При следующем запуске 1С, она автоматически воссоздаст необходимую структуру каталога с настройками по умолчанию, что гарантирует устранение любых поврежденных файлов настроек.

      Важные замечания:

      • Мы должны быть осведомлены, что в каталоге usr могут храниться не только стандартные настройки 1С, но и файлы, созданные разработчиками (например, файлы внешних отчетов и обработок с расширением .lst, которые сохраняют специфические параметры и результаты). Перед полным удалением каталога, мы настоятельно рекомендуем создать его резервную копию, просто скопировав его в другое место. Это позволит нам восстановить любые уникальные пользовательские данные или настройки, если это потребуется.
      • Если есть опасения по поводу потери важных данных, мы можем попробовать удалить только файлы, относящиеся к печати или временным данным, но такой подход менее надежен, так как сложно точно определить все влияющие файлы. Полное удаление, хотя и более агрессивно, гарантирует полную очистку и часто является решающим шагом.
    3. Восстановление пользовательских настроек после очистки: После того как каталог usr будет удален, и пользователь заново войдет в 1С, ему придется вручную восстановить некоторые индивидуальные настройки, так как они будут сброшены до значений по умолчанию. Это может включать:

      • Настройки интерфейса (например, расположение панелей инструментов, ширина колонок в таблицах).
      • Параметры отчетов, если они сохранялись для данного пользователя.
      • Установленные галки в меню «Сервис» -> «Параметры» -> «Оперативный учет», если эти настройки были изменены относительно стандартных.

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

  3. Очистка реестра Windows для настроек 1С 7.7:

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

    1. Целевая ветка реестра: Основная ветка, которую мы будем рассматривать для текущего пользователя, находится по пути HKEY_CURRENT_USER\Software\1C\1Cv7\7.7. Внутри этой ветки создаются подразделы для каждой базы данных, к которой подключался пользователь, и для каждой конфигурации 1С. Например, мы можем найти путь типа HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Имя_Базы\V7.

      Порядок поиска:

      • Откройте редактор реестра (regedit.exe), нажав Win + R и введя regedit.
      • Перейдите по указанному пути HKEY_CURRENT_USER\Software\1C\1Cv7\7.7.
      • Найдите подраздел, соответствующий вашей базе данных (часто это имя базы, как оно отображается в списке запуска 1С, например, "1C База Офис").
      • Внутри этого подраздела могут быть further подразделы, относящиеся к конкретным пользователям или общим настройкам.
    2. Удаление настроек Moxel в реестре: Модуль Moxel.dll, отвечающий за работу с печатными формами, также хранит свои параметры в реестре. Если эти параметры повреждены или ссылаются на несуществующие объекты, это может приводить к вылетам.

      Мы смело можем удалить подраздел Moxel, если мы его обнаружим в ветке реестра проблемного пользователя для данной базы. 1С автоматически пересоздаст этот раздел при следующей попытке печати с настройками по умолчанию, что может устранить причину сбоя.

      Действия:

      • В найденном подразделе вашей базы данных и пользователя, поищите подраздел с именем Moxel.
      • Щелкните правой кнопкой мыши по нему и выберите «Удалить». Подтвердите удаление.

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

    3. Полная очистка ветки 1Cv7 для пользователя (с особой осторожностью): Если удаление Moxel не помогло, мы можем рассмотреть более глубокую очистку реестра. Мы можем удалить всю ветку HKEY_CURRENT_USER\Software\1C\1Cv7\7.7 или, по крайней мере, подраздел, относящийся к вашей проблемной базе для конкретного пользователя. Этот шаг должен рассматриваться как крайняя мера, так как он сбросит все настройки 1С для данного пользователя.

      Крайне важно: Перед выполнением этого шага мы обязательно должны создать резервную копию удаляемой ветки реестра. Это позволит нам восстановить исходное состояние в случае непредвиденных проблем. Для этого просто экспортируйте соответствующий раздел в файл .reg с помощью функции "Экспорт" в редакторе реестра.

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

2. Проблемы с драйверами принтера и его настройками

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

  1. Переустановка и выбор драйвера принтера:

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

    1. Использование базовых/универсальных драйверов: Для принтеров HP, особенно многофункциональных устройств, мы рекомендуем попробовать заменить фирменный драйвер на более простой, базовый или универсальный (Universal Print Driver - UPD) от производителя, или даже на стандартный драйвер, например, HPLaserj или аналогичный, который обычно идет с дистрибутивом Windows. Такие драйверы часто работают стабильнее в серверных средах и с устаревшими приложениями, хоть и могут ограничивать некоторые продвинутые функции (например, дуплекс, выбор лотка, расширенные настройки печати).

    2. Драйверы от Microsoft: В некоторых случаях драйверы, поставляемые с самой операционной системой Windows (от Microsoft), могут быть более стабильными, чем фирменные драйверы производителя, особенно для старых приложений вроде 1С 7.7. Мы можем попробовать выбрать такой драйвер из списка доступных при ручной установке принтера.

  2. Именование принтера:

    1С 7.7, будучи старой платформой, может некорректно работать с длинными именами принтеров или именами, содержащими пробелы, специальные символы или символы национальных алфавитов. При взаимодействии с Moxel.dll такие имена могут вызывать ошибки. Мы рекомендуем:

    1. Короткое имя без спецсимволов: Переименуйте принтер в системе, используя максимально короткое имя, состоящее только из латинских букв и цифр, без пробелов и специальных символов. Например, вместо "HP Laser MFP 131 133 135-138" используйте "HPMFP135A" или "PRINTER01". Это значительно снижает риск ошибок, связанных с парсингом имен.

  3. Метод установки принтера на сервере:

    Если пользователь работает по RDP, убедитесь, что принтер установлен на сервере терминалов напрямую или через TCP/IP порт, а не пробрасывается с клиентской машины. Проброшенные принтеры могут работать менее стабильно, так как зависят от корректной работы удаленного рабочего стола и сетевого соединения.

    1. Прямая установка: Установите принтер на сервере как локальный порт (если он подключен напрямую) или как сетевой принтер через стандартный TCP/IP порт, указав его IP-адрес в сети. Это обеспечивает наиболее стабильное взаимодействие.

    2. Избегание "Easy Print": Если принтер все же пробрасывается, мы можем попробовать отключить функцию "Easy Print" (перенаправление принтеров по умолчанию в RDP), так как она иногда вызывает проблемы со старыми приложениями и специфическими драйверами. Это можно сделать через групповые политики на сервере.

  4. Принтер по умолчанию:

    Проверьте, что в системе (в сессии проблемного пользователя) всегда установлен принтер по умолчанию. Отсутствие явно заданного принтера по умолчанию может сбивать 1С при попытке инициализации печати.

  5. Очистка реестра HP принтеров (специфично):

    Некоторые модели принтеров HP имеют особенность записывать каждое задание в реестр Windows, что со временем может привести к его значительному разрастанию и, как следствие, к снижению производительности или конфликтам. Мы можем попробовать очищать соответствующую ветку реестра, связанную с Hewlett-Packard:

    reg delete HKCU\software\hewlett-packard /f

    Однако, мы должны быть очень осторожны, так как это может привести к потере специфических настроек принтера для пользователя и, в некоторых случаях, к созданию копий файла ntuser.dat в профиле пользователя, что потребует дополнительной очистки профиля.

  6. Отключение "умных" функций драйвера:

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

3. Параметры печати в 1С

Даже если драйверы принтера установлены корректно, некорректные параметры страницы, заданные в самой 1С, могут вызывать сбои, так как Moxel.dll передает эти параметры драйверу, который может не справиться с ними.

  1. Проверка отступов и полей страницы:

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

  2. Избегание конфликтов параметров, заданных программно:

    В некоторых старых версиях 1С 7.7 существовал "косяк", когда некорректный порядок или комбинация параметров страницы и опций, заданных программно, могли приводить к падениям. Если вы используете программное задание параметров страницы в коде 1С, например:

    
    Таб.ПараметрыСтраницы(5,5,5,5, 0, 0, 0, 0, 1, 0, 0, 0, ""); // Пример задания полей
    

    Мы должны убедиться, что все значения корректны, находятся в допустимых диапазонах и не вызывают конфликтов с драйвером принтера. Также стоит рассмотреть возможные заморочки с дуплексом (двусторонней печатью): если в драйвере принтера включена двусторонняя печать, а 1С пытается управлять этим параметром некорректно, это также может привести к сбою.

4. Настройки операционной системы и терминального сервера

Поскольку работа ведется в терминальной среде (Windows Server 2008 R2), системные настройки безопасности и особенности работы профилей Windows также могут влиять на стабильность 1С 7.7.

  1. DEP (Data Execution Prevention) и UAC (User Account Control):

    Некоторые пользователи сообщают, что отключение DEP (Предотвращение выполнения данных) для исполняемого файла 1cv7s.exe или полное отключение UAC (Контроль учетных записей) может помочь. Старые приложения, такие как 1С 7.7, иногда конфликтуют с современными механизмами безопасности Windows.

    1. Отключение DEP: Мы можем попробовать отключить DEP только для 1cv7s.exe через свойства системы (Панель управления -> Система -> Дополнительные параметры системы -> Вкладка "Дополнительно" -> Быстродействие "Параметры" -> Вкладка "Предотвращение выполнения данных"). Выберите "Включить DEP для всех программ и служб, кроме выбранных ниже" и добавьте 1cv7s.exe.

    2. UAC: Отключение UAC (через Панель управления -> Учетные записи пользователей -> Изменение параметров контроля учетных записей) не рекомендуется по соображениям безопасности и должно рассматриваться как временная мера диагностики, а не постоянное решение.

  2. Проблемы с профилем Windows:

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

    Порядок действий:

    1. Убедитесь, что пользователь вышел из всех сессий на сервере.
    2. Создайте резервную копию папки профиля пользователя (обычно C:\Users\Имя_пользователя или C:\Documents and Settings\Имя_пользователя для старых ОС).
    3. Удалите профиль пользователя через "Свойства системы" -> "Дополнительно" -> "Профили пользователей" -> "Параметры".
    4. Удалите соответствующую ветку в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, которая соответствует SID (идентификатору безопасности) данного пользователя.
    5. При следующем входе пользователя система создаст новый, чистый профиль.
  3. Переустановка операционной системы:

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

5. Внешние компоненты 1С (FormEx, 1С++)

Если в вашей 1С 7.7 используются внешние компоненты, такие как FormEx или 1С++ (которые значительно расширяют функциональность платформы), они также могут быть источником конфликтов, особенно если они устарели или несовместимы с текущей версией платформы или операционной системы.

  1. Проверка наличия и обновление:

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

  2. Временное отключение для диагностики:

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

    Пример отключения в коде (если компонента регистрируется програмно):

    
    // Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0 Тогда
    //     Предупреждение("Не удалось загрузить FormEx.dll!");
    // КонецЕсли;
    
  3. Конфликты с другим программным обеспечением:

    Мы должны учитывать, что некоторые внешние компоненты могут конфликтовать с другим программным обеспечением, работающим в той же сессии пользователя или на сервере. Например, компонент FormEx ранее был известен конфликтами с программой удаленного доступа TeamViewer, когда оба приложения пытались использовать одни и те же системные ресурсы. Отключение "суперкнопки" или других специфических функций в конкурирующих программах может помочь устранить такие конфликты.

6. Обновление платформы 1С

Иногда сама платформа 1С может содержать ошибки, которые исправляются в последующих релизах. В вашем случае, вы работаете на 26-м релизе 1С 7.7, в то время как 27-й релиз был выпущен вскоре после него, предположительно для исправления критических ошибок.

  1. Обновление до 27-го релиза:

    Известно, что после 26-го релиза платформы 1С 7.7 практически сразу был выпущен 27-й релиз, который, вероятно, содержал исправления критических ошибок, влияющих на стабильность работы. Мы настоятельно рекомендуем обновить платформу 1С 7.7 до 27-го релиза. Мы всегда должны предварительно создать резервную копию базы данных и всех файлов платформы, прежде чем приступать к обновлению.

    Обновление может включать замену исполняемых файлов платформы 1С (1cv7s.exe, moxel.dll и другие) на сервере терминалов.

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

← На главную