Конфигурации: 1С:Бухгалтерия 8, 1С:Зарплата и кадры бюджетного учреждения 8 , 1С:Зарплата и Управление Персоналом 8, 1С:Комплексная автоматизация 8, 1С:Консолидация 8 , 1С:Налогоплательщик 8, 1С:Платежные документы 8, 1С:Предприниматель 8, 1С:Розница 8, 1С:Свод отчетов 8, 1С:Управление производственным предприятием 8, 1С:Управление торговлей 8
Документация для 1С: Предприятие 8.1
Создание новой или изменение старой печатной формы документа является одним из наиболее распространенных требований заказчика при внедрении типовых конфигураций. Внесение изменений непосредственно в типовую конфигурацию существенно увеличивает стоимость ее сопровождения, в частности при переходе на новые релизы. Использование внешних печатных форм помогает решить указанные затруднения.
Внешние печатные формы поддерживаются почти всеми типовыми конфигурациями. Однако в различных конфигурациях реализация рассматриваемой технологии может отличаться. Например, в БП имеется возможность "подменить" внутреннюю форму внешней. В УТ такой возможности нет. Требования типовых конфигураций к внутренней организации внешней обработки, реализующих печатную форму, у всех типовых конфигураций одинаковые.
Итак, печатная форма – это внешняя обработка, у которой должно быть:
1. Реквизит "СсылкаНаОбъект" типа ДокументСсылка неопределенного или определенного вида;
2. В модуле обработки должна быть функция "Печать(); Экспорт;", у которой имеется ключевое слово "Экспорт". Результатом выполнения функции должен быть табличный документ или значение "Неопределено".
3. Необязательно. Макет с идентификатором "Параметры_Авторегистрации" в первом столбце которого в каждой строчке можно указать объекты, для которых предназначена печатная форма. Например, "Документы.ЗаказПокупателя".
Если будет возвращен табличный документ, то с ним будут выполнены штатные действия средствами конфигурации (например, будет показан пользователю для дальнейшей печати). Частный случай, где используется значение "Неопределено", будет описан в другой статье. Кроме подготовки печатных форм описанная технология может применяться для других целей. Мною создавались обработки по изменению табличной части документа (в частности, пересчет НДС для устранения ошибок округления, группировка строк с одинаковой номенклатурой и др.).
В отличие от семерки, в восьмерке передается не контекст формы, но ссылка. Отсюда возникает ограничение – печатать можно только записанный документ.
Напомню, что правилом хорошего тона в восьмерке считается доступ к реквизитам документа только с помощью запроса, но не через ссылку.
Например:
"ВЫБРАТЬ *
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
или
"ВЫБРАТЬ *
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары
| КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
Несколько усложнился процесс отладки кода обработки. Связано это с тем, что файл с обработкой записывается в хранилище информации. Если мы установим точку останова в тексте обработки, то не получим остановки никогда.
Для обхода сложившейся ситуации можно предложить следующее. Точку останова необходимо установить в модуле документа на строке
ТабДокумент = Обработка.Печать();, после чего в конфигураторе открыть файл PrnForm.tmp и уже в нем установить точку на требуемое место.
В качестве бонуса предлагаю обработку
http://infostart.ru/public/14686/ , с помощью которой можно облегчить процесс тестирования кода. В обработке указываем экземпляр документа для тестирования и имя файла внешней обработки. После чего, тестируем код как обычный модуль.
З.Ы. Недавно столкнулась с такой ситуацией. Опытные специалисты по семерке пытались внести простые изменения в печатные формы, в частности удалить отдельные заполняемые поля. После удаления поля из макета они получали синтаксическую ошибку времени выполнения. Для устранения ошибки достаточно удалить строку кода, в которой происходит назначение параметра макета. Например, если нет необходимости печатать должность руководителя, нужно удалить соответствующую строку
ОбластьМакетаПодвал.Параметры.ДолжностьРуководителя = Руководители.РуководительДолжность;. Если назначение параметра происходит с помощью метода Заполнить(), например,
ОбластьМакетаШапка.Параметры.Заполнить(Шапка);, то никаких ошибок не возникает и исправлять код не требуется.