Зовнішні обробки, друковані форми, обробки із заповнення табличних частин
У цьому матеріалі описуються особливості реалізації механізму підключення "Зовнішні обробки, друковані форми, обробки із заповнення табличних частин" (далі ВПФО). Також перелічуються вимоги, що висуваються до зовнішніх обробок, для можливості їх використання цим механізмом.Загальний опис. Опис видів довідника ВПФО та вимоги до підключуваних зовнішніх обробок. Довільна обробка. Обробка для заповнення ТЧ об'єктів. Зовнішня друкована форма. Технічна реалізація механізму "Зовнішні обробки, друковані форми, обробки із заповнення табличних частин"
Опис видів довідника ВПФО та вимоги до підключуваних зовнішніх обробок
Обробка для заповнення ТЧ об'єктів
У цьому матеріалі описуються особливості реалізації механізму підключення "Зовнішні обробки, друковані форми, обробки із заповнення табличних частин" (далі ВПФО). Також перелічуються вимоги, що висуваються до зовнішніх обробок, для можливості їх використання цим механізмом.
Загальний опис
Механізм призначений для підключення (без зміни конфігурації):
- Зовнішніх обробок для довільного виконання
- Зовнішніх обробок як додаткових друкованих форм об'єктів (довідників і документів)
- Обробок для заповнення табличних частин об'єктів
Зовнішні друковані форми та обробки створюються розробником із дотриманням певних умов. Умови є обов'язковими для виконання на етапі створення зовнішньої обробки, для її коректної роботи як підключуваної до конфігурації.
Для реалізації механізму ВПФО використовується довідник "Зовнішні обробки".
Для довідника передбачено спеціалізовані реквізити*:
- "Вид обробки" — описує, якого виду ця ВПФО
-
- Довільна обробка
- Обробка для заповнення табличних частин об'єктів
- Зовнішня друкована форма
- "Сховище зовнішньої обробки" — зберігає двійкові дані підключуваної зовнішньої обробки. Під час використання двійкові дані зберігаються на диск у тимчасовий файл, і звернення до файлу виконується програмно як до зовнішньої обробки.
ПРИМІТКА
Повний перелік реквізитів буде описано нижче, у розділі Технічна реалізація механізму "Зовнішні обробки, друковані форми, обробки із заповнення табличних частин"
Для зручності форми списків ВПФО викликаються окремо, із попередньо встановленим відбором за реквізитом "Вид обробки", із підменю "Сервіс".
Додавати та змінювати ВПФО в базі даних може користувач, який має право адміністрування додаткових форм та обробок. Це окрема роль у конфігурації.
Для решти користувачів призначаються права на читання(використання) та запис(зміну) за кожним елементом довідника ВПФО.
Переваги використання механізму ВПФО перед механізмом платформи відкриття зовнішніх обробок:
- Можливість використання механізму користувачами, ЯКІ НЕ мають права на інтерактивне відкриття зовнішніх обробок
- Обмеження доступу до використання та зміни обробок на рівні записів (RLS), тобто до кожної обробки окремо
- Цілісність БД і незмінність функціоналу залежно від зовнішніх чинників (перенесення БД, мережевої роботи користувачів, створення архівних копій БД тощо)
Опис видів довідника ВПФО та вимоги до підключуваних зовнішніх обробок
Розглянемо кожен вид ВПФО окремо.
Довільна обробка
Для включення довільних обробок до бази даних необхідно вказувати лише зовнішню обробку, що розміщується на диску.
Відкриття довільних обробок у формі списку виконується під час вибору елемента ВПФО з видом "Довільна обробка". При цьому виконується збереження двійкових даних із реквізиту "Сховище зовнішньої обробки" на диск у тимчасовий файл. Після цього у збереженої зовнішньої обробки відкривається основна форма.
Основна форма для довільної обробки має бути визначена обов'язково.
Обробка для заповнення ТЧ об'єктів
Для обробок заповнення ТЧ необхідно вказувати зовнішню обробку (файл на диску, з розширенням epf), список об'єктів та їх ТЧ, для яких необхідно використовувати цю обробку.
У типових конфігураціях об'єктами, що використовують цей механізм, є всі документи, які містять хоча б одну табличну частину.
Перед відкриттям форми об'єкта в командних панелях табличних полів (джерелом даних для яких є таблична частина об'єкта), яким відповідають певні рядки в довіднику ВПФО, програмно додаються пункти до підменю "Заповнити" (якщо підменю "Заповнити" відсутнє на командній панелі, воно створюється).
Під час натискання на створену перед відкриттям кнопку підменю "Заповнити" відбувається збереження відповідної обробки на диск у тимчасовий файл, для збереженої зовнішньої обробки викликається процедура:
Ініціалізувати (Об'єкт, Ім'яТабличноїЧастини, ТабличнеПолеОб'єкта)
де:
- Об'єкт – ДокументОб'єкт, ДовідникОб'єкт. Звідки було здійснено виклик процедури заповнення зовнішньої обробки;
- Ім'яТабличноїЧастини – Рядок. Ім'я табличної частини, для якої викликано обробку;
- ТабличнеПолеОб'єкта – Елемент форми: Табличне поле. Табличне поле форми, для якого викликано обробку.
Наявність експортної процедури "Ініціалізувати()" у модулі об'єкта обробки з видом "Заповнення табличних частин" є обов'язковою. У тілі цієї процедури має розміщуватися програмний код, що заповнює табличну частину відповідно до призначення обробки.
Обробка також може мати у своєму складі макет "Параметри_Авторегистрации", що використовується для автоматичного заповнення належності друкованої форми в довіднику "Зовнішні обробки". Макет має складатися з 2-х колонок — "повне ім'я об'єкта" та "ім'я табличної частини".
Приклад макета Параметри_Авторегистрации: ![]()
Зовнішня друкована форма
Для підключуваних зовнішніх друкованих форм указується:
- зовнішня обробка
- список об'єктів, для яких ця друкована форма використовується
Для кожного типу об'єкта додатково можна вказати:
Технічна реалізація механізму "Зовнішні обробки, друковані форми, обробки із заповнення табличних частин"
У базі даних зовнішні обробки, друковані форми, обробки із заповнення табличних частин зберігаються в довіднику "Зовнішні обробки". Довідник має таку структуру: 
Реквізити:
- ХранилищеВнешнейОбработки. Сховище значення, зберігаються двійкові дані обробки, визначеної для всього елемента.
- ВидОбработки. ПеречислениеСсылка. ВидиДодатковихЗовнішніхОбробок, визначає вид ВПФО, кожен вид (друкована форма, заповнення табличних частин, обробка) розглянуто окремо в розділі "Опис видів довідника ВПФО та вимоги до підключуваних зовнішніх обробок".
- Коментар. Рядок необмеженої довжини.
- КомментарийКФайлуИсточнику. Рядок необмеженої довжини, зберігає параметри файлу, дату створення тощо. Заповнюється автоматично в момент інтерактивного вибору файлу зовнішньої обробки. Користувачем не змінюється.
ТабличнаяЧасть.Принадлежность. Зберігає типи об'єктів, для яких задається ВПФО, та інші описані нижче параметри. Таблична частина використовується для елементів із видом обробки: "Друкована форма" або "Заповнення табличних частин".
Реквізити табличної частини:
- ПредставлениеОбъекта. Рядок необмеженої довжини, зберігає рядкове подання вибраного об'єкта, для відображення користувачу.
- СсылкаОбъекта. СправочникСсылка, ДокументСсылка, містить порожнє посилання на об'єкт конфігурації. оскільки реквізит типу "Тип" для табличної частини не може бути визначений, то за порожнім посиланням визначається тип об'єкта, для якого слід підключати зовнішню друковану форму або обробку із заповнення табличної частини. Посилання на порожнє значення певного типу зручно використовувати в запитах.
- ТабличнаяЧастьИмя**. Рядок, 100. Містить ім'я ТЧ об'єкта, для якого задається ВПФО.
- ТабличнаяЧастьПредставление**. Рядок необмеженої довжини. Містить синонім ТЧ об'єкта, використовується для відображення користувачу подання табличної частини об'єкта, для якого задається.
- НастройкиПостроителяДляОтбора***. Сховище значення, може містити налаштування побудовника звіту, вивантажені з нього відбори для вибраного об'єкта.
- ХранилищеВнешнейОбработки***. ХранилищеЗначения, може містити двійкові дані підключуваної зовнішньої обробки, яка використовуватиметься насамперед замість обробки, розміщеної в шапці.
- ЗаменяемаяПечатнаяФорма***. Рядок, 200. Ім'я друкованої вбудованої форми об'єкта, яку необхідно замінити підключуваною.
- ИмяФайлаПечатнойФормы***. Рядок необмеженої довжини — ім'я файлу підключеної друкованої форми.
- ПредставлениеОтбораПостроителя***. Рядок необмеженої довжини, зберігає подання відбору побудовника, використовується для відображення подання відбору в табличній частині форми елемента довідника "Зовнішні обробки".
Підключення додаткових друкованих форм до форм об'єктів конфігурації
Механізм додаткових друкованих форм є розширенням стандартного механізму друкованих форм об'єкта. Додавання додаткової форми до загального списку форм виконується в процедурах модуля форми об'єкта перед відкриттям, після запису та під час натискання на кнопку "Установити друк за замовчуванням".
Підменю "Друк" і кнопка "Друк за замовчуванням" у формі об'єкта не повинні бути присутніми в обов'язковому порядку. Вони формуються програмно, у разі якщо є хоча б одна друкована форма та задано друк за замовчуванням.
////////////////////////////////////////////////////////////////////////////// // МОДУЛЬ ОБ'ЄКТА ////////////////////////////////////////////////////////////////////////////// // Повертає доступні варіанти друку документа, що обробляються в модулі об'єкта // // Значення, що повертається: // Струткура, кожен рядок якої відповідає одному з варіантів друку // Функция ПолучитьСтруктуруПечатныхФорм() Экспорт // структура індивідуальна для кожного типу об'єкта Возврат Новый Структура("Аванс_Отчет","Авансовий звіт"); КонецФункции //ПолучитьСтруктуруПечатныхФорм() ////////////////////////////////////////////////////////////////////////////// // ФОРМА ОБ'ЄКТА ////////////////////////////////////////////////////////////////////////////// // Зберігає дерево макетів друкованих форм Перем мДеревоМакетов; // Зберігає елемент керування підменю друку Перем мПодменюПечати; // Зберігає елемент керування кнопкою друку за замовчуванням Перем мПечатьПоУмолчанию; // Процедура — обробник події "ПередОткрытием" форми. // Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) … // Установлення кнопок друку УстановитьКнопкиПечати(); … КонецПроцедуры // ПередОткрытием() // Процедура — обробник події "ПослеЗаписи" форми. // Процедура ПослеЗаписи() … // Установлення кнопок друку УстановитьКнопкиПечати(); … КонецПроцедуры // ПослеЗаписи() //Процедура за потреби встановлює підменю "Друк" і кнопку "Друк за замовчуванням" // Процедура УстановитьКнопкиПечати() мДеревоМакетов = ПолучитьДеревоМакетовПечати(Ссылка, ПолучитьСтруктуруПечатныхФорм(), Новый Действие("ОсновныеДействияФормыПечать"), Новый Действие("ОсновныеДействияФормыУстановитьПечатьПоУмолчанию")); УстановитьПодменюПечати (мПодменюПечати, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов.Строки.Количество() > 0); УстановитьПечатьПоУмолчанию(мПечатьПоУмолчанию, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов, Метаданные().Имя,Новый Действие("ОсновныеДействияФормыПечатьПоУмолчанию")); Если Не мПодменюПечати = Неопределено Тогда СформироватьПодменю(мДеревоМакетов, мПодменюПечати,Истина,Истина); КонецЕсли; КонецПроцедуры // Процедура — обробник натискання на кнопку "Друк за замовчуванням" // Процедура ОсновныеДействияФормыПечатьПоУмолчанию(Кнопка) ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст); КонецПроцедуры // Процедура — обробник натискання на кнопку "Друк" // Процедура ОсновныеДействияФормыПечать(Кнопка) ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст); КонецПроцедуры // Процедура — обробник натискання на кнопку "Установити друк за замовчуванням" // Процедура ОсновныеДействияФормыУстановитьПечатьПоУмолчанию(Кнопка) Если НазначитьКнопкуПечатиПоУмолчанию(мДеревоМакетов, Метаданные().Имя) Тогда УстановитьКнопкиПечати(); КонецЕсли; КонецПроцедуры
Підключення обробок із заповнення табличних частин до форм об'єктів конфігурації
Для забезпечення підключення механізму у формі об'єкта мають бути присутні такі процедури та функції:
////////////////////////////////////////////////////////////////////////////// // ФОРМА ОБ'ЄКТА //////////////////////////////////////// ////////////////////////////////////// // Зберігає відповідність Перем мКнопкиЗаполненияТЧ; // Процедура — обробник події "ПередОткрытием" форми. // Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) … // Установлення кнопок заповнення ТЧ УстановитьКнопкиПодменюЗаполненияТЧ(); … КонецПроцедуры // ПередОткрытием() // Процедура за потреби встановлює підменю "Заповнити" в командних панелях ТЧ документа // Процедура УстановитьКнопкиПодменюЗаполненияТЧ(); СоответствиеТЧ = Новый Соответствие; СоответствиеТЧ.Вставить(ЭлементыФормы.ВыданныеАвансы,ЭлементыФормы.КоманднаяПанельВыданныеАвансы); СоответствиеТЧ.Вставить(ЭлементыФормы.ВозвратнаяТара,ЭлементыФормы.КоманднаяПанельВозвратнаяТара); СоответствиеТЧ.Вставить(ЭлементыФормы.Прочее,ЭлементыФормы.КоманднаяПанельПрочее); СоответствиеТЧ.Вставить(ЭлементыФормы.ОплатаПоставщикам,ЭлементыФормы.КоманднаяПанельОплатаПоставщикам); СоответствиеТЧ.Вставить(ЭлементыФормы.Товары,ЭлементыФормы.КоманднаяПанельТовары.Кнопки.Заполнить); мКнопкиЗаполненияТЧ = СформироватьПодменюЗаполненияТЧ(Ссылка, СоответствиеТЧ, Новый Действие("НажатиеНаДополнительнуюКнопкуЗаполненияТЧ")); КонецПроцедуры // Процедура — обробник натискання на будь-яку з додаткових кнопок із заповнення ТЧ // Процедура НажатиеНаДополнительнуюКнопкуЗаполненияТЧ(Кнопка) ОбработатьНажатиеНаДополнительнуюКнопкуЗаполненияТЧ(мКнопкиЗаполненияТЧ.Строки.Найти(Кнопка.Имя,"Имя",Истина), ЭтотОбъект); КонецПроцедуры
- Відбір. Друкована форма буде доступною лише для об'єктів, що відповідають установленому відбору.
- Окрему друковану форму. Слід ураховувати, що у списках друкованих форм в об'єктах завжди з'являтиметься однаковий пункт підменю. Якщо окрему друковану форму не вказано, то використовуватиметься друкована форма із шапки елемента ВПФО.
- Вбудовану друковану форму. У разі заповнення цього реквізиту вказана вбудована друкована форма буде замінена зовнішньою.
Виклик діалогу налаштування умов відбору здійснюється на початку вибору значення в колонці "відбір": 
У формах об'єктів, у командній панелі форми (зазвичай це нижня командна панель) формується підменю кнопок друкованих форм. Підменю формується програмно, під час відкриття форми та під час запису об'єкта у формі (для забезпечення зміни пунктів меню залежно від даних об'єкта та спрацювання вказаних у друкованих формах умов відборів). У сформованому меню стандартні друковані форми відокремлюються від підключуваних роздільником.
Наприклад: 
Якщо знаходиться підключувана друкована форма, якою необхідно замінити стандартну, то вона замінюється та показується у списку стандартних друкованих форм. У цьому разі підключена друкована форма окремо у списку підключених друкованих форм не відображається.
Під час натискання на будь-яку з кнопок друку відбувається визначення, чи відповідає ця кнопка зовнішній друкованій формі або вбудованій у конфігурацію.
Для кнопок, що відповідають друкованим формам, вбудованим у конфігурацію, викликається вбудований механізм друку (цей механізм у межах поточного проєкту не розглядається).
Для кнопок, що відповідають зовнішнім друкованим формам, відбувається збереження відповідної обробки на диск у тимчасовий файл.
Для збереженої зовнішньої обробки:
- заповнюється реквізит "СсылкаНаОбъект" — тип "Будь-яке посилання", до якого передається посилання на об'єкт, для якого необхідно виконати друк;
- викликається функція "Печать()" (має розміщуватися в модулі обробки з ознакою "Експорт") без параметрів, що повертає табличний документ.
Наявність реквізиту "СсылкаНаОбъект" та експортної функції "Печать()" у модулі об'єкта обробки з видом "Зовнішня друкована форма" є обов'язковою.
У тілі функції "Печать()" має розміщуватися програмний код, який формує та повертає табличний документ відповідно до значення реквізиту "СсылкаНаОбъект".
Обробка також може мати у своєму складі макет "Параметри_Авторегистрации", що використовується для автоматичного заповнення належності друкованої форми в довіднику "Зовнішні обробки", який складається з однієї колонки — повне ім'я об'єкта, для якого створюватиметься відповідна кнопка друку.
Приклад макета Параметри_Авторегистрации: 
За дотримання цих вимог користувачу буде достатньо вказати під час реєстрації додаткової друкованої форми файл зовнішньої обробки, після чого всі реквізити форми заповняться автоматично.