Маленькі хитрощі передачі параметрів в макети друкованих форм.
Без претензій на винахід - тут нічого нового, просто накопичилося, тому і вирішив написати цю замітку.
У БСП давно вже з'явився механізм заміни макетів на призначені для користувача. В результаті використання цього механізму періодично виникають клієнти, у яких (ну як водиться - після поновлення) перестав друкуватися прибутковий касовий ордер (або щось ще, згадуйте самі) ...
Перший дзвінок від клієнта на базовій БП викликав легке здивування - якби помилка була в релізі, то шквал дзвінків був би практично забезпечений, а тут тиша, тільки один, але ... підключився, подивився - дійсно, звалюється помилково:
В голові відразу мислячи - «що за маячня, не може бути і т. Д. І т.п.» ... але виявляється - може. Користувачі (вони ж юзверя), вони ж такі витівники ... ось хто їх просив лізти в макети і видаляти там параметри, щоб замінити на свій, просто ексклюзивний текст, зберегти все це неподобство, а потім гордо заявити, що після оновлення (знову ж таки, коли ж ще?) перестав друкуватися ПКО?
Перший раз непонятка повна, вирішується через сім-салабім відладчик (як повернути стандартний макет - тема не цього роману), але виникає думка: «А якщо не користувачеві, а мені закортить замінити стандартний параметр своїм текстом, а параметр не потрібен ні разу? Що робити?".
Рішення - маленька хитрість, параметр повинен залишитися в макеті, але в друковану форму виводитися не повинен. Шляхів вирішення побачилось два:
- перший: Сховати параметр в ДУЖЕ вузьке поле макета (зовсім не подобається, потім не відразу знайдеш цей осередок, коли знадобиться);
- другий: взагалі застрахувати себе від подібних непорозумінь, включивши в осередок ВСЕ можливі параметри, що зустрічаються в макеті, де в властивості «Заповнення» вказати. що це шаблон. Причому осередок можна чи зменшувати розміри до неможливості, а просто «накрити» непрозорою прямокутною областю (у властивості «Розміщення» не забути вказати «Обрізати»):
Результат - можна писати будь-який текст, де захочеться, головне, щоб параметр залишився в макеті:
Далі виникають всякі «шкідливі» думки: якщо існує ймовірність того, що макет може яким-небудь «чарівним» чином змінитися, навіщо змушувати людей страждати витворений хитрощів, типу описаної вище?
Якщо малюємо свою друковану форму і знаємо, що з макетом може статися все, що завгодно, то не варто використовувати конструкції виведення параметрів типу:
Краще зібрати можливі параметри в структуру і заповнити параметри макета не кілька рядків, як вище, а як то так:
Так набагато простіше, тим більше, що головне - наявність або відсутність параметрів в макеті не викличе виліт програми помилково
Тепер, щоб швидко використовувати ці варіанти з заповненням осередку усіма параметрами форми або створення структури, народилася ідея використовувати обробку, яка складе рядок для шаблону осередку параметрів, або рядок для створення фіксованої структури для модуля друкованої форми.
Параметри шаблону потрібні для випадків, коли заповненням параметрів безпосередньо (через структуру) управляти не можна, наприклад, конфігурація на підтримку, знімати не можна в силу якихось цілком об'єктивних причин, а користувачеві для чогось потрібно періодично міняти макет.
Може бути ще варіант - є якийсь макет, в якому хмара параметрів, пропустити які по недогляд цілком можливо, але дуже не хотілося б.
За підсумками вийшла обробка, в яку можна вивести всі параметри загального мука, або макета з файлу з підсумковими рядками параметрів і рядки, для копипаста в текст конструктора структури:
Може бути й інша ситуація - є макет, там хмара параметрів, і не хочеться пропустити який-небудь.
Може, ще на що згодиться.