Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 июл 2022, 20:57

Как подсчитать количество строк табличного документа которые выведутся на 1 странице

Автор Серж Маслаков, 24 дек 2017, 19:50

0 Пользователей и 1 гость просматривают эту тему.

Серж Маслаков

Дали задачу, допустим когда печатают расчетный листок для нескольких сотрудников за несколько месяцев вывести: дополнительную печатную форму где отображаются Сотрудник-Месяц-Страница.
Пытался наивно сделать, разбив количество строк табличного документа на количество страниц( но количество строк табличного документа разное на страницах).... Ниже пример где на 3 страницах пытаюсь делать. Как можно понять сколько строк табличного документа пойдет на 1 страницу?
ТЗ =  Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Сотрудник");                                   
ТЗ.Колонки.Добавить("АдресСтроки");

Вывод =  Новый ТаблицаЗначений;
Вывод.Колонки.Добавить("Сотрудник");                                   
Вывод.Колонки.Добавить("Страница");

КолСтраниц = ДокументРезультат.КоличествоСтраниц();
КолСтрокНаВыводе = ДокументРезультат.ВысотаТаблицы;
КолСтрокНаСтранице = Окр(КолСтрокНаВыводе/КолСтраниц);
НомСтроки=1;
Для страница=1 По КолСтраниц Цикл
Для НумСтроки=НомСтроки По КолСтрокНаСтранице*страница Цикл
Область = ДокументРезультат.Область(НумСтроки, 1).Текст;
сорняк = ТЗ.Добавить();
Сорняк.Сотрудник = Область;
Сорняк.АдресСтроки = НумСтроки;
КонецЦикла;
НомСтроки=НумСтроки+1;
КонецЦикла;

Для каждого стр Из ТЗ Цикл
Изначально = СтрЗаменить(стр.Сотрудник," ",Символы.ПС);
Фамилия=СтрПолучитьСтроку(Изначально,1);
Имя=СтрПолучитьСтроку(Изначально,2);
Отчество=СтрПолучитьСтроку(Изначально,3);
СотрудникаНаименование = Фамилия+" "+Имя+" "+Отчество;
Если Не Справочники.Сотрудники.НайтиПоНаименованию(СотрудникаНаименование,Истина).Пустая() Тогда
    Корм = Вывод.Добавить();
Корм.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(СотрудникаНаименование).Наименование;
Если стр.АдресСтроки<КолСтрокНаСтранице Тогда
Корм.Страница=1;
ИначеЕсли стр.АдресСтроки>КолСтрокНаСтранице И стр.АдресСтроки<КолСтрокНаСтранице*2 Тогда
Корм.Страница=2;
Иначе
Корм.Страница=3
КонецЕсли;
КонецЕсли;
КонецЦикла;

alex0402

ЦитироватьТабличныйДокумент (SpreadsheetDocument)
ПроверитьВывод (CheckPut)
Синтаксис:

ПроверитьВывод(<Таблицы>)
Параметры:

<Таблицы> (обязательный)

Тип: Массив; ТабличныйДокумент.
Массив из проверяемых таблиц или табличный документ.
Возвращаемое значение:

Тип: Булево.
Истина - умещаются; Ложь - в противном случае.
Описание:

Проверяет, умещаются ли переданные табличные документы на страницу при печати.

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

Сервер, толстый клиент, внешнее соединение.
Примечание:

При возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение.
Пример:

Т.Добавить(ШапкаДокумента);
Т.Добавить(СтрокаДокумента);
Т.Добавить(ПодвалДокумента);
Если Не ТабДок.ПроверитьВывод(Т) Тогда
    Сообщить("Документ не умещается на страницу!");
КонецЕсли;

Спасибо за Сказать спасибо

Серж Маслаков

Цитата: alex0402 от 24 дек 2017, 20:48
ЦитироватьТабличныйДокумент (SpreadsheetDocument)
ПроверитьВывод (CheckPut)
Синтаксис:

ПроверитьВывод(<Таблицы>)
Параметры:

<Таблицы> (обязательный)

Тип: Массив; ТабличныйДокумент.
Массив из проверяемых таблиц или табличный документ.
Возвращаемое значение:

Тип: Булево.
Истина - умещаются; Ложь - в противном случае.
Описание:

Проверяет, умещаются ли переданные табличные документы на страницу при печати.

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

Сервер, толстый клиент, внешнее соединение.
Примечание:

При возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение.
Пример:

Т.Добавить(ШапкаДокумента);
Т.Добавить(СтрокаДокумента);
Т.Добавить(ПодвалДокумента);
Если Не ТабДок.ПроверитьВывод(Т) Тогда
    Сообщить("Документ не умещается на страницу!");
КонецЕсли;

при чем сдесь проверить вывод? он даст мне информацию какая строчка на каком листе? нет... если вы читали вопрос то проверитьВывод или ПроверитьПрисоединение не дают мне информацию какая строка табличного документа на какой странице.. у меня проблема не с размещением текста , а с расположением данных

AIFrame

Цитата: Серж Маслаков от 24 дек 2017, 21:26при чем сдесь проверить вывод?
При том. Переменные определять и считать их в своем цикле религия не позволяет?
ИНД = 0;
Для каждого стр Из ТЗ Цикл
    ИНД = ИНД + 1;

Цитироватьу меня проблема не с размещением текста , а с расположением данных
С ветряными мельницами, скорее. Если ты напишешь свой код с расчетом на те параметры печати, что у тебя, а я такой возьму и поставлю масштаб 200% - как будешь считать страницы?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск