Куперс

Бухучет и анализ

Печатная форма в 1С

Изменение существующих или создание новых печатных форм – задача довольно распространённая. Как правило, в таких случаях создаётся внешняя печатная форма и подключается через стандартную подсистему дополнительных отчётов и обработок. Однако, иногда возникают задачи, в которых печатная форма должна формироваться с учётом данных, вводимых пользователями непосредственно перед печатью. То есть, сначала должна открыться форма, в которую пользователь вводит данные, и только потом выполняется команда «Печать».

Допустим, нам нужно создать печатную форму некой справки, часть данных которой вводятся в форме перед печатью. Кнопка «Печать» должна располагаться на форме.

Создаём внешнюю обработку. В модуле обработки, в функции СведенияОВнешнейОбработке(), устанавливаем параметры регистрации внешней обработки.

Обычно для внешних печатных форм параметру «Вид» присваивается значение «Печатная форма», но так как у нас сначала должна открываться форма, то устанавливаем значение «Дополнительная обработка».

В этой же функции СведенияОВнешнейОбработке() при обращении к процедуре ДобавитьКоманду() для внешних печатных форм в параметр «Использование» обыкновенно передаётся значение «ВызовСерверногоМетода» или «ВызовКлиентскогоМетода». Здесь же мы укажем значение «ОткрытиеФормы».

В итоге функция будет выглядеть так:

Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить(«Вид», «ДополнительнаяОбработка»); ПараметрыРегистрации.Вставить(«Наименование», «Справка»); ПараметрыРегистрации.Вставить(«Версия», «2.0»); ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина); ПараметрыРегистрации.Вставить(«Информация», «Справка»); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, «Справка», «ПФ_MXL_Справка», «ОткрытиеФормы», Истина,»»); ПараметрыРегистрации.Вставить(«Команды», ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции

Создаём макет печатной формы.

Далее создаём основную форму обработки и необходимые реквизиты формы. Создаём и размещаем на форме команду «Печать». Формировать табличный документ для печати будем в обработчике этой команды. В зависимости от того, какие данные требуются для печатной формы, организовываем заполнение табличного документа либо на клиенте, либо на сервере. В данном примере заполняем на сервере и затем возвращаем табличный документ на клиент.

Итак, в модуле формы:

&НаКлиенте Процедура Печать(Команда) Экспорт ТабДок = СформироватьТабДокНаСервере(); КонецПроцедуры &НаСервере Функция СформироватьТабДокНаСервере() ТабличныйДокумент = Новый ТабличныйДокумент; //Получим макет ПечатнаяФормаОбъект = РеквизитФормыВЗначение(«Объект»); Макет = ПечатнаяФормаОбъект.ПолучитьМакет(«ПФ_MXL_Справка»); // Заполняем табличный документ: //Область Шапка ОбластьШапка = Макет.ПолучитьОбласть(«Шапка»); ОбластьШапка.Параметры.ДатаВыдачи = //Заполняем параметры ТабличныйДокумент.Вывести(ОбластьШапка); //Область ОсновнаяЧасть ОбластьОсновнаяЧасть = Макет.ПолучитьОбласть(«ОсновнаяЧасть»); ОбластьОсновнаяЧасть.Параметры.ТекстСправки = //Заполняем параметры ТабличныйДокумент.Вывести(ОбластьОсновнаяЧасть); Возврат ТабличныйДокумент; КонецФункции

Табличный документ сформирован, осталось вывести его для печати в предназначенную для этого общую форму «Печать документов». Сделаем это с помощью стандартных механизмов БСП.

Дополним обработчик команды «Печать»:

&НаКлиенте Процедура Печать(Команда) Экспорт ТабДок = СформироватьНаСервере(); //Создаём новую коллекцию печатных форм КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(«Справка»); //Добавляем в коллекцию сформированный табличный документ КоллекцияПечатныхФорм.ТабличныйДокумент = ТабДок; //Устанавливаем параметры печати (при необходимости) КоллекцияПечатныхФорм.Экземпляров = 1; КоллекцияПечатныхФорм.СинонимМакета = «Справка»; //Так будет выглядеть имя файла при сохранении в файл из формы «Печать документов» //Вывод через стандартную процедуру БСП УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, ЭтаФорма); КонецПроцедуры

Теперь в результате выполнения команды «Печать» из формы нашей внешней обработки, табличный документ будет выводиться в форму «Печать документов», которая предоставляет удобный интерфейс для печати:

(2) borisvas, Отчет СКД выводится в тот же Табличный документ, делай так:
1. Создай Форму вывода отчета СКД(конструтор ее сам создаст)
2. Для кнопки сформировать напиши свою процедуру вывода отчета:
Код 1C v 8.х Процедура ВывестиОтчет() Экспорт
// Выведем в СКД произвольную шапку отчета
Таб = ЭлементыФормы.Результат;
Таб.Очистить();
// Получим макет с нужной шапкой и выведем его
Макет = ПолучитьМакет(«Макет»);
Область = Макет.ПолучитьОбласть(«Заголовок»);
Область.Параметры.Раз = «Раз»;
Область.Параметры.Два = «Два»;
Таб.Вывести(Область);
// Формируем отчет СКД
ДанныеРасшифровки = Неопределено;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура(«Данные», ТЗ), ДанныеРасшифровки);
// Установим Альбомную ориентацию страницы
ДокументРезультат = ЭлементыФормы.Результат;
ДокументРезультат .ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
// Выводим данные отчета
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент( ДокументРезультат);
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> Неопределено Цикл
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
Хотя *09 тебе можно и проще
Код 1C v 8.х МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных,
Настройки,ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,,ДанныеРасшифровки);
ЭлементыФормы.Результат.Очистить();
ДокументРезультат = ЭлементыФормы.Результат;
ДокументРезультат .ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

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

Процесс печати электронного документа 1С называется печатная форма 1С.

У каждого документа может быть несколько печатных форм 1С. Например, документ Реализация товаров и услуг (т.е. продажа) печатается в печатные формы 1С: ТОРГ-12, Накладная, Товарно-транспортная накладная, Акт оказанных услуг и так далее.

Суть печатной формы 1С – это шаблон (типа документа Excel), в котором заданы переменные. При процессе печати вместо переменных подставляется текст из электронного документа. Шаблон обычно хранится в конфигурации.

Проблема изменения типовой печатной формы 1С в том, что обычно типовую конфигурацию не желательно изменять, иначе будет сложнее обновляться. Поэтому появились начали изобретать велосипед различные методики использования внешних печатных форм 1С.

Внешняя печатная форма 1С – это шаблон печати, который хранится как то отдельно от самой конфигурации.

Однако это все теория. А как создать самому печатную форму? А еще лучше – как внести изменения в существующую?

Кому интересен ответ – читайте дальше.

Как печатается документ 1С

Чтобы распечатать любой документ 1С (который может быть распечатан) – нужно в документе нажать кнопку Печать. 1С предложит выбрать печатную форму 1С для этого документа из списка.

Слева от кнопки Печать обычно находится кнопка быстрого доступа к последней выбранной печатной форме 1С.

Результат печати выглядит вот так. Чтобы распечатать его на принтер, нужно поставить курсор в печатную форму 1С, нажать Ctrl+P или кнопку с принтером на панели кнопок или в меню Файл/Печать.

Настройки печати (поля, ориентация листа и т.п.) расположены в меню Файл/Параметры страницы. Также в настройках пользователя можно сделать, чтобы печать производилась сразу на принтер.

Откуда берется эта печатная форма?

Где находится печатная форма 1С

Зайдем в конфигуратор. Найдем в окне конфигурации нужный документ. Раскроем его ветку Макеты. Именно они и превращаются в печатную форму 1С при печати.

Однако маловато будет – нам предлагали выбрать гораздо больше вариантов при печати. Дело в том, что множество макетов печатных форм 1С спрятано в другом месте.

Вернемся вверх окна конфигурации 1С. Откроем ветку Общие, а потом ветку Общие макеты. Именно здесь и находится большинство макетов. Особенно это касается регламентированных государством печатных форм 1С – ТОРГ 12, Счет фактура и т.п.

Кстати не сложно заметить, что макетов ТОРГ12 или СчетФактуры Вы увидите несколько. Почему? Это легко объяснить. Законы и требования периодически меняются. Но мы не можем просто изменить один и тот же макет – а если придется распечатать документ от даты, которая находится ранее даты изменения. Поэтому делается несколько макетов и в зависимости от даты документа используется правильный.

Но и это не все! Есть же еще внешние макеты. Где же хранятся они?

Вернемся в режим 1С Предприятие. Через меню пользователя с административными правами Операции/Справочники, выберем справочник Внешние обработки.

Строки этого справочника, которые имеют вид Печатная форма, добавляют варианты печати для документа, указанного в таблице Принадлежность печатной формы (на картинке это Реализация товаров услуг).

Для того, чтобы это заработало – Вы должны сделать внешнюю обработку, которая имеет в своем модуле объекта процедуру Печать() с пометкой Экспорт, которая организует процесс печати.
Но мы забегаем вперед. Давайте сначала посмотрим как организован макет печатной формы 1С.

Макет печатной формы 1С

Макет печатной формы 1С выглядит следующим образом.

Как Вы видите – он поделен на блоки. Блоки могут быть горизонтальные (имя слева) и вертикальные (имя вверху).

Сам макет в том виде какой он есть – не печатается. Печатаются отдельные блоки. Программист в процедуре обработки печати указывает порядок блоков и количество повторений каждого блока. В результате складывается печатная форма.

Для того, чтобы назначить область – выделите несколько строк (или несколько колонок) и выберите в меню Таблица/Имена/Назначить имя. Чтобы убрать – там же есть команда Убрать имя.

Название нужно для того, чтобы к области можно было обращаться из программного кода. Название можно назначить не только строкам или колонкам, но и просто нескольким ячейкам. Для этого выделите ячейки и выберите то же меню.

Однако по умолчанию названия произвольных ячеек не отображаются. Чтобы увидеть их – выберите пункт меню Таблица/Имена/Отображать именованные ячейки.

Итоги

Итак, сегодня мы узнали, что печатная форма 1С формируется с помощью макета. Макет состоит из блоков – по умному – именуемых областей.

Типовые (обычно используемые) блоки для печатной формы:

  • Шапка – выводится заголовок документа
  • Строка – выводится одна строка таблицы, этот блок повторяют столько раз, сколько нужно распечатать строк
  • Подвал – выводится окончание документа.

Теперь нам нужно разобраться с тем,

Задача.
Очень часто при разработке отчетов или печатных форм на лету (в зависимости от условия) требуется программно произвести оформление ячейки или области табличного документа, будь то поменять цвет фона или текста, установить жирный шрифт и т.п. Например, есть горизонтальная область с именем «СтрокаТаб», состоящая из одной строки. Стоит задача поменять фон на красный только в первой ячейки из данной области.
Решение.
Я предлагаю решение самое удобное на мой взгляд. Оформлять область будем после ее вывода в табличный документ:

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; // Получаем табличный документ из формы
ТабДок.Очистить(); // Очищаем табличный документ
Макет = ПолучитьМакет(«Макет»); // Получаем макет с именем «Макет» из текущего объекта
ОбластьСтрокаТаб = Макет.ПолучитьОбласть(«СтрокаТаб»); // Получаем область из макета
ОбластьСтрокаТаб.Параметры.НашПараметр = 1; // Устанавливаем значение 1 параметру «НашПараметр»
ОбластьОформления = ТабДок.Вывести(ОбластьСтрокаТаб);
// Вот собственно и само оформление ячейки
ТабДок.Область(ОбластьОформления.Верх, ОбластьОформления.Лево, ОбластьОформления.Низ, ОбластьОформления.Лево).ЦветФона = WebЦвета.Красный;Единственное на что нужно обратить внимание — это указание правильного адреса оформляемой области. Первый параметр метода область() — это номер первой строки, второй параметр — номер первой колонки, третий параметр — это номер последней строки, четвертый параметр — номер последней колонки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх