1С 8.3 Табличный документ
Данные > Примеры кода 1С > 1С 8.3 Табличный документ / Макет
Табличный документ в 1С 8.3 - это объект встроенного языка, который используется для создания печатных форм документов и отчетов. Является электронной таблицей, так как состоит из строк и столбцов и имеет функциональность, определенную следующими методами: ввод данных, группировка элементов, расшифровка, примечание в ячейках, оформление ячеек, форматирование, сохранение. Табличный документ использоваться как сам по себе, и может входить в состав любой из форм и служит для отображения информации.
Оглавление:
Создание печатной формы из табличного документа в 1С 8.3:
&НаКлиенте
Процедура СозданиеПечатнойФормыИзТабличногоДокумента(Команда)
ФормаПечати = СозданиеПечатнойФормыИзТабличногоДокументаНаСервере();
НастройкаКолонтитуловПечатнойФормы(ФормаПечати);
НастройкаПараметровПечатиТабличногоДокумента(ФормаПечати);
ФормаПечати.Показать("Отчет по долгам");
// Сохранение "Отчета по долгам"
ФормаПечати.Записать("D:\Storage\data\ОтчетПоДолгам.xls", ТипФайлаТабличногоДокумента.XLS);
// Печать "Отчета по долгам" сразу на принтер
ФормаПечати.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры
&НаСервере
Функция СозданиеПечатнойФормыИзТабличногоДокументаНаСервере()
Макет = ЭтотОбъект.ПолучитьМакет("Макет_Табл");
// Изменение табличного макета после его создания.
ПрограммноеИзменениеТабличногоДокумента(Макет);
ФормаПечати = Новый ТабличныйДокумент;
// Получение области и макета по имени
Шапка = Макет.ПолучитьОбласть("Шапка");
// Заполнение параметров
Шапка.Параметры.Дата = ТекущаяДата();
Шапка.Параметры.Номер = 2020;
// Вывод шапки в документ
ФормаПечати.Вывести(Шапка);
// Заголовок табличной части.
ЗаголовокТ = Макет.ПолучитьОбласть("ТЧ_Заголовок");
ФормаПечати.Вывести(ЗаголовокТ);
ТЧ_Строка = Макет.ПолучитьОбласть("ТЧ_Строка");
SSDIntelOptaneDC = Справочники.Номенклатура.НайтиПоНаименованию("SSD Intel Optane DC P4800X 1.5TB");
// Группировка строк таблицы в сворачивающийся блок
ФормаПечати.НачатьГруппуСтрок("Номенклатура", Истина);
Для Х = 1 По 100 Цикл
ТЧ_Строка.Параметры.Номенклатура = SSDIntelOptaneDC;
ТЧ_Строка.Параметры.Количество = Х;
// Параметр расшифровки "РасшифровкаНоменклатуры" - для открытия формы номенклатуры из макета по клику
ТЧ_Строка.Параметры.РасшифровкаНоменклатуры = SSDIntelOptaneDC;
ФормаПечати.Вывести(ТЧ_Строка);
КонецЦикла;
// Конец группировки
ФормаПечати.ЗакончитьГруппуСтрок();
Возврат ФормаПечати;
КонецФункции
Процедура СозданиеПечатнойФормыИзТабличногоДокумента(Команда)
ФормаПечати = СозданиеПечатнойФормыИзТабличногоДокументаНаСервере();
НастройкаКолонтитуловПечатнойФормы(ФормаПечати);
НастройкаПараметровПечатиТабличногоДокумента(ФормаПечати);
ФормаПечати.Показать("Отчет по долгам");
// Сохранение "Отчета по долгам"
ФормаПечати.Записать("D:\Storage\data\ОтчетПоДолгам.xls", ТипФайлаТабличногоДокумента.XLS);
// Печать "Отчета по долгам" сразу на принтер
ФормаПечати.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецПроцедуры
&НаСервере
Функция СозданиеПечатнойФормыИзТабличногоДокументаНаСервере()
Макет = ЭтотОбъект.ПолучитьМакет("Макет_Табл");
// Изменение табличного макета после его создания.
ПрограммноеИзменениеТабличногоДокумента(Макет);
ФормаПечати = Новый ТабличныйДокумент;
// Получение области и макета по имени
Шапка = Макет.ПолучитьОбласть("Шапка");
// Заполнение параметров
Шапка.Параметры.Дата = ТекущаяДата();
Шапка.Параметры.Номер = 2020;
// Вывод шапки в документ
ФормаПечати.Вывести(Шапка);
// Заголовок табличной части.
ЗаголовокТ = Макет.ПолучитьОбласть("ТЧ_Заголовок");
ФормаПечати.Вывести(ЗаголовокТ);
ТЧ_Строка = Макет.ПолучитьОбласть("ТЧ_Строка");
SSDIntelOptaneDC = Справочники.Номенклатура.НайтиПоНаименованию("SSD Intel Optane DC P4800X 1.5TB");
// Группировка строк таблицы в сворачивающийся блок
ФормаПечати.НачатьГруппуСтрок("Номенклатура", Истина);
Для Х = 1 По 100 Цикл
ТЧ_Строка.Параметры.Номенклатура = SSDIntelOptaneDC;
ТЧ_Строка.Параметры.Количество = Х;
// Параметр расшифровки "РасшифровкаНоменклатуры" - для открытия формы номенклатуры из макета по клику
ТЧ_Строка.Параметры.РасшифровкаНоменклатуры = SSDIntelOptaneDC;
ФормаПечати.Вывести(ТЧ_Строка);
КонецЦикла;
// Конец группировки
ФормаПечати.ЗакончитьГруппуСтрок();
Возврат ФормаПечати;
КонецФункции
Программное изменение табличного документа в 1С 8.3:
&НаСервере
Процедура ПрограммноеИзменениеТабличногоДокумента(Макет)
ОбластьШапки = Макет.Область("Шапка");
ОбластьШапки.ЦветТекста = Новый Цвет(0, 255, 0);
ОбластьШапки.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.Примечание.Текст = "Тут текст примечания...";
КонецПроцедуры
Процедура ПрограммноеИзменениеТабличногоДокумента(Макет)
ОбластьШапки = Макет.Область("Шапка");
ОбластьШапки.ЦветТекста = Новый Цвет(0, 255, 0);
ОбластьШапки.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
ОбластьШапки.Примечание.Текст = "Тут текст примечания...";
КонецПроцедуры
Настройка параметров печати табличного документа в 1С 8.3:
&НаКлиенте
Процедура НастройкаПараметровПечатиТабличногоДокумента(ФормаПечати)
// Поля страницы
ФормаПечати.ПолеСлева = 20;
ФормаПечати.ПолеСверху = 5;
ФормаПечати.ПолеСправа = 5;
ФормаПечати.ПолеСнизу = 5;
ФормаПечати.АвтоМасштаб = Истина; // Установка авто-масштаба: "по ширине страницы"
ФормаПечати.МасштабПечати = 85; // ИЛИ Установка определенного масштаба 85%
// Ориентация: Портрет или альбом (ландшафт)
ФормаПечати.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
// Двусторонняя печать = Да
ФормаПечати.ДвусторонняяПечать = ТипДвустороннейПечати.Да;
// Количество страниц на листе: 0 - автоматическое определение
ФормаПечати.ЭкземпляровНаСтранице = 1;
// Количество одинаковых копий
ФормаПечати.КоличествоЭкземпляров = 1;
// При печати несколько экземпляров, желательно установить "Истина"
ФормаПечати.РазборПоКопиям = Истина;
// Отключение отображения сетки в пользовательском режиме
ФормаПечати.ОтображатьСетку = Ложь;
// Запрет редактирования ячеек отчёта
ФормаПечати.ТолькоПросмотр = Истина;
// Фиксация двух верхних строк таблицы и одной строи слева для отображения заглавной информации при прокручивании
ФормаПечати.ФиксацияСверху = 2;
ФормаПечати.ФиксацияСлева = 1;
КонецПроцедуры
Процедура НастройкаПараметровПечатиТабличногоДокумента(ФормаПечати)
// Поля страницы
ФормаПечати.ПолеСлева = 20;
ФормаПечати.ПолеСверху = 5;
ФормаПечати.ПолеСправа = 5;
ФормаПечати.ПолеСнизу = 5;
ФормаПечати.АвтоМасштаб = Истина; // Установка авто-масштаба: "по ширине страницы"
ФормаПечати.МасштабПечати = 85; // ИЛИ Установка определенного масштаба 85%
// Ориентация: Портрет или альбом (ландшафт)
ФормаПечати.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
// Двусторонняя печать = Да
ФормаПечати.ДвусторонняяПечать = ТипДвустороннейПечати.Да;
// Количество страниц на листе: 0 - автоматическое определение
ФормаПечати.ЭкземпляровНаСтранице = 1;
// Количество одинаковых копий
ФормаПечати.КоличествоЭкземпляров = 1;
// При печати несколько экземпляров, желательно установить "Истина"
ФормаПечати.РазборПоКопиям = Истина;
// Отключение отображения сетки в пользовательском режиме
ФормаПечати.ОтображатьСетку = Ложь;
// Запрет редактирования ячеек отчёта
ФормаПечати.ТолькоПросмотр = Истина;
// Фиксация двух верхних строк таблицы и одной строи слева для отображения заглавной информации при прокручивании
ФормаПечати.ФиксацияСверху = 2;
ФормаПечати.ФиксацияСлева = 1;
КонецПроцедуры
Настройка колонтитулов печатной формы в 1С 8.3:
&НаКлиенте
Процедура НастройкаКолонтитуловПечатнойФормы(ФормаПечати)
ФормаПечати.ВерхнийКолонтитул.Выводить = Истина;
ФормаПечати.ВерхнийКолонтитул.НачальнаяСтраница = 1;
ФормаПечати.ВерхнийКолонтитул.ТекстСлева = "Отчет по реализации и полученной прибыли";
ФормаПечати.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ФормаПечати.НижнийКолонтитул.Выводить = Истина;
ФормаПечати.НижнийКолонтитул.ТекстВЦентре = "[&Дата][&Время]";
ФормаПечати.НижнийКолонтитул.ТекстВЦентре = "[&НомерСтраницы] из [&СтраницВсего]";
КонецПроцедуры
Процедура НастройкаКолонтитуловПечатнойФормы(ФормаПечати)
ФормаПечати.ВерхнийКолонтитул.Выводить = Истина;
ФормаПечати.ВерхнийКолонтитул.НачальнаяСтраница = 1;
ФормаПечати.ВерхнийКолонтитул.ТекстСлева = "Отчет по реализации и полученной прибыли";
ФормаПечати.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ФормаПечати.НижнийКолонтитул.Выводить = Истина;
ФормаПечати.НижнийКолонтитул.ТекстВЦентре = "[&Дата][&Время]";
ФормаПечати.НижнийКолонтитул.ТекстВЦентре = "[&НомерСтраницы] из [&СтраницВсего]";
КонецПроцедуры
Обработка расшифровки отчета в 1С 8.3:
&НаКлиенте
Процедура ОбработкаРасшифровкиОтчета(Элемент, Расшифровка, СтандартнаяОбработка)
// Возможна только для табличного документа, который выведен на форму
// Необходимо прописать для элемента формы, который связан с "ТабличныйДокумент"
Сообщить(Расшифровка);
Сообщить(Элемент.ТекущаяОбласть.Имя);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Процедура ОбработкаРасшифровкиОтчета(Элемент, Расшифровка, СтандартнаяОбработка)
// Возможна только для табличного документа, который выведен на форму
// Необходимо прописать для элемента формы, который связан с "ТабличныйДокумент"
Сообщить(Расшифровка);
Сообщить(Элемент.ТекущаяОбласть.Имя);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Вывод табличного документа на форму в 1С 8.3:
&НаКлиенте
Процедура ВыводТабличногоДокументаНаФорму(Команда)
ВыводТабличногоДокументаНаФормуНаСервере();
// На форме нужно создать реквизит с именем "ПолеВвода", тип "ТабличныйДокумент"
// и перенести на элементы формы.
КонецПроцедуры
&НаСервере
Процедура ВыводТабличногоДокументаНаФормуНаСервере()
// Формирование табличного документа
ФормаПечати = СозданиеПечатнойФормыИзТабличногоДокументаНаСервере();
// Вывод табличного документа в нужный реквизит формы
ПолеВвода.Очистить();
ПолеВвода.Вывести(ФормаПечати); // Произойдет авто.отображение в поле формы (с которым связан)
КонецПроцедуры
Процедура ВыводТабличногоДокументаНаФорму(Команда)
ВыводТабличногоДокументаНаФормуНаСервере();
// На форме нужно создать реквизит с именем "ПолеВвода", тип "ТабличныйДокумент"
// и перенести на элементы формы.
КонецПроцедуры
&НаСервере
Процедура ВыводТабличногоДокументаНаФормуНаСервере()
// Формирование табличного документа
ФормаПечати = СозданиеПечатнойФормыИзТабличногоДокументаНаСервере();
// Вывод табличного документа в нужный реквизит формы
ПолеВвода.Очистить();
ПолеВвода.Вывести(ФормаПечати); // Произойдет авто.отображение в поле формы (с которым связан)
КонецПроцедуры
Настройка табличного документа для ввода данных в 1С 8.3:
&НаКлиенте
Процедура НастройкаТабличногоДокументаДляВводаДанных(Команда)
// Вывод из макета с именем "Макет_Табл_Ввод" в поле формы ТабличногоДокумента
НастройкаТабличногоДокументаДляВводаДанныхНаСервере();
// Получение значения после его ввода пользователем
// см.Процедуру: ПолучениеЗначенияПослеЕгоВводаПользователемНаКлиенте
КонецПроцедуры
&НаСервере
Процедура НастройкаТабличногоДокументаДляВводаДанныхНаСервере()
ПолеВвода.Очистить();
Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("Макет_Табл_Ввод");
Форма = Макет.ПолучитьОбласть("ФормаДляВвода");
ПолеВвода.Вывести(Форма);
КонецПроцедуры
Процедура НастройкаТабличногоДокументаДляВводаДанных(Команда)
// Вывод из макета с именем "Макет_Табл_Ввод" в поле формы ТабличногоДокумента
НастройкаТабличногоДокументаДляВводаДанныхНаСервере();
// Получение значения после его ввода пользователем
// см.Процедуру: ПолучениеЗначенияПослеЕгоВводаПользователемНаКлиенте
КонецПроцедуры
&НаСервере
Процедура НастройкаТабличногоДокументаДляВводаДанныхНаСервере()
ПолеВвода.Очистить();
Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("Макет_Табл_Ввод");
Форма = Макет.ПолучитьОбласть("ФормаДляВвода");
ПолеВвода.Вывести(Форма);
КонецПроцедуры
Получение значения после его ввода пользователем в 1С 8.3:
&НаКлиенте
Процедура ПолучениеЗначенияПослеЕгоВводаПользователемНаКлиенте(Команда)
// Имя ячейки для ввода задано в макете
ПолеОбластьВвода = ПолеВвода.Область("ПолеТовар");
Если ПолеОбластьВвода.Значение.Пустая() Тогда
Сообщить("В табличной форме ввода не указана номенклатура!");
Иначе
Сообщить("Выбрана номенклатура: " + ПолеОбластьВвода.Значение);
КонецЕсли;
КонецПроцедуры
Процедура ПолучениеЗначенияПослеЕгоВводаПользователемНаКлиенте(Команда)
// Имя ячейки для ввода задано в макете
ПолеОбластьВвода = ПолеВвода.Область("ПолеТовар");
Если ПолеОбластьВвода.Значение.Пустая() Тогда
Сообщить("В табличной форме ввода не указана номенклатура!");
Иначе
Сообщить("Выбрана номенклатура: " + ПолеОбластьВвода.Значение);
КонецЕсли;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Табличный документ:
📰 Актуальные новости с тегом #Табличный документ (Макет):
- В версии 8.3.27 реализована поддержка форматированной строки в ячейках макета компоновки данных.
- В версии 8.3.27 добавлена возможность использования форматированной строки в качестве значения параметра для ячейки с шаблоном или параметром.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник