Имя: Пароль:
1C
 
Туплю - проверить вывод на две страницы возвращает истину
,
0 RomaH
 
naïve
03.07.19
13:17
ТабДокумент.Вывести(Шапка);
        
        ТабДокумент.Вывести(Подвал);
        
        Если ТабДокумент.ПроверитьВывод(РеквизитыСторон) Тогда
            ТабДокумент.Вывести(РеквизитыСторон);
        Иначе
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ТабДокумент.Вывести(РеквизитыСторон);
        КонецЕсли;    

выводит док на двух страницах без разделителя

на второй странице над реквизитами сторон - "подвал" документа

что-то я логики не понимаю
1 RomaH
 
naïve
03.07.19
13:18
при этом если немного увеличить масштаб - то получаю три страницы с разделителем над реквизитами
2 catena
 
03.07.19
13:23
А шапка+подвал помещаются на одной странице?
3 singlych
 
03.07.19
13:23
Ну что написал то и получил.

Вывел шапку.
Вывел подвал.
Получилось полторы страницы.
Посмотрел, поместятся ли реквизиты сторон до конца текущей (второй к этому моменту) страницы, вывел разделитель если не поместятся.
Вывел реквизиты сторон.

Получил две страницы без разделителей или три с.

Все логично.
4 RomaH
 
naïve
03.07.19
13:23
или работу метода описать можно так:
возвращает истину, если вывод проверяемых ТД не увеличит количество страниц исходного документа

т.е. ТабДокумент уже выводится на 2 страницы
вывод в него РеквизитыСторон не увеличит количество страниц ТабДокумент
5 RomaH
 
naïve
03.07.19
13:24
"Проверяет, умещаются ли переданные табличные документы на страницу при печати." - как бы не однозначно
6 RomaH
 
naïve
30.09.19
10:06
че-то фигня какая-то

    ТабличныйДокумент.Вывести(Область3);
    
    ИтоговыйТД = Новый ТабличныйДокумент;
    
    ИтоговыйТД.ИмяПараметровПечати = "ПротоколИсследования_546876";
    
    ИтоговыйТД.ЧерноБелаяПечать = Ложь;
    ИтоговыйТД.ЧерноБелыйПросмотр = Ложь;
    
    ИтоговыйТД.МасштабПечати = 100;
    
    
    Для Ш = 1 По 10 Цикл
        Если Не ИтоговыйТД.ПроверитьВывод(ТабличныйДокумент) Тогда
            ИтоговыйТД.МасштабПечати = ИтоговыйТД.МасштабПечати - 5;
        Иначе
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    ИтоговыйТД.Вывести(ТабличныйДокумент);

    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ИтоговыйТД, 1, ОбъектыПечати, СсылкаНаОбъект);
    
    Возврат ИтоговыйТД;


ставит 70%

открываю предпросмотр - что-то мелковато

выставляю 80% - печатаю - получается полностью заполненная 1 страница

как с этим бороться?
7 RomaH
 
naïve
30.09.19
10:13
т.е. реально получившийся ТД умещается на один лист при 80%

а проверить вывод говорит, что только на 70%...


весь ТД из одного столбца с растягиванием по горизонтали - ИМХО тут собака порылась
но вот как его победить?
8 RomaH
 
naïve
30.09.19
10:24
если интересно
внешняя обработка с примером
https://yadi.sk/d/dUyFb3r6M0Mybw

выводит два ТД - один с подобранным масштабом, второй с фиксированным
9 RomanYS
 
30.09.19
10:35
(7) А другие параметры (поля например) нигде не менялись?
10 RomaH
 
naïve
30.09.19
10:37
(9) - см пример по ссылке
там просто получаю уже готовый макет и вывожу его
11 RomaH
 
naïve
30.09.19
10:38
&НаКлиенте
Процедура Печать(Команда)
    
    ТД = ПечатьНаСервере();
    
    ТД.Показать();
    
    ТД = ПечатьНаСервере();
    
    ТД.МасштабПечати = 80;
    
    ТД.Показать();
    
КонецПроцедуры

&НаСервере
Функция ПечатьНаСервере()
    
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    
    ТД = Новый ТабличныйДокумент;
    
    ТД.МасштабПечати = 100;
    
    
    Для Ш = 1 По 10 Цикл
        Если Не ТД.ПроверитьВывод(Макет) Тогда
            ТД.МасштабПечати = ТД.МасштабПечати - 5;
        Иначе
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    ТД.Вывести(Макет);
    
    Возврат ТД;
    
КонецФункции
12 RomanYS
 
30.09.19
11:14
(8) Хрень полная. Видно, что при печати (предварительном просмотре) совершенно по-другому расставляются переносы. При чём отличается от ТД в обоих случаях 70% и 80%.
Я как-то другого поведения от масштабирования ожидал.
13 RomaH
 
naïve
30.09.19
12:08
(12) это не хрень, это класная фишка - ширина столбца - растягивать по горизонтали
14 RomanYS
 
30.09.19
12:16
(13) Ну так эта классная фишка так и работает. Когда она вообще появилась, первый раз вижу.
15 RomaH
 
naïve
30.09.19
13:59
ну да - отключил "растягивать" у колонки
стало нормально считать вывод

но отказываться от растягивания по горизонтали уже совсем никак

есть мысли как выводить на одну страницу?
16 RomaH
 
naïve
30.09.19
14:01
запрограммировать зависимость ширины колонки от масштаба?
17 RomanYS
 
30.09.19
14:05
(16) Первое, что приходит в голову: ставим автомасштаб, а ширину колонки тестируем с ПроверитьВывод. Благо колонка у тебя одна
18 RomaH
 
naïve
30.09.19
14:48
(17) так не лучше получается
примерно 50% страницы заполняет

    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    
    ТД = Новый ТабличныйДокумент;
    
    ТД.МасштабПечати = 100;
    ТД.АвтоМасштаб = Истина;
    
    Для Ш = 1 По 100 Цикл
        Если Не ТД.ПроверитьВывод(Макет) Тогда
            Макет.Область(,1,,1).ШиринаКолонки = Макет.Область(,1,,1).ШиринаКолонки + 1;
            //ТД.МасштабПечати = ТД.МасштабПечати - 5;
        Иначе
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    ТД.Вывести(Макет);
    
    Возврат ТД;


https://dl.dropboxusercontent.com/s/wu6m8n3axd5x06l/2019-09-30_14h47_41.png?dl=0
19 RomaH
 
naïve
30.09.19
14:49
20 RomanYS
 
30.09.19
14:51
(18) я так сделал - работает

    ТД.АвтоМасштаб = Истина;
    Область = ТД.Область("C1");
    

        Область.ШиринаКолонки = 50;
    
    Пока ТД.КоличествоСтраниц() > 1 Цикл
        Область.ШиринаКолонки = Область.ШиринаКолонки + 1;
    КонецЦикла;
21 RomaH
 
naïve
30.09.19
15:30
(20) спасибо
костыли работают
даже с установленным свойством "растягивать" у колонки
22 RomaH
 
naïve
01.10.19
06:49
все-таки ПроверитьВывод() не стоит использовать, КоличествоСтраниц() наше все - этот метод корректно отрабатывает


    Для Ш = 1 По 20 Цикл
        Если ТабличныйДокумент.КоличествоСтраниц() > 1 Тогда
            ТабличныйДокумент.МасштабПечати = ТабличныйДокумент.МасштабПечати - 2;
        Иначе
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаОбъект);
    
    Возврат ТабличныйДокумент;

23 Cyberhawk
 
01.10.19
08:43
Отказывайся от табличного документа уже сейчас, все равно в будущем откажешься, ибо для таких печатных форм, где сплошная простыня текста, он почти всегда непригоден становится из-за необходимости форматирования слов.