Имя: Пароль:
1C
1С v8
Можно ли программно распечатать табличную часть документа 8.1-8.2
0 manti
 
01.10.13
15:56
Собственно САБЖ: возможно ли какими прогр. методами распечатать табличную часть документа. Аналог вывести список при нажатии на пр. кнопку мыши.
Подойдет любой синтаксис как от 8.1 так и 8.2
1 catena
 
01.10.13
15:59
Функция ВывестиТаблицуЗначений(П) Экспорт
//Назначение: Выводит таблицу значений в макет
//ДатаСоздания: 20070221
//Автор: Fixin
//Тестирована: Да
//$П:                     Структура параметров
//$П.ТЗ:                 Таблица значений, выводимая в отчет
//$П.Макет:             Макет, который используется для вывода в отчет, может отсутствовать
//$П.Т:                 Таблица, в которую выводить отчет, если не задана, создается
//$П.ПараметрыШапки:     Параметры, передаваемые в шапку
//$П.ПараметрыПодвала:     Параметры, передаваемые в подвал
//$П.ИмяШапки:             Имя шапки в макете, по умолчанию Шапка
//$П.ИмяСтроки:         Имя строки в макете, по умолчанию Строка
//$П.Показывать:         Показывать ли таблицу, по умолчанию истина
//$П.ИмяПодвала:         Имя подвала, по умолчанию Подвал
//$П.Показывать:         Показывать ли таблицу, по умолчанию истина
//$П.РасчитыватьИтоги:     Расчитывать ли итоги, по умолчанию истина
//Описание:
//    Сначала выводится шапка, затем строки, затем подвал.
//    Если указан флаг "Расчитывать итоги", то подвал заполняется итогами таблицы,
//    а затем из структуры "Параметры подвала".
//Пример:
//    ВывестиТаблицуЗначений(Новый Структура("ТЗ, ЗаголовокОкна", ТЗ, "Моя ТЗ"));

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

    Для Каждого Стр ИЗ ТЗ Цикл
        Если ИмяСтроки<>Неопределено И Макет<>Неопределено Тогда
            Строка=Макет.ПолучитьОбласть(ИмяСтроки);
            Строка.Параметры.Заполнить(Стр);
            Т.Вывести(Строка);
        Иначе
            //выводим строки
            Для Каждого Кол ИЗ ТЗ.Колонки Цикл
                Т.Область(НачальнаяСтрока+1+ТЗ.Индекс(Стр), 1+ТЗ.Колонки.Индекс(Кол), НачальнаяСтрока+1+ТЗ.Индекс(Стр), 1+ТЗ.Колонки.Индекс(Кол)).Текст=Стр[Кол.Имя];
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
    Если ИмяПодвала<>Неопределено И Макет<>Неопределено Тогда
        Подвал=Макет.ПолучитьОбласть(ИмяПодвала);
        Если РасчитыватьИтоги=истина Тогда
            ПараметрыИтогов=Новый Структура();
            Для Каждого Кол ИЗ ТЗ.Колонки Цикл
                ПараметрыИтогов.Вставить(Кол.Имя, ТЗ.Итог(Кол.Имя));
            КонецЦикла;
            Подвал.Параметры.Заполнить(ПараметрыИтогов);
        КонецЕсли;
        
        Если ПараметрыПодвала<>Неопределено Тогда
            Подвал.Параметры.Заполнить(ПараметрыПодвала);
        КонецЕсли;
        Т.Вывести(Подвал);
    КонецЕсли;
    
    Если Показывать Тогда
        Т.Показать(ЗаголовокОкна);
    КонецЕсли;
    Возврат Т;
#КонецЕсли
КонецФункции
2 manti
 
01.10.13
16:22
(1)
есть напрмиер док поступление товаров из типовой БП.
Ставлю кнопочку, на ней вызываю эту функцию, в функцию передаю ТЧ товары - как ТЗ
Процедура ПечатьТЧНажатие(Элемент)
    ВывестиТаблицуЗначений(Товары.Выгрузить());
КонецПроцедуры

пишет: {Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(2884)}: Метод объекта не обнаружен (Свойство)
    П.Свойство("ЗаголовокОкна", ЗаголовокОкна);
3 Chikko
 
01.10.13
16:25
(2) там в описании ф-ции написано что передавать.
4 manti
 
01.10.13
16:25
(3) сорри не увидел вовремя)) разобрался
5 manti
 
01.10.13
16:31
(1) спасибо
6 ИС-2
 
naïve
01.10.13
16:49
вот моя процедура рез - таблица значений, показывать - вывод на экран

Процедура СохранитьТЗ_В_Файл(рез,ИмяФайла,Показывать = Ложь)
    табдок = Новый ТабличныйДокумент;
    
    ПутьСохраненияСлужебнойИнформации = _КлиентСервер.ПолучитьЗначениеГлПеременной("ПутьСохраненияСлужебнойИнформации");    
    
    ИмяФайлаСохранения = ПутьСохраненияСлужебнойИнформации + "\"+ ИмяФайла+" "+Формат(ТекущаяДата(),"ДФ=yyyy_MM_dd") + ".XLS";
    
    ПострПечать = Новый ПостроительОтчета;
    ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(рез);
    ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс);
    ПострПечать.Выполнить();
    Для каждого Колонка Из ПострПечать.ВыбранныеПоля Цикл
        Колонка.Представление = рез.Колонки[Колонка.Имя].Имя;
    КонецЦикла;
    ПострПечать.Вывести(ТабДок);  
    
    Если Показывать Тогда
        табдок.Показать(имяфайла);
    КонецЕсли;    
        
    Попытка
        ТабДок.Записать(ИмяФайлаСохранения,ТипФайлаТабличногоДокумента.XLS);
        _КлиентСервер.ВывестиСообщениеПользователю("Записан файл " + ИмяФайлаСохранения);
    Исключение
        СообщитьОбОшибке("Ошибка сохранения " + ИмяФайла + "(" +ИмяФайлаСохранения + "); " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры