Нещодавно виникла необхідність написати зовнішню друковану форму (далі - ВПФ) для УТ 11.2, а досвіду їх створення у мене не було. Я поліз шукати зразки, статті і т.д. Щось знайшов, але цілісної статті для новачків не було, тому захотілося написати інструкцію по створенню ВПФ для конфігурації на основі БСП - і УТ 11.2 одна з них.
УТ 11 дозволяє в режимі підприємства редагувати макет друкованої форми. Тому, якщо нам потрібно тільки візуально змінити макет, то розумніше це зробити штатними засобами в призначеному для користувача режимі. Коли ж ми хочемо програмно обчислити і підставити певні дані, яких немає у нас в макеті, тоді вже нам не обійтися без створення ВПФ.
Приступимо. Ми визначилися, що будемо робити ВПФ для документа ЗаказКліента. Знаходимо його в дереві метаданих, тиснемо по ньому правою кнопкою миші, вибираємо модуль менеджера і знаходимо в ньому такий код:
Нескладно зрозуміти, що в залежності від того, який макет нам потрібен (Рахунок на оплату, Замовлення клієнта і т.д.), ми повинні знайти відповідну обробку в дереві метаданих.
Розгортаємо розділ Обробки в дереві метаданих і знаходимо обробку "ПечатьЗаказовНаТовариУслугі".
З цієї обробки ми повинні скопіювати модуль менеджера в свою друковану форму. Тільки цей код ми собі вставимо в модуль об'єкта нашої ВПФ. І перетягуємо собі потрібний макет з цієї обробки в свою.
Щоб мати можливість підключити цю обробку як ВПФ, ми повинні вставити в модуль об'єкта службові процедури по додаванню відомостей про зовнішній обробці:
Тепер, якщо ми підключимо нашу ВПФ і спробуємо вивести її на друк, 1С видасть нам помилку, що їй недостатньо фізичних параметрів у процедурі Друк.
Порівняємо два фрагмента коду. Перший наш вихідний
а це той, який нам потрібен
Тобто нам треба вказати чотири, а не п'ять параметрів в функції Друк (). Параметр з ім'ям "ПараметриПечаті" прибраний, але він згадується в процедурі, тому на початку тексту процедури ми створимо цю змінну самі.
І приберемо або закомменіруем зайвий код:
Після цього наша ВПФ стане виводитися на друк, але макет вона буде використовувати з конфігурації, а не наш запозичений.
У процедурі СформіроватьПечатнуюФормуЗаказаКліента () викликається в свою чергу інша процедура:
Останній параметр - це ім'я макета друкарської форми. Тобто замість "Обработка.ПечатьЗаказовНаТовариУслугі.ПФ_MXL_ЗаказКліента" ми пишемо "ПФ_MXL_ЗаказКліента" (тобто ми вказуємо ім'я макета, який ми перетягнули себе в свою обробку).
Далі йдемо в процедуру ЗаполнітьТаблічнийДокументЗаказаНаТовариУслугі ().
Підсумуємо. Логіка була така. Ми полізли в модуль менеджера потрібного нам документа, щоб запозичити код процедури друку об'єкта. Знайшли код і макет. Отримали помилки при формуванні друкованої форми. Відкоригували код процедури друку. Знайшли код, який відповідає за отримання макета і підставили туди свій, щоб використовувався наш макет.