Вконтакте Facebook Twitter Лента RSS

Внешняя печатная форма 8. Добавление внешней печатной формы в базу

Как добавить (зарегистрировать) внешнюю печатную форму (или обработку) в 1С Бухгалтерия 8.3 (редакция 3.0)

2019-05-15T13:40:54+00:00

Часто у бухгалтера возникает необходимость в дополнительной печатной форме к какому-нибудь из стандартных документов 1С:Бухгалтерия 8.3 (редакция 3.0). Или нужна дополнительная обработка, например, чтобы автоматически заполнить документ или ввести новый на основании. Обычно такая возможность уже кем-нибудь разработана и её можно найти или заказать у программиста. И вот доработка получена, осталось только добавить её в бухгалтерию. Как это сделать? Об этом ниже по шагам.

1. Откройте 1С Бухгалтерия 3.0 и выберите в левой панели раздел "Администрирование"->"Печатные формы, отчеты и обработки" ():

2. Здесь найдите и выберите пункт "Дополнительные отчеты и обработки", предварительно установив галку "Дополнительные отчеты и обработки" слева:

3. Нажмите кнопку "Добавить из файла...".

4. И выберите файл с внешней печатной формой или обработкой (расширение epf).

5. В новом окне нажмите кнопку "Записать и закрыть".

6. Откройте нужный документ и убедитесь, что в кнопке печать появился ещё один вариант печатной формы или пункт в меню "Создать на основании" или новая кнопка на панели инструментов формы. Готово!

С уважением, Владимир Милькин (преподаватель и разработчик ).

Добрый день.

Сегодня хочу рассказать Вам как создавать внешние печатные формы для конфигурации "Зарплата и Управление Персоналом 3.0". Как известно в ЗУП 3.0 использована библиотека стандратных подсистем, а значит струтура обработки выглядит совсем по другому. Когда мне в первый раз пришлось делать печатную форму для БСП в управляемых формах (тогда это была УТ 11), первым делом я полез на диск ИТС с целью найти там подробную документацию, о том какие экспортные процедуры, с какими параметрами должны быть в обрабтке и как оно все работает. Тут ИТС меня немного разочаровал, т.к. там все рассказано, о том, как процедуры должны выглядеть в модуле документа, а во внешней печатной форме параметры процедуры "печать" переставлены местами, поэтому пришлось искать информацию в других источниках и ковырять подсистему изнутри.

Ну что же, начнем. То, что у нас получится в конце, вполне можно будет использовать как шаблон.

Шаг первый - очевидный. Создаем новую обработку. Присвоим её произвольное имя: "ОбразецПечати".

Шаг второй. Создадим макет. Поскольку у нас тестовый пример, то макет я создам самый простой, без единого параметра.

Шаг третий - самый интересный. Открываем модуль объекта и начинаем программировать. Согласно БСП при регистрации внешней обработки, она (обработка) должна сообщить, что она умеет, к каким объектам она привязана, как она называется. На вопрос, что она умеет обработка должна вернуть список команд - это таблица значений. В нашем случае обработка умеет выводить одну печатную форму, поэтому команда будет всего одна. Для формирования таблицы значений определим пару процедур, которые во всех внешних печатных формах всегда будут одинаковыми:

//процедура, которая подготавливает структуру таблицы команд

Функция ПолучитьТаблицуКоманд()

// Создадим пустую таблицу команд и колонки в ней
Команды = Новый ТаблицаЗначений;

// Как будет выглядеть описание печатной формы для пользователя
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

// Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

// Тут задается, как должна вызваться команда обработки
// Возможные варианты:
// - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
// - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
// - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

// Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

// Для печатной формы должен содержать строку ПечатьMXL
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

Возврат Команды;

КонецФункции

//Создает в таблице команд новую строку

Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор= Идентификатор;
НоваяКоманда. Использование= Использование;
НоваяКоманда. ПоказыватьОповещение= ПоказыватьОповещение;
НоваяКоманда. Модификатор= Модификатор;
КонецФункции

Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ПриемНаРаботу");
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", " Привет мир "); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ИСТИНА);
ПараметрыРегистрации.Вставить("Информация", " ОБРАЗЕЦ ");//так будет выглядеть описание печ.формы для пользователя
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Привет мир", "Макет", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции

Собственно в ней и придется Вам ковырять каждый раз, когда Вы создаете новую внешнюю печатную форму. Из куска кода видно, что привязывать её мы будем к документу "Прием на работу", соответсвенны Вы пишете своё. Называться печатная форма у нас будет "Привет мир", опять таки меняем на своё. Вот тут в шаблоне удобно будет написать явную билеберду, чтобы она бросалась в глаза, чтобы не забыть её исправить потом, на мой взгля "Привет мир" подходит как нельзя кстати. Версия - это для себя, пишите что хотите, она будет отображаться в форме элемента справочника внешних обработок. Слово "ОБРАЗЕЦ" - тоже видно только в форме справочника печатных форм. Далее добавляем команду, вот тут вторым параметров передается имя кнопки, это то, что увидит пользователь в документе в пункте меню "печать".

Этого набора из трех процедур достаточно, чтобы обработка добавлялась в справочник внешних обработок, весь этот запутанный код - сервисный и к алгоритму печати не имеет отношения. По сути, авторы БСП вынудили нас так сложно программировать, если раньше вы сразу приступали к написанию функции "Печать", то теперь при написании обработки с нуля, а не по образцу, Вы потратите время на сервис. Раньше параметры регистрации были не обязательными и указывались в макете обработки, теперь все выглядит намного серьезней. Первое впечатление, когда я увидел это - круто, столько возможностей, все унифицированно... а на практике всегда создаю всего одну команду в одной обаботке, и цепляю её к одному документу. Т.е. по факту мне нужно две строки для регистрации: имя объекта, название кнопки. А тут все так... ну да ладно, не мне судить.

Шаг четвертый - не менее интересный.

Функция ПЕЧАТЬ?

А вот и нет, теперь не функция, а процедура.

А как вернуть макет?

Послать его в функцию глобального модуля подсистемы печати.

Окай

Вот текст этой процедуры:

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

Теперь разяснения. В первой строке процедуры идет немного непоняное условие. Дело в том, что при вызове процедуры печати система передает нам таблицу значений, в которой указано, что нам надо напечатать. Посути функция УправлениеПечатью.НужноПечататьМакет(...) проверяет наличие в таблице значений строки в которой в колонке "ИмяВРЕГ" строки с названием макета. На практике в большинстве случаев вещь бесполезная, т.к. наша обработка будет уметь формировать только одну печатную форму. Т.е. это условие можно опустить и на работоспособность это не повлияет.

Далее УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(...) - она то как раз и добавляет табличный макет куда нужно, чтобы потом вывести его на экран. Если Вам нужно показать свой табличный документ в своем окне (не в типовом), то не вызывайте эту процедуру, а просто напишите тут свой код.

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

Далее СформироватьТабДокумнтОбразца(...) - это функция, которую нам предстоит написать в модуле обработки и которая возвращает табличный документ. В 100 из 100 случаев она будет серверная, т.к. нам надо получить значение реквизитов из объектов перечисленных в параметре "МассивОбъектов".

Шаг пятый - формируем макет.

УРА, мы наконец приступим к алгоритму формирования макета, получению данных и т.д.

Но в нашем образце мы поступим прозаично и тут даже комментировать не буду)))

Функция СформироватьТабДокумнтОбразца(МассивОбъектов, ОбъектыПечати)
табДок = Новый ТабличныйДокумент;
макет = ПолучитьМакет("Макет");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
табДок.Вывести(областьШапка);

Возврат табДок;
КонецФункции

Вот собственно и все, спасибо за внимание

Осуществляется в соответствии со стандартным макетом печатной формы, встроенным в приложение разработчиками (его называют "поставляемым" макетом).

При необходимости, вы можете изменить стандартный макет и, в дальнейшем, осуществлять печать документа на основе вашего персонального ("пользовательского") макета. Для редактирования макета печатной формы предусмотрен механизм выгрузки на локальный компьютер. Правка макета проводится в локальной версии приложения системы "1С:Предприятие" (в частности, можно использовать бесплатное приложение 1С:Предприятие - Работа с файлами).


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




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

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

Желаем приятной работы!

Как вставить в макет печатной формы логотип компании?

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


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

Желаем приятной работы!

© 2024 Новогодний портал. Елки. Вязание. Поздравления. Сценарии. Игрушки. Подарки. Шары