Документация VOGBIT - система управления производством

Генератор отчетов

Руководство разработчика отчетов. В системе VOGBIT отчеты формируются в книге MS Excel 2007 на основе шаблонов. Шаблон – это определенным образом оформленная книга MS Excel, загруженная в VOGBIT и снабженная в нем дополнительными реквизитами

1. Шаблоны отчётов

1.1 Описание

В системе VOGBIT отчеты формируются в книге MS Excel 2007 на основе шаблонов. Шаблон

- это определенным образом оформленная книга MS Excel, загруженная в VOGBIT и снабженная в нем дополнительными реквизитами.


Рис. 1.

1.2 Книга MS Excel

Для отчёта, состоящего только из одного вида документа, книга должна содержать один лист, на котором должен быть оформлен бланк. Если необходимо сделать комплект, состоящий из нескольких видов документов, то для каждого вида документа в книге MS Excel на отдельных листах нужно оформить соответствующее количество бланков, а так же оформить служебный лист Structure.

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

1.3 Форма ввода параметров

Для получения данных из VOGBIT в шаблоне оформляются запросы к базе данных VOGBIT в виде текста SQL-запроса или используются обозначения запросов из списка запросов в системе VOGBIT. Если в качестве основного источника данных для отчета используется запрос из списка

запросов и ему для выполнения необходимо определять значения параметров, то для такого определения можно использовать форму ввода параметров.


Рис. 2.

Формы можно использовать присутствующие в VOGBIT или сделать самостоятельно в плагине.

Для того чтобы форма ввода параметров могла определять параметры для запроса, его необходимо включить в зависимый список «Запросы шаблона отчёта» и установить флаг

«Использовать параметры».

1.4 Запросы шаблона отчета

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


Рис. 3.

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

2. Создание и настройка бланка

2.1 Описание областей

Бланк оформляется при помощи именованных областей на уровне листа.

В бланке обязательно должна быть определена только одна область Form1.

Если в бланке предполагается многострочная часть, то необходимо определить область

MultiRowArea1 и область RowTemplates.

Если внешний вид последующих листов отличается от внешнего вида первого листа, то необходимо определить область Form2 и область MultiRowArea2.

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

Применение остальных областей зависит от сложности отчёта и требований к его оформлению.

Если в бланке не определена область MultiRowArea1, то сформируется всего один лист с заполнением значений заголовочных реквизитов, при этом будет использована первая запись источника данных.

2.1.1 Form1, Form2

Области определяют внешний вид первого и последующих листов шаблона документа.


Рис. 4.

Во время формирования отчёта используются все строки, которые занимаются областями Form1 и Form2. Данные строки копируются в результирующий лист полностью, т.е. не только те ячейки, которые входят в область, а все ячейки строки. Таким образом, если в данных строках будут данные, которые не относятся к этим областям, но находятся справа или слева от них, то они также попадут в результирующий лист.

2.1.2 MultiRowArea1, MultiRowArea2

Области определяют многострочную часть для Form1 и Form2 соответственно. Данные области должны быть одинаковы по горизонтали с областью RowTemplates. В данных областях не должно быть ячеек объединенных по вертикали.


Рис. 5.

2.1.3 RowTemplates

Область содержит шаблоны строк для заполнения (правила заполнения строк) MultiRowArea1 и MultiRowArea2.


Рис. 6.

Шаблоны строк могут быть объединены по вертикали посредством объединения ячеек по вертикали. Такие объединенные строки обрабатываются как одна.

Каждый шаблон строки имеет служебную часть, содержащую правила формирования данного шаблона строки.


Рис. 7.

Для объединенных шаблонов строк служебная часть прописывается только для первой строки объединения. Шаблоны строк так же можно объединять посредством объединения служебных ячеек по вертикали.

При формировании объединенных строк, если все они не входят на текущий лист, тогда они формируются на следующем, т.е. разрыв между ними не делается.

Высота шаблонов строк в расчет не берется, в областях MultiRowArea1 и MultiRowArea2

высоты строк остаются неизменными.

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

Допустимые значения Способы получения значений Способы получения изображений
1 текст, изображение 1, 4, 5, 6, 7, 8, 9 1, 2

2.1.4 DataSource

Область содержит определение основного источника данных для бланка. Основной источник данных - данные, которые будут использоваться при формировании реквизитов и многострочной части отчёта, проверки условий.


Рис. 8.

Если бланк используется в качестве бланка перехода, то данная область игнорируется, т.к. для бланка перехода используется источник данных от основного бланка.

Способы получения источника данных
1 1, 2, 3, 4

2.1.5 UserQuery

Область предназначена для хранения SQL-скриптов.


Рис. 9.

Данная область состоит из двух или более колонок, которые содержат следующую информацию:

  1. Наименование запроса;
  2. Текст SQL-скрипта.

Наименование запроса - псевдоним запроса для использования в областях бланка.

Текст SQL-скрипта - текст SQL-скрипта к базе VOGBIT или базе ADO. В тексте скрипта для удобства чтения можно использовать символы переноса Chr(13) + Chr(10) или Chr(10) (символ переноса строки в текст ячейки вводится нажатием комбинации клавиш Alt-Enter).

Текст SQL-скрипта может быть очень большим и не входить в одну ячейку, поэтому область UserQuery может иметь более двух колонок, с тем учетом, что первая колонка содержит наименование запроса, а вторая и все последующие содержат части текста SQL-скрипта.

Для удобства оформления любая колонка области может состоять из объединенных ячеек.

В тексте SQL-скрипта можно использовать следующие служебные слова, вместо которых перед выполнением вставится соответствующий текст SQL-скрипта, который используется для получения данных текущего режима (сетки), из которого был запущен отчет на формирование:

    • %CurrentQuery% - вставится весь текст SQL-скрипта;
    • %CurrentQueryPart1% - вставится первая часть SQL-скрипта (определения, заполнение временных таблиц, CTE);
    • %CurrentQueryPart2% - вставится вторая часть SQL-скрипта (основной SELECT) без завершающего символа «;»;
    • %CurrentQueryPart2WithoutOrderBy% - вставится вторая часть SQL-скрипта (основной SELECT) без ORDER BY и без завершающего символа «;»;
    • %CurrentQueryPart3% - вставится третья часть SQL-скрипта (удаление временных таблиц).

Использование данных служебных слов позволяет учитывать данные текущего режима (сетки), из которого был запущен отчет на формирование.

2.1.6 ConnectionString

Область предназначена для хранения строк соединения для ADO.NET. Она требуется тогда, когда есть необходимость получать данный в отчет не только из базы данных VOGBIT, но и из сторонних баз данных.

Данная область состоит из двух колонок, которые содержат следующую информацию:

  1. Наименование строки подключения ;
  2. Строка подключения.

Наименование строки подключения - псевдоним для использования в служебной информации для запросов.

Строка подключения - строка, используемая поставщиком данных .NET Framework для OLE DB для открытия базы данных.

Для удобства оформления любая колонка области может состоять из объединенных ячеек.

2.1.7 GeneralUserQuery

Область предназначена для хранения SQL-скрипта.

При настройке комплекта может быть так, что у нескольких бланков в качестве основного источника данных будет одинаковый текст SQL-запроса. Для того чтобы хранить такой текст только в одном экземпляре и предназначена область GeneralUserQuery. Такая область создается в служебном листе с именем Structure.

Область состоит из одной строки и одной или нескольких колонок, где записывается текст SQL-скрипта. Несколько колонок может потребоваться тогда, когда текст SQL-скрипта большой и не входит в одну ячейку.


Рис. 10.

Для удобства оформления любая колонка области может состоять из объединенных ячеек.

2.1.8 GeneralConnectionString

Область предназначена для хранения строки соединения для ADO.NET. Она требуется тогда, когда есть необходимость получать данный в отчет из сторонней базы данных при помощи SQL-запроса, текст которого хранится в области GeneralUserQuery.

Область создается в служебном листе с именем Structure.

Область состоит из одной ячейки или нескольких объединенных ячеек, куда записывается строка подключения - строка, используемая поставщиком данных.NET Framework для OLE DB для открытия базы данных.

2.1.9 ProcessRecordCondition

Допустимые значения Способы получения значений
1 True, False 1, 4, 5, 6
2 -1, 0 1, 4, 5, 6

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


Рис. 11.

Если условие выполняется, то далее каждый шаблон строки проверяется уже индивидуально. Т.е. проверяются условия формирования ( основное и дополнительное) каждого шаблона строки, также проверяются условия смены групп (смена групп проверяется, если есть области Group1, Group2…, которые и определяют контроль за сменой групп). Если такое условие

не выполняется, то условия формирования для шаблонов строк и условия смены групп не проверяются, не формируются значения для областей CalculatedValue1, CalculatedValue2….

Также данная область может использоваться при организации переходов (см. раздел Организация переходов).

2.1.10 InsertEmptyFormCondition

Допустимые значения Способы получения значений
1 True False 1, 4, 5, 6
2 -1 0 1, 4, 5, 6

В данную область записывается условие, которое определяет формирование листа, если у него не сформировалась многострочная часть.


Рис. 12.

По умолчанию, если в многострочную часть листа (т.е. в MultiRowArea1 или MultiRowArea2) не сформировалось ни одной строки, то такой лист удаляется.

Если данное условие существует в бланке и выполняется (значение True или -1 ), а на основе области Form1 формируется лист, и в многострочной части не формируется ни одной строки, то данный лист не считается пустым и не удаляется.

Значение данной области определяется в момент, начала формирования нового листа на основе области Form1.

Данное условие можно применять, например, при формировании операционной карты.

2.1.11 SeparateSheet

Допустимые значения Способы получения значений
1 Yes, No

Данная область определяет необходимость формирования данного бланка на отдельном листе книги MS Excel. Yes - бланк формируется на отдельном листе MS Excel. No - бланк формируется в составе комплекта.


Рис. 13.

2.1.12 EmptyRows

Допустимые значения Способы получения значений
1 число >= 0

Данная область определяет количество пустых строк, которые будут вставляться после каждой сформированной строки.


Рис. 14.

Для пустых строк в области RowTemplates обязательно должен быть специальный шаблон с основным условием формирования Condition:=EmptyRow.

2.1.13 WordWrapCharacters

Допустимые значения Способы получения значений
1 произвольные символы

Данная область определяет символы, при нахождении которых в значении элемента строки происходит перенос текста на следующую строку.


Рис. 15.

При формировании строк рассчитывается количество символов, входящих в элемент строки по длине. Если количество символов значения элемента превышает количество входящих символов, то происходит перенос на следующую строку. По умолчанию перенос производится в местах нахождения следующих символов: " ", "/", "\", ";", ":", "-".

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

Перенос так же осуществляется, если в тексте значения элемента встречается символ с числовым кодом 10 (символ переноса строки) или два символа подряд: символ с числовым кодом 13 плюс символ с числовым кодом 10.

Переносы осуществляются только для элементов имеющих формат «Текстовый», и у которых не стоит признак «автоподбор ширины».

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

2.1.14 BlankPageCounterReset

Допустимые значения Способы получения значений
1 True False 1, 4, 5, 6
2 -1 0 1, 4, 5, 6

В данную область записывается условие, которое определяет когда необходимо обнулить счетчик порядкового номера листа выходного документа, сформированного на основе данного бланка ( BlankPageNumber).


Рис. 16.

Условие данной области проверяется перед формированием нового листа. Если условие выполняется (значение True или -1 ), счетчик количества листов, сформированных на основе данного бланка ( BlankPageNumber), становится равным нулю.

Таким образом, листы, сформированные на основе данного бланка, для каждой группы записей будут считаться самостоятельно, а счётчик BlankPagesTotal будет отражать количество листов, сформированных для текущей группы записей.

2.1.15 CalculatedValue1, CalculatedValue2…

Допустимые значения Способы получения значений
1 1, 4, 5, 6, 9

Таких областей можно определить несколько: CalculatedValue1, CalculatedValue2, CalculatedValue3 и т.д.


Рис. 17.

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

Значения для каждой такой области формируются на каждой записи источника данных, перед тем как проверять условия для шаблонов строк, при условии, если выполняется условие в области ProcessRecordCondition и выполняется условие соответствующей области CalcValueCondition…. Также значения формируются при начале формирования нового листа.

2.1.16 CalcValueCondition1, CalcValueCondition2…

Допустимые значения Способы получения значений
1 True False 1, 4, 5, 69
2 -1 0 1, 4, 5, 69

Таких областей можно определить несколько: CalcValueCondition1, CalcValueCondition2, CalcValueCondition3 и т.д.


Рис. 18.

Каждая такая область должна соответствовать областям CalculatedValue1, CalculatedValue2, CalculatedValue3 и т.д.

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

Если для области CalculatedValue... нет соответствующей области CalcValueCondition, тогда считается, что условие всегда выполняется и значение для соответствующей области CalculatedValue... вычисляется на каждой записи источника данных.

2.1.17 Group1, Group2…

Допустимые значения Способы получения значений
1 True False 14,5,6
2 -1, 0 1, 4, 5, 6

Таких областей можно определить несколько: Group1, Group2, Group3 и т.д.


Рис. 19.

Данные области предназначены для определения групп записей в источнике данных. При смене группы обрабатываются шаблоны строк, у которых в условии используются служебные слова GroupChange…, GroupStart…, GroupEnd…. Каждая область определяет одну группировку. Последовательность обработки данных областей определяется их номером.

2.1.18 GroupFormNumber1, GroupFormNumber2…

Допустимые значения Способы получения значений
1 1, 2

Таких областей можно определить несколько: GroupFromNumber1, GroupFromNumber2, GroupFormNumber3 и т.д.


Рис. 20.

Каждая такая область должна соответствовать областям Group1, Group2, Group3 и т.д.

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

2.1.19 JumpCondition

Допустимые значения Способы получения значений
1 True, False 1, 4, 5, 6
2 -1, 0 1, 4, 5, 6

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


Рис. 21.

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

2.1.20 ReturnCondition

Допустимые значения Способы получения значений
1 True, False 1, 4, 5, 6
2 -1, 0 1, 4, 5, 6

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


Рис. 22.

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

2.1.21 JumpOrder

Допустимые значения Способы получения значений
1 BeforeGroup
2 AfterGroup
3 EndOfPage

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


Рис. 23.

Область определяет правило формирования бланка перехода : «до» обозначенной группы, «после» обозначенной группы, после каждого сформированного листа.

2.1.22 JumpGroup

Допустимые значения Способы получения значений
1 True, False 1, 4, 5, 6
2 -1, 0 1, 4, 5, 6

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


Рис. 24.

Область предназначена для определения групп записей в источнике данных. Область возвращает признак смены группы записей. При смене группы отчёт прекращает формироваться на текущем бланке и продолжает формироваться на данном бланке перехода.

2.1.23 ReturnFormNumber

Допустимые значения Способы получения значений
1 1, 2

Данная область используется в основном бланке комплекта, если у него назначены бланки перехода.


Рис. 25.

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

2.1.24 ComplStruct

Данная область создается в служебном листе с именем Structure и предназначена для организации комплекта документов.


Рис. 26.

Область состоит из двух колонок, в колонках ячейки объединять нельзя. В первой колонке указываются основные бланки комплекта, во второй колонке указываются бланки перехода. Более подробно см. раздел Организация комплектов.

2.1.25 XMLData

Данная область предназначена для сохранения всех настроек бланка в специальном формате. Это позволяет значительно ускорить чтение настроек бланка при формировании отчета.

Рекомендуется после того, как бланк окончательно сделан и выверен, создать данную область. Если данная область будет отсутствовать, то при загрузке шаблона в VOGBIT данная область будет создана автоматически, но в этом случае процесс ее создания будет занимать более значительное время, чем создание её из vba-проекта бланка.

Чтобы создать и заполнить данную область необходимо выполнить следующую процедуру в модуле vba-проекта бланка:

Sub SaveToXml()
'
' Сохранение настроек бланков в XML
'
If CreateObject("Vogbit.Reporter").SaveToXml(Application) Then MsgBox "Операция выполнена.",vbSystemModal+vbExclamation,"Vogbit.Reporter"
End If
End Sub

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

При создании и заполнении области читаются все настройки бланка и в случае обнаружения ошибок выдаются соответствующие сообщений. Поэтому создавая область посредством вызова процедуры из vba-проекта бланка можно оперативно контролировать правильность настройки бланка.

2.2 Заголовочные реквизиты

Для создания области под заголовочный реквизит бланка, достаточно записать в ячейку один из способов получения значений или изображений.


Рис. 27.

Ячейка должна принадлежать области бланка ( Form1 или Form2), но не принадлежать областям многострочной части бланков ( MultiRowArea1 или MultiRowArea2).

Допустимые значения Способы получения значений Способы получения изображений
1 текст, изображение 1, 4, 5, 6, 8, 9 1, 2

2.3 Способы получения значений

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

При получении значений при помощи запросов:

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

2.3.1 1-Запрос из списка запросов

Получение значения при помощи запроса из списка запросов системы VOGBIT. Формат строки вызова запроса:

«Query» + пробел + Обозначение запроса + пробел + Служебная информация

Обозначение запроса - обозначение запроса из списка запросов системы VOGBIT. Соответствующий запрос будет использован для получения значения.

2.3.2 2-Текущий запрос

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

Формат строки вызова запроса: «Query Current» Используется только для получения основного источника данных.

2.3.3 3-Общий пользовательский запрос

Получение данных для отчета при помощи запроса из области GeneralUserQuery. Формат строки вызова запроса:

«GeneralUserQuery» + пробел + Служебная информация

Используется только для получения основного источника данных. Если существует область GeneralConnectionString, то запрос будет выполняться с указанной в данной области строкой подключения для сторонней базы данных, если такая область отсутствует, то запрос будет выполняться для базы данных VOGBIT.

2.3.4 4-Пользовательский запрос

Получение значения при помощи запроса из области UserQuery. Формат строки вызова запроса:

«UserQuery» + пробел + Наименование запроса + пробел + Служебная информация

Наименование запроса - наименование запроса из области UserQuery. Соответствующий запрос будет использован для получения значения.

2.3.5 Служебная информация для запросов

Служебная информация - определяет значения параметров для запроса. Представляет собой сплошную (без использования переносов) строку, разбитую на составляющие:

ConnectoinString:=
Parameters:=
ValueNumber:=
Separator:=

ЗАМЕЧАНИЕ:

«ConnectoinString:=» не используется для общего пользовательского запроса.

«ValueNumber:=» и «Separator:=» не используются при определении основного источника данных и дополнительного источника данных.

«ConnectoinString:=» - наименование строки подключения. Определяет какую строку подключения использовать из ConnectionString, если запрос предназначен не для базы данных VOGBIT, а для сторонней базы.

«Parameters:=» - определяет значения параметров для запроса. Значения параметров можно определять тремя способами:

1) «Parameters:={ИмяПараметра:=СпособПолученияЗначения;...}»

Способыполучения значений для параметров запроса
1 6, 7, 8, 9,10
2 произвольный текст (пробелы в начале и в конце текста не учитываются)

UserQuery LO Parameters:={CollectionID:=$SPEC_OWNER_ID;LinkTypeUID:=LT_CPE}

2) «Parameters:={ParameterForm:=ТипФормы}»

Второй способ можно использовать для запросов без использования строки подключения, т.е. только к базе данных VOGBIT.

Перед выполнением запроса будет вызвана форма для определения значений параметров.

ТипФормы - текстовое обозначение типа формы в VOGBIT (см. типы в разделе Форма ввода параметров).

GeneralUserQuery Parameters:={ParameterForm:=Csdn.Vogbit.Main.ReportForms.ArrangedComponentCollectionID_and_LinkTypeID}

В запросах к базе данных VOGBIT параметры в тексте SQL-скрипта должны быть именованы с использованием символа «@». В имени должны использоваться только английские буквы и цифры.

SELECT TOP (1) [LO].[Name]
FROM
[Views].[LinkedObjects] AS [LO] WHERE
[LO].[OwnerID] = @CollectionID AND [LO].[LinkTypeUID] = @LinkTypeUID;

Для запросов к сторонним базам данных именовать параметры следует в соответствии с требованием используемого поставщика данных .NET Framework для OLE DB.

3) «Parameters:={СпособПолученияЗначения;...}»

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

UserQuery LO Parameters:={$SPEC_OWNER_ID;LT_CPE}

Значения параметров запроса определяются в той последовательности, в которой они встречаются в тексте запроса. В запросе для базы данных MS SQL параметры определяются через символ « ? »:

SELECT PREVIEW_BODY FROM prjver_previews WHERE PRJVER_ID=? AND PREVIEW_ID=?

В запросе для базы данных MS Access параметры определяются в той последовательности, в которой они определяются ADO в тексте запроса. Для придания необходимой последовательности параметров можно использовать описание PARAMETERS:

PARAMETERS [Par1] Value, [Par2] Value, [Par3] Value; SELECT IIF([Par1]=1,CNT>0,FALSE) FROM (SELECT COUNT(*) AS CNT FROM TechnoPreviews_RptSheet WHERE P2=[Par2] AND P3=[Par3])

В указанном примере, если не использовать описание PARAMETERS, параметры определятся в следующей последовательности: Par2, Par3, Par1.

«ValueNumber:=» - порядковый номер значения. Определяет значение, которое получит элемент в случае обработки результата запроса, который возвращает несколько записей. Номер значения начинается с 0.

UserQuery QUERY1 Parameters:={$ID;$OPER_ID} ValueNumber:=0

«Separator:=» - текстовая строка. Определяет символы-разделители полученных значений, в том случае, если запрос возвращает несколько значений. Символы разделители берутся до конца строки. При этом в тексте не должно быть символа «|», т.к. он используется в служебных целях и является принудительным переносом. Рекомендуется использовать определение «Separator:=» последним в строке служебной информации.

UserQuery QUERY2 Parameters:={$ID;CalculatedValue1} Separator:=\

Если в строке служебной информации не определена составляющая «ValueNumber:=» или «Separator:=», а запрос возвращает несколько значений (записей), то для каждого полученного значения будет сформирована новая строка.

2.3.6 5-Произвольный текст

Строка текста.

2.3.7 6-Номер или имя поля Основного источника данных

Получение значения по номеру или имени поля из основного источника данных. Перед номером поля или именем используются символы «$» или «-$» или «+$».

$№ - значение поля из текущей записи основного источника данных,

+$№ - значение поля из следующей записи основного источника данных,

$NMK_NOTE $2 +$OPR_NAME -$0 - $№ - значение поля из предыдущей записи основного источника данных, где № порядковый номер или имя поля, номера полей начинаются с 0.

Если предыдущей или последующей записи нет, а с нее запрашивается значение, то вернется пустая строка.

2.3.8 7-Номер или имя поля Дополнительного источника данных

Получение значения по номеру или имени поля из дополнительного источника данных.

Перед номером поля или именем используются символы «#» или «-#» или «+#».

#№ - значение поля из текущей записи дополнительного источника данных,

+#№ - значение поля из следующей записи дополнительного источника данных,

#NMK_NOTE #2 +#OPR_NAME -#0-#№ - значение поля из предыдущей записи дополнительного источника данных, где № порядковый номер или имя поля, номера полей начинаются с 0.

Если предыдущей или последующей записи нет, а с нее запрашивается значение, то вернется пустая строка.

2.3.9 8-Области CalculatedValue1, CalculatedValue2…

Получение значения из соответствующей области CalculatedValue….

Таким образом, если указать, например, CalculatedValue1 , то вместо него возьмется вычисленное для области CalculatedValue1 значение. Пока значение не будет вычислено, оно будет равно пустой строке.

2.3.10 9-Счётчики

Получение значения внутреннего счётчика репортера (ИД - основной источник данных; ДИД - дополнительный источник данных).

DataSourceRecord позиция ИД (начинается с 0);
DataConsourceRecord позиция ДИД (начинается с 0, если ДИД не определен, то -1);
DataSourceRecordCount количество записей ИД;
DataConsourceRecordCount количество записей ДИД;
PageNumber номер листа;
PagesTotal всего листов (использовать только для заголовочных реквизитов формы);
BlankPageNumber номер листа бланка;
BlankPagesTotal всего листов бланка (использовать только для заголовочных реквизитов формы);
DocRowNumber номер строки;
ItemNumber номер позиции;
PageRowNumber номер строки на листе;
FormNumber номер формы (1 или 2);

2.3.11 10-Служебные флаги

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

PreviousItemWrapped - признак был ли перенос.
TRUE - если при формировании строки на основе шаблона были сделаны переносы.
TRUE устанавливается после формирования последней строки с переносами и перед попыткой сформировать пустую строку. После попытки сформировать пустую строку - сбрасывается в FALSE.

OnWrap - признак осуществления переноса.
TRUE - если будем формировать очередную строку переноса.
TRUE устанавливается после формирования строки, в которой осуществился перенос и требуется сформировать дополнительную строку с оставшейся информацией, но перед попыткой сформировать пустую строку. После формирования последней строки с переносами, но перед попыткой сформировать пустую строку, признак сбрасывается в FALSE.

OnNextItemForRecord - признак одной и той же записи основного источника данных.
TRUE - если будем формировать строку на очередном шаблоне при том, что запись основного источника данных не изменилась.

2.4 Способы получения изображений

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

2.4.1 1-Получение изображения из файла

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

«PictureFile» + пробел + [*] + пробел + Способ получения значения

где **] - признак масштабирования, не обязателен. Может принимать значения:

«Stretch» - по умолчанию, вписать в границы элемента с сохранением пропорций

«AsIs» - рисунок не масштабировать, а вставлять как есть;

«OnlyMiniaturize» - только уменьшать, т.е. масштабировать только в том случае, когда изображение больше элемента формы;

Способы получения значений
1 1, 4, 6, 7 (только для элемента шаблона строки), 8

При использовании способа 1 и 4, запрос должен возвращать только одно поле, но может возвращать несколько записей.

2.4.2 2-Получение изображения из бинарного поля

В этом способе необходимо получить значение из бинарного поля, в котором лежит изображение.

«Picture» + пробел + [*] + пробел + Способ получения значения

- где [*] - признак масштабирования, не обязателен. Может принимать значения:
Stretch - по умолчанию, вписать в границы элемента с сохранением пропорций сторон;
AsIs - рисунок не масштабировать, а вставлять как есть;

OnlyMiniaturize - только уменьшать, т.е. масштабировать только в том случае, когда изображение больше элемента формы;

Способы получения значений
1 1, 4, 6, 7 (только для элемента шаблона строки)

При использовании способа 1 и 4, запрос должен возвращать только одно поле, но может возвращать несколько записей.

2.5 Служебная часть шаблона строки

Каждый шаблон строки области RowTemplates имеет служебную часть, содержащую правила формирования данного шаблона строки. Данная область записывается в первой ячейке справа от области RowTemplates.


Рис. 29.

Эта ячейка может быть объединена вправо с другими ячейками для удобства работы с ней. Для объединенных шаблонов строк служебная часть прописывается только для первой строки объединения. Шаблоны строк так же можно объединять посредством объединения служебных ячеек по вертикали.

Служебная часть разбивается на составляющие через символ переноса Chr(10) (символ переноса строки в текст ячейки вводится нажатием комбинации клавиш Alt-Enter):

Condition:=
AuxCondition:=
DataConsource:=
Valueless:=
MaxRowF1:=
MaxRowF2:=
RecreateOnWordWrap:=
KeepRowsTogether:=


Рис. 30.

2.5.1 Condition:=

Основное условие формирования для шаблона строки, определяет условие, при выполнении которого для текущей записи основного источника данных, будет сформирована строка многострочной части на основе данного шаблона. Если оно не указано, то предполагается, что основное условие выполняется всегда. Указание условия может быть выполнено одним из следующих способов:

Допустимые значения Способы получения значения Примечание
1 True, False $№ Получение значения по номеру или имени поля из основного источника данных.
-1, 0 Подробнее см. п. 2.3.7.
2 True, False
-1,0
«Query» + пробел + обозначение запроса + пробел +Служебная информация Получение значения при помощи запроса из списка запросов. Подробнее см. п. 2.3.1.
2 True, False
-1,0
«UserQuery» + пробел + Обозначение запроса + пробел + Служебная информация Получение значения при помощи пользовательского запроса. Подробнее см. п. 2.3.4.
3 EmptyRow Служебное слово. Обозначает, что данный шаблон, является шаблоном пустой строки. Количество пустых строк определяется в области EmptyRows. Шаблон для пустой строки может состоять из нескольких объединенных строк. Переносы для элементов шаблона пустой строки не делаются.
4 GroupChange… Служебное слово. Обозначает, что данный шаблон будет использован для формирования строки при смене группы записей в источнике данных в соответствующей группировке. Группировка определяется в области Group....
5 GroupStart… Служебное слово. Обозначает, что данный шаблон будет использован для формирования строки в начале каждой группы записей в источнике данных в соответствующей группировке. Группировка определяется в области Group....
6 GroupEnd… Служебное слово. Обозначает, что данный шаблон будет использован для формирования строки в конце каждой группы записей в источнике данных в соответствующей группировке. Группировка определяется в областиGroup....
7 EndOfDoc Служебное слово. Обозначает, что данный шаблон будет использован для формирования строки после обработки всех записейосновного источника данных.
8 PageTotal Служебное слово. Обозначает, что данный шаблон будет использован для формирования итоговой строки на листе. Шаблон строки с данным служебным словом может быть только один. Шаблон может состоять из объединенных строк. При формировании строки на текущем листе на основе данного шаблона суммы накапливаются для элементов строки со способами получения значений 1, 4, 6; очередные значения считываются, если выполняется дополнительное условие для данного шаблона строки. Значения для остальных элементов строки вычисляются в момент формирования строки. Переносы для элементов шаблона не делаются.

2.5.2 AuxCondition:=

Дополнительное условие формирования для шаблона строки, определяет условие, при выполнении которого для текущей записи основного источника данных, будет сформирована строка многострочной части на основе данного шаблона. Если оно не указано, то предполагается, что дополнительное условие выполняется всегда. Дополнительное условие используется, когда в основном условии формирования шаблона строки указано служебное слово. Указание условия может быть выполнено одним из следующих способов:

Допустимые значения Способы получения значения Примечание
1 True, False $№ Получение значения по номеру или имени поля из основного источника данных. Подробнее см. п. 2.3.7.
-1, 0
2 True, False «Query» + пробел + Обозначение запроса + пробел + Служебная информация Получение значения при помощи запроса из списка запросов. Подробнее см. п. 2.3.1.
-1, 0
2 True, False «UserQuery» + пробел + Обозначение запроса + пробел + Служебная информация Получение значения при помощи пользовательского запроса. Подробнее см. п. 2.3.4.
-1, 0

2.5.3 DataConsource:=

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

Способы получения значения Примечание
1 «Query» + пробел + Получение значения при помощи запроса
Обозначение запроса + из списка запросов. Подробнее см. п. 2.3.1.
пробел + Служебная
информация
2 «UserQuery» + пробел + Получение значения при помощи
Обозначение пробел + информация запроса + Служебная пользовательского запроса. Подробнее см. п. 2.3.4.

2.5.4 Valueless:=

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

Допустимые значения Примечание
1 Include Формировать строку всегда.
2 Exclude Не формировать строку, если все её элементы получили пустое значение.

2.5.5 MaxRowF1:=

Значение, определяющее номер последней возможной строки в многострочной части MultiRowArea1,сформированной на основе данного шаблона.

Если при формировании выходного документа номер текущей строки многострочной части будет больше номера указанного в служебном поле, то формирование текущего листа будет закончено и строка будет сформирована на новом листе.

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

2.5.6 MaxRowF2:=

Значение, определяющее номер последней возможной строки в многострочной части MultiRowArea2, сформированной на основе данного шаблона.

2.5.7 RecreateOnWordWrap:=

Массив значений, определяющих номера элементов строки, для которых переносы не делать. При переносах из-за других элементов строки, на следующей строке указанные элементы формируются заново.

Допустимые значения Примечание
1 {N1;N2;N3} N1, N2, N3 - номера элементов строки. Номера элементов начинаются с нуля. Нумерация элементов осуществляется слева направо, сверху вниз (для шаблонов строк, объединенных по вертикали). Пример: {1;2;5;6}

2.5.8 KeepRowsTogether:=

Признак, определяющий формирование строки на основе данного шаблона на следующем листе, если переносы не умещаются на одном листе.

Допустимые значения Примечание
1 Yes Формирование строки осуществляется на следующем листе, если ее переносы не входят в текущий лист
2 No Формирование строки осуществляется на текущем листе, независимо от переноса информации.

2.6 Организация переходов

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

Для реализации перехода на бланк перехода существует два способа. Первый способ использует области JumpCondition и ReturnCondition. Второй способ использует области JumpOrder и JumpGroup.

Переходы можно организовывать одним из двух возможных способов или обоими сразу. Оба способа работают параллельно, т.е. для одного и того же основного бланка из комплекта могут быть определены условия переходов на бланки перехода и по первому и по второму способам.

При реализации перехода любым способом, также может быть использована область ReturnFormNumber, которая для основного бланка определяет номер формы ( Form1 или Form2), с которой нужно продолжить формирование после возврата с бланка перехода.

2.6.1 Первый способ обработки переходов

Используется, когда необходимо вывести данные из различных записей (групп записей) источника данных на листы с различным оформлением. Т.е. для различных записей (групп записей) источника данных будут использованы разные бланки.

Такой способ удобно использовать, например, при формировании комплекта документации для групповой спецификации вида «матрица», когда информация о составе первых 10 исполнений выводится на формах 1, 1а, а информация о составе остальных на формах 1в, 1а.

Для реализации этого способа в бланке перехода необходимо создать область JumpCondition. В этой области необходимо указать (одним из разрешенных способов) условие перехода на этот бланк с основного бланка в процессе формирования отчёта.

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

Для реализации возврата с этого бланка перехода на основной бланк комплекта необходимо в бланке перехода создать область ReturnCondition. В этой области необходимо указать (одним из разрешенных способов) условие возврата с этого бланка перехода на основной бланк комплекта в процессе формирования отчёта.

В момент возврата на основной бланк по условию области ReturnCondition, для бланка перехода считается, что дошли до последней записи, что влечет за собой обработку завершения всех групп (если есть соответствующие области).

Таким образом, если в списке бланков переходов , определенных для основного бланка , присутствуют бланки, у которых есть область JumpCondition, тогда на каждой записи источника данных идет проверка выполнения данного условия. Если условие выполняется для какого-либо из бланков перехода , тогда происходит переход на данный бланк и продолжается процесс формирования. Далее, если выполнится условие перехода на другой бланк, тогда произойдет переход на него. Т.е. переход на бланк перехода может осуществиться как с основного бланка комплекта, так и с другого бланка перехода.

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

Область ReturnCondition всегда возвращает формирование отчёта на основной бланк комплекта, при этом обрабатывается область ReturnFormNumber, которая определяет с какой формы основного бланка продолжать дальнейшее формирование отчёта.

2.6.2 Второй способ обработки переходов

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

Данный способ хорошо зарекомендовал себя при реализации формирования комплекта технологических документов. Когда по сути одна и та же информация технологического процесса много раз выводится в документах различного назначения, которые отличаются друг от друга содержанием и оформлением (МК, ОК, ВО, ВУН, КЭ и т.д. и т.п.). Этим же способом решается задача по формированию документации для производственных служб одним комплектом. Комплект может содержать: задание (наряд, сменно-суточное задание), заявку на материалы, для

выполнения данного задания (требование-накладная), сопроводительные накладные (оформляющие передачу из цеха в цех).

Для реализации этого способа в бланке перехода необходимо создать область JumpOrder.

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

Если необходимо формировать данный бланк перехода «до» или «после» определенной группы записей, то в области JumpOrder необходимо указать значение BeforeGroup или AfterGroup соответственно. В этом случае, необходимо дополнительно создать область JumpGroup. В ней необходимо указать (одним из разрешенных способов) определение групп записей в источнике данных. Также, этим условием будут определяться группы записей, которые нужно повторно обработать для бланка перехода.

В зависимости от порядка перехода («до» или «после» группы), сначала проверяется, выполняется ли условие области ProcessRecordCondition (если оно, конечно, есть, иначе сразу происходит переход) хотя бы для одной записи из группы. Если выполняется, тогда текущий формируемый лист завершается (это будет основной бланк или бланк перехода ) и начинает формироваться бланк перехода с областью JumpOrder. При этом будут перебираться записи, относящиеся только к конкретной группе.

В момент перехода на бланк по условию области JumpOrder, для него считается, что он начинает формироваться с первой записи (т.е. начало всех групп). На последней записи для него считается, что дошли до последней записи, что влечет за собой обработку завершения всех групп (если есть соответствующие области). Затем происходит возврат на текущий бланк, при этом обрабатывается область ReturnFormNumber, которая определяет с какой формы основного бланка продолжать дальнейшее формирование отчёта.

2.7 Организация комплектов

Для организации комплекта документов нужно в книге MS Excel на разных листах настроить бланки тех видов документов, которые должны войти в комплект. Затем на служебном листе c наименованием Structure создать область ComplStruct, в которой нужно указать какие бланки и в какой последовательности должны формироваться.


Рис. 31.

В первой колонке указываются наименования листов основных бланков комплекта, во второй наименования листов бланков перехода.

Основной бланк комплекта - бланк, для которого определен собственный источник данных. Листы выходного документа на основе Основных бланков формируются в том порядке следования, который определен в списке бланков комплекта. Формирование листов Основных бланков комплекта выполняется в случае существования для каждого из них Основного источника данных.

Бланк перехода основного бланка комплекта - бланк, который использует источник данных соответствующего Основного бланка. Формирование листов Бланка перехода выполняется по определенному условию (подробнее см. п. Организация переходов).

Если в книге MS Excel будет несколько листов с бланками, но не будет служебного листа Structure и области ComplStruct, то в комплект войдут все бланки в той последовательности, в которой они представлены в книге.

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


Рис. 32.

Для маршрутной и операционной карт в источнике данных укажем общий пользовательский запрос без задания значений параметров.


Рис. 33.

Так же можно поступать, если в нескольких бланках в качестве основного источника

данных используется один и тот же запрос из списка запросов системы VOGBIT, которому необходимо задавать значения параметров. Достаточно только в первом бланке задать значения параметров.


Рис. 34.

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

Рис. 35.

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


Возврат к списку


×
Вход на сайт