Работа с табличным документом в языке 1С 8.3, 8.2 (в примерах)
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
2017-12-19T18:34:15+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Как создать табличный макет в 1С.
&НаКлиенте Процедура ФормируемПечатнуюФормуИзТабличногоМакета(Команда) // В макетах обработки у нас определен макет с именем // ТабличныйМакет и типом ТабличныйДокумент. // Вот как создаются такие макеты: // helpme1s.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 ТекстовыйДокумент ТабличныйДокумент