Рассмотрим настройку и создание новых печатных форм в системе 1С 8.3.
Создание внешних печатных форм для управляемого приложения рассмотрено в отдельной статье.
Самый простой способ создания печатной формы — с помощью встроенного конструктора печатных форм. Рассмотрим пошаговую инструкцию по созданию и настройке печатной формы на примере создания печатной формы «Счет покупателю».
Создание и настройка печатной формы 1С 8.3
Первый шаг — необходимо зайти в палитру свойств нужного нам документа и выбрать Действия — Конструкторы — Конструктор печати:
Первый вопрос системы — выбор варианта работы конструктора. Настройки аналогичны, если у Вас конфигурация работает в управляемом режиме — выберите его, если нет — выберите обычные формы. Мы рассмотрим создание на обычной форме.
Следующий шаг — выбор названия процедуры для печати. Назовём её «Печать счета».
- Далее необходимо выбрать реквизиты, которые нужно указать в шапке печатной формы в том порядке, который нам необходим:
- После выбора реквизитов шапки печатной формы 1С 8.2 следует сделать выбор данных для табличной части:
- Когда и этот шаг сделан, нужно выбрать реквизиты подвала аналогично реквизитам в шапке.
- На последней странице можно оставить всё по умолчанию и нажать ОК:
- Что получаем в итоге?
- Правильно оформленный макет печатной формы:
- Процедура, полностью формирующая печатную форму документа:
- Получите 267 видеоуроков по 1С бесплатно:
Процедура ПечатьСчета() Экспорт //{{_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ(ПечатьСчета) // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! ТабДок = Новый ТабличныйДокумент; Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет(«Печать»); // Заголовок Область = Макет.ПолучитьОбласть(«Заголовок»); ТабДок.Вывести(Область); // Шапка Шапка = Макет.ПолучитьОбласть(«Шапка»); Шапка.Параметры.Заполнить(ЭтотОбъект); ТабДок.Вывести(Шапка); // Товары Область = Макет.ПолучитьОбласть(«ТоварыШапка»); ТабДок.Вывести(Область); ОбластьТовары = Макет.ПолучитьОбласть(«Товары»); Для Каждого ТекСтрокаТовары Из Товары Цикл ОбластьТовары.Параметры.Заполнить(ТекСтрокаТовары); ТабДок.Вывести(ОбластьТовары); КонецЦикла; // Подвал Подвал = Макет.ПолучитьОбласть(«Подвал»); Подвал.Параметры.Заполнить(ЭтотОбъект); ТабДок.Вывести(Подвал); ТабДок.ОтображатьСетку = Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Ложь; ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.Показать(); //}}_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ КонецПроцедуры
Которые можно настроить в 1С 8.2, как нужно нам.
Вывод вызова созданной печатной формы 1С
Для вызова созданной печатной формы нужно просто разместить кнопку на форму документа. Это сделать очень просто. Для начала создадим кнопку на форме, назовем её «Печать счета»:
- Нажимаем на кнопку «лупы» у действия — мы попадем в модуль формы, где вписываем вызов процедуры печати вновь созданного счета:
- Где «ПечатьСчета» — имя нашей процедуры.
- Вот и всё!
- Созданная и настроенная печатная форма выглядит так:
- Другие статьи по 1С:
- В дополнение — наш видеоурок по созданию внешних печатных форм и подключению их на примере конфигурации 1С Бухгалтерии:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Остались вопросы?
СПРОСИТЕ в х!
Источник: https://programmist1s.ru/sozdanie-i-nastroyka-pechatnyih-form-v-1s/
Создание внешних печатных форм 1С — обычное приложение
Рассмотрим написание простейшей печатной формы в 1с 8.1 — 8.2 на примере конфигурации Бухгалтерия предприятия 2.0. Допустим требуется написать внешнюю печатную форму к документу Реализация товаров и услуг: вывести основные данные документа, а так же из табличной части Товары: номенклатуру, цену, количество и сумму.
Скачать получившийся пример можно по ссылке.
Создание внешней обработки
В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя, создаем обязательный для внешней печатной формы реквизит СсылкаНаОбъект с типом ДокументСсылка.РеализацияТоваровУслуг.
Создание макета печатной формы
Добавляем новый макет, тип макета оставляем Табличный документ. На макете создаем три области: Шапка, Данные и Подвал. Сделать это можно выделив нужное количество строк и нажав меню Таблица->Имена->Назначить имя (Ctrl+Shift+N).
После этого начинаем располагать в областях текст и параметры. В шапку выведем название печатной формы, номер документа и организацию, а также нарисуем границы шапки таблицы и напишем имена колонок. При создании параметра в свойствах ячейки, на закладке макет следует установить свойство Заполнение в значение Параметр.
В области Данные создадим параметры для вывода строк табличной части(Номенклатура, цена и т.д.), а в области Подвал для итогов по количеству и сумме.
Программирование
Зайдем в модуль объекта печатной формы Действия->Открыть модуль объекта.
Создадим там обязательную для печатных форм экспортную функцию Печать().
Функция Печать() Экспорт КонецФункции
В функции создадим переменную для табличного документа, в который будет выводится печатная форма, получим макет и области макета.
ТабДок = новый ТабличныйДокумент; Макет = ПолучитьМакет(«Макет»); ОбластьШапки = Макет.ПолучитьОбласть(«Шапка»); ОбластьДанные = Макет.ПолучитьОбласть(«Данные»); ОбластьПодвал = Макет.ПолучитьОбласть(«Подвал»);
Заполним параметры шапки и выведем ее в табличный документ.
ОбластьШапки.Параметры.ТекстЗаголовка = «Печатная форма «+СсылкаНаОбъект.Номер;
ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация;
ТабДок.Вывести(ОбластьШапки);
Для того чтобы получить строки табличной части Товары используем запрос.
Запрос = новый запрос; Запрос.УстановитьПараметр(«Ссылка»,СсылкаНаОбъект); Запрос.Текст = «ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.Сумма, | РеализацияТоваровУслугТовары.Цена, | РеализацияТоваровУслугТовары.Количество |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &Ссылка»;
В параметр запроса передаем реквизит СсылкаНаОбъект, что бы указать в условии ГДЕ, что нам нужны данные только того документа из которого выводим печатную форму. Чтобы получить выборку запроса, сначала выполняем его, а затем выбираем строки.
Выборка = Запрос.Выполнить().Выбрать();
Далее в цикле заполняем параметры области Данные для каждой строки выборки документа и выводим их в табличный документ. Также в цикле считаем итоговые значения количества и суммы.
Заполнять каждый параметр в отдельности мы не будем, а используем процедуру ЗаполнитьЗначенияСвойств((, ) из глобального контекста, она копирует значения свойств в свойства . Сопоставление производится по именам свойств.
Подробнее об этом можно прочитать в синтаксис-помощнике 1С Предприятия 8.
ИтогоСумма = 0; ИтогоКоличество = 0; Пока Выборка.Следующий() Цикл ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Выборка); ИтогоСумма = ИтогоСумма + Выборка.Сумма; ИтогоКоличество = ИтогоКоличество + Выборка.Количество; ТабДок.Вывести(ОбластьДанные); КонецЦикла;
Заполним и выведем область Подвал.
ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество;
ОбластьПодвал.Параметры.ИтогоСумма = ИтогоСумма;
ТабДок.Вывести(ОбластьПодвал);
Возвращаем заполненный табличный документ из функции Печать().
возврат ТабДок;
Если вы используете одну из типовых конфигураций, то после возврата табличного документа 1С само выведет на экран печатную форму. Так же для вывода можно использовать метод табличного документа Показать().
5. Подключение печатной формы к документу
В типовых конфигурациях 1С 8 для регистрации внешних печатных форм существует справочник ВнешниеОбработки. Для подключения следует в режиме предприятия зайти в меню Сервис->Дополнительные отчеты и обработки->Дополнительные внешние печатные формы.
Добавляем новый элемент справочника, загружаем печатную форму с диска и выбираем тип документа.
Теперь в документе Реализация товаров и услуг появится новая печатная форма.
Авторегистрация печатной формы
Для того чтобы при подключении печатной формы не нужно было выбирать тип документа вручную можно настроить авторегистрацию. Для этого добавляем новый макет и называем его Параметры_Авторегистрации(только так) и в первой его ячейке пишем Документы.(либо Справочники.).
Теперь при подключении печатной формы нам будет предложено воспользоваться параметрами авторегистрации.
- статью о создании печатной формы в управляемом приложении 1С.
- Смотрите видео по созданию внешней печатной формы для управляемого приложения:
Источник: https://1s83.info/programmirovanie/sozdanie-pechatnoy-formyi-v-1s-8.html
1с внешняя печатная форма
Общие, Отчеты, Программирование
Общие, отчеты, программирование
Любой программист 1с сталкивался с задачей создания макета печатной формы для объекта. Поскольку это одна из самых распространенных и не сложных задач, то 1с придумала отличный механизм добавления внешних печатных форм в программу, без изменения объектов метаданных конфигурации.
Для начала проверяем есть ли у нас возможность в текущей базе использовать внешние печатные формы, отчеты, обработки:
Администрирование / Печатные формы, отчеты и обработки.
Использование внешних печатных форм.
Отлично – справочник ‘ДополнительныеОтчетыИОбработки‘ у нас есть, а значит мы можем создавать внешние печатные формы в нашей конфигурации. Приступаем!
Задача от пользователя: оперативно создать форму печати (по предоставленному шаблону) для документа ‘ОприходованиеТоваров’.
Делаем все быстро, четко и понятно. Создаем новую обработку и добавляем нужный нам форму макета, которую мы будем выводить на печать:
Новая обработка – внешняя печатная форма.
Далее в модуле внешней обработки, добавляем 3 основные процедуры, необходимые для регистрации внешней печатной формы ‘СведенияОВнешнейОбработке’, ‘ПолучитьТаблицуКоманд’, ‘ДобавитьКоманду’:
Функция СведенияОВнешнейОбработке() Экспорт
МассивНазначений = Новый Массив;
МассивНазначений.Добавить(«Документ.ОприходованиеТоваров»);
ПараметрыРегистрации = Новый Структура;
//Доступные варинты: ечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов…
ПараметрыРегистрации.Вставить(«Вид» , «ПечатнаяФорма»);
ПараметрыРегистрации.Вставить(«Назначение» , МассивНазначений);
//имя в справочнике
ПараметрыРегистрации.Вставить(«Наименование» , «Печатная форма для документа 'Оприходование Товаров'»);
ПараметрыРегистрации.Вставить(«БезопасныйРежим» , ЛОЖЬ);
ПараметрыРегистрации.Вставить(«Версия» , «99.99»);
ПараметрыРегистрации.Вставить(«Информация» , «Тестовая печатня формы для документ 'Оприходование Товаров'»);
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, «Печатная форма для документа 'Оприходование Товаров'», «ТестоваяПечатняФорма», «ВызовСерверногоМетода», Истина, «ПечатьMXL»);
ПараметрыРегистрации.Вставить(«Команды», ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить(«Представление» , Новый ОписаниеТипов(«Строка»));
Команды.Колонки.Добавить(«Идентификатор» , Новый ОписаниеТипов(«Строка»));
Команды.Колонки.Добавить(«Использование» , Новый ОписаниеТипов(«Строка»));
Команды.Колонки.Добавить(«ПоказыватьОповещение» , Новый ОписаниеТипов(«Булево»));
Команды.Колонки.Добавить(«Модификатор» , Новый ОписаниеТипов(«Строка»));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = «»)
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Функция СведенияОВнешнейОбработке() Экспорт МассивНазначений = Новый Массив; МассивНазначений.Добавить(«Документ.ОприходованиеТоваров»); ПараметрыРегистрации = Новый Структура; //Доступные варинты: ечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов… ПараметрыРегистрации.Вставить(«Вид» , «ПечатнаяФорма»); ПараметрыРегистрации.Вставить(«Назначение» , МассивНазначений); ПараметрыРегистрации.Вставить(«Наименование» , «Печатная форма для документа 'Оприходование Товаров'»); ПараметрыРегистрации.Вставить(«БезопасныйРежим» , ЛОЖЬ); ПараметрыРегистрации.Вставить(«Версия» , «99.99»); ПараметрыРегистрации.Вставить(«Информация» , «Тестовая печатня формы для документ 'Оприходование Товаров'»); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, «Печатная форма для документа 'Оприходование Товаров'», «ТестоваяПечатняФорма», «ВызовСерверногоМетода», Истина, «ПечатьMXL»); ПараметрыРегистрации.Вставить(«Команды», ТаблицаКоманд); Возврат ПараметрыРегистрации;Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить(«Представление» , Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Идентификатор» , Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Использование» , Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«ПоказыватьОповещение» , Новый ОписаниеТипов(«Булево»)); Команды.Колонки.Добавить(«Модификатор» , Новый ОписаниеТипов(«Строка»));Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = «») НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; |
Заполняем параметры, в которых интуитивно все понятно и переходим к самой процедуре печати. Для этого добавляем в этот же модуль экспортную процедуру ‘Печать’:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ТестоваяПечатняФорма», «Печатная форма для документа 'Оприходование Товаров'», СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));
КонецПроцедуры
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ТестоваяПечатняФорма», «Печатная форма для документа 'Оприходование Товаров'», СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)); |
И осталось только описать сам алгоритм формирования табличного документа, в процедуре, которую в итоге мы передадим в ‘УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(‘:
СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати). Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_ТестоваяПечатняФорма»;
МакетОбработки = ПолучитьМакет(«ТестоваяПечатнаяФорма»);
ОбластьШапка = МакетОбработки.ПолучитьОбласть(«Заголовок»);
ОбластьШапка.Параметры.ТекстЗаголовка = «УРА наша печатня форма!»;
ТабличныйДокумент.Вывести(ОбластьШапка);
ОбластьШапка = МакетОбработки.ПолучитьОбласть(«Покупатель»);
ОбластьШапка.Параметры.ПредставлениеПолучателя = СсылкаНаДокумент.Организация;
ТабличныйДокумент.Вывести(ОбластьШапка);
//Заполняем макет
ОбластьШапка = МакетОбработки.ПолучитьОбласть(«ШапкаТаблицы»);
ТабличныйДокумент.Вывести(ОбластьШапка);
ОбластьСтроки = МакетОбработки.ПолучитьОбласть(«СтрокаТЧ»);
Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтроки.Параметры, ТекущаяСтрока);
ТабличныйДокумент.Вывести(ОбластьСтроки);
КонецЦикла;
ОбластьПодвал = МакетОбработки.ПолучитьОбласть(«Итого»);
ОбластьПодвал.Параметры.Всего = СсылкаНаДокумент.Товары.Итог(«Сумма»);
ТабличныйДокумент.Вывести(ОбластьПодвал);
ТабличныйДокумент.АвтоМасштаб = Истина;
//Возращаем табличный документ печатной формы
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати) ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_ТестоваяПечатняФорма»; МакетОбработки = ПолучитьМакет(«ТестоваяПечатнаяФорма»); ОбластьШапка = МакетОбработки.ПолучитьОбласть(«Заголовок»); ОбластьШапка.Параметры.ТекстЗаголовка = «УРА наша печатня форма!»; ТабличныйДокумент.Вывести(ОбластьШапка); ОбластьШапка = МакетОбработки.ПолучитьОбласть(«Покупатель»); ОбластьШапка.Параметры.ПредставлениеПолучателя = СсылкаНаДокумент.Организация; ТабличныйДокумент.Вывести(ОбластьШапка); ОбластьШапка = МакетОбработки.ПолучитьОбласть(«ШапкаТаблицы»); ТабличныйДокумент.Вывести(ОбластьШапка); ОбластьСтроки = МакетОбработки.ПолучитьОбласть(«СтрокаТЧ»); Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл ЗаполнитьЗначенияСвойств(ОбластьСтроки.Параметры, ТекущаяСтрока); ТабличныйДокумент.Вывести(ОбластьСтроки); ОбластьПодвал = МакетОбработки.ПолучитьОбласть(«Итого»); ОбластьПодвал.Параметры.Всего = СсылкаНаДокумент.Товары.Итог(«Сумма»); ТабличныйДокумент.Вывести(ОбластьПодвал); ТабличныйДокумент.АвтоМасштаб = Истина; //Возращаем табличный документ печатной формы Возврат ТабличныйДокумент; |
Все! Печатная форма готова! Осталось её только добавить в справочник ‘ДополнительныеОтчетыИОбработки‘ и протестировать:
Создаем новый элемент в справочнике ‘ДополнительныеОтчетыИОбработки’.
Поскольку мы верно заполнили правила регистрации в модуле обработку, то программа сама определит документ, для которого она предназначена:
Наша внешняя печатная форма.
Все! Заходим в документ и проверяем:
Внешняя печатная форма в документе.
Печатная форма.
Теперь если оперативно нужно подправить макет печатной формы, то просто сохраняем её как внешнюю обработку из справочника и вносим любые изменения. После чего опять подгружаем в 1с предприятие. Быстро, просто, классно:
Выгрузка и загрузка внешней обработки.
Ну и как здесь у нас принято – качаем бесплатно шаблон обработки, для быстрой разработки внешней печатной формы:
Скачать файлы craft1c_ВнешняяПечатнаяФорма.epf
Источник: https://craft1c.ru/1s-vneshnjaja-pechatnaja-forma/
Печатная форма 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С?
Источник: http://howknow1c.ru/programmirovanie-1c/pechatnaja-forma-1s.html
Внешние печатные формы в обычном и управляемом приложении
Изменение встроенных в типовые конфигурации печатных форм — это, вероятно, одна из наиболее распространенных доработок типовых конфигураций. Чтобы каждый раз не изменять саму конфигурацию, компания «1С» создала механизм внешних печатных форм.
Внешняя печатная форма — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и тем самым добавить новую печатную форму и/или заменить существующую.
Кроме этого, нужно отметить, что создание внешних печатных форм различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.
Также нужно сказать, что вопросы отладки внешних печатных форм и для управляемого и для обычного приложения рассматриваются в отдельной статье.
Внешняя печатная форма в управляемом приложении
Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).
Создание
Как уже было сказано выше, внешняя печатная форма — это просто-напросто внешняя обработка соответствующая некоторым требованиям. Первым требованием является реализация в модуле печатной формы экспортной функции СведенияОВнешнейОбработке().
Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
//указываем сведения о внешней печатной форме
ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»);
ПараметрыРегистрации.Вставить(«Версия», «1.2»);
ПараметрыРегистрации.Вставить(«ВерсияБСП», «3.0.1.287»);
ПараметрыРегистрации.Вставить(«Наименование», «Печатная форма для ПКО»);
ПараметрыРегистрации.Вставить(«Информация», «Внешняя печатная форма для документов»);
//используем безопасный режим, это накладывает некоторые ограничения
ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина);
//определим документы и/или справочники
//в которых будет использоваться эта печатная форма
ПараметрыРегистрации.Вставить(«Назначение», Новый Массив);
ПараметрыРегистрации.Назначение.Добавить(«Документ.ПриходныйКассовыйОрдер»);
//используется для дополнительных отчетов
//подключенных к подсистеме «Варианты отчетов»
ПараметрыРегистрации.Вставить(«ОпределитьНастройкиФормы», Ложь);
//если требуются исключения из безопасного режима, их можно запросить
ПараметрыРегистрации.Вставить(«Разрешения», Новый Массив);
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(«https»,»yandex.ru»,80,»очень надо»));
//определяем таблицу команд
ПараметрыРегистрации.Вставить(«Команды», ПолучитьТаблицуКоманд());
//добавляем команду
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = «Печатная форма для ПКО (внешняя)»;
Команда.Идентификатор = «ПечатнаяФормаДляПКО»;
Команда.Использование = «ВызовСерверногоМетода»;
Команда.ПоказыватьОповещение = Истина;
Команда.Модификатор = «ПечатьMXL»;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить(«Представление», Новый ОписаниеТипов(«Строка»));
Команды.Колонки.Добавить(«Идентификатор», Новый ОписаниеТипов(«Строка»));
Команды.Колонки.Добавить(«Использование», Новый ОписаниеТипов(«Строка»));
Команды.Колонки.Добавить(«ПоказыватьОповещение», Новый ОписаниеТипов(«Булево»));
Команды.Колонки.Добавить(«Модификатор», Новый ОписаниеТипов(«Строка»));
Команды.Колонки.Добавить(«ЗаменяемыеКоманды», Новый ОписаниеТипов(«Строка»));
Возврат Команды;
КонецФункции
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; //указываем сведения о внешней печатной форме ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»); ПараметрыРегистрации.Вставить(«Версия», «1.2»); ПараметрыРегистрации.Вставить(«ВерсияБСП», «3.0.1.287»); ПараметрыРегистрации.Вставить(«Наименование», «Печатная форма для ПКО»); ПараметрыРегистрации.Вставить(«Информация», «Внешняя печатная форма для документов»); //используем безопасный режим, это накладывает некоторые ограничения ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина); //определим документы и/или справочники //в которых будет использоваться эта печатная форма ПараметрыРегистрации.Вставить(«Назначение», Новый Массив); ПараметрыРегистрации.Назначение.Добавить(«Документ.ПриходныйКассовыйОрдер»); //используется для дополнительных отчетов //подключенных к подсистеме «Варианты отчетов» ПараметрыРегистрации.Вставить(«ОпределитьНастройкиФормы», Ложь); //если требуются исключения из безопасного режима, их можно запросить ПараметрыРегистрации.Вставить(«Разрешения», Новый Массив); ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(«https»,»yandex.ru»,80,»очень надо»)); //определяем таблицу команд ПараметрыРегистрации.Вставить(«Команды», ПолучитьТаблицуКоманд()); Команда = ПараметрыРегистрации.Команды.Добавить(); Команда.Представление = «Печатная форма для ПКО (внешняя)»; Команда.Идентификатор = «ПечатнаяФормаДляПКО»; Команда.Использование = «ВызовСерверногоМетода»; Команда.ПоказыватьОповещение = Истина; Команда.Модификатор = «ПечатьMXL»; Возврат ПараметрыРегистрации;Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить(«Представление», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Идентификатор», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Использование», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«ПоказыватьОповещение», Новый ОписаниеТипов(«Булево»)); Команды.Колонки.Добавить(«Модификатор», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«ЗаменяемыеКоманды», Новый ОписаниеТипов(«Строка»)); |
Код в основном прокомментирован, но некоторые моменты нужно обговорить отдельно. Функция СведенияОВнешнейОбработке() является общей для всех внешних объектов. Вид внешнего объекта указывается в параметре «Вид» (у нас указана «ПечатнаяФорма»).
Большинство параметров не являются обязательными для заполнения.
В нашем случае обязательно указать параметры «Вид», «Версия» и «Команды» — это обязательные параметры для всех видов внешних объектов («Команды» необязательны для отчетов).
Кроме этого будет полезно указать параметры «Назначение». Но вообще, желательно указывать как можно больше информации — это поможет не запутаться как Вашим клиентам так и Вам самим.
Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:
- игнорируется привилегированный режим;
- запрещена работа с COM;
- запрещена загрузка внешних компонент;
- запрещен запуск внешних приложений и команд ОС;
- запрещен доступ к файловой системе (кроме временных файлов);
- запрещен доступ к интернету.
Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).
Кроме функции СведенияОВнешнейОбработке() необходимо реализовать еще одну экспортную функцию — Печать(). Эта функция должна иметь следующие параметры:
- МассивОбъектов — массив ссылок на объекты, для которых требуется сформировать табличные документы;
- КоллекцияПечатныхФорм — служебная таблица значений, через нее передаются имена макетов для которых могут быть сформированы табличные документы, а также возвращаются синонимы (представления) макетов, сформированные табличные документы и другая информация;
- ОбъектыПечати — список значений, к котором устанавливается соответствие между объектами и именами областей печати табличного документа (нужно для возможности печати комплектов документов);
- ПараметрыВывода — структура с предопределенными ключами, через которую можно вернуть некоторые параметры.
Пример реализации функции Печать():
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, «ПечатнаяФормаДляПКО»);
Если ПечатнаяФорма Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = «Печатная форма для ПКО»;
КонецЕсли;
КонецПроцедуры
Функция СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати)
ТабДок = Новый ТабличныйДокумент;
Макет = ЭтотОбъект.ПолучитьМакет(«Макет»);
ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»);
ПервыйДокумент = Истина;
Для Каждого ОбъектСсылка Из МассивОбъектов Цикл
Если Не ПервыйДокумент Тогда
//выводим документы на разных страницах
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабДок.ВысотаТаблицы + 1;
ОбластьСтрока.Параметры.Документ = ОбъектСсылка;
ТабДок.Вывести(ОбластьСтрока);
//зададим область печати объекта в табличном документе
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок,
НомерСтрокиНачало, ОбъектыПечати, ОбъектСсылка);
КонецЦикла;
Возврат ТабДок;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, «ПечатнаяФормаДляПКО»); Если ПечатнаяФорма Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = «Печатная форма для ПКО»;Функция СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати) ТабДок = Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет(«Макет»); ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»); Для Каждого ОбъектСсылка Из МассивОбъектов Цикл Если Не ПервыйДокумент Тогда //выводим документы на разных страницах ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); НомерСтрокиНачало = ТабДок.ВысотаТаблицы + 1; ОбластьСтрока.Параметры.Документ = ОбъектСсылка; ТабДок.Вывести(ОбластьСтрока); //зададим область печати объекта в табличном документе УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок, НомерСтрокиНачало, ОбъектыПечати, ОбъектСсылка); |
В коде выше мы находим нашу печатную форму по идентификатору и формируем для нее табличный документ.
Подключение
Подключение нашей внешней печатной формы на примере «Бухгалтерии предприятия, редакция 3.0».
Вкратце повторю основные этапы:
- Открываем вкладку «Администрирование» и переходим в раздел «Печатные формы, отчеты и обработки»;
- Устанавливаем галку «Дополнительные отчеты и обработки» и переходим в раздел «Дополнительные отчеты и обработки»;
- Жмем кнопку «Добавить из файла» и выбираем файл печатной формы;
- (Необязательно) Меняем наименование, комментарии, настраиваем видимость, изменяем размещение;
- Жмем кнопку «Записать и закрыть».
Внешняя печатная форма в обычном приложении
Теперь рассмотрим создание внешней печатной формы в обычном приложении — создадим печатную форму для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 2.0). Несмотря на то, что задача та же, решается она по другому.
Создание
Внешняя печатная форма в обычном приложении — это внешняя обработка, в которой имеется реквизит «СсылкаНаОбъект» произвольного типа, в который будет передана ссылка на объект, для которого требуется выполнить печать, и экспортной функции Печать() в модуле объекта, которая вызывается без параметров и возвращает табличный документ.
Кроме этого может присутствовать реквизит «ДополнительныеПараметры» произвольного типа, через который, в виде структуры, будут передаваться дополнительные параметры примитивного типа.
Внешняя печатная форма в обычном приложении
Также во внешней печатной форме может присутствовать макет с названием «Параметры_Авторегистрации» в первой колонке которого можно перечислить объекты метаданных, к которым принадлежит печатная форма. Используется этот макет для автоматического заполнения принадлежности печатной формы.
Параметры_Авторегистрации
Такой же макет (но с указанием табличной части) используется во внешних обработках табличных частей, о которых имеется отдельная статья.
Пример реализации функции Печать():
Функция Печать() Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = ЭтотОбъект.ПолучитьМакет(«Макет»);
ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»);
ОбластьСтрока.Параметры.Документ = СсылкаНаОбъект;
ТабДок.Вывести(ОбластьСтрока);
//обращение к дополнительным параметрам рекомендуется снабдить
//соответствующими проверками
Если ЗначениеЗаполнено(ДополнительныеПараметры) Тогда
Если ДополнительныеПараметры.Свойство(«ТестПараметр») Тогда
ОбластьСтрока.Параметры.Документ = ДополнительныеПараметры.ТестПараметр;
ТабДок.Вывести(ОбластьСтрока);
КонецЕсли;
КонецЕсли;
Возврат ТабДок;
КонецФункции
ТабДок = Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет(«Макет»); ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»); ОбластьСтрока.Параметры.Документ = СсылкаНаОбъект; ТабДок.Вывести(ОбластьСтрока); //обращение к дополнительным параметрам рекомендуется снабдить //соответствующими проверками Если ЗначениеЗаполнено(ДополнительныеПараметры) Тогда Если ДополнительныеПараметры.Свойство(«ТестПараметр») Тогда ОбластьСтрока.Параметры.Документ = ДополнительныеПараметры.ТестПараметр; ТабДок.Вывести(ОбластьСтрока); |
Подключение
Подключим нашу внешнюю печатную форму на примере «Бухгалтерии предприятия, редакция 2.0».
Основные этапы:
- Открываем справочник внешних печатных форм (Сервис->Дополнительные отчеты и обработки->Дополнительные внешние печатные формы);
- Добавляем новый элемент справочника и указываем файл печатной формы;
- Записываем элемент.
- (Необязательно) Меняем имеющиеся настройки — представления, отборы, дополнительные параметры и прочее.
На этом все, надеюсь, что эта статья была Вам полезна.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Загрузка…
Источник: https://1c-programmer-blog.ru/programmirovanie/vneshnie-pechatnye-formy-v-1s-8-2-i-8-3.html