Печатные формы 1С 8.3
Меню

Печатные формы 1С 8.3

Содержание статьи
  1. Создание макета внешней печатной формы
  2. Вывод данных в печатную форму
  3. Конструктор печати 1С

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

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

Создание макета внешней печатной формы

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

Создание печатной формы документа начинается с открытия режима конфигуратора базы. Желательно открывать ту базу, в которую требуется внести изменения, чтобы платформа позволила нам открывать конструктор запроса. Создайте новую внешнюю обработку с помощью основного меню «Файл» - «Новый…» и заполните имя и синоним. В среде 1С принято указывать «говорящие» имена, чтобы другие программисты могли комфортно работать с чужим кодом.

Создание макета внешней печатной формы
Создание макета внешней печатной формы

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

Добавление макета
Добавление макета

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

  1. Верхняя часть («Шапка»). Сюда войдет идентификация документа в системе 1С – номер и дата, основные данные об операции – организация, контрагент, менеджер, заголовок таблицы номенклатуры. Выводиться будет 1 раз;
  2. Информация по номенклатуре («ДанныеСтрок»). Данные о тех товарах, которые продаются – наименование, количество, цена и сумма. Выводиться по 1 разу на каждую строчку табличной части «Товары»;
  3. Итоговые данные («ИтогиСтрок»). В печатной форме фигурирует 1 раз и отражает итоговые суммы количества и суммы;
  4. Подписи («Подвал»). Область для согласования бумажной версии документа. Необходимо вывести на печать единожды.

В окне, похожем на Excel, выделяем 10 строк и выбираем в основном меню «Таблица» - «Имена» - «Назначить имя…». В открывшемся окне вводим название области и подтверждаем. Далее в этой области размещаем необходимые для вывода поля, используя возможности объединения и выбора шрифта и размера надписей.

Excel-подобный интерфейс
Excel-подобный интерфейс

Теперь надо настроить переменные, куда будут вставлены данные. Для этого на ячейке, где уже есть надпись, нажимаем правой кнопкой мыши и открываем свойства. Найдите пункт «Заполнение» и выберите там значение «Параметр», после чего убедитесь, что надпись в ячейке теперь заключена в угловые скобки. Если вы выберите «Шаблон», то это даст вам возможность указать переменные внутри строки в ячейке с помощью квадратных скобок.

Указываем переменные внутри строки в ячейке с помощью квадратных скобок
Указываем переменные внутри строки в ячейке с помощью квадратных скобок

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

Макет готов, переходим непосредственно к коду
Макет готов, переходим непосредственно к коду
Доработаем 1С без вмешательства в конфигурацию. Гарантия на услуги – до 12 месяцев!

Вывод данных в печатную форму

В первую очередь необходимо добавить функцию «СведенияОВнешнейОбработке()». Именно она подсказывает платформе, что в файле печатная форма и ее нужно крепить к конкретному документу. Текст функции практически не меняется, кроме названия печатных форм и документа, к которому ее крепят. Если забыть поменять в этой функции идентификатор, то 1С не сможет сформировать печатную форму.


Функция СведенияОВнешнейОбработке() Экспорт
//сообщим платформе, что перед ней печатная форма
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.3.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
//сообщаем, что печатная форма предназначается для определенного документа
МасНазначений = Новый Массив;
МасНазначений.Добавить("Документ.РеализацияТоваровУслуг");
ПараметрыРегистрации.Назначение = МасНазначений;
//определяем наименование, версию и режим безопасности
ПараметрыРегистрации.Наименование = "WA Печать заказа";
ПараметрыРегистрации.Версия = "1.00";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
// добавляем команду
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'WA Печать заказа'");
НоваяКоманда.Идентификатор = "Макет";
НоваяКоманда.Использование =ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Макет", "WA Печать заказа", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));
КонецПроцедуры

Теперь необходимо получить данные, которые будут выводиться в заранее установленные нами переменные. С помощью выполнения запроса мы получаем 2 выборки – для верхней части нашей печатной формы и для вывода строк. Создаем новый табличный документ для показа пользователю и устанавливаем стандартные параметры. Поочередно получаем каждую область, заполняем в ней переменные и выводим в табличный документ, который возвращаем пользователю:


Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)
//получать данные из БД лучше в привилегированном режиме
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |           	РеализацияТоваровУслуг.Номер КАК Номер,
               |           	РеализацияТоваровУслуг.Дата КАК Дата,
               |           	РеализацияТоваровУслуг.Контрагент КАК Контрагент,
               |           	РеализацияТоваровУслуг.Менеджер КАК Менеджер,
               |           	РеализацияТоваровУслуг.Организация КАК Организация
               |ИЗ
               |           	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
               |ГДЕ
               |           	РеализацияТоваровУслуг.Ссылка = &СсылкаНаДокумент
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               |           	РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
               |           	РеализацияТоваровУслугТовары.Количество КАК Количество,
               |           	РеализацияТоваровУслугТовары.Цена КАК Цена,
               |           	РеализацияТоваровУслугТовары.Сумма КАК Сумма,
               |           	РеализацияТоваровУслугТовары.НомерСтроки КАК НомерСтроки
               |ИЗ
               |           	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
               |ГДЕ
               |           	РеализацияТоваровУслугТовары.Ссылка = &СсылкаНаДокумент";
Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);         	
ДанныеДляПечати = Запрос.ВыполнитьПакет();
ДанныеДляПечатиПоШапке = ДанныеДляПечати[0].Выбрать();
ДанныеДляПечатиПоШапке.Следующий();
ДанныеДляПечатиПоТЧ = ДанныеДляПечати[1].Выбрать();
//создаем новый документ, задаем его параметры и выбираем созданный нами макет
Табдок = новый ТабличныйДокумент;
Табдок.ИмяПараметровПечати = "ПараметрыПечати";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;
МакетОбработки = ПолучитьМакет("Макет");
//выводим шапку - область макета и заполняем все параметры
ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Дата = Формат(ДанныеДляПечатиПоШапке.Дата,"ДФ=dd.MM.yyyy");
ОбластьШапка.Параметры.Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ДанныеДляПечатиПоШапке.Номер);
ОбластьШапка.Параметры.Организация = ДанныеДляПечатиПоШапке.Организация;
ОбластьШапка.Параметры.Контрагент = ДанныеДляПечатиПоШапке.Контрагент;
ОбластьШапка.Параметры.Менеджер = ДанныеДляПечатиПоШапке.Менеджер;
Табдок.Вывести(ОбластьШапка);
//выводим строки с учетом того, что их может быть несколько
ОбластьСтроки  = МакетОбработки.ПолучитьОбласть("ДанныеСтрок");
ИтогКоличество = 0;
ИтогСумма = 0;
Сообщить(ДанныеДляПечатиПоТЧ.количество());
Сообщить(типзнч(ДанныеДляПечатиПоТЧ));
Пока ДанныеДляПечатиПоТЧ.следующий() цикл
            	ОбластьСтроки.Параметры.Номенклатура = ДанныеДляПечатиПоТЧ.Номенклатура;
            	ОбластьСтроки.Параметры.Количество = ДанныеДляПечатиПоТЧ.Количество;
            	ИтогКоличество = ИтогКоличество + ДанныеДляПечатиПоТЧ.Количество;
            	ОбластьСтроки.Параметры.Цена = ДанныеДляПечатиПоТЧ.Цена;
            	ОбластьСтроки.Параметры.Сумма = ДанныеДляПечатиПоТЧ.Сумма;
            	ИтогСумма = ИтогСумма + ДанныеДляПечатиПоТЧ.Сумма;
            	ОбластьСтроки.Параметры.Номер = ДанныеДляПечатиПоТЧ.НомерСтроки;
            	Табдок.Вывести(ОбластьСтроки);
КонецЦикла;
//выводим итоги строк
ОбластьИтогСтр  = МакетОбработки.ПолучитьОбласть("ИтогиСтрок");
ОбластьИтогСтр.Параметры.КоличествоИтог = ИтогКоличество;
ОбластьИтогСтр.Параметры.СуммаИтог = ИтогСумма;
Табдок.Вывести(ОбластьИтогСтр);
//выводим подвал
ОбластьПодвал = МакетОбработки.ПолучитьОбласть("Подвал");
Табдок.Вывести(ОбластьПодвал);
Возврат табдок;
КонецФункции

После завершения сохраняем внешнюю обработку и запускаем 1С в режиме предприятия. Чтобы подключить созданную печатную форму, зайдите в раздел «Администрирование» - «Печатные формы, отчеты и обработки» - «Дополнительные отчеты и обработки». Нажмите кнопку «Создать» и в диалоге выберите сохраненный файл формата *.EPF. Если все было сделано правильно, останется лишь сохранить, и 1С самостоятельно разместит новую печатную форму.

1С самостоятельно разместит новую печатную форму
1С самостоятельно разместит новую печатную форму

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

Данный вариант создания обработки может подойти и для нетиповой конфигурации
Данный вариант создания обработки может подойти и для нетиповой конфигурации

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

Базовая настройка 1С, форм отчетов/документов, обменов данными, расширений, торг. оборудования и пр.

Конструктор печати 1С

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

Конструктор печати 1С
Конструктор печати 1С

Конструктор печати в версии 8.3 предполагает, что печатная форма состоит из нескольких частей:

  • Шапка;
  • Табличные части;
  • Подвал.

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

Настройка полей в разделе
Настройка полей в разделе

Выбор группы для команды
Выбор группы для команды

По нажатию «ОК» 1С сформирует команду, макет и процедуру в модуле менеджера и откроет их для разработчика. Затем можно отредактировать их, если необходим более сложный алгоритм – добавить расчет и вывод итогов или данных, не содержащихся в документе. Алгоритм изменения аналогичен рассмотренному выше:

  1. Создать область в макете, если использовать уже созданные области недопустимо;
  2. Добавить надписи и переменные. Перечень добавляемых объектов зависит от потребностей;
  3. В процедуре получить область по имени;
  4. Рассчитать или прочитать из документа данные;
  5. Заполнить переменные информацией.

Данный вариант формирования позволяет быстро создать печатную форму, если пользователи не предъявляют серьезных требований к внешнему виду. Платформа самостоятельно пропишет все необходимые связи и добавит команду печати на форму документа. А ручное редактирование печатной формы позволит добавить недостающие данные или разместить существующие по-другому.

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

Рассказать друзьям
Предыдущая статья статья
Авизо в 1С 8.3
Следующая статья статья
1С:Управление торговлей 8 версия 11.5: обзор возможностей
Комментарии