В конфигурациях на базе платформы в 1С:Предприятие 8.3 имеется довольно широкий ассортимент типовых печатных форм, но бывают ситуации, когда необходима разработка уникального печатного документа.
Самостоятельная разработка печатной формы – выполнимая задача для продвинутого пользователя 1С, и добавление внешней печатной формы в базу также не составит труда.
Создание макета внешней печатной формы
Лучшее решение для добавления возможности распечатывать данные того или иного документа в типовую конфигурацию от 1С, а если она не изменялась – вообще единственная. Суть задачи в том, чтобы создать в конфигураторе файл обработки и описать в нем внешний вид и используемые данные. После чего останется только подключить данный файл к конфигурации 1С с помощью механизмов библиотеки стандартных подсистем.
Создание печатной формы документа начинается с открытия режима конфигуратора базы. Желательно открывать ту базу, в которую требуется внести изменения, чтобы платформа позволила нам открывать конструктор запроса. Создайте новую внешнюю обработку с помощью основного меню «Файл» - «Новый…» и заполните имя и синоним. В среде 1С принято указывать «говорящие» имена, чтобы другие программисты могли комфортно работать с чужим кодом.
Затем необходимо добавить макет – структуру распечатываемой формы с перечнем переменных, куда и будут вставляться данные из конкретного документа 1С. В открывшемся конструкторе не стоит ничего менять и после подтверждения готовности откроется окно, похожее на Excel. В нем необходимо будет нарисовать форму и разделить ее на области с отдельными именами. Разделять стоит в зависимости от момента вывода на экран и того, сколько раз эта область должна появиться на экране.
В качестве примера разберем печатную форму для документа продажи товаров. В нем перечислены номенклатура, организация, подразделение, менеджер и контрагент, кому продаются товары. Для информативной печатной формы необходимо выделить следующие области:
- Верхняя часть («Шапка»). Сюда войдет идентификация документа в системе 1С – номер и дата, основные данные об операции – организация, контрагент, менеджер, заголовок таблицы номенклатуры. Выводиться будет 1 раз;
- Информация по номенклатуре («ДанныеСтрок»). Данные о тех товарах, которые продаются – наименование, количество, цена и сумма. Выводиться по 1 разу на каждую строчку табличной части «Товары»;
- Итоговые данные («ИтогиСтрок»). В печатной форме фигурирует 1 раз и отражает итоговые суммы количества и суммы;
- Подписи («Подвал»). Область для согласования бумажной версии документа. Необходимо вывести на печать единожды.
В окне, похожем на Excel, выделяем 10 строк и выбираем в основном меню «Таблица» - «Имена» - «Назначить имя…». В открывшемся окне вводим название области и подтверждаем. Далее в этой области размещаем необходимые для вывода поля, используя возможности объединения и выбора шрифта и размера надписей.
Теперь надо настроить переменные, куда будут вставлены данные. Для этого на ячейке, где уже есть надпись, нажимаем правой кнопкой мыши и открываем свойства. Найдите пункт «Заполнение» и выберите там значение «Параметр», после чего убедитесь, что надпись в ячейке теперь заключена в угловые скобки. Если вы выберите «Шаблон», то это даст вам возможность указать переменные внутри строки в ячейке с помощью квадратных скобок.
Осталось только добавить другие области и разместить там параметры. Наш макет готов. Настройка печатной формы в части макета завершена, поэтому можно переходить к написанию кода, чтобы наши параметры заполнились данными. Писать все процедуры придется в модуле объекта созданной внешней обработки.
Доработаем 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С самостоятельно разместит новую печатную форму.
Зайдите в любой документ, нажмите «Печать» - «WAПечать заказа» и на экране появится созданная нами печатная форма. Данный вариант создания обработки может подойти и для нетиповой конфигурации, если настроить в ней БСП. Внешние печатные формы для 1С можно подключать и к новым нетиповым документам, добавленным разработчиками компании, если правильно настроить их.
Но в нетиповых конфигурациях, которые не находятся на поддержке, намного удобнее и проще использовать встроенный в 1С конструктор печатных форм. Большой плюс этого метода в том, что мы лишь указываем поля, которые нам нужны, а платформа самостоятельно строит макет. Алгоритм вывода данных 1С также создает автоматически, после чего показывает разработчику. Оптимальный вариант в подобных ситуациях – запустить конструктор печати, а затем сделать изменение печатной формы, если необходимо.
Базовая настройка 1С, форм отчетов/документов, обменов данными, расширений, торг. оборудования и пр.Конструктор печати 1С
Для настройки новой печатной формы откройте конфигуратор базы и найдите нужный документ в дереве. Открыв его, нажмите кнопку «Действия» - «Конструкторы» - «Конструктор печати…». Платформа предложит выбрать для изменения существующую команду или создать новую, указав имя, после чего нажмите «Далее». При выборе наименования не используйте пробелы, так как будет сформирована одноименная процедура, а в их наименовании не допускаются пробелы.
Конструктор печати в версии 8.3 предполагает, что печатная форма состоит из нескольких частей:
- Шапка;
- Табличные части;
- Подвал.
Поэтому в дальнейшем диалоге конструктор предложит выбрать, какие поля будут отражены в каждом разделе. Решается это простым перемещением из левого поля в правое. С помощью синих стрелок вы можете изменить порядок этих полей в результирующем макете. В конце вы можете включить дополнительные функции и выбрать, где будет размещаться кнопка запуска печатной формы.
По нажатию «ОК» 1С сформирует команду, макет и процедуру в модуле менеджера и откроет их для разработчика. Затем можно отредактировать их, если необходим более сложный алгоритм – добавить расчет и вывод итогов или данных, не содержащихся в документе. Алгоритм изменения аналогичен рассмотренному выше:
- Создать область в макете, если использовать уже созданные области недопустимо;
- Добавить надписи и переменные. Перечень добавляемых объектов зависит от потребностей;
- В процедуре получить область по имени;
- Рассчитать или прочитать из документа данные;
- Заполнить переменные информацией.
Данный вариант формирования позволяет быстро создать печатную форму, если пользователи не предъявляют серьезных требований к внешнему виду. Платформа самостоятельно пропишет все необходимые связи и добавит команду печати на форму документа. А ручное редактирование печатной формы позволит добавить недостающие данные или разместить существующие по-другому.
самые свежие новости 1 раз в месяц
Рассмотренные варианты создания печатных форм позволяют добавлять их в любую конфигурацию – стоящую на поддержке, снятую с нее или написанную самостоятельно. Перед тем, как выбирать метод создания, проанализируйте еще и требования к внешнему виду результата, количеству и доступности данных. Это поможет выбрать оптимальный путь и сэкономить время.
консультация эксперта
самые свежие новости 1 раз в месяц