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

20.02.12

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Заказ на производство.epf
.epf 12,15Kb
87 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

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

14.05.2025    5267    DeerCven    15    

57

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    45917    dimanich70    83    

163

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6798    6    John_d    13    

59

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    56739    atdonya    31    

68

Универсальные функции Программист 1С v8.3 Бесплатно (free)

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

30.11.2023    8553    ke.92@mail.ru    17    

67

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22642    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. smooth 197 17.12.11 11:19 Сейчас в теме
А почему бы не воспользоваться вариантом:
http://infostart.ru/public/66588/
?
И переменные переносить не надо! Форма обработки, в этом случае, сама думает, что она документ, со всеми вытекающими от сюда возможностями...
Конечно как вариант...
Anything; ir_en; sound; artbear; +4 Ответить
3. Kutuzov 755 17.12.11 14:57 Сейчас в теме
(1) smooth, спасибо за ссылку, там даже более универсальный вариант получается.
7. sound 538 23.12.11 13:32 Сейчас в теме
Да реально в (1) ссылка на более красивое решение, всегда под рукой есть такой шаблончик.
2. Alex_E 2395 17.12.11 11:49 Сейчас в теме
Сам давно пользуюсь этим способом, а вот заполнить переменные функцией не догадался. Спасибо за подсказку!
4. Модератор раздела 19.12.11 18:45 Сейчас в теме
(0) Давно известный баян, (1) намного функциональнее и проще.
5. musatov1c.ru 6 21.12.11 08:38 Сейчас в теме
Спасибо автору за поднятую тему. И спасибо прокомментировавшим. Проблема регулярная. Любая методическая помощь будет кстати :)
6. Mshaydurov 2 23.12.11 10:27 Сейчас в теме
ТАк то крутой выход. Спасибо автору! Интересно - сам додумался?
8. пользователь 29.12.11 09:19
Сообщение было скрыто модератором.
...
9. avenira_ 29.12.11 19:01 Сейчас в теме
Спасибо! Для начинающего программиста (как я) очень полезная информация.
10. adhocprog 1129 24.01.12 21:19 Сейчас в теме
"+" за идею
хотя сам делаю как "мастер китайского кода".
изменения в типовом коде отмечаю, поэтому легко их внести повторно.
11. Akahe 25.01.12 05:19 Сейчас в теме
Спасибо очень интересная информация.
12. Karglak 25.01.12 10:41 Сейчас в теме
Очень полезной была бы подобная инфа по УТ 11 например.
13. q_i 586 19.02.12 16:26 Сейчас в теме
Написал генератор раздела описания переменных для данного алгоритма. Если кому нужно: http://infostart.ru/public/116567/
14. Программулькин 302 22.02.12 03:45 Сейчас в теме
15. frkbvfnjh 817 22.06.22 09:29 Сейчас в теме
Вы лучше расскажите как найти процедуру печати той или иной встроенной печатной формы
16. Kutuzov 755 22.06.22 14:15 Сейчас в теме
(15) Через отладку - замер производительности
17. frkbvfnjh 817 22.06.22 14:32 Сейчас в теме
(16) Отладка в типовых - не вариант, там так написан код, что он не поддается отладке, по крайней мере, что то найти с помощью отладки не реально. Короче методом тыка нашел, что ноги растут из метода Печать() модуля менеджера того объекта из которого идет печать печатной формы, а вот там уже отладкой, через миллиарды вложенных процедур и функций удалось добраться до кода нужно печатной формы. Но если не знать что нужно начать с этого метода, то отладкой ничего не найти
18. frkbvfnjh 817 22.06.22 14:34 Сейчас в теме
(16) Аааа, я понял, вы имеете ввиду замер производительности включить и потом посмотреть где оно вообще пробигает? Умно, спасибо, теперь так и буду делать.
Для отправки сообщения требуется регистрация/авторизация