В отличие от получения копии, ПреобразоватьВКомпактныйДокумент изменяет текущий экземпляр. Затем возвращаем исходную таблицу документированным методом отмены.
Где и как запускать
Полный модуль управляемой формы собственной учебной внешней обработки. Построение выполняется на сервере без контекста; показ — на клиенте. Вставляйте на уровне модуля.
Подготовка
Создайте новую внешнюю обработку с управляемой основной формой в учебной базе. Каждый урок — отдельная копия модуля.
На форме создайте команду УчебныйПример и перетащите её на форму как кнопку. В действии команды выберите процедуру УчебныйПример(Команда).
Вставьте весь модуль из примера: УчебныйПример, ПостроитьУчебныйДокумент и УчебнаяТаблица. Серверный вызов возвращает собственный табличный документ клиенту; директивы не удаляйте.
Никакие макеты, документы и справочники конфигурации не нужны. Всё построение — в памяти, без печати, записи файлов и отправки в сервисы.
Показ и ручную проверку выполняйте в тонком клиенте Windows 8.5.1.1343. Каждый урок — отдельная копия формы с пустым модулем до вставки.
&НаКлиенте
Процедура УчебныйПример(Команда)
ТабДок = ПостроитьУчебныйДокумент();
ТабДок.Показать("Учебный документ — без печати и сохранения");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПостроитьУчебныйДокумент()
ТабДок = УчебнаяТаблица();
ИсходнаяШирина = ТабДок.ШиринаТаблицы;
ИсходнаяВысота = ТабДок.ВысотаТаблицы;
ТабДок.ПреобразоватьВКомпактныйДокумент(40, ИспользованиеШириныСжатияТабличногоДокумента.СжиматьВсегда);
ТабДок.ОтменитьПреобразованиеДокумента();
Сообщить(ТабДок.ШиринаТаблицы = ИсходнаяШирина);
Сообщить(ТабДок.ВысотаТаблицы = ИсходнаяВысота);
Сообщить(ТабДок.Область(3, 1).Текст = "Книга");
Сообщить(ТабДок.Область(5, 4).Значение = 800);
Возврат ТабДок;
КонецФункции
&НаСервереБезКонтекста
Функция УчебнаяТаблица()
ТабДок = Новый ТабличныйДокумент;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Область(, 1, , 1).ШиринаКолонки = 35;
ТабДок.Область(, 2, , 2).ШиринаКолонки = 10;
ТабДок.Область(, 3, , 3).ШиринаКолонки = 14;
ТабДок.Область(, 4, , 4).ШиринаКолонки = 15;
Заголовок = ТабДок.Область(1, 1, 1, 4);
Заголовок.Объединить();
Заголовок.Текст = "Учебная таблица — данные только в памяти";
Заголовок.Шрифт = Новый Шрифт("Arial", 12, Истина);
Заголовок.ЦветФона = Новый Цвет(230, 242, 255);
Заголовок.ВысотаСтроки = 24;
ТабДок.Область(2, 1).Текст = "Товар";
ТабДок.Область(2, 2).Текст = "Количество";
ТабДок.Область(2, 3).Текст = "Цена";
ТабДок.Область(2, 4).Текст = "Сумма";
Товары = Новый Массив;
Товары.Добавить(Новый Структура("Название,Количество,Цена", "Книга", 3, 250));
Товары.Добавить(Новый Структура("Название,Количество,Цена", "Ручка", 1, 50));
НомерСтроки = 3;
Итого = 0;
Для Каждого Товар Из Товары Цикл
ТабДок.Область(НомерСтроки, 1).Текст = Товар.Название;
Значения = Новый Массив;
Значения.Добавить(Товар.Количество);
Значения.Добавить(Товар.Цена);
Значения.Добавить(Товар.Количество * Товар.Цена);
Для НомерКолонки = 2 По 4 Цикл
Ячейка = ТабДок.Область(НомерСтроки, НомерКолонки);
Ячейка.СодержитЗначение = Истина;
Ячейка.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 2));
Ячейка.Значение = Значения.Получить(НомерКолонки - 2);
Ячейка.Формат = "ЧДЦ=2; ЧН=0";
КонецЦикла;
Итого = Итого + Товар.Количество * Товар.Цена;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
ПодписьИтога = ТабДок.Область(5, 1, 5, 3);
ПодписьИтога.Объединить();
ПодписьИтога.Текст = "Итого";
Итог = ТабДок.Область(5, 4);
Итог.СодержитЗначение = Истина;
Итог.ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 2));
Итог.Значение = Итого;
Итог.Формат = "ЧДЦ=2; ЧН=0";
Все = ТабДок.Область(2, 1, 5, 4);
Все.Шрифт = Новый Шрифт("Arial", 10);
Граница = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1, Ложь);
Все.Обвести(Граница, Граница, Граница, Граница);
Возврат ТабДок;
КонецФункции
Разбор по шагам
Запоминаем геометрию заполненной таблицы. ПреобразоватьВКомпактныйДокумент не используется как возвращающий новый объект.
ОтменитьПреобразованиеДокумента отменяет компактное преобразование этого же экземпляра.
Контроль исходных координат выполняем после отмены. Итог 800 снова проверяется в четвёртой колонке D5, как задано функцией.
Как проверить результат
Четыре проверки дают Истина.
В показе обычная исходная таблица 5×4, с Книгой в A3 и итогом в D5. Компактный промежуточный вид здесь не показывается.
Ожидаемый результат
Отмена преобразования с точными координатами исходных данных.
На что обратить внимание
Не путайте отмену преобразования с отменой произвольного редактирования ячеек.
Оба метода используются на сервере; они не доступны как прямые клиентские вызовы тонкого клиента.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.