ОтчетКонтрагента = Отчеты.ВедомостьВзаиморасчетыСКонтрагентами.Создать(); ОтчетКонтрагента.УстановитьНачальныеНастройки(); ОтчетКонтрагента.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтроки.Очистить(); ОтчетКонтрагента.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияКолонки.Очистить(); ОтчетКонтрагента.УниверсальныйОтчет.ПостроительОтчета.ВыбранныеПоля.Очистить(); ОтчетКонтрагента.УниверсальныйОтчет.ПостроительОтчета.Порядок.Очистить(); ОтчетКонтрагента.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Контрагент"); ОтчетКонтрагента.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("ДоговорКонтрагента"); //Контрагент ЭлементОтбора = ОтчетКонтрагента.УниверсальныйОтчет.ПостроительОтчета.Отбор["Контрагент"]; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ВидСравнения = ВидСравнения.Равно; ЭлементОтбора.Значение = ДоговорКонтрагента.Владелец; //ДоговорКонтрагента ЭлементОтбора = ОтчетКонтрагента.УниверсальныйОтчет.ПостроительОтчета.Отбор["ДоговорКонтрагента"]; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ВидСравнения = ВидСравнения.Равно; ЭлементОтбора.Значение = ДоговорКонтрагента.Ссылка; ОтчетКонтрагента.УниверсальныйОтчет.ДобавитьДополнительноеПоле("Период"); ОтчетКонтрагента.УниверсальныйОтчет.ДобавитьДополнительноеПоле("Регистратор"); ОтчетКонтрагента.УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Истина; ОтчетКонтрагента.УниверсальныйОтчет.мВосстанавливатьНастройкиПриОткрытии = Ложь; ФормаОтчета = ОтчетКонтрагента.ПолучитьФорму(); ФормаОтчета.Открыть(); ФормаОтчета.ОбновитьОтчет();
//ТПОтчета - Табличное поле с формы (Таблица значений) с данными ПострПечать = Новый ПостроительОтчета; ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТПОтчета); ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс); ПострПечать.Выполнить(); Для каждого Колонка Из ПострПечать.ВыбранныеПоля Цикл Колонка.Представление = ТПОтчета.Колонки[Колонка.Имя].Заголовок; КонецЦикла; ПострПечать.Вывести();
//Процедура формирует и выводит отчет по переданной таблице значений // Параметры : // ТЗ - ТаблицаЗначений Процедура УниверсальныйОтчетПоТЗ(ТЗ) Табл=Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет("Макет"); ОбластьШапкаОсновной=Макет.ПолучитьОбласть("Шапка|Основной"); ОбластьСтрокаОсновной=Макет.ПолучитьОбласть("Строка|Основной"); ОбластьИтогОсновной=Макет.ПолучитьОбласть("Итог|Основной"); ОбластьШапкаДОП=Макет.ПолучитьОбласть("Шапка|Показатели"); ОбластьСтрокаДОП=Макет.ПолучитьОбласть("Строка|Показатели"); ОбластьИтогДОП=Макет.ПолучитьОбласть("Итог|Показатели"); Табл.Вывести(ОбластьШапкаОсновной); Для Каждого Колонка из Тз.Колонки ЦИКЛ ОбластьШапкаДОП.Параметры.ИмяПоказателя=Колонка.Имя; Табл.Присоединить(ОбластьШапкаДОП); КонецЦикла; счетчик=0; Для каждого стр из Тз Цикл счетчик=счетчик+1; ОбластьСтрокаОсновной.Параметры.счетчик=счетчик; Табл.Вывести(ОбластьСтрокаОсновной); Для Каждого Колонка из Тз.Колонки ЦИКЛ ОбластьСтрокаДОП.Параметры.ЗначениеКолонки=стр[Колонка.Имя]; Табл.Присоединить(ОбластьСтрокаДОП); КонецЦикла; КонецЦикла; Табл.Вывести(ОбластьИтогОсновной); Для Каждого Колонка из Тз.Колонки ЦИКЛ ОбластьИтогДОП.Параметры.Итог=Тз.Итог(Колонка.Имя); Табл.Присоединить(ОбластьИтогДОП); КонецЦикла; Табл.Показать(); КонецПроцедуры
//Вывести таблицу значений Процедура ПечатьТЗвТаб(ТЗ, Заголовок = "",КолонкиПоНазваниям = 0) Экспорт Перем ТТЗ; ТЗ.Выгрузить(ТТЗ); МаксШирина = 50; // максимальная ширина колонки СпШирина = СоздатьОбъект("СписокЗначений"); // список ширин колонок по таблице Для сч = 1 по ТТЗ.КоличествоКолонок() Цикл Если КолонкиПоНазваниям = 0 Тогда ИмяРек = ТТЗ.ПолучитьПараметрыКолонки(сч); Иначе ИмяРек = ""; ТТЗ.ПолучитьПараметрыКолонки(сч,,,,ИмяРек,); КонецЕсли; СпШирина.ДобавитьЗначение(СтрДлина(ИмяРек)*1.2); // с поправкой на размер шрифта КонецЦикла; // просто печать таблицы - вывод всех строк и колонок // числовые значения - по правому краю. Автоподбор ширины - в пределах МаксШирина Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПечатьТЗ"); Если СокрЛП(Заголовок) <> "" Тогда Таб.ВывестиСекцию("Шапка"); КонецЕсли; // заголовки таблицы Таб.ВывестиСекцию("Строка|Общая"); Для сч=1 по ТТЗ.КоличествоКолонок() Цикл Если КолонкиПоНазваниям = 0 Тогда ИмяРек = ТТЗ.ПолучитьПараметрыКолонки(сч); Иначе ИмяРек = ""; Ном = ""; ТТЗ.ПолучитьПараметрыКолонки(сч,,,,ИмяРек,); КонецЕсли; Таб.ПрисоединитьСекцию("Строка|Столбец"); КонецЦикла; ВысотаШапки = Таб.ВысотаТаблицы(); // данные таблицы по строкам ТТЗ.ВыбратьСтроки(); Пока ТТЗ.ПолучитьСтроку()=1 Цикл Ном = ТТЗ.НомерСтроки; Таб.ВывестиСекцию("Строка|Общая"); Выс = Таб.ВысотаТаблицы(); Для сч=1 по ТТЗ.КоличествоКолонок() Цикл ИмяРек=ТТЗ.ПолучитьЗначение(Ном,сч); Таб.ПрисоединитьСекцию("Строка|Столбец"); Если ТипЗначения(ИмяРек) = 1 Тогда Обл = Таб.Область("R"+Выс+"C"+(Сч+1)); // ячейка в которую поместили данные Обл.ГоризонтальноеПоложение(2); // числа - вправо КонецЕсли; НачШирина = СпШирина.ПолучитьЗначение(Сч); Ширина = СтрДлина(ИмяРек); СпШирина.УстановитьЗначение(Сч,Макс(НачШирина,Ширина)); КонецЦикла; КонецЦикла; Для сч = 1 по СпШирина.РазмерСписка() Цикл Обл = Таб.Область("R"+ВысотаШапки+"C"+(Сч+1)); // форматируем ширину таблицы Ширина = Мин(МаксШирина,2+СпШирина.ПолучитьЗначение(Сч)); Обл.ШиринаСтолбца(Ширина); // форматируем заголовок Обл.Полужирный(1); КонецЦикла; Таб.Показать(Заголовок); Таб.ТолькоПросмотр(1); КонецПроцедуры
Процедура глВывестиТаблицуЗначений(ТаблицаЗначений, Заголовок = "") Экспорт Перем Таб, ИИ, ЖЖ, НазваниеКолонки, ТипКолонки, Ширина, Значение, Сообщение; Таб = СоздатьОбъект("Таблица"); Если ТипЗначенияСтр(ТаблицаЗначений) <> "ТаблицаЗначений" Тогда Сообщение = "В процедуру ""глВывестиТаблицуЗначений()"" передана переменная не типа ""ТаблицаЗначений"", "+ "а типа """+СокрЛП(ТипЗначенияСтр(ТаблицаЗначений))+""""; Таб.Область(1, 1, 1, 1).Текст = Сообщение; Таб.Область(1, 1, 1, 1).ШиринаСтолбца(СтрДлина(Сообщение)); Таб.ТолькоПросмотр(1); Таб.Показать("Не таблица значений: "+Заголовок); Возврат; КонецЕсли; Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ,,,, НазваниеКолонки); Таб.Область(1, ЖЖ, 1, ЖЖ).Текст = СокрЛП(НазваниеКолонки); Таб.Область(1, ЖЖ, 1, ЖЖ).РамкаОбвести(5, 5, 5, 5); Таб.Область(1, ЖЖ, 1, ЖЖ).ВертикальноеПоложение(3); Таб.Область(1, ЖЖ, 1, ЖЖ).ГоризонтальноеПоложение(3); Таб.Область(1, ЖЖ, 1, ЖЖ).РазмерШрифта(7); Таб.Область(1, ЖЖ, 1, ЖЖ).Полужирный(1); Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(); Ширина = Макс(Ширина, СтрДлина(СокрЛП(НазваниеКолонки))); Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина); КонецЦикла; Для ИИ = 1 по ТаблицаЗначений.КоличествоСтрок() цикл Для ЖЖ = 1 по ТаблицаЗначений.КоличествоКолонок() цикл Значение = ТаблицаЗначений.ПолучитьЗначение(ИИ, ЖЖ); Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Текст = Значение; Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).Расшифровка(Значение, 0); Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).РамкаОбвести(3, 0, 3, 0); Ширина = Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(); Ширина = Макс(Ширина, СтрДлина(СокрЛП(Строка(Значение)))); Таб.Область(1, ЖЖ, 1, ЖЖ).ШиринаСтолбца(Ширина); ТаблицаЗначений.ПолучитьПараметрыКолонки(ЖЖ, ТипКолонки); ; Если ТипКолонки = "Число" тогда Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ГоризонтальноеПоложение(2); КонецЕсли; Если ИИ = ТаблицаЗначений.ТекущаяСтрока() тогда Таб.Область(ИИ+1, ЖЖ, ИИ+1, ЖЖ).ЦветФона(255, 0, 0); КонецЕсли; КонецЦикла; КонецЦикла; Таб.ТолькоПросмотр(1); Таб.Показать("Таблица значений: "+Заголовок); КонецПроцедуры