Добавляем 120 собственных учебных строк, оставляя место для подвала. Проверяем физические поля настоящего тестового драйвера без отправки задания печати.
Где и как запускать
Полный модуль собственной управляемой формы; толстый клиент Windows. Не запускать в рабочей конфигурации.
Подготовка
Создайте собственную отдельную учебную базу с именем конфигурации УчебнаяКонфигурацияСинтаксиса, внешнюю обработку и пустую управляемую форму. Откройте её в толстом клиенте Windows 8.5.1.1343.
Для командного урока создайте команду Выполнить, кнопку и действие Выполнить. Вставьте весь приведённый модуль, включая функции ниже процедуры.
Книга / 3 и Ручка / 1 создаются в новом табличном документе. Рабочие печатные формы, документы базы и файлы организации не используются.
Основной язык собственной конфигурации — ru. Урок языков дополнительно требует язык en. Языки создаются вручную в Конфигураторе; код не устанавливает их и не переводит текст автоматически.
Урок проверки печати требует установленного собственного тестового/виртуального принтера. На форме создайте строковый реквизит УчебныйПринтер и введите точное имя устройства.
Для реальной печати дополнительно нужен строковый реквизит Подтверждение. Для окна нужна отдельная команда СкрытьУчебноеОкно. Для сохранения первый запуск использует новый временный MXL, не существующий рабочий файл.
При создании руководства 1С, принтер и запись файла не запускались. Окна, драйвер и обратный вызов проверяются вручную в собственной учебной базе.
&НаКлиенте
Процедура Выполнить(Команда)
Если ПустаяСтрока(УчебныйПринтер) Тогда
ВызватьИсключение "Введите точное имя собственного тестового принтера";
КонецЕсли;
Документ = СоздатьУчебныйДокумент();
Документ.ИмяПринтера = УчебныйПринтер;
Документ.АвтоМасштаб = Ложь;
Документ.МасштабПечати = 100;
Попытка
Верх = Документ.ПолучитьРазмерПоляПринтераСверху();
Лево = Документ.ПолучитьРазмерПоляПринтераСлева();
Низ = Документ.ПолучитьРазмерПоляПринтераСнизу();
Право = Документ.ПолучитьРазмерПоляПринтераСправа();
Документ.ПолеСверху = Макс(15, Верх);
Документ.ПолеСлева = Макс(15, Лево);
Документ.ПолеСнизу = Макс(15, Низ);
Документ.ПолеСправа = Макс(15, Право);
Сообщить(Документ.ПолеСверху >= Верх И Документ.ПолеСнизу >= Низ);
Сообщить(Документ.ПолеСлева >= Лево И Документ.ПолеСправа >= Право);
СтрокаОтчета = Новый ТабличныйДокумент;
СтрокаОтчета.Область(1, 1).Текст = "Учебная позиция";
СтрокаОтчета.Область(, 1, , 1).ШиринаКолонки = 25;
Подвал = Новый ТабличныйДокумент;
Подвал.Область(1, 1).Текст = "Только собственные учебные данные";
Проверяемые = Новый Массив;
Проверяемые.Добавить(СтрокаОтчета);
Проверяемые.Добавить(Подвал);
Для Номер = 1 По 120 Цикл
СтрокаОтчета.Область(1, 1).Текст = "Учебная позиция " + Строка(Номер);
Если НЕ Документ.ПроверитьВывод(Проверяемые) Тогда
Документ.ВывестиГоризонтальныйРазделительСтраниц();
Если НЕ Документ.ПроверитьВывод(Проверяемые) Тогда
ВызватьИсключение "Строка и подвал не помещаются даже на новой странице: уменьшите собственный макет";
КонецЕсли;
КонецЕсли;
Документ.Вывести(СтрокаОтчета);
КонецЦикла;
Документ.Вывести(Подвал);
Метка = Новый ТабличныйДокумент;
Метка.Область(1, 1).Текст = "ТЕСТ";
Метка.Область(, 1, , 1).ШиринаКолонки = 10;
Справа = Новый Массив;
Справа.Добавить(Метка);
УмещаетсяСправа = Документ.ПроверитьПрисоединение(Справа);
Сообщить(ТипЗнч(УмещаетсяСправа) = Тип("Булево"));
Если УмещаетсяСправа Тогда
Документ.Присоединить(Метка);
КонецЕсли;
Страниц = Документ.КоличествоСтраниц();
Сообщить(Страниц > 0);
Сообщить("Страниц по текущему драйверу: " + Строка(Страниц));
Исключение
ВызватьИсключение "Проверка собственного макета не завершена: " + ОписаниеОшибки();
КонецПопытки;
Документ.ТолькоПросмотр = Истина;
Документ.Показать("guide-owned: проверка пагинации");
КонецПроцедуры
&НаКлиенте
Функция СоздатьУчебныйДокумент()
Документ = Новый ТабличныйДокумент;
Документ.КодЯзыка = "ru";
Документ.Область(1, 1).Текст = "Товар";
Документ.Область(1, 2).Текст = "Количество";
Документ.Область(2, 1).Текст = "Книга";
Документ.Область(3, 1).Текст = "Ручка";
Документ.Область(2, 2).Текст = "3";
Документ.Область(3, 2).Текст = "1";
Документ.Область(, 1, , 1).ШиринаКолонки = 25;
Документ.Область(, 2, , 2).ШиринаКолонки = 12;
Возврат Документ;
КонецФункцииРазбор по шагам
Назначить точное имя собственного принтера и получить четыре минимальных физических отступа в миллиметрах. Установить каждый отступ не меньше соответствующего ограничения драйвера.
Перед каждой строкой проверить массив из строки и подвала. Подвал пока не выводится: его высота только резервируется в проверке.
Если массив не умещается, вывести разрыв страницы и проверить вновь. Невмещающийся даже на новой странице макет вызывает понятную ошибку, а не бесконечные разрывы.
После строк вывести один подвал. Отдельно проверить размещение собственной метки справа через ПроверитьПрисоединение с массивом.
Получить реальное количество страниц и показать документ. Ни Напечатать, ни сохранение PDF этот урок не вызывает.
Как проверить результат
При исправном собственном драйвере четыре проверки дают Истина.
Число страниц диагностическое: оно зависит от устройства, бумаги и масштаба. При отсутствии принтера ожидается понятная ошибка, не сообщение об успешной проверке.
Ожидаемый результат
Практический образец проверки пагинации и ширины до ручной печати.
На что обратить внимание
ПроверитьВывод при слишком маленьких физических полях может дать Истина, но фактическая печать обрежется: здесь поля сравниваются с драйвером.
ПроверитьПрисоединение получает массив даже для одного документа; не подменяйте его одиночной таблицей.
Превью и драйвер не доказывают выход бумаги из устройства.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.