ТабличныйДокумент.ПреобразоватьВКомпактныйДокумент

Методы · ConvertToCompactMode

Преобразовывает текущий табличный документ в компактный. Ширина содержимого нового документа не превышает ширину, переданную в качестве аргумента. Если переданная ширина слишком мала, то документ не изменяется. Для сжатия табличного документа, расположенного на форме, по размеру поля табличного документа рекомендуется использовать в качестве ширины сжатия результат метода расширения поля формы для табличного документа ПолучитьРекомендуемуюШиринуСжатия.

Синтаксис

ПреобразоватьВКомпактныйДокумент(<Ширина>, <ИспользованиеШирины>)
Полное описание, параметры и ограничения

ТабличныйДокумент.ПреобразоватьВКомпактныйДокумент (SpreadsheetDocument.ConvertToCompactMode)

ТабличныйДокумент (SpreadsheetDocument)

ПреобразоватьВКомпактныйДокумент (ConvertToCompactMode)

Доступен, начиная с версии 8.3.13.

Синтаксис:
ПреобразоватьВКомпактныйДокумент(<Ширина>, <ИспользованиеШирины>)
Параметры:

<Ширина> (необязательный)
Тип: Число.
Задает максимальную ширину содержимого табличного документа (в "средних символах"), до которой документ будет сжат.
Если значение не задано, то максимальная ширина рассчитывается автоматически на основе информации об экране устройства конечного пользователя. Если такой информации нет, то используется стандартное значение, равное 20.

<ИспользованиеШирины> (необязательный)
Тип: ИспользованиеШириныСжатияТабличногоДокумента.
Задает использование ширины, переданной в качестве первого аргумента.
Описание:

Преобразовывает текущий табличный документ в компактный. Ширина содержимого нового документа не превышает ширину, переданную в качестве аргумента. Если переданная ширина слишком мала, то документ не изменяется.
Для сжатия табличного документа, расположенного на форме, по размеру поля табличного документа рекомендуется использовать в качестве ширины сжатия результат метода расширения поля формы для табличного документа ПолучитьРекомендуемуюШиринуСжатия.

Доступность:

Сервер, толстый клиент.

См. также:
Расширение поля формы для поля табличного документа, метод ПолучитьРекомендуемуюШиринуСжатия

Использование в версии:

Доступен, начиная с версии 8.3.13.

Методическая информация

Практические примеры

Получить ширину поля для обратимого компактного просмотра

Ширина измеряется в средних символах документа. Сжатие выполняется над своим экземпляром, после чего сразу отменяется и проверяется восстановление.

Где и как запускать

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. Создайте отдельную внешнюю обработку с новой пустой управляемой основной формой в учебной базе. ПриСозданииНаСервере назначьте одноимённой процедуре.

  2. Вставьте полный модуль на уровне модуля формы. УчебныйДокумент, УчебноеПолеТаблицы и кнопку вручную не создавайте: их добавляет код.

  3. Каждый урок — отдельная копия формы. Таблица содержит только собственную Книгу (3) и Ручку (1); это не печатная форма рабочего документа.

  4. Настольный тонкий/толстый или веб-клиент. Для урока очистки выделения выберите интерфейс Версия 8.5: его поведение выделения отдельно отмечено в справке.

  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);
КонецПроцедуры

Разбор по шагам

  1. Метод поля доступен на клиенте, не на сервере. Он возвращает рекомендованную ширину в средних символах табличного документа.

  2. Не готовая неположительная ширина обрабатывается до преобразования. Сохраняются фактические размеры собственного документа.

  3. ПреобразоватьВКомпактныйДокумент меняет текущий экземпляр, не возвращает новую копию. Результат не присваивается переменной.

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

  5. Два действия выполняются подряд: урок проверяет обратимость, не обещает длительный визуальный показ сжатого состояния.

Как проверить результат

  1. После расчёта поля: четыре Истина и положительная рекомендованная ширина.

  2. При слишком малой ширине документ может не преобразоваться по справке; восстановление всё равно не объявляется доказательством визуального сжатия.

Ожидаемый результат

Получена реальная ширина поля и проверено восстановление своего документа.

На что обратить внимание

  1. Не вызывайте метод ширины на сервере и не считайте его пикселями.

  2. Не преобразовывайте общий рабочий экземпляр печатной формы в учебном коде.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Преобразовать текущий документ и отменить преобразование

В отличие от получения копии, ПреобразоватьВКомпактныйДокумент изменяет текущий экземпляр. Затем возвращаем исходную таблицу документированным методом отмены.

Где и как запускать

Полный модуль управляемой формы собственной учебной внешней обработки. Построение выполняется на сервере без контекста; показ — на клиенте. Вставляйте на уровне модуля.

Подготовка

  1. Создайте новую внешнюю обработку с управляемой основной формой в учебной базе. Каждый урок — отдельная копия модуля.

  2. На форме создайте команду УчебныйПример и перетащите её на форму как кнопку. В действии команды выберите процедуру УчебныйПример(Команда).

  3. Вставьте весь модуль из примера: УчебныйПример, ПостроитьУчебныйДокумент и УчебнаяТаблица. Серверный вызов возвращает собственный табличный документ клиенту; директивы не удаляйте.

  4. Никакие макеты, документы и справочники конфигурации не нужны. Всё построение — в памяти, без печати, записи файлов и отправки в сервисы.

  5. Показ и ручную проверку выполняйте в тонком клиенте 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, Ложь);
    Все.Обвести(Граница, Граница, Граница, Граница);
    Возврат ТабДок;
КонецФункции

Разбор по шагам

  1. Запоминаем геометрию заполненной таблицы. ПреобразоватьВКомпактныйДокумент не используется как возвращающий новый объект.

  2. ОтменитьПреобразованиеДокумента отменяет компактное преобразование этого же экземпляра.

  3. Контроль исходных координат выполняем после отмены. Итог 800 снова проверяется в четвёртой колонке D5, как задано функцией.

Как проверить результат

  1. Четыре проверки дают Истина.

  2. В показе обычная исходная таблица 5×4, с Книгой в A3 и итогом в D5. Компактный промежуточный вид здесь не показывается.

Ожидаемый результат

Отмена преобразования с точными координатами исходных данных.

На что обратить внимание

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

  2. Оба метода используются на сервере; они не доступны как прямые клиентские вызовы тонкого клиента.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.