Дополнительная печатная форма 1с 8.3

Добрый день.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Окай

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

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

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

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

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

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

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

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

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

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

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

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

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

В данной статье описано как подключить внешнюю печатную форму в базу 1С на примере конфигурации «Управление торговлей 11.2»

Конфигурация «Управление торговлей 11.2» — это конфигурация на «УПРАВЛЯЕМЫХ» формах!

Наша инструкция «показывает» как подключить внешнюю печатную форму в информационной базе 1С с конфигурацией на «УПРАВЛЯЕМЫХ» формах а именно:

  • «Бухгалтерия 3.0»
  • «Управление торговлей 11.2»
  • «Зарплата и управление персоналом 3.1»
  • «Комплексная автоматизация 2.0»
  • «Управление небольшой фирмой 1.6»
  • «Розница 2.2»
  • и другие подобные конфигурации.

Для того чтобы подключить внешнюю печатную форму в 1С нам понадобится пройти 11 шагов.

1 — Меню «НСИ и администрирование» (В других конфигурациях, как например в Бухгалтерии предприятия 3.0, может называться просто — «Администрирование»). 2 — Выбираем «Печатные формы, отчеты и обработки» (см. рис. ниже ↓)

3 — Раскрываем подменю «Отчеты и обработки» (В других конфигурациях, как например в Бухгалтерии предприятия 3.0, такого подменю может не оказаться, поэтому сразу переходим к следующему действию). 4 — Ставим «галочку» Использование дополнительных отчетов и обработок. 5 — Переходим в раздел: Дополнительные отчеты и обработки. (см. рис. ниже ↓) ()

6 — Нажимаем кнопку «Создать». (см. рис. ниже ↓)

В новых версиях 1С (начиная с августа 2016 года) в программу встроен механизм предупреждения об опасности использования неизвестных внешних обработок, которые могут содержать «вирусы», в более ранних версиях программы предупреждение возникать не будет! Если оно возникло, то для подключения внешней печатной формы будет необходимо — 7 — нажать кнопку «Продолжить». (см. рис. ниже ↓)

8 — Выбираем каталог в котором находится обработка. 9 — Выделяем ее (нужную нам обработку). 10 — Нажимаем кнопку «Открыть». Либо вместо действий 9 и 10 можно просто дважды кликнуть по нужной нам внешней печатной форме в окне выбора. (см. рис. ниже ↓)

Если нам необходимо добавить размещение для добавляемой обработки (Например, это Универсальная форма договора с нашего сайта и нам надо, чтобы команда печати этой формы выводилась в каком-то объекте, в котором изначально не выводится) — 11 — нажимаем на строку размещения («Разместить в:», может быть «Размещение:») и выбираем необходимые справочники и документы. 12 — Завершаем действия по подключению внешней печатной формы нажатием кнопки «Записать и закрыть». (см. рис. ниже ↓)

Вот и все! Поздравляем! Внешняя печатная форма подключена! А все ли мы сделали правильно? Проверим…

Перед Записью и закрытием мы обратили внимание что данная внешняя печатная форма размещена в документе Реализация товаров и услуг, а значит возможности печати открываем любой документ вида: «Реализация товаров и услуг». нажимаем кнопку «Печать» и видим — появилось окно выбора печатных форм, среди них присутствует — 13 — подключенная нами внешняя печатная форма (см. рис. ниже ↓)

Теперь точно — всё. Мы надеемся что данная статья была вам полезна.

Доброго времени суток!

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

Подключение дополнительных внешних печатных форм

Запускаем 1С:Предприятие. Открываем справочник «Дополнительные внешние печатные формы» через меню «Сервис» - «Дополнительные отчеты и обработки».

Нажмем кнопку «Добавить», затем зарегистрируем новую печатную форму, нажав «Заменить файл внешней обработки». Автоматически заполнится принадлежность печатной формы документу «Реализация товаров и услуг». Выбираем «Договор» в колонке «Заменяемая печатная форма», чтобы стандартная печатная форма более не использовалась.

Запускаем 1С:Предприятие, открываем справочник "Контрагенты", выбираем контрагента, для которого будет печататься наш договор и по кнопке "Файлы" переходим в справочник "Хранилище дополнительной информации", загружаем в него шаблон для договора и,обязательно, называем его "Договор", как показано на рисунке ниже, иначе программа не сможет найти макет для печатной формы.

Теперь открываем любой документ "Реализация товаров и услуг" и нажимаем кнопку «Печать» - «Договор». Откроется документ Microsoft Word с договором.

Внешнюю печатную форму "Договор" и макет к ней можно скачать по ссылкам ниже.

Макет трудового договора в формате Microsoft Word

Существует, по меньшей мере, три способа создания шаблона:

1. В документе Word создаются опорные фразы, например, "[НомерДоговора]", затем, в модуле обработки производится поиск и замена значений.

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

3. В документе Word добавляются служебные поля, например, «DocVariable» или «Author». Используя DocVariable можно обращаться к переменной по имени, например, «ДокументВорд.Variables.Add(ИмяПеременной, ЗначениеПеременной);», но ее не видно в шаблоне. Поле «Author» отображается в шаблоне, но обращаться к нему придется в цикле по индексу: «ДокументВорд.Fields.item(Индекс).Result.Text = Значение;».

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

Открываем программу Microsoft Office. Для примера добавляем пару строк, как показано на рисунке ниже и сохраняем шаблон.

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

Запускаем 1С:Предприятие в режиме «Конфигуратор» и через меню «Файл» - «Новый» создаём внешнюю обработку. Добавляем реквизит "Ссылка на объект" и макет "Параметры_Авторегистрации" с типом "Табличный документ". Тип реквизита "Ссылка на объект" зависит от того, для каких объектов будет использоваться печатная форма, в нашем случае печатная форма будет использовать для документа "Реализация товаров и услуг", поэтому указываем тип "ДокументСсылка.РеализацияТоваровУслуг".

Разработка процедуры печати

Как добавить (зарегистрировать) внешнюю печатную форму (или обработку) в 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. Откройте нужный документ и убедитесь, что в кнопке печать появился ещё один вариант печатной формы или пункт в меню "Создать на основании" или новая кнопка на панели инструментов формы. Готово!

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

Loading...Loading...