Ширина измеряется в средних символах документа. Сжатие выполняется над своим экземпляром, после чего сразу отменяется и проверяется восстановление.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Создайте отдельную внешнюю обработку с новой пустой управляемой основной формой в учебной базе. ПриСозданииНаСервере назначьте одноимённой процедуре.
Вставьте полный модуль на уровне модуля формы. УчебныйДокумент, УчебноеПолеТаблицы и кнопку вручную не создавайте: их добавляет код.
Каждый урок — отдельная копия формы. Таблица содержит только собственную Книгу (3) и Ручку (1); это не печатная форма рабочего документа.
Настольный тонкий/толстый или веб-клиент. Для урока очистки выделения выберите интерфейс Версия 8.5: его поведение выделения отдельно отмечено в справке.
Код не вызывает печать, сохранение файла, сетевой обмен или запись базы. Внешняя кнопка остаётся вне табличного поля и его состояния.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ТабличныйДокумент")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
Документ = Новый ТабличныйДокумент;
Документ.Область(1, 1).Текст = "Товар";
Документ.Область(1, 2).Текст = "Количество";
Документ.Область(2, 1).Текст = "Книга";
Документ.Область(3, 1).Текст = "Ручка";
Для НомерСтроки = 2 По 3 Цикл
Ячейка = Документ.Область(НомерСтроки, 2);
Ячейка.СодержитЗначение = Истина;
Ячейка.ТипЗначения = Новый ОписаниеТипов("Число");
Если НомерСтроки = 2 Тогда
Ячейка.Значение = 3;
Иначе
Ячейка.Значение = 1;
КонецЕсли;
КонецЦикла;
Документ.Область(, 1, , 1).ШиринаКолонки = 25;
Документ.Область(, 2, , 2).ШиринаКолонки = 12;
Документ.Область(2, 1, 3, 2).Имя = "УчебныеТовары";
Документ.ТолькоПросмотр = Истина;
ЭтаФорма.УчебныйДокумент = Документ;
Поле = Элементы.Добавить("УчебноеПолеТаблицы", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
Поле.ПутьКДанным = "УчебныйДокумент";
Поле.Редактирование = Ложь;
Поле.РазрешитьНачалоПеретаскивания = Ложь;
Поле.РазрешитьПеретаскивание = Ложь;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить свою таблицу";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Поле = Элементы.УчебноеПолеТаблицы;
ШиринаСжатия = Поле.ПолучитьРекомендуемуюШиринуСжатия();
Если ШиринаСжатия <= 0 Тогда
Сообщить("Ширина поля пока не рассчитана; повторите после отображения формы");
Возврат;
КонецЕсли;
Документ = ЭтаФорма.УчебныйДокумент;
ИсходнаяВысота = Документ.ВысотаТаблицы;
ИсходнаяШирина = Документ.ШиринаТаблицы;
Документ.ПреобразоватьВКомпактныйДокумент(ШиринаСжатия, ИспользованиеШириныСжатияТабличногоДокумента.СжиматьВсегда);
Документ.ОтменитьПреобразованиеДокумента();
Сообщить("Рекомендованная ширина: " + Строка(ШиринаСжатия));
Сообщить(Документ.ВысотаТаблицы = ИсходнаяВысота);
Сообщить(Документ.ШиринаТаблицы = ИсходнаяШирина);
Сообщить(ЭтаФорма.УчебныйДокумент.Область(2, 2).Значение = 3);
Сообщить(ЭтаФорма.УчебныйДокумент.Область(3, 2).Значение = 1);
КонецПроцедурыРазбор по шагам
Метод поля доступен на клиенте, не на сервере. Он возвращает рекомендованную ширину в средних символах табличного документа.
Не готовая неположительная ширина обрабатывается до преобразования. Сохраняются фактические размеры собственного документа.
ПреобразоватьВКомпактныйДокумент меняет текущий экземпляр, не возвращает новую копию. Результат не присваивается переменной.
ОтменитьПреобразованиеДокумента восстанавливает исходный вид, и только после него сравниваются геометрия и значения.
Два действия выполняются подряд: урок проверяет обратимость, не обещает длительный визуальный показ сжатого состояния.
Как проверить результат
После расчёта поля: четыре Истина и положительная рекомендованная ширина.
При слишком малой ширине документ может не преобразоваться по справке; восстановление всё равно не объявляется доказательством визуального сжатия.
Ожидаемый результат
Получена реальная ширина поля и проверено восстановление своего документа.
На что обратить внимание
Не вызывайте метод ширины на сервере и не считайте его пикселями.
Не преобразовывайте общий рабочий экземпляр печатной формы в учебном коде.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.