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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

12 Comments

  1. smooth

    А почему бы не воспользоваться вариантом:

    http://infostart.ru/public/66588/

    ?

    И переменные переносить не надо! Форма обработки, в этом случае, сама думает, что она документ, со всеми вытекающими от сюда возможностями…

    Конечно как вариант…

    Reply
  2. Alex_E

    Сам давно пользуюсь этим способом, а вот заполнить переменные функцией не догадался. Спасибо за подсказку!

    Reply
  3. Kutuzov

    (1) smooth, спасибо за ссылку, там даже более универсальный вариант получается.

    Reply
  4. musatov1c.ru

    Спасибо автору за поднятую тему. И спасибо прокомментировавшим. Проблема регулярная. Любая методическая помощь будет кстати 🙂

    Reply
  5. Mshaydurov

    ТАк то крутой выход. Спасибо автору! Интересно — сам додумался?

    Reply
  6. sound

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

    Reply
  7. avenira_

    Спасибо! Для начинающего программиста (как я) очень полезная информация.

    Reply
  8. adhocprog

    «+» за идею

    хотя сам делаю как «мастер китайского кода».

    изменения в типовом коде отмечаю, поэтому легко их внести повторно.

    Reply
  9. Akahe

    Спасибо очень интересная информация.

    Reply
  10. Karglak

    Очень полезной была бы подобная инфа по УТ 11 например.

    Reply
  11. q_i

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

    Reply
  12. Программулькин

    прикольно.

    Reply

Leave a Comment

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