1. Mars2006 11.07.18 17:00 Сейчас в теме

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

Где попадалась обработка печати таблицы значений.

Может подскажет кто как вывести на печать таблицу значений в таком виде. см. вложение.
Прикрепленные файлы:
Ответы
Сортировка: Древо
2. VBBer 11.07.18 17:27 Сейчас в теме
Нужно использовать горизонтальные и вертикальные области в макете.
Из исходной таблицы скопировать в новые отдельные таблицы колонки Клиенты и Товары. после этого Циклом проходим по Товарам (Это наши строки ), а во вложенном цикле по Клиентам. Области получать при помощи "Область = Макет.ПолучитьОбласть("Строка|Контрагент"));
выводить первую часть строки Вывести(Область) остальные части - ТабличныйДокумент.Присоединить(Область)
3. CheBurator 3558 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 3558 14.07.18 00:43 Сейчас в теме
Этот вариант печати ТЗ у меня - основной. Обработка и простенький макет из двух секций у меня включен во все мои конфигурации. Печать - и как отладочная и простые отчеты.

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

Вакансии



Ведущий программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Руководитель проектов 1С
Москва
Полный день

Консультант-аналитик 1С: ЗУП
Санкт-Петербург
Полный день