// OldthiefXXX //Процедура формирует и выводит отчет по переданноме запросу // Параметры : //* ПараметрыОтчета - структура // Пример параметров: //* ПараметрыОтчета = Новый Структура; //* ПараметрыОтчета .Вставить("Запрос",текст); //* ПараметрыЗапроса=Новый Структура; //* ПараметрыЗапроса.Вставить("Номенклатура",ТоварИзАртикула.Ссылка); //* ПараметрыЗапроса.Вставить("НачалоМесяца",НачалоМесяца(ДатаВедомости)); //* ПараметрыЗапроса.Вставить("КонецМесяца",КонецМесяца(ДатаВедомости)); //* ПараметрыОтчета .Вставить("ПараметрыЗапроса",ПараметрыЗапроса); Процедура УниверсальныйОтчетПоЗапросу(ПараметрыОтчета) Запрос=новый Запрос; Запрос.Текст=ПараметрыОтчета.Запрос; Для каждого ПАРАМЕТР из ПараметрыОтчета.ПараметрыЗапроса Цикл Запрос.УстановитьПараметр(ПАРАМЕТР.Ключ,ПАРАМЕТР.Значение); КонецЦикла; Тз=Запрос.Выполнить().Выгрузить(); Табл=Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет("Макет"); ОбластьШапкаОсновной=Макет.ПолучитьОбласть("Шапка|Основной"); ОбластьСтрокаОсновной=Макет.ПолучитьОбласть("Строка|Основной"); ОбластьИтогОсновной=Макет.ПолучитьОбласть("Итог|Основной"); ОбластьШапкаДОП=Макет.ПолучитьОбласть("Шапка|Показатели"); ОбластьСтрокаДОП=Макет.ПолучитьОбласть("Строка|Показатели"); ОбластьИтогДОП=Макет.ПолучитьОбласть("Итог|Показатели"); Табл.Вывести(ОбластьШапкаОсновной); Для Каждого Колонка из Тз.Колонки ЦИКЛ ОбластьШапкаДОП.Параметры.ИмяПоказателя=Колонка.Имя; Табл.Присоединить(ОбластьШапкаДОП); КонецЦикла; счетчик=0; Для каждого стр из Тз Цикл счетчик=счетчик+1; ОбластьСтрокаОсновной.Параметры.счетчик=счетчик; Табл.Вывести(ОбластьСтрокаОсновной); Для Каждого Колонка из Тз.Колонки ЦИКЛ ОбластьСтрокаДОП.Параметры.ЗначениеКолонки=стр[Колонка.Имя]; Табл.Присоединить(ОбластьСтрокаДОП); КонецЦикла; КонецЦикла; Табл.Вывести(ОбластьИтогОсновной); Для Каждого Колонка из Тз.Колонки ЦИКЛ ОбластьИтогДОП.Параметры.Итог=Тз.Итог(Колонка.Имя); Табл.Присоединить(ОбластьИтогДОП); КонецЦикла; Табл.ТолькоПросмотр=истина; Табл.Показать(); КонецПроцедуры
//ТПОтчета - Табличное поле с формы (Таблица значений) с данными ПострПечать = Новый ПостроительОтчета; ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТПОтчета); ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс); ПострПечать.Выполнить(); Для каждого Колонка Из ПострПечать.ВыбранныеПоля Цикл Колонка.Представление = ТПОтчета.Колонки[Колонка.Имя].Заголовок; КонецЦикла; ПострПечать.Вывести();
//Процедура формирует и выводит отчет по переданной таблице значений // Параметры : // ТЗ - ТаблицаЗначений Процедура УниверсальныйОтчетПоТЗ(ТЗ) Табл=Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет("Макет"); ОбластьШапкаОсновной=Макет.ПолучитьОбласть("Шапка|Основной"); ОбластьСтрокаОсновной=Макет.ПолучитьОбласть("Строка|Основной"); ОбластьИтогОсновной=Макет.ПолучитьОбласть("Итог|Основной"); ОбластьШапкаДОП=Макет.ПолучитьОбласть("Шапка|Показатели"); ОбластьСтрокаДОП=Макет.ПолучитьОбласть("Строка|Показатели"); ОбластьИтогДОП=Макет.ПолучитьОбласть("Итог|Показатели"); Табл.Вывести(ОбластьШапкаОсновной); Для Каждого Колонка из Тз.Колонки ЦИКЛ ОбластьШапкаДОП.Параметры.ИмяПоказателя=Колонка.Имя; Табл.Присоединить(ОбластьШапкаДОП); КонецЦикла; счетчик=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); Таб.Показать("Таблица значений: "+Заголовок); КонецПроцедуры