Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Внешние печатные формы в управляемых формах 1С 8.3 и 8.2

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

Внимание! Если Вам необходима разработка печатных форм любой сложности, но Вы не технический специалист — просто обратитесь к профессионалам. Подробности на странице услуги 1С.

Макет внешней печатной формы

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

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




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

Рассмотрим методику разработки и настройки внешних печатных форм для 1С (8.2 или 8.3) именно в управляемом приложении и ниже Вы можете скачать полученную внешнюю печатную форму.

Если у вас нет времени читать, можете просмотреть наш видео урок по созданию внешних печатных форм и подключению их на примере конфигурации 1С Бухгалтерии:

Пример создания внешней печатной формы в 1С 8.3

В нашем примере мы сделаем образец печатной формы «Счет» для документа «Реализация (акты, накладные)«.

Для начала создадим новую обработку и укажем в ней следующее:

1. Создадим экспортную функцию СведенияОВнешнейОбработке() в модуле объекта, укажем следующий код:

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

Возврат ПараметрыРегистрации;

Формат возвращаемой структуры регламентирован, подробности можно узнать в разделах ИТС.

Функция СведенияОВнешнейОбработке() ссылается еще на одну процедуру и функцию:

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

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

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

КонецПроцедуры

Получите 267 видеоуроков по 1С бесплатно:

Они практически всегда одинаковы.

2. Вторым шагом необходимо создать так же экспортную процедуру Печать(), с помощью которой подсистема будет инициировать запуск печати из общих модулей подсистемы. Процедура содержит 4 параметра:

  • МассивОбъектов — ссылки на объекты, которые планируются для печати (массив);
  • КоллекцияПечатныхФорм — уже сформированные документы (таблица значений);
  • ОбъектыПечати — список значений, в котором значение это ссылка на объект, а представление — имя области в которой был введен объект;
  • ПараметрыВывода — произвольные параметры для печати.

Процедура выглядит примерно следующим образом:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

КонецПроцедуры // Печать()

В ней формируется нужное количество табличных документов и готовится к печати. В нашем примере мы создадим функцию «СформироватьПечатнуюФорму()», которая будет возвращать табличный документ. Для примера мы предполагаем что у нас всегда 1 печатная форма, поэтому передаём в функцию первый элемент массива (МассивОбъектов[0]).

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

Создание табличного документа

Подробно останавливаться на этом не будем, на эту тему есть большое количество материалов.

Представим лишь внешний вид макета нашего элементарного примера:

Макет счета на оплату

И листинг:

Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплатуВРТУ";

МакетОбработки = ПолучитьМакет("СчетНаОплатуВнешний");

//заполняем шапку
ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;
ОбластьШапка.Параметры.ДатаДокумента = СсылкаНаДокумент.Дата;
ОбластьШапка.Параметры.НазваниеОрганизации = СсылкаНаДокумент.Организация.Наименование;
//выводим шапку в табличный документ
ТабличныйДокумент.Вывести(ОбластьШапка);

//заполняем строки ТЧ
ОбластьСтроки = МакетОбработки.ПолучитьОбласть("СтрокаТЧ");

Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтроки.Параметры, ТекущаяСтрока);
ТабличныйДокумент.Вывести(ОбластьСтроки);
КонецЦикла;

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

ТабличныйДокумент.АвтоМасштаб = Истина;

Возврат ТабличныйДокумент;

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




Подключение и тестирование ВПФ в 1С

В нашем примере мы запускаем конфигурации 1С Управление торговлей версии 11.1. Для добавление новой обработки необходимо в разделе «Администрирование» выбрать пункт «Печатные формы, отчеты и обработки». В нужном меню нужно нажать гиперссылку «Дополнительные отчеты и обработки» (если ссылка не активна, включите использование данного функционала — флаг расположен немного левее).

Настройка использования дополнительных обработок

В открытом справочнике необходимо нажать на кнопку «добавить». Программа откроет диалоговое окно выбора файла, в котором необходимо указать файл разработанной нами ранее печатную форму. Если всё было сделано правильно, система автоматически заполнить все параметры правильно и останется только нажать кнопку «записать и закрыть»:

Добавление внешней печатной формы в 1С

Как видно, параметры скопированы из функции «СведенияОВнешнейОбработке()».

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

Новый шаблон в списке выбора

При нажатии на команду система сформирует нужную нам форму:

Полученная печатная форма

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

Если у вас что-то не получается, рекомендую воспользоватся механизмом отладки внешних печатных форм.

Скачать получившийся пример внешней печатной формы можно по ссылке — ШаблонВнешнейПечатнойФормыБСП 2.0 (8.2).

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

Другие статьи по 1С:

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

Задайте ВОПРОС на нашем форуме 1С! ››

СПРОСИТЕ в комментариях!

Комментариев: 43 на “Внешние печатные формы в управляемых формах 1С 8.3 и 8.2
  1. Большое спасибо. Все очень доходчиво.
    Материал очень помог.

    Ответить

  2. Спасибо, хорошо объяснили, вот только такой вопрос.
    Когда через внешнюю печ. форму вывожу на печать есть возможность менять текст выводимого документа, тогда как в типовых — нет такой возможности. Как запретить?

    Ответить

    • Спасибо!

      По идее так:
      ТабличныйДокумент.ТолькоПросмотр = Истина;

      Напишите, как попробуйте

      Ответить

    • Или поставить защиту на все ячейки табличного документа (макета).

      Ответить

  3. не работает пример :
    Не удалось сформировать внешнюю печатную форму!
    Поле объекта не обнаружено (СсылкаНаОбъект)
    Не удалось сформировать внешнюю печатную форму!
    Обращение к процедуре объекта как к функции (Печать)

    Ответить

    • Странно, реквизита СсылкаНаОбъект даже нет в обработке.

      Можете скинуть строку кода где возникает ошибка?

      Ответить

  4. Спасибо большое.Очень помогло.К тому же это был мой первый опыт разработки ВПФ на управляемых формах

    Ответить

  5. А как в УТ 11 или БП 3.0 заменить встроенную печатную форму на свою? Чтобы в меню Печать не появлялся новый пункт…

    Ответить

    • На вопрос как заменить печатную форму, а не создавать новую — ответа нет.
      Также невозможно отключить ненужную типовую форму, без снятия конфигурации с поддержки! 🙁
      УТ 11.1 это касается точно.

      Ответить

      • В УТ вроде бы нельзя подменять.
        Да и отключить типовй возможности я не нашел — хотя самому очень надо было.

        Количество форм у клиента перевалило за 50 :)) Научили пользоваться комплектами печатных форм. Трудностей не возникает

        Ответить

  6. Спасибо!
    Пошагово быстро создал печатную форму. Делал для чека акт по доставке.

    Ответить

  7. Спасибо большое. Даже огромное.

    Ответить

  8. Очень понятно и заставляет подумать, вместо copy/paste.
    Спасибо!

    Ответить

  9. Добрый день. Кирилл, вы бы не могли подсказать, как настроить в 1с Бухгалтерия 8.2 печать комплекта документов реализации (ТОРГ-12, ТТН, ТН) так, чтобы можно было одним кликом мыши распечатать полный комплект. Возможно ли это в настройках внешних печатных форм?! Плиз….

    Ответить

    • Ольга, добрый день!

      К сожалению, в 1с Бухгалтерии этой возможности нет. Как вариант — создать единую внешнюю печатную форму, в которую вывести сразу 3 документа. Но тут без программирования не обойтись

      Ответить

  10. Добрый вечер.

    1. Подскажите как найти ошибку во ВПФ? В 8.2 во ВПФ можно было добавить форму, реквизит СсылкаНаОбъект, и через кнопку вызвать функцию «Печать».
    Далее не подключая обработку можно было заниматься отладкой.

    А как сделать подобное здесь?
    (Выдаёт ошибку, потому что я сразу стал использовать свою функцию формирования табличного документа, а исправить не понимаю как)

    2. В Вашем примере в процедуре Печать используется МассивОбъектов[0]
    т.е. данный пример при печати одного документа будет работать а при печати пачки документов просто повторит первый документ несколько раз? Или просто один раз первый из списка?

    PS. Приношу извинения за возможную сумбурность… Что с нас программистов взять в момент творчества? 🙂

    Ответить

    • Добрый вечер! Спасибо за комментарий:)

      1. Я, если надо отладить ВПФ, делаю форму с ссылкой на документ и кнопкой, в обработчике которой прописываю примерно такой код:

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

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

      2. Это для упрощения примера, конечно же так лучше не делать :)))
      Лучше передавать туда массив и в запросе отбирать документы с помощью конструкции «В (&МассивДокументов)»

      Ответить

  11. Не работает команда ПолучитьОбласть() — пишет «Метод не определен на тонком клиенте
    Я начинающий Программист 1С 8.3 . Сделал все как у вас , но получил ошибку. Не подскажете в чем дело ? Текст посылаю
    Функция ПолучитьМакетНаСервере()
    Объект1 = РеквизитФормыВЗначение(«Объект»);
    Макет = Объект1.ПолучитьМакет(«МХ3Альбом»);
    Сообщить(«Макет=»+Макет);
    Возврат Макет;
    КонецФункции
    Процедура ПечатьМХ3(Команда)
    Сообщить(«Все напечатано»);

    Макет = ПолучитьМакетНаСервере(); Сообщить(«Макет1=»+Макет);
    Область = Макет.ПолучитьОбласть(«ШапкаПервойСтраницы»); Выдает ошибку !!!!!!!!!
    КонецПроцедуры

    Ответить

    • На клиенте нельзя использовать «получитьмакет», только на серверной процедуре.

      Ответить

  12. Спасибо! Тоже получилось!

    Ответить

  13. {ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(237)}: В обработчике печати не был сформирован табличный документ для: Маршрутный лист упрощенный
    ВызватьИсключение(ТекстСообщенияОбОшибке);

    почему может возникать?

    Ответить

    • Ошибка во внешней печатной форме.

      Гляньте в журнале регистрации, скорее всего будет более подробная ошибка.

      Ответить

  14. Может глупый вопрос, но не могу сообразить. А можно к внешней печатной форме два макета цеплять и в зависимости от определенного параметра выводить на печать один или другой макет?

    Ответить

  15. Да, конечно можно. Используйте примерно такой код:

    Если < условие> Тогда
    МакетОбработки = ПолучитьМакет(«Счет_1»);
    Иначе
    МакетОбработки = ПолучитьМакет(«Счет_2»);
    КонецЕсли;

    Ответить

  16. Большое спасибо, все получилось!

    Ответить

  17. Добрый день! А как добавить колонку Единица измерения? Какой код должен быть в СтрокаТЧ? Спасибо!

    Ответить

    • Добавьте на макет параметр с таким же названием и тогда код:
      ЗаполнитьЗначенияСвойств(ОбластьСтроки.Параметры, ТекущаяСтрока);

      Должен отрабоатать корректно.

      На всякий случай, вручную параметр можно определить вот так:

      ОбластьСтроки.Параметры.< НазваниеПараметра> = < ЗначениеПараметра>;

      Ответить

  18. Добрый день!
    А подскажите, пожалуйста, как отключить кнопку редактирования макета (наверху «Редактирование»)

    Ответить

    • Добрый день!

      В типовом функционале, наверное, только кодом…

      Ответить

  19. Спасибо большое! Просто и понятно!

    Ответить

  20. Добрый день, подскажите в чем ошибка (1с 8.3 управ.торговлей 2.3)
    в процедуре

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

    КонецПроцедуры

    выбивает ошибку

    {ВнешняяОбработка.ВнешняяОбработкаРКО.МодульОбъекта(44,3)}: Переменная не определена (УправлениеПечатью)
    <>УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ВнешняяОбработкаРКО», «Внешняя обработка РКО», СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)); (Проверка: Толстый клиент (обычное приложение))

    Ответить

    • Добрый день, Юлия,

      Я уже вам ответил на форуме — проверьте наличие модуля «УправлениеПечатью». Возможно, у вас какая то другая версия библиотеки стандартных подсистем.

      Ответить

      • У меня было то же, что у Юли. Пока не поставил &НаКлиенте над процедурой «Печать»

        Ответить

        • Спасибо за помощь, это верно — УправлениеПечатью клиентский модуль

          Ответить

  21. Спасибо за ваш сайт!
    Наконец-то стоящие материалы с рабочими примерами.

    Ответить

  22. Добрый день. Этот пример работает хорошо, когда макет — mxl. А если макет — Active Document

    Регистрируется внешняя обработка — прекрасно. Даже функционал отрабатывает, но после того как word заполняется прекрасно и выводится — вылезают ошибки БСП типа
    {ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(239)}: Поле объекта не обнаружено (КоличествоЭкземпляров)
    ПечатнаяФорма.ТабличныйДокумент.КоличествоЭкземпляров = ПечатнаяФорма.Экземпляров;

    Но, КоличествоЭкземпляров у com объекта нет …

    Ответить

    • Добрый день!

      Механизмы БСП заточены под тип данных именно «Табличный документ» (xml), обмануть программу и подсунуть ей «Active Document» мне кажется будет более трудозатратно, чем просто внести изменения в документ конфигурации (например, с помощью расширений конфигурации).

      Ответить

  23. Очень доступно и познавательно, спасибо. Скажите пожалуйста, а чего-то подобного по платформе 7.7 нет? Еще раз огромное спасибо.

    Ответить

    • Евгений, на 7.7 писал очень мало и давно. Но на сколько я знаю, механизмы есть, но информации дельной для вас не нашел 🙁

      Ответить

  24. Можете помочь почему не работает ВПФ? https://yadi.sk/d/UlUzv_CpxsAco

    Ответить

    • Напишите какая ошибка и что не получается. Ут под рукой нет

      Ответить

  25. Добрый день. Пытался подключить внешнюю печатную форму документа в УТ 11.3 и не смог (((
    Там все пункты меню как -то по другому выглядят чем в предыдущих версиях.
    Подскажите как теперь подключать ВПФ?

    Ответить

Добавить комментарий:

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*