Разработчики, работающие с платформой 1С 7.7, часто сталкиваются с капризным поведением системы печати. Типичная ситуация: программист прописывает имя принтера в методе ПараметрыСтраницы, но программа упорно отправляет документ на устройство, выбранное в Windows по умолчанию, или на тот принтер, на который пользователь печатал вручную в прошлый раз. В этой статье мы подробно разберем, почему так происходит, и как заставить «семерку» четко следовать вашим инструкциям.
Для начала проанализируем, как 1С 7.7 (движок печати Moxel) хранит настройки. В отличие от современных платформ, 1С 7.7 очень сильно завязана на реестр Windows. Когда вы вызываете печать, система обращается к ветке HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<ИмяБазы>\V7\<ИмяПользователя>\Moxel\. Если в коде не указаны специфические настройки, 1С берет параметры из последнего успешного сеанса печати.
Основная ошибка заключается в игнорировании метода Опции. Если мы не задаем уникальный ключ для сохранения параметров, 1С использует общие настройки, что и приводит к «запоминанию» старого принтера. Давайте разберем по шагам, как правильно выстроить программный код.
Посмотрим на пример кода, который гарантирует правильную передачу параметров. Важно соблюдать строгую последовательность действий: сначала инициализация опций, затем установка параметров страницы и только потом — команда на печать. Проанализируем правильную структуру:
// Создаем объект таблицы
Таб = СоздатьОбъект("Таблица");
// 1. Устанавливаем Опции.
// Пятый параметр - "ИмяОпций" - КРИТИЧЕСКИ ВАЖЕН!
// Это уникальная строка, под которой настройки сохранятся в реестре.
Таб.Опции(0, 0, 0, 0, "ПечатьЧекаНаTSC");
// 2. Устанавливаем параметры страницы.
// Имя принтера передается 12-м параметром.
ИмяПринтера = "TSC TE200";
Таб.ПараметрыСтраницы(1, , , 0, 0, 0, 0, , , 1, , ИмяПринтера);
// 3. Отправляем на печать без диалога (0)
Таб.Напечатать(0);
Выясним причину, почему пятый параметр метода Опции так важен. Если вы укажете Таб.Опции(1, 1, 0, 0, "МойПринтер1"), 1С создаст отдельную запись в реестре. При следующем вызове с тем же именем опций система сначала проверит программно переданные параметры, и если они заданы, применит их. Без этого ключа 1С «путается» в глобальных настройках профиля пользователя.
Рассмотрим подробнее требования к имени принтера. 1С 7.7 крайне чувствительна к кодировкам и спецсимволам. Проанализируем типичные проблемы с именованием:
TSC_TE200 (без пробелов, латиницей) и проверьте работу.\\SERVER\Printer_Accounting_Department_Room_101 часто обрезаются внутренними буферами платформы.Выясним ситуацию, если ваша база работает на сервере терминалов. Это самый сложный случай. При подключении через RDP принтеры пользователей пробрасываются с динамическими именами, например: HP LaserJet (перенаправлено 15). При каждом новом входе число в скобках меняется.
В такой ситуации прямая передача имени в ПараметрыСтраницы не сработает, так как имя, сохраненное в коде или реестре вчера, сегодня уже не существует. Рассмотрим пути решения:
FormEx, чтобы получить список всех доступных принтеров и найти тот, который содержит нужную подстроку (например, "TSC").Если стандартные методы ПараметрыСтраницы продолжают игнорировать настройки, разберем радикальный, но надежный способ. Мы можем временно изменить принтер по умолчанию в самой Windows средствами системы, выполнить печать из 1С и вернуть настройки обратно. Посмотрим на пример реализации через объект WScript.Network:
// Создаем системный объект для управления принтерами
WshNetwork = СоздатьОбъект("WScript.Network");
// Запоминаем текущий принтер (чтобы вернуть потом)
// В 1С 7.7 напрямую получить принтер по умолчанию сложно,
// обычно используют чтение реестра или внешние компоненты.
// Устанавливаем нужный принтер принтером по умолчанию в Windows
WshNetwork.SetDefaultPrinter("TSC TE200");
// Печатаем из 1С
Таб.Напечатать(0);
// Возвращаем старый принтер, если это необходимо
// WshNetwork.SetDefaultPrinter(СтарыйПринтер);
Важный момент: Этот метод влияет на всю систему. Если в момент печати пользователь решит распечатать письмо из почты, оно тоже уйдет на чековый принтер. Используйте этот подход с осторожностью.
Подведем итог нашего анализа. Чтобы печать в 1С 7.7 работала предсказуемо, придерживайтесь следующих правил:
Таб.Опции(,,,, "УникальноеИмя") перед печатью.ПараметрыСтраницы в точности совпадает с тем, что вы видите в панели управления Windows (вплоть до регистра букв).HKEY_CURRENT_USER\Software\1C.Соблюдение этих простых шагов позволит вам избежать хаоса при печати документов и обеспечит стабильную работу системы на любых принтерах этикеток и чеков.