Вывод на печать табличного документа в 1С 8.3. Простой пример.
В массе своей, в прикладных задачах нужно вывести на печать какие-либо данные оформленные нужным образом (например, счет, торговую накладную, акт сверки и т.п.). Для вывода на печать в 1С 8.3. можно использовать табличные документы. В предыдущей статье я показал, как создать макет табличного документа и как правильно его оформить. Нам осталось научиться заполнять его данными и выводить на просмотр для последующей печати. Материал по выводу табличного документа на печать, я решил разбить на две части. В первой части мы разберем простой пример (я бы назвал его учебным), а во втором случае реализуем пример приближенный к реальному. Эта статья — первая часть, в ней мы реализуем простой пример: будем выводить табличный документ на печать, используя команду управляемой формы. Этот вариант имеет следующий недостаток: нельзя вывести печатную форму из списка документов, можно это сделать, только открыв форму документа. Для того, чтобы можно было вывести печатную форму из списка документов, необходимо создать команду документа. Этот вариант мы рассмотрим в следующей статье.
И так, сам макет документа мы уже создали, как это сделано, вы можете узнать в соответствующей статье.
Сейчас мы получим ранее созданный макет, заполним табличный документ 1С по этому макету, и нам останется вывести табличный документе 1С на просмотр для последующей печати.
Мы сделаем упрощенный (учебный) вариант: формирование всего нашего табличного документа будет осуществляться на модуле управляемой формы. Для этого мы на форме документа создадим команду «ПечатьДокумента», которую разместим в командной панели формы.
Для команды ПечатьДокумента создадим два обработчика в клиентском и серверном контексте.
Серверный обработчик переименуем в функцию, в нем мы создадим программно табличный документ 1С, который она и будет возвращать.
&НаСервере функция ПечатьДокументаНаСервере() ТабДок = Новый ТабличныйДокумент; Возврат ТабДок; КонецФункции &НаКлиенте Процедура ПечатьДокумента(Команда) ТабДок = ПечатьДокументаНаСервере(); КонецПроцедуры
Теперь нужно получить макет, созданный в предыдущей статье, для этого мы будем использовать метод менеджера документа ПолучитьМакет.
ТабДок = Новый ТабличныйДокумент; Макет = Документы.ПриходТовара.ПолучитьМакет("Макет"); Возврат ТабДок;
Имейте в виду, что метод ПолучитьМакет напрямую доступен только или в модуле документа, или в модуле менеджера документа. Еще этот метод можно применить, используя менеджер конкретного объекта, как я сделал выше. Непосредственно на форме его использовать нельзя!
Алгоритм заполнения табличного документа будет следующим: мы будем получать нужную область макета, если необходимо заполнять эту область какими-нибудь данными, а потом выводить полученную область в табличный документ.
Напомню, что макет у нас имеет четыре области: Шапка, ШапкаТаблицы, СтрокаТаблицы, Подвал. Области Шапка, ШапкаТаблицы и Подвал будут выведены в табличный документ всего один раз, а область СтрокаТаблицы будет выведена столько раз, сколько строк в табличной части обрабатываемого документа.
Весь код ниже я выполняю между кодом получения макета и возвратом табличного документа.
Получим самую первую область макета, при помощи метода ПолучитьОбласть, где в качестве параметра следует указать название получаемой области.
Шапка = Макет.ПолучитьОбласть("Шапка");
В этой области мы используем шаблон, в котором имеются два параметра: НомерДок и ДатаДок передадим номер документа и дату документа в соответствующие параметры области, используя свойство Параметры нужной нам области. Данное свойство содержит коллекцию параметров табличного документа, и мы можем обращаться к нужному параметру через оператор «.».
Шапка.Параметры.НомерДок = Объект.Номер; Шапка.Параметры.ДатаДок = Формат(Объект.Дата,"ДФ=dd.MM.yyyy");
Мы закончили с областью Шапка, и нам нужно вывести её в табличный документ, делается это при помощи метода Вывести табличного документа, где в качестве параметра указывается выводимая область.
Точно также получим область, которая соответствует шапке таблицы, заполнять его не нужно, а мы просто выведем его сразу же в табличный документ.
ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ТабДок.Вывести(ШапкаТаблицы);
Следующим шагом выведем область СтрокаТаблицы, причем эта область должна быть выведена столько раз, сколько строк в табличной части документа. Поэтому мы сначала получим эту область, а потом циклом будем обходить табличную часть, заполнять параметры области и выводить область в табличный документ.
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы"); Для Каждого стрТовар из Объект.СписокТоваров Цикл ОбластьСтрокаТаблицы.Параметры.Заполнить(стрТовар); ТабДок.Вывести(ОбластьСтрокаТаблицы); КонецЦикла;
В коде выше, мы обошли табличную часть документа, обратившись к ней через основной реквизит Объект управляемой формы (основной формы документа).
Обратите внимание, я использовал метод Заполнить, потому что названия параметров макета совпадают с названиями реквизитов табличной части документа.
Нам осталось получить область Подвал и вывести её в табличный документ.
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ТабДок.Вывести(ОбластьПодвал);
На этом мы закончим работать с функцией на сервере, весь ее код будет выглядеть следующим образом.
&НаСервере функция ПечатьДокументаНаСервере() ТабДок = Новый ТабличныйДокумент; Макет = Документы.ПриходТовара.ПолучитьМакет("Макет"); Шапка = Макет.ПолучитьОбласть("Шапка"); Шапка.Параметры.НомерДок = Объект.Номер; Шапка.Параметры.ДатаДок = Формат(Объект.Дата,"ДФ=dd.MM.yyyy"); ТабДок.Вывести(Шапка); ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ТабДок.Вывести(ШапкаТаблицы); ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы"); Для Каждого стрТовар из Объект.СписокТоваров Цикл ОбластьСтрокаТаблицы.Параметры.Заполнить(стрТовар); ТабДок.Вывести(ОбластьСтрокаТаблицы); КонецЦикла; ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ТабДок.Вывести(ОбластьПодвал); Возврат ТабДок; КонецФункции
Нам осталось доделать клиентскую процедуру ПечатьДокумента: мы будем выводить на просмотр полученный табличный документ при помощи метода табличного документа Показать().
&НаКлиенте Процедура ПечатьДокумента(Команда) ТабДок = ПечатьДокументаНаСервере(); ТабДок.Показать("Поступление товара"); КонецПроцедуры
В качестве первого параметра метода Показать, я указал название, которое выйдет на форме табличного документа.
Проверим, как работает наш код.
Напомню, что я рассмотрел самый простой (учебный) пример вывода печатной формы, следующие примеры будут более приближенные к реальным.
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu