Почему 1С запоминает старый принтер по умолчанию и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

В процессе эксплуатации систем на базе «1С:Предприятие 8.3» системные администраторы и программисты часто сталкиваются с крайне неприятной проблемой: пользователи, активно перемещающиеся между различными рабочими местами (для них пригодится система удаленного администрирования рабочих мест и установки драйверов) или подключающиеся к терминальному серверу (RDP), жалуются на «прилипание» старого принтера. При попытке быстрой печати (например, по нажатию оранжевой кнопки «Печать» без вызова диалогового окна) документ упорно уходит на принтер, установленный на предыдущем компьютере, даже если текущий системный принтер по умолчанию настроен правильно. При этом стандартная чистка локального кэша 1С не приносит никаких результатов.

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

Выясняем причину: как и где 1С сохраняет настройки печати

Многие ошибочно полагают, что параметры принтера сохраняются в локальных файлах профиля пользователя на жестком диске или в реестре Windows. На самом деле в современных версиях платформы 1С 8.3 настройки печати для каждого табличного документа сохраняются непосредственно в базе данных СУБД.

Проанализируем этот механизм изнутри:

  1. У каждого табличного документа в коде 1С есть свойство ИмяПараметровПечати (поможет обработка для автоматической модификации свойств печатных форм). При формировании печатной формы разработчики присваивают этому свойству уникальный строковый идентификатор (например, "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг").
  2. Когда пользователь хотя бы один раз выводит документ на печать через диалоговое окно (Ctrl+P) и выбирает конкретный принтер, платформа автоматически связывает этот принтер с указанным идентификатором ИмяПараметровПечати.
  3. Эти данные записываются в системную таблицу базы данных _SystemSettings (Хранилище системных настроек) под учетной записью текущего пользователя 1С. Ключ записи выглядит примерно так: Общее/НастройкиПечатиТабличногоДокумента/ПАРАМЕТРЫ_ПЕЧАТИ_[ИмяПечатнойФормы].
  4. При последующих попытках печати этой же формы платформа считывает сохраненную настройку из базы данных. Если принтер с таким именем доступен в системе, 1С отправляет документ на него, полностью игнорируя текущий системный принтер по умолчанию Windows.

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

---

Способ 1. Динамическое изменение Имени параметров печати (Рекомендуемый программный метод)

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

Рассмотрим пример реализации этой логики. С помощью механизма расширений мы можем перехватить процедуру печати и динамически изменить имя параметров, привязав его к имени локального компьютера:


&НаСервере
Процедура ПередВыводомТабличногоДокумента(ТабличныйДокумент, ИмяФормы)
    
    // Получаем имя текущего компьютера (клиента)
    ИмяКомпьютераКлиента = ИмяКомпьютера();
    
    // Проверяем, задано ли имя параметров печати в документе
    Если ЗначениеЗаполнено(ТабличныйДокумент.ИмяПараметровПечати) Тогда
        // Добавляем имя компьютера в качестве суффикса
        ТабличныйДокумент.ИмяПараметровПечати = ТабличныйДокумент.ИмяПараметровПечати + "_" + ИмяКомпьютераКлиента;
    КонецЕсли;
    
КонецПроцедуры

При таком подходе для пользователя «Иван» на Компьютере №1 будут действовать одни настройки печати (и принтер Компьютера №1), а при его переходе на Компьютер №2 платформа создаст и считает совершенно другую настройку. Конфликт «прилипания» старого принтера будет полностью исчерпан.

---

Способ 2. Программный сброс принтера перед выводом на печать

Если вам не требуется сохранять индивидуальные настройки полей, колонтитулов и принтеров для каждой формы, а нужно, чтобы 1С всегда отправляла документы строго на текущий принтер по умолчанию, установленный в Windows, можно принудительно очищать имя принтера в табличном документе.

Если свойству ИмяПринтера присвоить пустую строку, платформа проигнорирует кэшированные настройки из базы данных и обратится к операционной системе за дефолтным принтером. Посмотрим на пример кода:


// Перед отправкой табличного документа на печать принудительно очищаем имя принтера
ТабличныйДокумент.ИмяПринтера = ""; 
// Теперь 1С отправит документ на текущий принтер по умолчанию из настроек Windows
ТабличныйДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

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

---

Способ 3. Очистка сохраненных настроек через интерфейс 1С (Административный метод)

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

Разберем по шагам, как очистить проблемные настройки:

  1. Перейдите в раздел НСИ и администрирование → Обслуживание.
  2. Найдите и откройте ссылку Настройки пользователей и прав (или сразу пункт Очистка настроек).
  3. В появившемся списке выберите конкретного пользователя, у которого возникли проблемы с принтером.
  4. Перейдите на вкладку или раскройте узел дерева Настройки печати табличных документов.
  5. Выделите проблемные настройки (или все сразу) и нажмите кнопку Очистить (или клавишу Delete).

После этой процедуры при первом нажатии кнопки «Печать» 1С заново обратится к операционной системе и подхватит актуальный системный принтер.

---

Способ 4. Массовое удаление настроек печати через SQL-запрос

В крупных компаниях с клиент-серверной архитектурой ручная очистка настроек через интерфейс для сотен пользователей может оказаться слишком трудоемкой — для этого подойдёт инструмент принудительного завершения сеансов 1С. В этом случае системный администратор может выполнить очистку напрямую в СУБД Microsoft SQL Server или PostgreSQL.

Важно: Перед выполнением любых прямых манипуляций с базой данных на уровне СУБД обязательно сделайте резервную копию базы данных и завершите работу всех активных сеансов пользователей (поможет консоль управления сеансами и параметрами информационной базы 1С)!

Проанализируем структуру таблицы _SystemSettings — для этой задачи есть анализ структуры и объема таблиц СУБД для 1С. Нам необходимо удалить записи, отвечающие за кэширование параметров печати табличных документов. Выполните следующий SQL-запрос:


-- Удаление настроек печати для всех пользователей базы данных
DELETE FROM _SystemSettings 
WHERE _ObjectKey LIKE '%НастройкиПечатиТабличногоДокумента%';

Если требуется сбросить настройки только для конкретного пользователя, вам потребуется сначала определить его внутренний уникальный идентификатор (UID) в таблице пользователей 1С и добавить соответствующее условие фильтрации _UserUUID в SQL-запрос.

---

Особенности работы в терминальной среде (RDP)

Очень часто проблема «прилипания» усугубляется при работе пользователей на сервере терминалов. При каждом новом входе в RDP-сессию локальные принтеры пользователя пробрасываются заново, получая в операционной системе динамические имена со случайными номерами сессий (например, HP LaserJet (перенаправлено 2), а при следующем входе — HP LaserJet (перенаправлено 5)).

Платформа 1С запоминает точное имя принтера вместе с номером сессии в конце. Естественно, при новом входе старое имя (с номером сессии «2») становится недействительным, из-за чего 1С либо выдает ошибку печати, либо начинает хаотично отправлять документы на другие доступные принтеры.

Для минимизации подобных проблем рекомендуется выполнить следующие шаги:

Применяя предложенные методики динамического формирования имен параметров печати и правильной настройки терминального окружения, вы навсегда избавите пользователей от проблем с «неверным принтером по умолчанию» в 1С.

← На главную