Как быстро вынести типовую печатную форму из конфигурации во внешнюю печатную форму

Опубликовал Илья Кутузов (Kutuzov) в раздел Программирование - Практика программирования

Как быстро и с минимальными изменениями встроенную печатную форму (например, ТОРГ-12) вынести во внешнюю печатную форму и выполнить требуемые доработки?

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

Как вариант решения этой проблемы - завести во внешней обработке, содержащей печатную форму, переменные, аналогичные реквизитам и табличным частям документа. А чтобы не уподобляться мастерам китайского кода, и не писать вещи, такие как: Реквизит1 = Док.Реквизит1 и т.д., можно воспользовать хорошей функцией ЗаполнитьЗначенияСвойств. Только переменные в обработке нужно объявлять экспортными. Вот пример кода модуля для внешней печатной формы заказа на производство (текст модуля ПечатьЗаказа() убран из соображений краткости).

Перем мВалютаРегламентированногоУчета Экспорт;

Перем
//реквизиты док-та
ВремяНапоминания Экспорт,
ДатаИсполнения Экспорт,
Комментарий Экспорт,
НапомнитьОСобытии Экспорт,
Организация Экспорт,
Ответственный Экспорт,
Подразделение Экспорт,
Исполнитель Экспорт,
ОсновнойЗаказНаПроизводство Экспорт,
ДатаЗапуска Экспорт;

Перем
Номер Экспорт, Дата Экспорт, Проведен Экспорт, Ссылка Экспорт;

Перем
//табличные части док-та
Продукция Экспорт,
ПараметрыВыпускаПродукции Экспорт,
Материалы Экспорт;

Процедура
ЗаполнитьЗначенияРеквизитовИзДокумента()

   
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СсылкаНаОбъект);

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

Функция
ПечатьЗаказа()


КонецФункции
// ПечатьЗаказа()

Функция Печать() Экспорт

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

   
ТабДокумент = ПечатьЗаказа();

    Возврат
ТабДокумент;

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

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

Еще вот челвек предложил алгоритм для автоматического формирования списка экспортных переменных из реквизитов документа: //infostart.ru/public/116567/

Скачать файлы

Наименование Файл Версия Размер
Заказ на производство.epf
.epf 12,15Kb
20.02.12
88
.epf 12,15Kb 88 Скачать

См. также

Комментарии
1. Игорь Гладкий (smooth) 172 17.12.11 11:19 Сейчас в теме
А почему бы не воспользоваться вариантом:
http://infostart.ru/public/66588/
?
И переменные переносить не надо! Форма обработки, в этом случае, сама думает, что она документ, со всеми вытекающими от сюда возможностями...
Конечно как вариант...
Anything; ir_en; sound; artbear; +4 Ответить 3
2. Алексей Ермилов (Alex_E) 1474 17.12.11 11:49 Сейчас в теме
Сам давно пользуюсь этим способом, а вот заполнить переменные функцией не догадался. Спасибо за подсказку!
3. Илья Кутузов (Kutuzov) 151 17.12.11 14:57 Сейчас в теме
(1) smooth, спасибо за ссылку, там даже более универсальный вариант получается.
4. Модератор раздела Артур Аюханов (artbear) 19.12.11 18:45 Сейчас в теме
(0) Давно известный баян, (1) намного функциональнее и проще.
5. evgen1977 (musatov1c.ru) 21.12.11 08:38 Сейчас в теме
Спасибо автору за поднятую тему. И спасибо прокомментировавшим. Проблема регулярная. Любая методическая помощь будет кстати :)
6. Михаил Шайдуров (Mshaydurov) 23.12.11 10:27 Сейчас в теме
ТАк то крутой выход. Спасибо автору! Интересно - сам додумался?
7. sound sound (sound) 519 23.12.11 13:32 Сейчас в теме
Да реально в (1) ссылка на более красивое решение, всегда под рукой есть такой шаблончик.
9. Irina Semiranova (avenira_) 29.12.11 19:01 Сейчас в теме
Спасибо! Для начинающего программиста (как я) очень полезная информация.
10. Владимир Гусев (adhocprog) 1077 24.01.12 21:19 Сейчас в теме
"+" за идею
хотя сам делаю как "мастер китайского кода".
изменения в типовом коде отмечаю, поэтому легко их внести повторно.
11. Алексей Савельев (Akahe) 25.01.12 05:19 Сейчас в теме
Спасибо очень интересная информация.
12. Дмитрий Головинский (Karglak) 25.01.12 10:41 Сейчас в теме
Очень полезной была бы подобная инфа по УТ 11 например.
13. q_i 307 19.02.12 16:26 Сейчас в теме
Написал генератор раздела описания переменных для данного алгоритма. Если кому нужно: http://infostart.ru/public/116567/
14. Программулькин (Программулькин) 259 22.02.12 03:45 Сейчас в теме