Работа с табличным документом в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Как создать табличный макет в 1С.

&НаКлиенте
Процедура ФормируемПечатнуюФормуИзТабличногоМакета(Команда)
 
    // В макетах обработки у нас определен макет с именем
    // ТабличныйМакет и типом ТабличныйДокумент.
    // Вот как создаются такие макеты:
    // http://helpme1c.ru/kak-sozdat-tablichnyj-maket-v-1s
 
    // Сформируем печатную форму на основе этого макета.
 
    // Важно понимать, что сама печатная форма - это тоже
    // табличный документ, просто составленный из кусочков других
    // документов (макетов).
 
    // Печатная форма формируется на сервере, а затем
    // возвращается обратно на клиент...
 
    ПечатнаяФорма = СформироватьПечатнуюФормуИзТабличногоДокумента();
 
    НастроитьКолонтитулы(ПечатнаяФорма);
    НастроитьПараметрыПечати(ПечатнаяФорма);
 
    // ... чтобы вывести её пользователю в виде отдельного окна
 
    ПечатнаяФорма.Показать(
        "Наш отчёт"  // заголовок окна с отчётом
    );
 
    // после показа пользователь может сам и распечатать
    // и сохранить эту форму, но ...
 
    // .. мы можем программно сами сохранить форму в файл в нужном формате
 
    //ПечатнаяФорма.Записать(
    //    СлужебныйНаКлиенте.СоздатьПапкуДляЭкспериментов() + "\Наш отчёт.xls",
    //    ТипФайлаТабличногоДокумента.XLS
    //);
 
    // .. или сразу отправить её на принтер
 
    //ПечатнаяФорма.Напечатать(
    //    РежимИспользованияДиалогаПечати.НеИспользовать);
 
КонецПроцедуры
 
/// Как сформировать печатную форму из табличного документа в 1с 8.3, 8.2
 
&НаСервере
Функция СформироватьПечатнуюФормуИзТабличногоДокумента()
 
    // Получаем макет, сохраненный в нашей обработке.
    Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("ТабличныйМакет");    
 
    // Вот так можно изменить табличный макет программно,
    // уже после его создания.
    МеняемТабличныйДокументПрограммно(Макет);
 
    ПечатнаяФорма = Новый ТабличныйДокумент;
 
    // # Шапка документа #
 
    // Получаем область "Шапка" из макета.
    Шапка = Макет.ПолучитьОбласть("Шапка");
    // Заполняем её параметры.
    Шапка.Параметры.Номер = 1;
    Шапка.Параметры.Дата = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");    
    // Выводим её в нашу печатную форму.
    ПечатнаяФорма.Вывести(Шапка);
 
    // # Заголовок табличной части #
    ТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьЗаголовок");
    ПечатнаяФорма.Вывести(ТабличнаяЧастьЗаголовок);
 
    // # Строки табличной части #
 
    // Если при выводе строк наша таблица не поместится на страницу -
    // будем повторять заголовок таблицы в начале страницы.
    // Выводим с 3 по 4 строки - это как раз заголовок таблицы.
    // Использовать область "ТабличнаяЧастьЗаголовок" не получится,
    // так как нужны именно строки целиком.
    ПечатнаяФорма.ПовторятьПриПечатиСтроки = Макет.Область(3,,4);
 
    ТабличнаяЧастьСтрока = Макет.ПолучитьОбласть("ТабличнаяЧастьСтрока");
    СсылкаНаКлубнику = Справочники.Номенклатура.НайтиПоНаименованию("Клубника");
 
    // Сгруппируем строки таблицы в сворачивающийся блок.
    ПечатнаяФорма.НачатьГруппуСтрок("Товар", Истина);
 
    Для Шаг = 1 По 100 Цикл
        ТабличнаяЧастьСтрока.Параметры.Номенклатура = СсылкаНаКлубнику;
        ТабличнаяЧастьСтрока.Параметры.Количество = Шаг;
 
        // В макете мы выделили ячейку с номенклатурой и прописали
        // её параметр расшифровки "РасшифровкаНоменклатуры".
        // Заполним этот параметр, чтобы когда пользователь кликнет
        // два раза по товару - открылась его форма.
        // Дополнительный пример обработки расшифровки - см. ниже,
        // когда мы выводим табличный документ в поле формы.
        ТабличнаяЧастьСтрока.Параметры.РасшифровкаНоменклатуры = СсылкаНаКлубнику;
 
        ПечатнаяФорма.Вывести(ТабличнаяЧастьСтрока);
    КонецЦикла;
 
    // Закончим начатую группировку.
    ПечатнаяФорма.ЗакончитьГруппуСтрок();    
 
    Возврат ПечатнаяФорма;
 
КонецФункции
 
/// Как настроить колонтитулы печатной формы в 1с 8.3, 8.2
 
&НаКлиенте
Процедура НастроитьКолонтитулы(ПечатнаяФорма)
 
    // Верхний колонтитул.
    ПечатнаяФорма.ВерхнийКолонтитул.Выводить = Истина;
    ПечатнаяФорма.ВерхнийКолонтитул.НачальнаяСтраница = 1;
    ПечатнаяФорма.ВерхнийКолонтитул.ТекстВЦентре = "Этот отчёт сделан нами для тестов";
    ПечатнаяФорма.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
 
    // Нижний колонтитул.
    ПечатнаяФорма.НижнийКолонтитул.Выводить = Истина;
    ПечатнаяФорма.НижнийКолонтитул.ТекстСправа = "[&НомерСтраницы] из [&СтраницВсего]";        
    ПечатнаяФорма.НижнийКолонтитул.ТекстВЦентре = "[&Дата][&Время]";
 
    // Использованные выше конструкции [&НомерСтраницы] и т.п. предопределены
    // платформой.
 
КонецПроцедуры
 
/// Как настроить параметры печати табличного документа в 1с 8.3, 8.2
 
&НаКлиенте
Процедура НастроитьПараметрыПечати(ПечатнаяФорма)
 
    // Можно установить конкретный масштаб:
    ПечатнаяФорма.МасштабПечати = 60; // 60%
    // Или указать вариант "по ширине страницы"
    ПечатнаяФорма.АвтоМасштаб = Истина;
 
    // Поля страницы
    ПечатнаяФорма.ПолеСлева = 10;
    ПечатнаяФорма.ПолеСверху = 10;
    ПечатнаяФорма.ПолеСправа = 10;
    ПечатнаяФорма.ПолеСнизу = 10;
 
    // Партрет или альбом (ландшафт).
    ПечатнаяФорма.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
 
    // Двусторонняя печать позволяет очень экономить бумагу.
    ПечатнаяФорма.ДвусторонняяПечать = ТипДвустороннейПечати.Нет;
 
    // Количество страниц на листе при выводе документа на печать.
    // 1 - одна страницы, 2 - две, 0 - автоматическое определение.
    ПечатнаяФорма.ЭкземпляровНаСтранице = 1;
 
    // Количество копий документа, которое нужно напечатать.
    ПечатнаяФорма.КоличествоЭкземпляров = 1;    
 
    // Если печатаем несколько экземпляров - очень удобная галка.
    ПечатнаяФорма.РазборПоКопиям = Истина;
 
    // Не будем отображать сетку пользователю.
    ПечатнаяФорма.ОтображатьСетку = Ложь;
 
    // А также запретим редактирование ячеек отчёта.
    ПечатнаяФорма.ТолькоПросмотр = Истина;
 
    // Зафиксируем верхние 4 строки таблицы, чтобы
    // пользователю было удобно прокручивать
    // вниз печатную форму.
    ПечатнаяФорма.ФиксацияСверху = 4;
    ПечатнаяФорма.ФиксацияСлева = 0;    
 
КонецПроцедуры
 
/// Как изменить табличный документ программно в 1с 8.3, 8.2
 
&НаСервере
Процедура МеняемТабличныйДокументПрограммно(Макет)
 
    ОбластьЯчеек = Макет.Область("Шапка");
    ОбластьЯчеек.ЦветТекста = Новый Цвет(255, 0, 0);
    ОбластьЯчеек.ГраницаСверху =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);
    ОбластьЯчеек.ГраницаСлева =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);
    ОбластьЯчеек.ГраницаСправа =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);
    ОбластьЯчеек.ГраницаСнизу =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);    
    ОбластьЯчеек.Примечание.Текст = "Привет";    
 
    // и т.д. и т.п.
 
КонецПроцедуры
 
/// Как в обработать расшифровку в отчёте в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПолеСПечатнойФормойОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
 
    // Дополнительная обработка расшифровки возможна только
    // для табличного документа, который выведен на форму.
 
    // Это событие мы прописали для элемента формы, который связан
    // с реквизитом, имеющим тип "ТабличныйДокумент".
 
    Сообщить("Обработка расшифровки");
    Сообщить(Элемент.ТекущаяОбласть.Имя);
    Сообщить(Расшифровка);
 
    // Мы не хотим, чтобы открывалось значение расшифровки,
    // которое мы программно прописали в печатной форме.
    // Остановим дальнейшую обработку расшифровки.
    СтандартнаяОбработка = Ложь;
 
КонецПроцедуры
 
/// Как вывести табличный документ на форму в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ВыводимТабличныйДокументНаФорму(Команда)
 
    // Предварительно создаём на форме реквизит с именем
    // "ПолеСПечатнойФормой" и типом ТабличныйДокумент,
    // а затем перетаскиваем его в элементы формы.
 
    ВыводимТабличныйДокументНаФормуНаСервере();
 
КонецПроцедуры
 
&НаСервере
Процедура ВыводимТабличныйДокументНаФормуНаСервере()
 
    // Формируем табличный документ.
    ПечатнаяФорма = СформироватьПечатнуюФормуИзТабличногоДокумента();
 
    // Выводим его в соотв. реквизит формы.
    ПолеСПечатнойФормой.Очистить();    
    ПолеСПечатнойФормой.Вывести(ПечатнаяФорма);
    // После этого он автоматически отобразится
    // в поле формы, с которым он связан.
 
КонецПроцедуры
 
/// Как использовать табличный документ для ввода данных в 1с 8.3, 8.2
 
&НаКлиенте
Процедура НастраиваемТаблицуДляВводаДанных(Команда)
 
    // В начале выводим в поле формы табличный документ
    // из макета с именем "ТабличныйМакетДляВвода"
 
    НастраиваемТаблицуДляВводаДанныхНаСервере();
 
    // После этого пользователь должен ввести значение,
    // а мы его получим в коде ниже.
 
КонецПроцедуры
 
&НаСервере
Процедура НастраиваемТаблицуДляВводаДанныхНаСервере()
 
    ПолеСПечатнойФормой.Очистить();
    Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("ТабличныйМакетДляВвода");
    Форма = Макет.ПолучитьОбласть("ФормаВвода");    
    ПолеСПечатнойФормой.Вывести(Форма);
 
КонецПроцедуры
 
&НаКлиенте
Процедура УзнатьКакойЖеТоварВыбралПользователь(Команда)
 
    // Имя ячейки ввода мы задали в макете.
    ПолеВвода = ПолеСПечатнойФормой.Область("ПолеТовар");    
 
    Если ПолеВвода.Значение.Пустая() Тогда
        Сообщить("Укажите товар в табличной форме ввода!");
    Иначе
        Сообщить("Вы выбрали " + ПолеВвода.Значение);
    КонецЕсли;
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Как создать табличный макет в 1С.

Работа с табличным документом в языке 1С 8.3, 8.2 (в примерах)

<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

С уважением, (школа 1С программистов).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться: