Печатная форма 1С Как известно – без бумажки ты.. не может обойтись ни один серьезный бизнес. И когда мы говорим, что в 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С. Каждый электронный документ 1С может быть распечатан на бумагу и делается это с помощью печатных форм 1С. Печатные формы состоят из именованных блоков, например Шапка, Строка и Подвал. Как сделать печатную форму – уже понятно. Как разбить ее на блоки – тоже. Но как происходит печать в 1С всего этого дела? А особенно – как вывести не просто текст макета, а содержимое электронного документа? Вот это мы и посмотрит прямо сейчас. Подготовка макета для печати в 1С Для начала придется начать с самого простого и заполнить макет для печати в 1С статическим текстом и линиями таблиц. Ведь кто-то должен сделать эту скучную работу? Размещаем статический текст для печати в 1С Для начала неплохо было бы разместить название нашей печатной формы. Выделим несколько ячеек в строке, и выберем пункт меню Таблица/Объединить. В результате несколько ячеек будут объединены в одну. Теперь в этой ячейке напишем название документа. Так как это заголовок, то видимо мы хотим сделать его жирным крупным шрифтом (см. картинку) и разместить посередине. Размещаем оформление макета для печати в 1С У нас есть именованная область Строка. В ней при печати в 1С будет выводиться каждая строка таблицы документа Товары. Вероятно мы хотели бы, чтобы таблица выглядела при печати в 1С тоже таблицей? Тогда нужно нарисовать для нее границы. Для этого выберем ячейки строки и на панели выберем кнопку Границы. Мы выбрали вариант Граница везде – она рисует границы ячеек сразу со всех сторон. Если необходимо ограничиться только одной стороной, то нужно выбрать соответствующую кнопку. Для того, чтобы линии, которыми рисуются границы были не такие, как стандартные, выделите ячейки и нажмите правой кнопкой мыши. В появившемся меню выберите пункт Свойства. В привычном окне свойств можно выбрать вид и цвет линий для отрисовки границ. Размещаем картинки и прочую мишуру для печати в 1С Многие спрашивают – а как разместить на печатной форме 1С что-то кроме текста? Например – картинку. А очень просто. Мало того, скажу сразу, что штрих-код (если Вам нужно его распечатать) тоже является картинкой. Поставим курсор на любую ячейку. Выберем меню Таблица/Рисунки. Это целое подменю, которое позволяет вставить на макет для печати в 1С не только картинку или рисованный объект – но и объекты извне 1С, зарегистрированные на компьютере с помощью COM класса (например, элемент управления выпадающий список). Для тех, кто интересуется созданием на макете сложных конструкций для печати в 1С, загляните также в выпадающее меню Таблица/Настройка печати. Здесь можно задать повторение области на каждой странице, колонтитулы и область печати. Как разместить содержимое электронного документа при печати в 1С Для размещения на макете при печати в 1С содержимого электронного документа – используется метод подстановки. Состоит он из двух частей. Часть первая. Необходимо на макете разместить параметры, в которые Вы будете подставлять значения при печати в 1С. Поставим курсор в ячейку. Впишем название параметра (одним словом, без пробелов и прочего мусора). Далее войдем в свойства этой ячейки (как — уже говорилось выше) и выберем Заполнение = Параметр. Часть вторая. Подстановка значений производится не в когда Вы программируете в конфигураторе, а в момент печати документа в 1С. Соответственно с помощью программирования нужно указать 1С что нужно подставить в этот параметр. Производится это следующим образом: Макет = ПолучитьМакет("НазваниеМакета"); облКакаято = Макет.ПолучитьОбласть("НазваниеОбласти"); облКакаято.Параметры.НазваниеПараметра = "То что я хочу подставить из базы"; Как Вы видите мы просто получаем по имени сначала сам макет, потом одну из его областей, а потом просто обращаемся к параметру по его названию. Естественно, значение может быть как строкой или цифрой, так и значением указанным в документе. Как производится печать макета в 1С После того, как макет готов, пора задуматься о программировании процесса печати в 1С. Печать в 1С обычно программируется несколькими процедурами, которые находятся в модуле объекта документа. Как открыть модуль объекта, можно посмотреть здесь. Процедура Печать() обычно имеет пометку Экспорт и управляет печатью документа в 1С с помощью параметра ИмяМакета, в котором передается что хотелось бы распечатать. Для каждого варианта макета делается процедура ПечатьИмяМакета(), в которой прописана печать конкретного макета. Вот ее мы сейчас и посмотрим. Программирование печати в 1С состоит из трех пунктов. Пункт 1. Запрос данных для печати в 1С из базы Прежде чем печатать электронный документ в 1С, нам нужно запросить его данные из базы данных. Очевидно, чтобы распечатать документ, пользователь обычно «входит» в него (открывает его форму) и нажимает кнопку Печать. Поэтому в процедуре печати можно было бы просто обращаться к реквизитам документа (что это – обсуждали здесь) по имени. Однако это считается некрасиво, не универсально и т.п. Например, вдруг будет использована обработка массовой печати документов (часто ли такой пользуются?). Поэтому принято в процедуре печати делать запрос к базе данных, который запрашивает данные документа. Например, так: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ Дата, Номер, Организация ИЗ Документ.ИмяДокумента ГДЕ Ссылка = &ДокументДляПечати"; Запрос.УстановитьПараметр("ДокументДляПечати", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Пункт 2. Заполнение макета для печати в 1С Печать в 1С производится в табличный документ. Это специальный объект 1С, который позволяет выводить таблицы, наподобии Excel, на экран и на печать. Печатается, естественно макет, вернее его области поочередно. Соответственно нам нужно сначала получить табличный документ, потом макет. Поочередно выводим области на печать, заполняя параметры макета. ТабДок = Новый ТабличныйДокумент; Макет = ПолучитьМакет("ИмяМакета"); //или ПолучитьОбщийМакет("") облШапка = Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(облШапка); облСтрока = Макет.ПолучитьОбласть("Строка"); Пока ВыборкаСтрокДокумента.Следующий() Цикл облСтрока.Параметры.Товар = ВыборкаСтрокДокумента.Товар; ТабДок.Вывести(облСтрока); КонецЦикла; облШапка = Макет.ПолучитьОбласть("Подвал"); ТабДок.Вывести(облПодвал); Пункт 2. Вывод документа на печать в 1С Последним пунктом является вывод полученного документа на экран или принтер. В типовых конфигурациях для этого используется типовая процедура (в каждой может быть своя), например, УниверсальныеМеханизмы.НапечататьДокумент(). В других случаях можно просто использовать типовые функции объекта ТабличныйДокумент: ТабДок.Показать() или ТабДок.Напечатать().