Кнопка меняет собственный просмотр между 100% и 125%, а угол между 0 и 90. Данные PDF не переписываются, новый файл не сохраняется.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныеПоляДокументов85 с пустой управляемой основной формой. Запускайте в тонком клиенте Windows; веб-клиент в этот урок не входит.
Не создавайте вручную УчебныйДокумент, ПолеДокумента или учебную команду. Модуль программно добавляет их при открытии формы.
В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код одного урока на уровне модуля, сохраните свою EPF и откройте её в учебной базе.
Поле связано с реквизитом УчебныйДокумент типа ДокументPDF. Объект документа содержит данные, элемент ПолеДокумента отвечает за отображение и пользовательские действия.
Документ создаётся заново из собственных констант. Книга: 3 штуки по 250, сумма 750. Реальные документы, справочники, файлы, сертификаты и сетевые адреса не используются.
Каждый урок запускайте в отдельной копии формы. Изменения текста и оформления живут в памяти открытой учебной формы; код не сохраняет документ в файл, не печатает и не пишет в базу.
Размеры и ограничения элемента задаются на сервере создания формы. Кнопка выполняет клиентские проверки или явно описанное учебное изменение.
Фактический вид и запуск в 1С не проверены. Настройки компоновки формы, масштаб интерфейса и версия клиента могут влиять на отображение; сверяйте его вручную.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ДокументPDF")));
ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
ЭтаФорма.УчебныйДокумент = ПрочитатьСобственныйДокумент(СоздатьСобственныеБайтыPDF());
Поле = Элементы.Добавить("ПолеДокумента", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеPDFДокумента;
Поле.ПутьКДанным = "УчебныйДокумент";
Поле.Масштаб = 100;
Поле.Ориентация = 0;
Поле.НомерТекущейСтраницы = 1;
Поле.Вывод = ИспользованиеВывода.Запретить;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Изменить учебный просмотр";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Поле = Элементы.ПолеДокумента;
Если Поле.Масштаб = 100 Тогда
Поле.Масштаб = 125;
Иначе
Поле.Масштаб = 100;
КонецЕсли;
Если Поле.Ориентация = 0 Тогда
Поле.Ориентация = 90;
Иначе
Поле.Ориентация = 0;
КонецЕсли;
Сообщить(Поле.Масштаб = 100 ИЛИ Поле.Масштаб = 125);
Сообщить(Поле.Ориентация = 0 ИЛИ Поле.Ориентация = 90);
Сообщить(Поле.НомерТекущейСтраницы = 1);
Сообщить("Масштаб PDF: " + Строка(Поле.Масштаб));
Сообщить("Угол PDF: " + Строка(Поле.Ориентация));
КонецПроцедуры
&НаСервереБезКонтекста
Функция СоздатьСобственныеБайтыPDF()
Таблица = Новый ТабличныйДокумент;
Таблица.КодЯзыка = "ru";
Таблица.Область(1, 1).Текст = "СОБСТВЕННЫЙ УЧЕБНЫЙ ОБРАЗЕЦ";
Таблица.Область(2, 1).Текст = "Книга";
Таблица.Область(2, 2).Текст = "3";
Таблица.Область(2, 3).Текст = "250";
Таблица.Область(2, 4).Текст = "750";
Таблица.Область(1, 1, 2, 4).ЦветФона = Новый Цвет(255, 255, 210);
Таблица.Область(, 1, , 1).ШиринаКолонки = 45;
Поток = Новый ПотокВПамяти;
Попытка
Таблица.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
Исключение
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
Возврат Данные;
КонецФункции
&НаСервереБезКонтекста
Функция ПрочитатьСобственныйДокумент(Данные)
Поток = Данные.ОткрытьПотокДляЧтения();
Попытка
Документ = Новый ДокументPDF;
Документ.Прочитать(Поток);
Поток.Закрыть();
Исключение
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
Возврат Документ;
КонецФункции
Разбор по шагам
Начальные значения заданы на сервере: масштаб 100, угол 0 и первая страница собственного PDF.
Проверяем текущий масштаб и назначаем одну из двух положительных величин. Значение 125 — не коэффициент 1.25 в этом свойстве.
Ориентация принимает градусы, кратные 90. Используем только 0 и 90; значение 45 вызвало бы исключение по справке.
Положительный угол означает поворот против часовой стрелки. Это направление не угадывается по названию клиентской кнопки.
Кнопка меняет параметры поля, не вызывает Записать у ДокументPDF. Повторное нажатие возвращает исходный вид.
Как проверить результат
Каждое нажатие ожидаемо выдаёт три Истина. Первый цикл: 125 и 90; второй: 100 и 0.
Осмотрите поворот и увеличение на форме. Содержание ячеек и количество страниц должны сохраниться.
Ожидаемый результат
Параметры просмотра отделены от содержимого и записи документа.
На что обратить внимание
Произвольный угол не допускается; не подставляйте градусы из пользовательского ввода без проверки кратности 90.
Масштаб формы и дополнительный масштаб PDF — разные величины.
Сравнения свойств не подтверждают корректность фактического отображения в конкретном клиенте.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.