IE 2016

Внешние печатные формы в восьмерке

Опубликовал Poppy (poppy) в раздел Программирование - Практика программирования

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

Статья является началом цикла статей и разработок:
Внешние печатные формы в восьмерке http://infostart.ru/blogs/157
Обработка для тестирования внешних печатных форм в восьмерке http://infostart.ru/projects/833/
Использование встроенного почтового клиента - http://infostart.ru/blogs/161/
Документ с печатью и подписью - http://infostart.ru/blogs/162/
Внешние печатные формы в восьмерке II - http://infostart.ru/blogs/324/
Заполнение табличных частей документов в восьмерке (внешние обработки) http://infostart.ru/blogs/345/
Обработка для тестирования внешних обработок изменения табличных частей http://infostart.ru/projects/1749/
Использование свойств объектов при доработке типовых конфигураций http://infostart.ru/blogs/692/
Создание новой или изменение старой печатной формы документа является одним из наиболее распространенных требований заказчика при внедрении типовых конфигураций. Внесение изменений непосредственно в типовую конфигурацию существенно увеличивает стоимость ее сопровождения, в частности при переходе на новые релизы. Использование внешних печатных форм помогает решить указанные затруднения.

Внешние печатные формы поддерживаются почти всеми типовыми конфигурациями. Однако в различных конфигурациях реализация рассматриваемой технологии может отличаться. Например, в БП имеется возможность "подменить" внутреннюю форму внешней. В УТ такой возможности нет. Требования типовых конфигураций к внутренней организации внешней обработки, реализующих печатную форму, у всех типовых конфигураций одинаковые.

Итак, печатная форма – это внешняя обработка, у которой должно быть:

1. Реквизит "СсылкаНаОбъект" типа ДокументСсылка неопределенного или определенного вида;

2. В модуле обработки должна быть функция "Печать(); Экспорт;", у которой имеется ключевое слово "Экспорт". Результатом выполнения функции должен быть табличный документ или значение "Неопределено".

3. Необязательно. Макет с идентификатором "Параметры_Авторегистрации" в первом столбце которого в каждой строчке можно указать объекты, для которых предназначена печатная форма. Например, "Документы.ЗаказПокупателя".

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

В отличие от семерки, в восьмерке передается не контекст формы, но ссылка. Отсюда возникает ограничение – печатать можно только записанный документ.

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

Например:

"ВЫБРАТЬ * |ИЗ
|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
|	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";


или

"ВЫБРАТЬ * |ИЗ
|	Документ.РеализацияТоваровУслуг.Товары 
|		КАК РеализацияТоваровУслуг
|ГДЕ
|	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";


Несколько усложнился процесс отладки кода обработки. Связано это с тем, что файл с обработкой записывается в хранилище информации. Если мы установим точку останова в тексте обработки, то не получим остановки никогда.

Для обхода сложившейся ситуации можно предложить следующее. Точку останова необходимо установить в модуле документа на строке ТабДокумент = Обработка.Печать();, после чего в конфигураторе открыть файл PrnForm.tmp и уже в нем установить точку на требуемое место.

В качестве бонуса предлагаю обработку http://infostart.ru/public/14686/ , с помощью которой можно облегчить процесс тестирования кода. В обработке указываем экземпляр документа для тестирования и имя файла внешней обработки. После чего, тестируем код как обычный модуль.

З.Ы. Недавно столкнулась с такой ситуацией. Опытные специалисты по семерке пытались внести простые изменения в печатные формы, в частности удалить отдельные заполняемые поля. После удаления поля из макета они получали синтаксическую ошибку времени выполнения. Для устранения ошибки достаточно удалить строку кода, в которой происходит назначение параметра макета. Например, если нет необходимости печатать должность руководителя, нужно удалить соответствующую строку ОбластьМакетаПодвал.Параметры.ДолжностьРуководителя = Руководители.РуководительДолжность;. Если назначение параметра происходит с помощью метода Заполнить(), например, ОбластьМакетаШапка.Параметры.Заполнить(Шапка);, то никаких ошибок не возникает и исправлять код не требуется.

См. также

Лучшие комментарии

41. svetlana-a-s 14.05.2014 06:40
(40) Fr1eNd_Tver, мне пригодилась статья здесь http://1cblogs.ru/1c-prostye-primery-razrabotki/sozdanie-vneshnej-pechatnoj-formy/
+ 1 [ toxicoff; ]
# Ответить
2. Asmir 19.03.2007 11:34
Спасибо за статью
+ 1 [ daho; ]
# Ответить
4. Ананист 20.04.2007 11:31
Аффтар жжот - пеши исчо!
# Удалить Изменить Ответить

Комментарии

1. 18.03.2007 23:12
а это статья для кого?
для начинающих восьмерочников?
# Ответить
2. Андрей Смирнов (Asmir) 19.03.2007 11:34
Спасибо за статью
+ 1 [ daho; ]
# Ответить
3. Poppy (poppy) 21.03.2007 01:59
> а это статья для кого?

ИМХО для начинаюх и развивающихся. ;) Эксперты справятся с задачей без нее.

Планирую, что это начало цикла статей про печатные формы.
# Ответить
4. 20.04.2007 11:31
Аффтар жжот - пеши исчо!
# Удалить Изменить Ответить
5. Ольга (Sova123) 21.11.2007 11:22
автор а как внуртренню печатную форму сохранить во внешнюю?
Ответили: (6)
# Ответить
6. Poppy (poppy) 01.12.2007 18:33
(5)
В двух словах не объяснишь...
Нужно перенести используемый макет и процедуру из конфигурации во внешнюю обработку. В процедуре заменить ЭтотОбъект.Ссылка на СсылкаНаОбъект.
Далее - затачивать напильником.

Может статейку на эту тему забацать?
Ответили: (10)
# Ответить
7. Archangel (Archangel1) 26.06.2008 22:23
>> Может статейку на эту тему забацать?
Не плохо бы? :)...
# Ответить
8. PavelAkaev (pavelakaev) 24.03.2009 00:47
Помогло
# Ответить
9. MasterSVS (MasterSVS) 09.04.2009 16:43
Спасибо...
# Ответить
10. Геннадий Долгих (FlyLink) 03.12.2009 00:27
(6)а где статейка то?
# Ответить
11. Павел Жданов (heavymetal) 30.07.2010 15:20
Было бы не плохо описать еще ДополнительныеПараметры
# Ответить
13. isn Игнатьев (isn) 09.03.2011 14:11
Здравствуйте!
Подскажите никто не реализовывал как внешнюю печатную форму к документу на основе компновщика данных? Стандартный механизм создания не совсем подходит.
P.S. скорее всего я его не так "прикручиваю".
Ответили: (14) (15)
# Ответить
15. Александр Медведев (anig99) 09.03.2011 16:41
(13) тебе нужен именно отчет вызвать или вывести результат в печатную форма?
результат СКД можно в таблицу значений выгрузить, можно макет нарисовать для СКД, можно вызвать и выполнить отчет программно.
# Ответить
16. Dmitry -- (Zerkon) 21.06.2011 13:34
Применительно в 8.2 и стандартной УТ дополню: "ТабДокумент = Обработка.Печать()" находится в "ОбщийМодуль.УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт", а временный файл создается, видимо, со случайным именем, так что гораздо проще сделать точку остановки на этой строки и просто по F11 перейти дальше. Система сама найдет и откроет этот файл. Стоит проверить в других конфигурациях, но там наверное такой же механизм...
# Ответить
17. Мижган Андреев (Mihandr) 21.06.2011 13:43
Извините, что не в тему... не могу сегодня скачать нужную обработку, сегодня еще не скачивал, захожу на закладку файлы - ни чего не происходит, по нажатию на сам файл, открывается пустое окно в браузере, ОПЕРА 11.11, в чем может быт проблема?
# Ответить
18. Наталья Кошеварникова (Roby) 17.09.2011 14:48
Прочитала все статьи, очень полезно не только для начинающих, но и таких как я, которые пишут от случая к случаю, и поэтому нет хорошего понимания, что и как делать. А также очень пригодилась обработка для тестирования, а то раньше как слепой котенок мучаешься и не знаешь в чем ошибка и как ее выявить, и из-за этого написание внешних п/ф и обработок занимало уйму времени
# Ответить
19. tvv (pmtvv) 09.10.2011 14:59
статья понравилась, спасибо
# Ответить
20. Alexey Pak (Alexey55) 27.10.2011 14:17
Спасибо!
Статья пригодилась
# Ответить
21. Vladimir (Boroda) 19.11.2011 16:13
Хотя статья и написана давно, но натолкнулся на неё только недавно. Очень понравилась, и материал пригодился на практике. Спасибо!
# Ответить
22. Тамара Горбачева (GTV) 23.11.2011 08:10
Спасибо, для таких как я - начинающих, очень ценно!
# Ответить
23. Эллина (Linery24) 25.11.2011 11:34
:) хорошо написано
# Ответить
24. Сергей Бибиков (Serg_17) 23.12.2011 04:57
Спасибо, статья просто и понятно объясняет как. практически полезна.
# Ответить
25. Харьков Харьков (xaker1C) 23.12.2011 05:09
Спасибо .Очень полезная статья
# Ответить
26. 27.12.2011 21:10
Спасибо. Коротко и по делу. И полезно будет не только начинающим, но и тем кто считает, что уже умеет. Потому как порой скачаешь некоторые творения ради экономии времени, так волосы дыбом встают от "оригинальности" решений.
# Ответить
27. Андрей Дегтярев (dagovich) 13.01.2012 13:38
КА 1.1.15.1
Внешняя счета-фактуры выдает ошибку:


{ВнешняяОбработка.SchetFakture.МодульОбъекта(668)}: Ошибка при вызове метода контекста (ПредставлениеСерий)
Строчка.ТоварНаименование = СокрЛП(ВыборкаСтрокТовары.ТоварНаименование) + ФормированиеПечатныхФормСервер.ПредставлениеСерий(ВыборкаСтрокТовары);
по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ПредставлениеСерий ().
# Ответить
29. Денис Зубарев (MeaTDeN) 19.01.2012 17:11
Побольше бы таких статей для начинающих программистов, а то сложно по научным книжкам изучать программирование на 1С.
# Ответить
30. Олег Иванов (oleg_ss) 22.01.2012 13:03
Еще раз Спасибо!
Для начинающих все доходчиво и понятно.
# Ответить
31. Илья Кабышев (BAPPKAH) 01.02.2012 23:09
Спасибо!
Статья пригодилась
# Ответить
32. Olga Gabuza (OLga_gab) 02.02.2012 02:24
Прочитала статью, очень полезно для начинающих, таких как я, которые пишут от случая к случаю, и поэтому нет хорошего понимания, что и как делать. А также очень пригодилась обработка для тестирования, а то раньше как слепой котенок мучаешься и не знаешь в чем ошибка и как ее выявить, и из-за этого написание внешних п/ф и обработок занимало уйму времени.
# Ответить
33. элла иванова (2011b11) 20.04.2012 09:04
Cпасибо Вам за обработку.
Для начинающих все доходчиво и понятно.
# Ответить
34. Наталья Ожигина (Nathaly) 17.08.2012 14:57
Спасибо, пригодилось.
# Ответить
35. Константин Балаев (Mamakan) 11.11.2012 10:55
Хотя статья и написана давно, но только сейчас понадобился описанный функционал. Все понравилась, и материал пригодился на практике. Спасибо!
# Ответить
36. Андрей Штоколов (Alfer) 12.11.2012 10:03
Браво Браво - бис
# Ответить
38. Андрей - (Motor24) 07.11.2013 14:57
Откопал буквально только что. Огромное спасибо за столь лаконичное и ёмкое изложение!
# Ответить
39. Aleck Zgonnik (0614) 29.03.2014 14:53
Спасибо!
# Ответить
40. Anton Chikov (Fr1eNd_Tver) 31.03.2014 11:18
а для 8.2 и 8.3 есть описание, хотелось бы освежить в памяти.
Ответили: (41) (42)
# Ответить
42. Елена Пименова (Bukaska) 14.05.2014 09:50
(40) Fr1eNd_Tver, По рисованию ВПФ у меня можете статью посмотреть)
# Ответить
43. Александр Шкут (alex_shkut) 20.08.2015 08:57
В самом начале текста в строчке
2. В модуле обработки должна быть функция "Печать(); Экспорт;",
уберите точку с запятой перед Экспорт - это синтаксическая ошибка.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл