Яндекс.Метрика
  Афина. Как использовать готовые формы для заполнения их данными из проекта.

К содержанию

   

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

Разработчик может иметь такие формы в двух вариантах:
- в формате распространенных приложений, как правило, MS Excel или MS Word (натасканные из интернета, допустим, или созданных в самих организациях);
- в виде отсканированного изображения.

Разберемся как эти готовые формы можно применить в Афине.

1. В формате распространенных приложений.

Возьмем готовую форму в формате Excel. Копируем ее в другой файл, который будем называть шаблоном.
Далее в зависимости от сложности формы.
Под сложностью подразумевается наличие объединенных ячеек, в которые экспортируются данные. Если такие есть, то форма сложная, иначе простая.

Для сложной формы шаблон нужно подготовить. Подготовка заключается в расстановке так называемых меток. Метками могут служить сочетание любых символов с условием, что на каждом листе Excel'евской книги метки уникальны (не повторяются в пределах листа).

Напомню как можно механизировать заполнение ячеек уникальными метками.
Вводите в первую ячейку столбца метку тип
#1, затем вместе с ней отмечаете необходимое количество ячеек в столбце. Вызываете диалог заполнения (меню: Правка - Заполнить - Прогрессия). В диалоге отмечаете checkbox "автозаполнение" из группы "Тип" и OK.
Должно получится ряд ячеек с метками #1...#10. В другую колонку вставьте метку с другим префиксным символом, к примеру, %1 (префиксных символов может быть и больше одного) и проделайте снова все описанные действия. Так же можно заполнять и строки.

В Афине подготавливаете данные в программе какого-либо справочника.
Вся информация для экспорта заносится в две колонки строкового типа: первую колонку заполняете метками, которые были занесены в Excel,  во вторую необходимые данные, соответствующие этим меткам.
Здесь на помощь может прийти функция Массив, которая позволяет конструировать колонки.

Примерно так:
кМет := Масиив("#1","#2,..."#10"); !заполняем массив меток
Колонку меток и данных можно создавать и в цикле - все зависит от того какая форма и какие данные.
Только необходимо помнить, что количество элементов в обоих колонках должно быть одинаковым, иначе во время выполнения будет сгенерирована ошибка.

После создания колонок применяется функция ExportToExcel. Конкретно ее применение описано в справочной системе. В общем случае в нее передается: имя файла шаблона; имя файла, в который будет записана заполненная форма (что предохраняет шаблон от рукоприкладства пользователя); далее идут переменное количество параметров сгруппированных по четыре: номер листа, и три колонки строкового типа. Одна из двух первых колонок (из каждой четверки параметров) может не передаваться. Функция открывает книгу, переходит на указанный лист, затем просто ищет на листе метки из первой колонки и заменяет их на данные из второй.
В нашем случае вызов функции может выглядеть так:
ExportToExcel("с:\forms\templ.xls", "с:\forms\01.xls", 1, кМетки, , кДанные);

Для простой формы нет необходимости в шаблоне расставлять метки. В функцию ExportToExcel передаются такие же две колонки, но в первой вместо меток должны размещаться абсолютные координаты ячеек в нотации, которая принята в Excel'е: А1,D5,C15 и т.п.
Например так:
ExportToExcel("с:\forms\templ.xls", "с:\forms\01.xls", 1, , кЯчейки, кДанные);

Формы подготовленные в Excel'е могут быть такими, что можно применять к ним комбинированный способ: часть ячеек заполнять через метки, а часть заполнять через передаваемые координаты ячеек. Для этого надо подготовить не две, а три колонки, две из которых будет содержать метки и координаты, а третья, как всегда - данные. Здесь во всех трех колонках количество элементов тоже должно быть одинаковым.



ExportToExcel("с:\forms\templ.xls", "с:\forms\01.xls", 1, кЯчейки, кМетки, кДанные);

Для экспортирования данных для более чем одного столбца (или строки) необходимо сформировать нужное количество колонок и и передавать в параметрах все колоноки.
ExportToExcel("с:\forms\templ.xls", "с:\forms\01.xls", 1, кЯчейки1, кМетки1, кДанные1,
                                                                               1, кЯчейки2, кМетки2, кДанные2,
                                                                               2, кЯчейки3, кМетки3, кДанные3);

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

Начиная с версии 2008.01 функция ExportToExcel позволяет вставлять пустые строки на листах шаблона.
Такая возможность необходима, если количество строк с данными заранее не известно, а шаблон имеет "подвал" (ФИО, подписывающих документ, например), который нельзя "затирать" данными.

В этом случае передается "команда" для вставки необходимого количества пустых строк между "шапкой" таблицы и ее "подвалом". Затем в пустые строки передаются данные.

"Команда" на вставку строк состоит так же из четверки параметров как и параметры для передачи данных, но  специально подготовленных:
первый параметр из четверки - число: номер листа, на котором должны вставляться строки;
второй: М := Массив("0"); !признак вставки строк (всегда "0")
третий: Я := Массив("3"); !номер строки, начиная с которой вставляются строки
четвертый: Д := Массив("10"); !количество вставляемых строк
где "М", "Я" и "Д" объявлены как строковые колонки в секции переменных (эти наименования для примера).
Номер строки и количество строк передаются в строковом представлении (может быть задействована функция "ВСтроку")..

 

MS Word. Если у вас есть готовая форма документа в формате MS Word, то подготовка шаблона мало чем отличается от подготовки шаблона в Excel'е, разумеется, с учетом специфики этого приложения.
Метки в Word'е лучше вставлять обрамленными в какие-нибудь (однообразные) символы: угловые скобки, знак процента и т.п. (впрочем, это дело фантазии разработчика). К тому же здесь метки можно называть так как называются данные (в структуре), значение которых будут экспортироваться.

Совет: если метка (а после экспорта заменяющая ее строка), имеют другой формат по отношению к окружающему тексту, то отделять метку следует неразрывным пробелом (Ctrl+Shift+Space), а другой формат должен этот пробел захватывать. Если вам не нужен в этом месте неразрывный пробел - вставьте перед ним еще один обычный пробел.

Для экспорта данных в Word существует другая функция: ExportToWord.

Таким образом, конструирование некоторых отчетов можно перенести в MS Excel (или в MS Word - здесь удобно делать договоры, например), а информацию из Афины экспортировать в эти заранее подготовленные документы.
Как правило, это делается в отчетах-справочниках, куда на форму "пристраивается" дополнительная кнопка, в  "привязанной"  функции которой и проделываются вышеописанные манипуляции.

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

 


2. Если в распоряжении разработчика есть отсканированный документ.

Для этих целей в конструктор отчетов нельзя вставлять изображение документа любого формата и любого размера (впрочем, в любом случае в отчет можно вставить только изображения в формате BMP).

Создайте новый отчет в справочнике, который будет заниматься формированием отчета. В пустом конструкторе правой кнопкой вызовете меню и нажмите "Установки листа...". Сделайте все необходимые настройки (формат, отступы, ориентацию листа) и после этого в левом нижнем углу диалога увидите какой размер в экранных точках имеет лист (без полей).

Размер изображения отсканированного документа не может быть больше этих значений (лучше немного меньше).

Картинку документа в любом графическом редакторе нужно сделать именно этого размера и в формате BMP. Можно и при сканировании документа задать нужные размеры и сохранить в требуемом формате.

Затем помещаете изображение документа в конструктор отчета. Картинку надо сдвинуть в самый левый верхний угол. Изображение будет выступать как подложка для дальнейшей работы над отчетом.
В те места, изображения где предполагается выводить данные вставляете поля для вывода данных и в функциях этих полей пишите текст для вывода данных.

Предупреждение.
Если размер изображения в конструкторе будет изменён (а такая возможность есть и это очень просто делать), то на печати не получится то что изображено в конструкторе - картинка при печати будет искажена, а выводимые данные будут не на своих местах. Только поэтому картинка документа должна иметь размер в экранных точках соответствующий установкам листа.

 

   
  К содержанию
Hosted by uCoz