1С: Внешняя печатная форма Word (.docx) + готовый шаблон

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

Я ему помог, показав, как можно сделать макет договора в Word при помощи механизмов DocVariables. Но будем честны – это изобретение велосипеда.

1С: Библиотека стандартных подсистем – лучший друг 1С: Программиста. Поэтому давайте переделаем нормально. И разработаем шаблон ВПФ для Word файлов (.docx) для подключения к 1С

Шаг 1. Разработка макета

Вот как он выглядит в Word.

Полагаю, что и так всё в целом понятно, но давайте всё таки посмотрим на основные фишки.

{v8 Область.ЗдесьПишемИмяОбласти} – начало области

{/v8 Область.ЗдесьПишемИмяОбласти} – это конец области. Обрати внимание на слеш в начале

{v8 ИмяПараметра} – так определяем имя параметра

Области могут быть предопределенными. Такие как колонтитулы верхние, нижние и прочие.

Шаг 2. Разработка внешней обработки.

В модуле объекта внешней обработки пишем данные для подключения нашей ВПФ к командам печати.

Код в том же модуле объекта. Но уже сам код для печати документов.

Не забываем вставить макет вордовского файла как Двоичные данные.

Подключаем как ВПФ и радуемся

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

Шаг 3. Сделать сносную возможность отладки

Всё конечно круто, но постоянно переподключать ВПФку для отладки – мягко говоря гемморойненько. Давайте допилим форму обработки.

  1. Добавим реквизит ЗаказПокупателя
  2. Создадим форму обработки
  3. Добавим комманду печати
  4. В свойствах формы установим автосохранение реквизита

В модуле формы опишем команду и вызов программы Word.

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

Вывод картинок

Дополнение к статье с инструкцией как всё таки выводить картинки. В документации к БСП прямо не говориться о том как выводить картинки в макет, однако метод УправлениеПечатьюСлужебный.ЗаполнитьПараметрыОбласти(ПечатнаяФорма, Область, ДанныеОбъекта) нам прямо намекает, что картинки в макет выводить можно.

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

Приступаем. Сначала нужно модифицируем наш макет. Добавим колонку “Изображение” и параметр “Рисунок” (название не важно)

Вспоминаем, в каком месте у нас был вывод строк табличной части

ДанныеПечатиТовары – этот массив структур нам нужно дополнить, ссылкой на временное хранилище, которое будет содержать нашу картинку в виде двоичных данных.

И вуаля!

Заключение

Учитывайте, что приведенный мною код далёк от состояния оптимального и производительного. Здесь я его пытался максимально упростить, чтобы начинающим программистам было проще понять концепцию того, как работает подсистема печати в БСП.

А вообще, разработка печатной формы в MS Word средствами БСП это не сложнее, чем обычная печатная форма. А в некоторых местах даже проще.

Файлы для скачивания

chevron_left
chevron_right