Есть задача, чтобы табличный документ при печати всегда помещался на 1 страницу.
Реализовано было нехитрым способом через МасштабПечати

```1c
    ТабДокумент.МасштабПечати = 100;
    Пока ТабДокумент.МасштабПечати > 5 Цикл
    Если ТабДокумент.КоличествоСтраниц() = 1 Тогда
    Прервать;
    Иначе
    ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати - 5;
    КонецЕсли;
    КонецЦикла;
```

Когда использую форму через Открыть файл, выбираю документ, вывожу ТабДок, то всё отрабатывает корректно.
Однако подключив внешнюю печатную форму, вышеуказанный код как будто игнорируется, в результате выводя на печать больше 1 страницы, если документ не умещается.
Подскажите, куда копать?
---
Получается, надо будет в печатной форме убирать эту проверку, чтобы отрабатывал код на масштабирование?
ну да.
Если бы не вывод шапки, то можно было бы просто по таб доку искать разделители и программно их убирать, независимо от формы.
Но как убирать шапку таблицы. Тем более что в разных документах она может быть разная. Думаю универсального способа нет.
Нужно изначально, убирать эти проверки и сразу не выводить их в табличный документ.
---
```1c
    ТабДок.АвтоМасштаб = истина;
```
 не подойдет случаем ?
---
уже есть, ранее в коде указан

```1c
    ТабДокумент.РазмерКолонтитулаСверху = 0;
    ТабДокумент.РазмерКолонтитулаСнизу = 0;
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
```
---
тогда имеет смысл отключить его, в СП вот сказано
Примечание:

Имеет смысл, если свойство АвтоМасштаб имеет значение Ложь.
Если не задано, то значение свойства будет выбираться из настроек принтера, на котором осуществляется печать
---
Тоже не помогло.
Проблема не столько в самом масштабе, а в том что участок кода, который его изменяет, не выполняется.
Как будто обработка до него не доходит при выполнении.
---
Как будто обработка до него не доходит при выполнении.
кстати, да, там наверное на сервере выполняется, а там принтера нет..поэтому масштабирование не работает.
А делать это надо на клиенте, там где принтер установлен
---
возможно когда через подсистемы проходит табличный документ, ему какие то параметры инициализирует там.
Можно посмотреть на сформированный таб док, но уже в общей форме печать документов.
---
спустя несколько дней мытарств дошёл до следующего.
В форме ПечатьДокументов в модуле ПриОткрытии() сделал вот так

```1c
    Если ПечатныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент" Тогда
    ПечатныйДокумент.АвтоМасштаб = Ложь;
    ПечатныйДокумент.МасштабПечати = 100;
    Если ПечатныйДокумент.КоличествоСтраниц() = 1 Тогда
    ПечатныйДокумент.АвтоМасштаб = Истина;
    Иначе
    Пока ПечатныйДокумент.МасштабПечати > 10 Цикл
    Если ПечатныйДокумент.КоличествоСтраниц() > 1 Тогда
    ПечатныйДокумент.МасштабПечати = ПечатныйДокумент.МасштабПечати - 1;
    Иначе
    ЭлементыФормы.ПолеТабличногоДокумента.МасштабПечати = ПечатныйДокумент.МасштабПечати;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    ЭлементыФормы.ПолеТабличногоДокумента.АвтоМасштаб = ПечатныйДокумент.АвтоМасштаб;
    КонецЕсли;
```

И тут снова затык. Какие-то документы масштабируются корректно, в основном с небольшой табличной частью.
Однако крупные документы даже по мере уменьшения МасштабПечати всё равно возвращают ПечатныйДокумент.КоличествоСтраниц() > 1, в результате чего масштабирование выглядит как-то так http://joxi.ru/xAeNK4bhp3Ngxr
Я уже на грани помешательства, т.к. совершенно потерялся как оно функционирует
---
Однако крупные документы даже по мере уменьшения
 в крупных документах, скорее всего при формировании самого табличного документа, разделители страниц ставятся, используется ПроверитьВывод, чтобы табличные части переносились на новый лист не на пол строки, а корректно с подвалом и новым заголовком таблицы.
А с разделителями - масштабируй - не масштабируй, все равно разделитель страницы стоит, значит будет новая страница
---
Можно чуть подробнее? Как в таком случае убрать эти разделители?
---
загляни в процедуру формирования нужной печатной формы, где строки ТЧ выводятся.
Там гдето проверка есть,
т.е. в табличный документ выводится очередная строка, потом подвал...и проверяется лезет на страницу или нет. Если не лезет, то ставится ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
и далее выводится шапка таблицы, и строки продолжают печататься дальше.

Так сходу пример не могу найти. Но даже на твоем скриншоте видно, что на втором листе не строки табличной части продолжаются выводится, а выведена полноценная шапка таблицы. Т.е. именно сработал перенос на второй лист.
Это тебе надо вмешиваться в формирования печатных форм, и убирать эту проверку.
Хотя по идее, они итак заточены, чтобы помещаться на принтер, там вообще не нужна твоя припарка.

Даже если ты по табличному документу поиск сделаешь и уберешь разделители, но выведенные шапки таблиц - ты все равно не уберешь.
---
(12) примерно понял функционирование. Да, в печатной форме есть блок проверки вывода и вставки разделителя.
А идиотия задачи стоит в том, чтобы эта печатная форма ВСЕГДА помещалась на 1 страницу, независимо от размера. Получается, надо будет в печатной форме убирать эту проверку, чтобы отрабатывал код на масштабирование?
---
Получается, надо будет в печатной форме убирать эту проверку, чтобы отрабатывал код на масштабирование?
ну да.
Если бы не вывод шапки, то можно было бы просто по таб доку искать разделители и программно их убирать, независимо от формы.
Но как убирать шапку таблицы. Тем более что в разных документах она может быть разная. Думаю универсального способа нет.
Нужно изначально, убирать эти проверки и сразу не выводить их в табличный документ.
---
а если там 100 строк будет ? То как, с лупой документ рассматривать ? )))
---
я уже пытался это объяснить))) но это "корпоративный стандарт, мы не можем по другому эту форму печатать"
Спасибо за пояснения, теперь понятно откуда ноги растут у этого механизма
---
вот нашел пример
такие строки делают.

```1c
    Для Каждого СтрокаТовары Из ТаблицаТовары Цикл

    НомерСтроки = НомерСтроки + 1;

    ОбластьСтрокиТаблицы.Параметры.Товар = ФормированиеПечатныхФорм.ПолучитьПредставлениеНоменклатурыДляПечати(
    СтрокаТовары.НаименованиеПолное,
    СтрокаТовары.Характеристика,
    СтрокаТовары.Упаковка,
    ,
    СтрокаТовары.Содержание
    );
    ОбластьСтрокиТаблицы.Параметры.Заполнить(СтрокаТовары);
    ОбластьСтрокиТаблицы.Параметры.НомерСтроки = НомерСтроки;
    МассивПроверкиВывода.Добавить(ОбластьСтрокиТаблицы);

    Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда
    Если НомерСтроки = 1 Тогда
    ТабличныйДокумент.Вывести(ОбластьШапкиТаблицы);
    МассивПроверкиВывода.Удалить(0);
    КонецЕслИ;
    Иначе
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабличныйДокумент.Вывести(ОбластьШапкиТаблицы);
    КонецЕсли;

    ТабличныйДокумент.Вывести(ОбластьСтрокиТаблицы);
    МассивПроверкиВывода.Удалить(МассивПроверкиВывода.ВГраница());

    Сумма = Сумма + СтрокаТовары.Сумма;

    и т.д
```
---
Может кому пригодиться, мне нужно было, чтобы разные по размеру страницы в ТД умещались на листе при печати.
Я каждую страницу формировал в отдельном ТД, проверял, умещается ли она на один лист и запоминал этот масштаб. После этого вставлял этот ТД в общий ТД.
У общего ТД выставлял масштаб равный минимальному масштабу страницы.
Если выставлять одинаковые поля у обоих ТД, то подбор по масштабу будет более точный, содержание лучше впишется на листе.
МасштабПечати1 = 100;
Для каждого Страница Из Страницы Цикл

 ТабДокЛист = Новый ТабличныйДокумент;
 ТабДокЛист.АвтоМасштаб = Ложь;
 ТабДокЛист.МасштабПечати = 100;
 ТабДокЛист.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
 ТабДокЛист.ПолеСверху = 5;
 ТабДокЛист.ПолеСнизу = 5;
 ТабДокЛист.РазмерКолонтитулаСверху = 5;
 ТабДокЛист.РазмерКолонтитулаСнизу = 5;

 ТабДокЛист.Вывести(ОбластьМакета);

 Пока ТабДокЛист.КоличествоСтраниц() > 1 Цикл
  ТабДокЛист.МасштабПечати = ТабДокЛист.МасштабПечати - 1;
  МасштабПечати1 = ?(МасштабПечати1 > ТабДокЛист.МасштабПечати, ТабДокЛист.МасштабПечати, МасштабПечати1);
 КонецЦикла;

 ТабДокумент.Вывести(ТабДокЛист);
 ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

КонецЦикла;

ТабДокумент.АвтоМасштаб = Ложь;
ТабДокумент.МасштабПечати = МасштабПечати1;
ТабДокЛист.ПолеСверху = 5;
ТабДокЛист.ПолеСнизу = 5;
ТабДокЛист.РазмерКолонтитулаСверху = 5;
ТабДокЛист.РазмерКолонтитулаСнизу = 5;