вывод на Печать таблицы значений

1. Mars2006 11.07.18 17:00 Сейчас в теме
Где попадалась обработка печати таблицы значений.

Может подскажет кто как вывести на печать таблицу значений в таком виде. см. вложение.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VBBer 11.07.18 17:27 Сейчас в теме
Нужно использовать горизонтальные и вертикальные области в макете.
Из исходной таблицы скопировать в новые отдельные таблицы колонки Клиенты и Товары. после этого Циклом проходим по Товарам (Это наши строки ), а во вложенном цикле по Клиентам. Области получать при помощи "Область = Макет.ПолучитьОбласть("Строка|Контрагент"));
выводить первую часть строки Вывести(Область) остальные части - ТабличныйДокумент.Присоединить(Область)
3. CheBurator 3119 14.07.18 00:36 Сейчас в теме
//****************************************
// Заголовок - заголовок таблицы и окна таблицы
// КолонкиПоНазваниям = 1 - в шапке выводятся представления колонок, 0 = идентификаторы колонок
// ИтогиПоКолонкам = -1 по всем числовым колонкам, "Колонка1,Колонка2"- по указанным колонкам, иначе не выводить
// ИтогиПоЦенам = 0 - колонки, начинающиеся с Цена суммироваться не будут, 1 - как и все остальные колонки
// РазделительРазрядов - разделитель разрядов в числовых значениях, по умолчанию пробел
// ФорматЧисловыхЗначений - форматная строка для чисел
// Таб - Таблица, в которую выводится результат. Если не задан - создается новая таблица
Функция ПечатьТЗ(Знач ТЗ, Заголовок = "",КолонкиПоНазваниям = 1, Знач ИтогиПоКолонкам = -1, 
				ИтогиПоЦенам = 0, ФорматЧисловыхЗначений = "", РазделительРазрядов = " ", 
				Таб = "",ВыводСетки=0,ВыводЗаголовков=0,ВыводНулевойТаблицы=1,ВыводЗаголовковПодвал=0) Экспорт
	ТипДанных = ТипЗначенияСтр(ТЗ);
	
	Если НЕ(ТипДанных = "ТаблицаЗначений") Тогда
		Если ТипДанных <> "Документ" Тогда
			Заголовок = ?(ПустаяСтрока(Заголовок) = 1, "", Заголовок+РазделительСтрок)+ "значения списка";
			ТТЗ = СоздатьОбъект("ТаблицаЗначений");
			ТЗ.Выгрузить(ТТЗ); 
			
			ТЗ = СоздатьОбъект("ТаблицаЗначений");
			ТТЗ.Выгрузить(ТЗ); ТЗ.УстановитьПараметрыКолонки(1,,,,"список");
		Иначе
			Заголовок = ?(ПустаяСтрока(Заголовок) = 1, "", Заголовок+РазделительСтрок)+ ТЗ.ПредставлениеВида()+ " №"+СокрЛП(ТЗ.НомерДок)+" от "+ТЗ.ДатаДок;
			// комментарий
			Если Метаданные.ОбщийРеквизитДокумента("Комментарий").Выбран() = 1 Тогда
				Если ПустаяСтрока(ТЗ.Комментарий) = 0 Тогда
					СтрЗаголовок = СтрЗаголовок + РазделительСтрок + ТЗ.Комментарий;
				КонецЕсли;
			КонецЕсли;
			// автор
			Если Метаданные.ОбщийРеквизитДокумента("Автор").Выбран() = 1 Тогда
				Если ПустаяСтрока(ТЗ.Автор) = 0 Тогда
					СтрЗаголовок = СтрЗаголовок + РазделительСтрок + ТЗ.Автор;
				КонецЕсли;
			КонецЕсли;
			
			ТТЗ = СоздатьОбъект("ТаблицаЗначений");
			ТЗ.ВыгрузитьТабличнуюЧасть(ТТЗ); 
			
			ТЗ = СоздатьОбъект("ТаблицаЗначений");
			ТТЗ.Выгрузить(ТЗ);
			ТЗ.УдалитьКолонку("НомерСтрокиДокумента");
		КонецЕсли;
	КонецЕсли;
	
	МаксШирина = 85; 			// максимальная ширина колонки
	МаксШиринаЗаголовок = 20; 	// максимальная ширина колонки, обусловленная шириной заголовка
	КоэффициентШрифт = 1.0; 	// коэффициент пропорциональности зависимости ширины ячейки от количества символов в содержимом
	
	СписокИтоги = СоздатьОбъект("СписокЗначений"); // список названий колонок с итогами
	
	СпШирина = СоздатьОбъект("СписокЗначений"); // список ширин колонок по таблице
	СпШирина.ДобавитьЗначение(5); // Ширина колонки "Номер строки"
	
	// выбрать в список названия колонок по которым нужно выводить итоги
	Если ПустаяСтрока(ИтогиПоКолонкам) = 0 Тогда 
		Если Найти(ИтогиПоКолонкам, " ") <> 0 Тогда
			ИтогиПоКолонкам = СтрЗаменить(ИтогиПоКолонкам, " ", "");
		КонецЕсли;
		
		Для сч = 1 по ТЗ.КоличествоКолонок() Цикл
			ТипКолонки = "";
			ИмяКолонки = ТЗ.ПолучитьПараметрыКолонки(Сч, ТипКолонки);
			Если (ИмяКолонки = "НомерСтроки") ИЛИ (ИмяКолонки = "НомерСтрокиДокумента") Тогда Продолжить; КонецЕсли;
			
			Если ИтогиПоЦенам = 0 Тогда 
				Если Найти(ВРЕГ(ИмяКолонки), "ЦЕНА") = 1 Тогда Продолжить; КонецЕсли;
			КонецЕсли;
			
			Если ИтогиПоКолонкам = -1 Тогда // все числовые типизированные колонки
				Если (ТипКолонки = "Число")ИЛИ(ТипКолонки = "Number") Тогда
					СписокИтоги.ДобавитьЗначение(ИмяКолонки);
				КонецЕсли;
			ИначеЕсли Найти(","+ИтогиПоКолонкам+",", ","+ИмяКолонки+",") <> 0 Тогда // колонки в строковом виде,разделенные запятыми
				СписокИтоги.ДобавитьЗначение(ИмяКолонки);
			ИначеЕсли Найти(","+ИтогиПоКолонкам+",", ","+Сч+",") <> 0 Тогда // колонки по номерам разделенные запятыми
				СписокИтоги.ДобавитьЗначение(ИмяКолонки);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
//[*]progadmin, 26.06.2015, ДОБАВЛЕНО НЕТИПОВОЕ
//	Если Таб = "" Тогда
//		Таб = СоздатьОбъект("Таблица");
//	КонецЕсли;
//	
//	Таб.ИсходнаяТаблица("ПечатьТЗ");
// -------------
	Если Таб = "" Тогда
		Таб = СоздатьОбъект("Таблица");
		Таб.ИсходнаяТаблица("ПечатьТЗ");
	КонецЕсли;
	
//[*]_progadmin, 26.06.2015, ДОБАВЛЕНО НЕТИПОВОЕ
	
//[+]progadmin, 26.06.2015, ДОБАВЛЕНО НЕТИПОВОЕ
	СчетчикВысотаТаблицы = 0;	
//[+]_progadmin, 26.06.2015, ДОБАВЛЕНО НЕТИПОВОЕ

	Если СокрЛП(Заголовок) <> "" Тогда
		СчетчикВысотаТаблицы = СчетчикВысотаТаблицы + 1;
		Таб.ВывестиСекцию("Шапка");
		Выс = Таб.ВысотаТаблицы();
		Обл = Таб.Область("R1C1:R"+Выс+"C1");
		Обл.Полужирный(1);
	КонецЕсли;
	
	// заголовки таблицы
	Таб.ВывестиСекцию("Строка|Общая");
	Выс = Таб.ВысотаТаблицы();
	
	Для сч = 1 по ТЗ.КоличествоКолонок() Цикл
		Если КолонкиПоНазваниям = 0 Тогда
			ИмяРек = ТЗ.ПолучитьПараметрыКолонки(сч);
		Иначе
			ИмяРек = "";
			Ном = "";
			ТЗ.ПолучитьПараметрыКолонки(сч,,,,ИмяРек,);
		КонецЕсли;
		Таб.ПрисоединитьСекцию("Строка|Столбец");
		
		Обл = Таб.Область("R"+Выс+"C"+(Сч+1)); 	// ячейка в которую поместили данные
		Обл.ГоризонтальноеПоложение(3); 		// заголовки отцентрировать и установить признак переноса
		Обл.ВертикальноеПоложение(3);
		Обл.Контроль(4);
		Обл.Полужирный(1);
		
		Ширина = СтрДлина(ИмяРек) * КоэффициентШрифт;
		СпШирина.ДобавитьЗначение(Мин(Ширина, МаксШиринаЗаголовок));
	КонецЦикла;
	
	// вывести данные таблицы по строкам
	ТЗ.ВыбратьСтроки();
	Пока ТЗ.ПолучитьСтроку()=1 Цикл
		Ном = ТЗ.НомерСтроки;
		Таб.ВывестиСекцию("Строка|Общая");
		Выс = Таб.ВысотаТаблицы();
		Для сч = 1 по ТЗ.КоличествоКолонок() Цикл
			ИмяРек = ТЗ.ПолучитьЗначение(Ном,сч);
			ТипРек = ТипЗначения(ИмяРек);
			
			
			Если ТипРек = 1 Тогда // Форматировать числовые значения - с разделителями или переданной форматной строкой
				Если ПустаяСтрока(ФорматЧисловыхЗначений) = 0 Тогда
					ИмяРек = СокрЛП(Формат(ИмяРек, ФорматЧисловыхЗначений));
				ИначеЕсли РазделительРазрядов<>"" Тогда
					Стр 	= СокрЛП(ИмяРек);
					Длина 	= СтрДлина(Стр);
					Поз 	= Найти(Стр, ".");
					Точность = ?(Поз = 0, 0, Длина - Поз);
					КоличествоРазделителей = Цел(Длина/3);
					Длина = Длина + КоличествоРазделителей;
					ИмяРек = СокрЛП(Формат(ИмяРек, "Ч0"+Длина+"."+Точность+","+РазделительРазрядов));
				КонецЕсли;
			ИначеЕсли ТипРек = 4 Тогда // форматировать даты стандартно, год полностью
				ИмяРек = Формат(ИмяРек, "ДДДММГГГГ");
			Иначе
				ИмяРек = СокрЛП(ИмяРек);
			КонецЕсли;
			
			Таб.ПрисоединитьСекцию("Строка|Столбец");
			Обл = Таб.Область("R"+Выс+"C"+(Сч+1)); // ячейка в которую поместили данные
			
			Если ТипРек = 1 Тогда
				Обл.ГоризонтальноеПоложение(2); // числа - вправо
			ИначеЕсли (ТипРек = 2) ИЛИ (ТипРек = 11) ИЛИ (ТипРек = 12) Тогда // строки 
				Обл.Контроль(4)
			КонецЕсли;
			// Расчет ширины по содержимому ячейки
			НачШирина = СпШирина.ПолучитьЗначение(Сч+1);
			Ширина = СтрДлина(ИмяРек) * КоэффициентШрифт;
			СпШирина.УстановитьЗначение(Сч+1, Макс(НачШирина,Ширина));
		КонецЦикла;
	КонецЦикла;
	
	Если ПустоеЗначение(ВыводЗаголовковПодвал)=0 Тогда
		//ЗАГОЛОВОК ТАБЛИЦЫ ВНИЗУ ТАБЛИЦЫ
		// заголовки таблицы
		Таб.ВывестиСекцию("Строка|Общая");
		Выс = Таб.ВысотаТаблицы();
		
		Для сч = 1 по ТЗ.КоличествоКолонок() Цикл
			Если КолонкиПоНазваниям = 0 Тогда
				ИмяРек = ТЗ.ПолучитьПараметрыКолонки(сч);
			Иначе
				ИмяРек = "";
				Ном = "";
				ТЗ.ПолучитьПараметрыКолонки(сч,,,,ИмяРек,);
			КонецЕсли;
			Таб.ПрисоединитьСекцию("Строка|Столбец");
			
			Обл = Таб.Область("R"+Выс+"C"+(Сч+1)); 	// ячейка в которую поместили данные
			Обл.ГоризонтальноеПоложение(3); 		// заголовки отцентрировать и установить признак переноса
			Обл.ВертикальноеПоложение(3);
			Обл.Контроль(4);
			Обл.Полужирный(1);
			
			//Ширина = СтрДлина(ИмяРек) * КоэффициентШрифт;
			//СпШирина.ДобавитьЗначение(Мин(Ширина, МаксШиринаЗаголовок));
		КонецЦикла;
		СчетчикВысотаТаблицы = СчетчикВысотаТаблицы + 1;
	КонецЕсли;
	
	Если СписокИтоги.РазмерСписка()<>0 Тогда
		// Слово ИТОГО разместим или под номером строки или под первой колонкой, если по ней нет итогов
		ИтогВПервойКолонке = 1;
		Ном = "";
		Если ТЗ.КоличествоКолонок()> 0 Тогда
			ИмяРек = ТЗ.ПолучитьПараметрыКолонки(1);
			Если СписокИтоги.Принадлежит(ИмяРек) = 1 Тогда
				ИтогВПервойКолонке = 0;
				
				СпШирина.УстановитьЗначение(1, 9);
				Ном = "Итого:";
			КонецЕсли;
		КонецЕсли;
		
		Таб.ВывестиСекцию("Строка|Общая");
		Выс = Таб.ВысотаТаблицы();
		Обл = Таб.Область("R"+Выс+"C1"); 
		Обл.Полужирный(1);
		// Вывести итоговые колонки
		Для сч = 1 по ТЗ.КоличествоКолонок() Цикл
			ИмяКолонки = ТЗ.ПолучитьПараметрыКолонки(Сч);
			Если СписокИтоги.Принадлежит(ИмяКолонки) = 1 Тогда
				ИмяРек = ТЗ.Итог(ИмяКолонки);
			Иначе
				ИмяРек = "";
			КонецЕсли;
			
			Если ПустаяСтрока(ФорматЧисловыхЗначений) = 0 Тогда
				Если "" <> ИмяРек Тогда
					ИмяРек = СокрЛП(Формат(ИмяРек, ФорматЧисловыхЗначений));
				КонецЕсли;
			ИначеЕсли РазделительРазрядов<>"" Тогда
				Стр = СокрЛП(ИмяРек);
				Длина = СтрДлина(Стр);
				Поз = Найти(Стр, ".");
				Точность = ?(Поз = 0, 0, Длина - Поз);
				
				КоличествоРазделителей = Цел(Длина/3);
				Длина = Длина + КоличествоРазделителей;
				
				ИмяРек = СокрЛП(Формат(ИмяРек, "Ч0"+Длина+"."+Точность+","+РазделительРазрядов));
			КонецЕсли;
			
			Если (Сч = 1)И(ИтогВПервойКолонке = 1) Тогда
				ИмяРек = "ИТОГО: ";
			КонецЕсли;
			
			Таб.ПрисоединитьСекцию("Строка|Столбец");
			
			Обл = Таб.Область("R"+Выс+"C"+(Сч+1)); // ячейка в которую поместили данные
			Обл.ГоризонтальноеПоложение(2); // числа - вправо
			Обл.Полужирный(1);
			// Расчет ширины по содержимому ячейки
			НачШирина = СпШирина.ПолучитьЗначение(Сч+1);
			Ширина = СтрДлина(ИмяРек) * КоэффициентШрифт;
			СпШирина.УстановитьЗначение(Сч+1, Макс(НачШирина,Ширина));
		КонецЦикла;
		СчетчикВысотаТаблицы = СчетчикВысотаТаблицы + 1;
	КонецЕсли;

	// форматируем ширину столбцов таблицы в соответствии с содержимым
	Для сч = 1 по СпШирина.РазмерСписка() Цикл
		Обл = Таб.Область("R1C"+Сч);
		Ширина = Мин(МаксШирина, 1+СпШирина.ПолучитьЗначение(Сч));
		Обл.ШиринаСтолбца(Ширина);
	КонецЦикла;

//[+]progadmin, 26.06.2015, ДОБАВЛЕНО НЕТИПОВОЕ
	Если ВыводНулевойТаблицы = 0 Тогда
		Если (Таб.ВысотаТаблицы() - СчетчикВысотаТаблицы) = 1 Тогда Возврат 1; КонецЕсли;
	КонецЕсли;	
//[+]_progadmin, 26.06.2015, ДОБАВЛЕНО НЕТИПОВОЕ

	Таб.Опции(ВыводСетки,ВыводЗаголовков,2);
	Таб.Показать(Заголовок);
	Таб.ТолькоПросмотр(1);
	
КонецФункции //ПечатьТЗ()
Показать
4. CheBurator 3119 14.07.18 00:43 Сейчас в теме
Этот вариант печати ТЗ у меня - основной. Обработка и простенький макет из двух секций у меня включен во все мои конфигурации. Печать - и как отладочная и простые отчеты.

Более продвинутый вариант, то что вам нужно смотри у меня в профайле, искать по "NotaBene" - у себя использую более продвинутый вариант с мелкми плюшками, но опубликованное - то что вам нужно. у меня эта разработка - основная, яне морочусь написанием вывода всяческих отчетов, кропаемых на быструю руку - подсовываю в обработку и ок.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот