Имя: Пароль:
1C
1C 7.7
v7: Вывести список в семерке
0 kofeinik
 
31.03.16
23:28
Походу, в одной из семерок придется жить дольше, чем хочется, поэтому вопрос: посредством чего можно быстро добавить функционал вывода многострочной/табличной части в таблицу для последующего сохранения/печати?
1 Zamestas
 
31.03.16
23:42
(0) Обработка с дерганьем метаданных + пляски с шириной колонок.
2 HawkEye
 
31.03.16
23:49
(0)посредством кода...
3 Builder
 
31.03.16
23:58
Проще всего посредством мастера печати, если я понял о чем ТС.
4 kofeinik
 
01.04.16
00:49
(3) чтобы понять, нужен мастер Йода, не меньше
5 Злопчинский
 
02.04.16
00:37
есть такая хорошенькая практически "типовая" ПечатьТЗ(..куча параметров) - (спасибо Наташе?) - ставишь ее экспортной в глобальный модуль, макет - в общие таблицы конфиги.

для вывода ТЗ в минимальном случае достаточно
ПечатьТЗ(МояТЗ);

Для вывода ТЧ дока:
ТЗ=""; ВыгрузитьтабличнуюЧасть(ТЗ); ПечатьТЗ(ТЗ).

вот типа так сделано
http://content.screencast.com/users/Che66/folders/Jing/media/f3b09de7-5b5e-4eb7-b7ab-b38291286bf9/2016-04-02_0035.png
6 Злопчинский
 
02.04.16
00:44
для универсального вывода на печать форму списка справочника - тоже можно, но чуть придется предварительной работы сделать...
- получить контексть формы списка (это есть)
- определить параметры (установлен ли отбор, включена ли иерархия, при включенной иерархии - в какой группе находимся, порядок сортировки списка, получить список видимых колонок списка - и повторить это все выборкой/запросом с выпихиванием в ТЗ как выше. для журнала - аналогично. Трудности могут быть с текстовыми колонками, в которых формулой выводится (но через метаданные и атрибуты списка можно получить доступ и к параметрам текстовых колонок...

так что .. можно все.. почти.. главное чтобы еноты были...
ну или посоветуют сейчас ТП юзать - там наверняка и печать типа штатной должна быть...
7 vadim777
 
02.04.16
08:49
(6) Непонято, что-же тебе надо? Может это поможет, юзаю уже давно:
//===========================================
//Установление автоширины колонок таблицы
Процедура АвтоШиринаКолонок(Таб,НачКол,НачСтр)
    // Проходим по столбцам таблицы,
    Для НомерКол=НачКол По Таб.ШиринаТаблицы() Цикл
        // затем спускаемся по текущему столбу по ячейкам (по строкам),
        // и максимизируем ширину каждой ячейки в текущем столбце
        МаксШирина=0;
        Для НомерСтр=НачСтр По Таб.ВысотаТаблицы() Цикл
            ТекШирина =Таб.Область(НомерСтр,НомерКол).ШиринаСтолбца();         // Ширина текущего столбца
              ТекДлина  =СтрДлина(СокрЛП(Таб.Область(НомерСтр,НомерКол).Текст)); // Размер текста в ячейке
            МаксШирина=Макс(МаксШирина,ТекШирина,ТекДлина);
        КонецЦикла;
        Таб.Область(,НомерКол).ШиринаСтолбца(МаксШирина);
    КонецЦикла;
КонецПроцедуры

//=====================================
Процедура ВывестиТЗ(ТЗ, Знач ИмяТЗ, Итог=0, ВКонец=0)
    Перем Таб,Длина,Заголовок,Ширина, СписокПолей;
    //Если ПустоеЗначение(ТЗ) = 1 Тогда
    //    Сообщить("Ошибка вызова процедуры ВывестиТЗ: пустое значение ТЗ "+ИмяТЗ);
    //    Возврат;
    //КонецЕсли;
    ИмяТЗ = СокрЛП(ИмяТЗ);
    Если ТипЗначенияСтр(ТЗ) <> "ТаблицаЗначений" Тогда
        Сообщить("Ошибка вызова процедуры ВывестиТЗ: тип значения ТЗ "+ИмяТЗ+" = "+ТипЗначенияСтр(ТЗ));
        Возврат;
    КонецЕсли;
    Если ТЗ.КоличествоКолонок() = 0 Тогда
        Сообщить("Ошибка вызова процедуры ВывестиТЗ: в ТЗ "+ИмяТЗ+" не заданы колонки");
        Возврат;
    КонецЕсли;
    Если ТЗ.КоличествоСтрок() = 0 Тогда
        // Сообщить("Ошибка процедуры вызова ВывестиТЗ: пустая ТЗ "+ИмяТЗ);
        Возврат;
    КонецЕсли;
    СписокПолей = "";
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ВыводТЗ");
    //! Сначала выведем заголовки столбцов
    Для Кол = 1 По ТЗ.КоличествоКолонок() Цикл
        ТЗ.ПолучитьПараметрыКолонки(Кол,,Длина,,Заголовок,Ширина);
        Значение = Заголовок;
        Если Кол=1 Тогда
            Таб.ВывестиСекцию("Строка|Столбец");
            СписокПолей = Заголовок;
        Иначе
            Таб.ПрисоединитьСекцию("Строка|Столбец");
            СписокПолей = СписокПолей +"," + Заголовок;
        КонецЕсли;
    КонецЦикла;
    //! Вывод содержимого таблицы
    Для Стр = 1 По ТЗ.КоличествоСтрок() Цикл
        Для Кол = 1 По ТЗ.КоличествоКолонок() Цикл
            Значение = ТЗ.ПолучитьЗначение(Стр, Кол);
            Если Кол=1 Тогда
                Таб.ВывестиСекцию("Строка|Столбец");
            Иначе
                Таб.ПрисоединитьСекцию("Строка|Столбец");
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Если Итог = 1 Тогда
        ТЗИтог = СоздатьОбъект("ТаблицаЗначений");
        ТЗИтог.Загрузить(ТЗ);
        ТЗИтог.НоваяКолонка("_123_");
        ТЗИтог.Заполнить(123,,,"_123_");
        ТЗИтог.Свернуть("_123_",СписокПолей);
        ТЗИтог.УдалитьКолонку("_123_");
        Для Стр = 1 По ТЗИтог.КоличествоСтрок() Цикл // Несмотря на то, что в ТЗИтог д.б. одна строка
            // Для начала убедимся, что в колонке если числовые значения
            Для Кол = 1 По ТЗИтог.КоличествоКолонок() Цикл
                Значение = ТЗИтог.ПолучитьЗначение(Стр, Кол);
                Если СтрЧислоВхождений(Значение, ".") > 1 Тогда
                    // Обычно это Дата
                    Значение = "";
                Иначе
                    ЗначТест = Число(Значение);
                    Если ПустоеЗначение(ЗначТест) = 1 Тогда
                        Значение = "";
                    Иначе
                        Значение = ЗначТест; // Чисто число!
                        Прервать;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            Если Значение = "" Тогда
                // В строке нет чисел - итог считать не по чем!
                Продолжить;
            КонецЕсли;
            Для Кол = 1 По ТЗИтог.КоличествоКолонок() Цикл
                Значение = ТЗИтог.ПолучитьЗначение(Стр, Кол);
                Если СтрЧислоВхождений(Значение, ".") > 1 Тогда
                    // Обычно это Дата
                    Значение = "";
                Иначе
                    ЗначТест = Число(Значение);
                    Если ПустоеЗначение(ЗначТест) = 1 Тогда
                        Значение = "";
                    Иначе
                        Значение = ЗначТест; // Чисто число!
                    КонецЕсли;
                КонецЕсли;
                Если Кол=1 Тогда
                    Таб.ВывестиСекцию("Итог|Столбец");
                Иначе
                    Таб.ПрисоединитьСекцию("Итог|Столбец");
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецЕсли;
    АвтоШиринаКолонок(Таб,1,1);
    Таб.ТолькоПросмотр(1);
    Таб.Опции(,,1,,ИмяТЗ,ИмяТЗ);
    Таб.ПараметрыСтраницы(2);
    Таб.Показать(ИмяТЗ,"");
КонецПроцедуры  // ВывестиТЗ(..)
8 Злопчинский
 
02.04.16
09:52
(7)  мне не надо, у меня все есть
9 Это_mike
 
02.04.16
10:39
(6) у тп печати списка нет.а вот у поставщика данных есть.