Настройка вывода на печать табличного документа в «1С:Предприятие 8.2»

04.04.11

Разработка - Механизмы платформы 1С

Большинство обучающих материалов по программированию в системе 1С при описании формирования печатных форм на основе объекта «Табличный документ» ограничиваются выводом готовой формы на экран. Для пользователей же куда более важным является то, как документ будет выглядеть в распечатанном виде. Рассмотрим свойства и методы табличного документа, относящиеся к настройкам печати.

Большинство обучающих материалов по программированию в системе 1С при описании формирования  печатных форм на основе объекта «Табличный документ» ограничиваются выводом готовой формы на экран. Для пользователей же куда более важным является то, как документ будет выглядеть в распечатанном виде. Здесь, кроме хорошо сверстанного макета, играют роль и установки параметров печати.

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

Рассмотрим свойства и методы табличного документа, относящиеся к настройкам печати (в приведенных примерах «ТабДок» это объект типа «Табличный документ»).

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

ТабДок.ИмяПринтера="HP LaserJet 3050 Series PCL 6";

При печати пакета документов  можно сэкономить время, установив признак разбора по копиям:

ТабДок.РазборПоКопиям=истина;

Число копий можно указать так:

ТабДок.КоличествоЭкземпляров=5;

Разумеется, можно задать поля:

ТабДок.ПолеСлева=20;//Поле слева 20мм, остальные поля 10мм (по умолчанию)

Еще несколько свойств страницы:

ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
   
ТабДок.ЭкземпляровНаСтранице=2; //на листе будет размещено 2 страницы
   
ТабДок.Автомасштаб=истина; //аналогично настройкам масштаба  «по ширине страницы»

При необходимости можно указать конкретное значение масштабирования в процентах (свойство «МасштабПечати»).

Свойство «РазмерСтраницы» позволяет задать стандартные форматы страницы – “A3”, “A4”, “A5” (полный список вариантов доступен в справке 1С).

ТабДок.РазмерСтраницы="A3";// буква А должна быть английской

Для нестандартного размера бумаги (Custom) можно указать значения высоты и ширины страницы (в мм):

ТабДок.РазмерСтраницы="Custom";//нестандартный размер
 
  ТабДок.ВысотаСтраницы=350;
   
ТабДок.ШиринаСтраницы=350;

Также в табличном документе доступно управление выводом колонтитулов и их содержимым. Для этого служат свойства «ВерхнийКолонтитул» и «НижнийКолонтитул». Например:

    ТабДок.ВерхнийКолонтитул.Выводить=истина; //будет напечатан верхний колонтитул
    ТабДок.РазмерКолонтитулаСверху=7; //размер колонтитула 7мм (по умолчанию 10мм)
    ТабДок.ВерхнийКолонтитул.ВертикальноеПоложение=ВертикальноеПоложение.Верх;
    ТабДок.ВерхнийКолонтитул.НачальнаяСтраница=2;//колонтитул выводится со второй страницы
    ШрифтКолонтитула=Новый Шрифт("Courier New", 8,,Истина);
    ТабДок.ВерхнийКолонтитул.Шрифт=ШрифтКолонтитула; //наклонный шрифт
    ТабДок.ВерхнийКолонтитул.ТекстВЦентре="Верхний колонтитул";
    ТабДок.ВерхнийКолонтитул.ТекстСправа="Стр.[&НомерСтраницы] из [&СтраницВсего]"; //нумерация страниц
    ТабДок.ВерхнийКолонтитул.ТекстСлева="[&Дата]";//текущая дата

Сформированный документ отправляется на печать с помощью метода «Напечатать()». Возможно два варианта вызова.

1) Непосредственно на принтер:

ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
    ТабДок.Напечатать(истина);

2) Перед печатью будет выведен диалог печати:

ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
    ТабДок.Напечатать(ложь);

Кроме того можно управлять и разбиением документа на страницы. Оценить  количество страниц в документе по настройкам текущего принтера можно так:

ТабДок.КоличествоСтраниц();

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

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

Принудительно вставить разрывы страниц позволяют методы «ВывестиВертикальныйРазделительСтраниц()» и «ВывестиГоризонтальныйРазделительСтраниц()».

Таким образом, можно управлять постраничным выводом на печать и контролировать заполнение страницы:

Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
       
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;

Важной характеристикой платформы «1С:Предприятие 8.2» является строгое разделение свойств и методов по контексту исполнения. Если все приведенные выше свойства доступны в любом контексте, то перечисленные методы недоступны на тонком клиенте. Исключением является метод «Напечатать()», доступность которого по понятным причинам ограничена клиентской частью. Это означает, что формирование табличного документа должно происходить на сервере, а отправлять его на печать следует в клиентской процедуре.

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4534    dsdred    53    

72

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    5295    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6410    dsdred    36    

112

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18475    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    8824    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DanilaDru 262 04.04.11 14:10 Сейчас в теме
А имя принтера получается установить в веб-клиенте?
2. anig99 2843 04.04.11 15:09 Сейчас в теме
Открываем конфигуратор. Справка и читаем всё тоже самое
Короче минус!!!!!
O-Planet; chemezov; +2 Ответить
3. Glafira 242 04.04.11 17:36 Сейчас в теме
DanilaDru пишет:

А имя принтера получается установить в веб-клиенте?

Ну, по крайней мере на веб-клиенте это свойство доступно.
FlagmanGK; +1 Ответить
4. DanilaDru 262 06.04.11 14:16 Сейчас в теме
(3)А есть способы понять на стороне веб-клиента какие принтеры у пользователя подключены?. По сути база может быть запущено с какого угодно компа и не факт, что в системе будет принтер "HP LaserJet 3050 Series PCL 6".
5. Glafira 242 07.04.11 06:19 Сейчас в теме
В 1С нет своих средств получить список установленных принтеров.
Можно использовать службу WMI - готовый пример на http://www.1c-h.ru/?p=1360.
Также см.статью http://infostart.ru/public/21019/, в том числе комментарии
Saint13; Созинов; Ksu; Manticor; +4 Ответить
6. DanilaDru 262 07.04.11 10:58 Сейчас в теме
(5)Спасибо за информацию.
7. semfart 30.06.11 09:27 Сейчас в теме
А как дать команду двусторонней печати?
8. anig99 2843 30.06.11 10:15 Сейчас в теме
(7) никак. нет такой команды, т.к. двусторонняя печать относится к внутренним командам принтера, т.е. управляются драйвером. Всё, что может 1с - это управлять СОДЕРЖАНИЕМ страницы. Двусторонняя печать, выбор лотков, типа бумаги и т.д. - это за пределами возможностей 1с. Можно такими вещами управлять только через WMI, shell и т.д., но это всё равно будет не очень кошерное решение - нужно будет в коде учитывать разных пользователей, компы и т.д.
Простое решение, которое я нашел - это копии принтеров с разными настройками. Заводим в системе несколько копий одного принтера. Называем их как-нибудь унифицировано. Например, "Верхний лоток", "нижний лоток двухсторонняя печать", "нижний лоток односторонняя печать", и настраиваем эти принтеры в соответствии. Дальше эти настройки надо будет закрепить в 1с - вывести на экран печатную форму, в настройках страницы выбрать принтер, настроить его опять-таки в соответствии и вывести на печать. Если в печатной форме указано название сохраняемых настроек (см. типовые), то в следующий раз всё выйдет именно на нужный принтер с теми настройками. Немного муторно, зато работает без кодинга.
ДимонД; i132; +2 Ответить
16. bnk72 105 11.08.14 10:28 Сейчас в теме
(8) anig99, в 7.7 так и делала (устанавливала локальный принтер через TCP/IP Port), настраивала в свойствах вкладка Допольнительно/Умолчания нужные параметры, печатала 1 раз на него с заходом в свойства принтера, а затем уже на печать без предварительного просмотра. В 8.3 так не получается (на параметры по умолчанию наплевать, вернее степлировать степлирует, а вот заместо двусторонней печати шлепает односторонюю). Кто нибудь знает как заставить слушаться?
11. kostia.ck 61 06.07.12 14:28 Сейчас в теме
12. DanilaDru 262 06.07.12 16:19 Сейчас в теме
(11)и ловить баги в первых рядах :) Лучше подождать когда стабилизируется.
jekyllkem; +1 Ответить
20. RuslanKhanow 12.03.15 13:07 Сейчас в теме
(7) semfart, ТабличныйДокумент.ДвусторонняяПечать = ТипДвустороннейПечати.ПереворотВлево;
9. Lubocka 36 13.08.11 18:49 Сейчас в теме
"Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;"

Подскажите мне с этим примером, а именно метод .ВывестиГоризонтальныйРазделительСтраниц()

Где он ставиться? При 1-й строке, на последней? Или каждый раз?
Играет ли какую-нибудь роль АвтоМасштаб()

А еще лучше, примерчик. Т.к. у меня никак не работает.
10. nirbolz 31 19.06.12 13:56 Сейчас в теме
Да, странно что windows Не понимает значение реквизита РазмерСтраницы табличного документа "Custom" как нестандартный размер страницы. А нестандартный размер страницы в windows понимается 1с как "Windows:256". Следовательно у меня не получается задать из 1с размеры страницы.
13. Светлый ум 406 09.07.13 19:35 Сейчас в теме
Открываем конфигуратор. Справка и читаем всё тоже самое
Короче минус!!!!!


Нифига, за колонтитулы плюс - прочитал, и теперь во всю использую.
14. kancerina 12.10.13 12:39 Сейчас в теме
Спасибо за полезную информацию!
15. pvl_mksv 20 31.07.14 14:13 Сейчас в теме
Спасибо! Полезно, добавлю от себя, что в случае использования сетевого принтера, имя принтера задается как \\%HostName%\%PrinterName%. Подозреваю, что с локальными именами тоже не все так просто, так как принтер в системе можно обозвать хоть неприличным словом.
17. bnk72 105 13.08.14 08:54 Сейчас в теме
Специально проверила в 8.2 немедленную печать на тот же принтер - здесь дуплексную печать видит и выполняет. Напишу разработчикам, думаю это баг платформы...
18. bnk72 105 13.08.14 10:19 Сейчас в теме
Обновила платформу на 8.3.5.1098. Стала тестировать - заметила что в 8.3 настройка дуплексной печати вынесена в "Параметры страницы". Выставила дуплекс, отправила на печать - теперь печатает дуплекс и при немедленной печати других документов. Может кому поможет. Но возникли непонятки с теми документами, которые уже были напечатаны ранее, почему-то ориентация страницы слетела. Теперь в предварительном просмотре принудительно ставлю ландшафт, отправляю на печать - печатает портрет...
Dizel; pvl_mksv; +2 Ответить
19. bnk72 105 13.08.14 10:56 Сейчас в теме
А, тут дело теперь в макете страницы, видать когда я экспериментировала - пробовала. Не пойму, в 8 уже настройка печати для каждого документа (точнее "экземпляра документа" ) сохраняется в базе?
21. Tanya_o 13 29.04.15 11:24 Сейчас в теме
ТабДок.ВерхнийКолонтитул.ТекстСправа="Стр.[&НомерСтраницы] из [&СтраницВсего]"; //нумерация страниц


Подскажите пожалуйста, а можно задать параметр с какого номера считать номер страницы
Пример в текущем отчете это первая страница но надо считать с 122. Т.е.
Страница 122, 123(122+1(1- это номер страницы в этом отчете)) , 124 (122+2), 1255 (122+3) и т.д.
22. -null- 19.08.15 11:48 Сейчас в теме
(21) Tanya_o, Присоединяюсь к вопросу! Как указать начальный номер страницы, выводимый в колонтитул (не с какой страницы начать выводить колонтитул, а как задать начальный номер) ?
23. Ivon 673 30.12.15 14:20 Сейчас в теме
Как напечатать только страницу 1 и не печатать остальные? Если это можно.
24. user594726_artyem.romanenkov 17.10.16 08:17 Сейчас в теме
Здравствуйте!
Подскажите, пожалуйста, как объединить ячейки табличного документа с одинаковыми значениями в рамках одного столбца и поместить значение по центру. Н-р, "Контрагент", "Договор контрагента".
25. progr-2008 118 21.05.20 17:43 Сейчас в теме
Сетевой принтер по умолчанию печатает 2 страницы у одного из пользователей. И его настройку не запоминает.
И при записи в файл тоже запоминает 2 страницы.
Если не дорабатывать - где настройка?
26. v3rter 29.08.22 16:44 Сейчас в теме
(25) столкнулся, разобрался, пишу для окейгугла: настроить в двух местах - в кнопке "настройка" в свойствах принтера в панели управления и там же на вкладке Дополнительно под кнопкой "Умолчания".
27. v3rter 29.08.22 16:45 Сейчас в теме
ПроверитьВывод() и ПроверитьПрисоединение() - очень медленные функции, по личному опыту их вызов может длиться несколько секунд, так что не злоупотребляем
Оставьте свое сообщение