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

Высота табличного документа ( и отдельного поля)

Автор shd3, 14 сен 2018, 11:22

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

shd3

 - Подскажите , способ рассчитать высоту табличного документа( листа , отдельного поля ) ? Спасибо !


( На сколько я понял , ТабличныйДокумент.ПроверитьВывод может проверить границу ( заполнения) ..... мне по сути нужно вывод "текста" табличного документа отношение заполнение на 95% + поле подвала ( поле подвала не должно плавать по табличной части , всегда должно выводится (снизу табличного документа) в одном и том же месте , на каждом листе ! Потом,( плюсом вывести ГоризональныйРазделитель)

wise

(0) используйте нижний колонтитул
будет - "всегда должно выводится (снизу табличного документа) в одном и том же месте"
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

shd3

Цитата: wise от 14 сен 2018, 13:19
(0) используйте нижний колонтитул
будет - "всегда должно выводится (снизу табличного документа) в одном и том же месте"

Спасибо за совет , сейчас буду крутить - колонтитул .
Скажите пожалуйста , в принципе высоту табличного поля можно вычислить ? . Спасибо!

Sy4a

Цитата: shd3 от 14 сен 2018, 13:45Скажите пожалуйста , в принципе высоту табличного поля можно вычислить ? . Спасибо!
Я не уверен но очень в этом сомневаюсь. Плюс если вы будете использовать автомасштаб, чтобы на всех принтерах всё помещалась на страницу примерно одинакого, то размер полей вам ничего не даст, в 1С можно вычислить количество строк в табличном документе, а от них уже плясать, правда если у вас в 1 строку чтото не уместится и она расширется высотой в 2 то 1С будет считать это всё равно одной строкой. А В целом посмотрите типовые печатные формы ТОРГ-12 если они у вас есть в вашей конфигурации, там обычно прописано что бы подвал сам по себе на другую сторону страницу без части информации перед ней не уходил (чтобы нельзя было вставить листы между подвалом и основной информацией документа), это не совсем то что вам нужно, но может пригодится в дальнейшем.



wise

(2) конечно, можно.
просто считай высоту КАЖДОЙ области, которую ты выводишь в табличный документ.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

shd3

Цитата: Sy4a от 14 сен 2018, 13:59
Цитата: shd3 от 14 сен 2018, 13:45Скажите пожалуйста , в принципе высоту табличного поля можно вычислить ? . Спасибо!
Я не уверен но очень в этом сомневаюсь. Плюс если вы будете использовать автомасштаб, чтобы на всех принтерах всё помещалась на страницу примерно одинакого, то размер полей вам ничего не даст, в 1С можно вычислить количество строк в табличном документе, а от них уже плясать, правда если у вас в 1 строку чтото не уместится и она расширется высотой в 2 то 1С будет считать это всё равно одной строкой. А В целом посмотрите типовые печатные формы ТОРГ-12 если они у вас есть в вашей конфигурации, там обычно прописано что бы подвал сам по себе на другую сторону страницу без части информации перед ней не уходил (чтобы нельзя было вставить листы между подвалом и основной информацией документа), это не совсем то что вам нужно, но может пригодится в дальнейшем.

Простите за назойливость , Скажите пожалуйста , примером показать (  или все есть в ТОРГ12 ? )  вычисления строк в табличном документе ( отрывок кода ) ? Спасибо !

PS. если вернуться колонтитулам , (как я понял )можно вывести текстовку ( с установленной высотой) , .... но не  область табличного поля ( те загнать область в колонтитул  ) 
Добавлено: 14 сен 2018, 15:11


Цитата: wise от 14 сен 2018, 14:53
(2) конечно, можно.
просто считай высоту КАЖДОЙ области, которую ты выводишь в табличный документ.

- Можно отрывок кода , подсчета высоты ТД (или ссылку на ресурс ) если не затруднит? Спасибо!
PS. подозреваю ,что я делал что-то не правильно , -ТабДокумент.Область  - возвращает значение - ТабличныйДокумент 

Sy4a

Процедура ЗаполнитьТабличныйДокументТОРГ12(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыПечати, КомплектыПечати)

ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
КоэффициентПересчетаВТонны     = НоменклатураСервер.КоэффициентПересчетаВТонны(Константы.ЕдиницаИзмеренияВеса.Получить());

ДанныеПечати      = ДанныеДляПечати.РезультатПоШапке.Выбрать();
ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

ВыводитьГТД = ?(ПараметрыПечати.Свойство("ВыводитьГТД"), ПараметрыПечати.ВыводитьГТД, Ложь);

Если ВыводитьГТД Тогда
Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьОбщихФорм.ПФ_MXL_ТОРГ12_ГТД");
Иначе
Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьОбщихФорм.ПФ_MXL_ТОРГ12");
КонецЕсли;

ПервыйДокумент = Истина;
Пока ДанныеПечати.Следующий() Цикл

// Для печати комплектов
Если КомплектыПечати <> Неопределено И КомплектыПечати.Колонки.Найти("Ссылка") <> Неопределено Тогда
КомплектПечатиПоСсылке = КомплектыПечати.Найти(ДанныеПечати.Ссылка,"Ссылка");
Если КомплектПечатиПоСсылке = Неопределено Тогда
КомплектПечатиПоСсылке = КомплектыПечати[0];
КонецЕсли;
Если КомплектПечатиПоСсылке.Экземпляров = 0 Тогда
Продолжить
КонецЕсли;
КонецЕсли;

СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
ВыборкаПоДокументам.Сбросить();
Если НЕ ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска) Тогда
Если ТипЗнч(ДанныеПечати.Ссылка) = Тип("ДокументСсылка.РеализацияУслугПрочихАктивов") Тогда
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Для документа %1 печать ТОРГ-12 не требуется'"),
ДанныеПечати.Ссылка);
Иначе
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В документе %1 отсутствуют товары. Печать товарной накладной без услуг не требуется'"),
ДанныеПечати.Ссылка);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
Текст,
ДанныеПечати.Ссылка);
Продолжить;
КонецЕсли;

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

ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

ЗаполнитьРеквизитыШапкиТОРГ12(ДанныеПечати, Макет, ТабличныйДокумент);

НомерСтраницы = 1;
ИтоговыеСуммы = СтруктураИтоговыеСуммы();

// Создаем массив для проверки вывода
МассивВыводимыхОбластей = Новый Массив;

// Выводим многострочную часть докмента
ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаб");
ОбластьМакетаСтандарт   = Макет.ПолучитьОбласть("Строка");
ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице");
ОбластьВсего            = Макет.ПолучитьОбласть("Всего");

ИспользоватьНаборы = Ложь;
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(ВыборкаПоДокументам, "ЭтоНабор") Тогда
ИспользоватьНаборы = Истина;
ОбластьМакетаНабор         = Макет.ПолучитьОбласть("СтрокаНабор");
ОбластьМакетаКомплектующие = Макет.ПолучитьОбласть("СтрокаКомплектующие");
КонецЕсли;

ВыводШапки = 0;

Если ДанныеДляПечати.РезультатПоШапке.Колонки.Найти("ВыводитьКодНоменклатуры") <> Неопределено Тогда
ВыводитьКодНоменклатуры = ДанныеПечати.ВыводитьКодНоменклатуры;
Иначе
ВыводитьКодНоменклатуры = Истина;
КонецЕсли;

СтрокаТовары = ВыборкаПоДокументам.Выбрать();
КоличествоСтрок = СтрокаТовары.Количество();
НомерСтроки = 0;
Пока СтрокаТовары.Следующий() Цикл

Если НаборыСервер.ИспользоватьОбластьНабор(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьМакета = ОбластьМакетаНабор;
ИначеЕсли НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьМакета = ОбластьМакетаКомплектующие;
Иначе
ОбластьМакета = ОбластьМакетаСтандарт;
КонецЕсли;

Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда
ЗаполнитьРеквизитыСтрокиТовара(СтрокаТовары, ОбластьМакета, Неопределено);
Иначе
НомерСтроки = НомерСтроки + 1;
ЗаполнитьРеквизитыСтрокиТовара(СтрокаТовары, ОбластьМакета, НомерСтроки);
КонецЕсли;

Если НомерСтроки = 0 И ВыводШапки <> 2 Тогда
ВыводШапки = 1;
КонецЕсли;

Если (НомерСтроки = 1 И ВыводШапки = 0) ИЛИ (НомерСтроки = 0 И ВыводШапки = 1) Тогда

ВыводШапки = 2;

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("НомерСтраницы", "Страница " + НомерСтраницы);
ОбластьЗаголовокТаблицы.Параметры.Заполнить(СтруктураПараметров);
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);

КонецЕсли;

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

Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ОбластьИтоговПоСтранице.Параметры.Заполнить(ИтоговыеСуммы);
ТабличныйДокумент.Вывести(ОбластьИтоговПоСтранице);

ОбнулитьИтогиПоСтранице(ИтоговыеСуммы);

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

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("НомерСтраницы", "Страница " + НомерСтраницы);
ОбластьЗаголовокТаблицы.Параметры.Заполнить(СтруктураПараметров);
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);

КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьМакета);

Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
РассчитатьИтоговыеСуммы(ИтоговыеСуммы, СтрокаТовары);
КонецЕсли;

КонецЦикла;

// Выводим итоги по последней странице
ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице");
ОбластьИтоговПоСтранице.Параметры.Заполнить(ИтоговыеСуммы);

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

// Выводим итоги по документу в целом
ОбластьМакета = Макет.ПолучитьОбласть("Всего");
ОбластьМакета.Параметры.Заполнить(ИтоговыеСуммы);

ТабличныйДокумент.Вывести(ОбластьМакета);

// Выводим подвал документа
ДобавитьИтоговыеДанныеПодвала(ИтоговыеСуммы, НомерСтроки, ВалютаРегламентированногоУчета);
ОбластьПодвала = ЗаполнитьРеквизитыПодвалаТОРГ12(ДанныеПечати, ИтоговыеСуммы, Макет, КоэффициентПересчетаВТонны);
ТабличныйДокумент.Вывести(ОбластьПодвала);

// Выведем нужное количество экземпляров (при печати комплектов)
Если КомплектыПечати <> Неопределено И КомплектыПечати.Колонки.Найти("Ссылка") <> Неопределено И КомплектПечатиПоСсылке.Экземпляров > 1 Тогда
ОбластьКопирования = ТабличныйДокумент.ПолучитьОбласть(НомерСтрокиНачало,,ТабличныйДокумент.ВысотаТаблицы);
Для Итератор = 2 По КомплектПечатиПоСсылке.Экземпляров Цикл
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабличныйДокумент.Вывести(ОбластьКопирования);
КонецЦикла;
КонецЕсли;

ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);

КонецЦикла;

КонецПроцедуры

// Задает область печати объекта в табличном документе.
// Применяется для связывания области в табличном документе, с объектом печати (ссылка).
// Необходимо вызывать при формировании очередной области печатной формы в табличном
// документе.
//
// Параметры:
//  ТабличныйДокумент - ТабличныйДокумент - печатная форма;
//  НомерСтрокиНачало - Число - позиция начала очередной области в документе;
//  ОбъектыПечати - СписокЗначений - список объектов печати;
//  Ссылка - ЛюбаяСсылка - объект печати.
Процедура ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка) Экспорт

Элемент = ОбъектыПечати.НайтиПоЗначению(Ссылка);
Если Элемент = Неопределено Тогда
ИмяОбласти = "Документ_" + Формат(ОбъектыПечати.Количество() + 1, "ЧН=; ЧГ=");
ОбъектыПечати.Добавить(Ссылка, ИмяОбласти);
Иначе
ИмяОбласти = Элемент.Представление;
КонецЕсли;

НомерСтрокиОкончание = ТабличныйДокумент.ВысотаТаблицы;
ТабличныйДокумент.Область(НомерСтрокиНачало, , НомерСтрокиОкончание, ).Имя = ИмяОбласти;

КонецПроцедуры

Теги:

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

Рейтинг@Mail.ru

Поиск