При разработке печатных форм в 1С часто возникает ситуация, когда программно заданные параметры (ориентация страницы, поля, масштаб, имя принтера) игнорируются системой. В особенности это проявляется при запуске печати из разных интерфейсов (журнал документов, форма объекта) или на разных компьютерах. Давайте разберем, почему это происходит и как гарантированно применить настройки печати.
Чаще всего проблема кроется в двух аспектах:
ИмяПринтера для поиска конкретного устройства в ОС. Если на одном ПК принтер именуется как Принтер1, а на другом — как host\Принтер1, настройки могут сбрасываться на значения по умолчанию, так как 1С не находит принтер по указанному пути._SystemSettings). Когда вы программно задаете параметры, а затем открываете форму печати, эти сохраненные настройки могут перекрывать ваши программные установки.ПечатьДокументов) происходит копирование области табличного документа в элемент управления. Если в коде этой формы не предусмотрено явное копирование свойств принтера и полей, настройки теряются.Для обеспечения корректной печати используйте следующие рекомендации:
Всегда проверяйте актуальное имя принтера в операционной системе на каждом рабочем месте. Если вы принудительно задаете ИмяПринтера в коде, убедитесь, что оно идентично строке, получаемой через стандартный диалог выбора принтера в Windows.
ТабДокумент.ИмяПринтера = "ИмяВашегоПринтераКакВСистеме";
ТабДокумент.АвтоМасштаб = Истина;
Свойство КлючПараметровПечати (ранее ИмяПараметровПечати) определяет, в какую область хранилища настроек будут записаны или откуда будут считаны параметры. Если вы хотите, чтобы ваши настройки были «железобетонными», вы можете управлять ключом:
// Принудительная установка ключа
ТабДокумент.КлючПараметровПечати = "МояУникальнаяНастройкаПечати";
// Если нужно сбросить настройки пользователя, которые могут мешать
ТабДокумент.КлючПараметровПечати = "";
Если печать идет через общую форму, стандартное присвоение Форма.ПечатныйДокумент = ТабДокумент не всегда переносит все свойства (например, поля или имя принтера). Вам необходимо либо модифицировать код общей формы, добавив туда явную передачу свойств, либо передавать структуру параметров.
Проанализируем пример передачи параметров через универсальные механизмы:
ПараметрыПечДокумента = Новый Структура("АвтоМасштаб,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,ИмяПараметровПечати",
Истина, 3, 0, 0, 0, "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка");
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, Заголовок, НепосредственнаяПечать);
В случаях, когда настройки пользователя критичны, но нужно принудительно задать свои, используйте метод сохранения состояния перед формированием и его восстановление после:
&НаКлиенте
Процедура ПечатьСВосстановлениемНастроек()
// Сохраняем текущий ключ настроек
Настройки = ТаблицаОтчета.КлючПараметровПечати;
// Формируем документ
СформироватьТаблицуНаСервере();
// Восстанавливаем сохраненные параметры
ТаблицаОтчета.КлючПараметровПечати = Настройки;
КонецПроцедуры
Важно: Если вы обнаружили, что настройки пользователя окончательно «засорили» хранилище и мешают корректной работе, в крайнем случае можно очистить записи для конкретного пользователя в таблице _SystemSettings информационной базы, но делайте это с осторожностью, так как это сбросит и другие пользовательские настройки.
Рассмотрев эти подходы, вы сможете добиться стабильной работы печатных форм на любом оборудовании в вашей сети.