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

 

 

 

Текст запроса отделяется от служебной информации символом переноса строки. Символ переноса строки в текст ячейки MS Excel вводится нажатием комбинации клавиш Alt-Enter.

 

Символ переноса в тексте должен быть только один и должен применяться только для разделения текста SQL запроса и служебной информации. Если служебная информация в тексте запроса отсутствует, то и символ переноса должен отсутствовать.

 

 

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

 

Если при выполнении запроса возникнет ошибка, то элемент получит пустое значение

 

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

 

Служебная информация

 

Служебная часть описания запроса может содержать:

 

·         описание параметров запроса;

·         правило формирования значения элемента в том случае, если результатом выполнения запроса будет несколько записей;

·         признак того, что элемент должен получить графическое изображение.

 

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

 

SELECT [Par1]

PARAMETERS:=Par1=27

 

или

 

SELECT [Par1]

Par1=27

 

Значение параметра описывается как соответствие наименования параметра номеру поля из текущей записи текущего источника данных. Номера полей в источнике данных начинаются с нуля. Если параметров несколько, то их описания объединяются символом «;». Например, «Par1=2;Par2=5», при этом Par1 получит значение из второго поля текущей записи текущего источника данных, а Par2 соответственно из пятого.

 

Если SQL запрос используется для получения значения элемента шаблона строки (см. раздел 15.10.3.4) и у данного шаблона строки определен дополнительный источник данных, то при определении параметров можно использовать его поля, вставляя символ «#» перед номером поля. Например, «Par1=2;Par2=#5», при этом Par1 получит значение из второго поля текущей записи текущего источника данных, а Par2 получит значение из пятого поля текущей записи дополнительного источника данных. Если дополнительный источник данных не определен или пуст, то параметр получит пустое текстовое значение.

 

При описании параметров запроса можно использовать служебные слова:

 

·         «Лист» - номер текущего листа документа

·         «ЛистБланк» - номер текущего листа для бланка

·         «НомерСтрокиНаЛисте» (см. раздел 15.10.3.4)

·         «НомерСтроки» (см. раздел 15.10.3.4)

·         «НомерПозиции» (см. раздел 15.10.3.4)

·         «Карта» - получает значение 1, если текущий лист выходного документа формируется на основании области «Карта1», получает значение 2, если на основании «Карта2»

·         «АбсПозИД» - номер текущей записи основного источника данных

·         «АбсПозДИД» - номер текущей записи дополнительного источника данных

 

Например:

 

SELECT ' - '+[Par1]

Par1=НомерСтроки

 

В некоторых случаях ядро базы данных Microsoft Jet не может распознать указанные параметры. Например, в таком запросе:

 

TRANSFORM SUM(P11) SELECT P2 FROM RptSheet WHERE P5=[Par1] GROUP BY P2 PIVOT P3

 

Поэтому в таких случаях необходимо использовать описание PARAMETERS:

 

PARAMETERS [Par1] Value; TRANSFORM SUM(P11) SELECT P2 FROM RptSheet WHERE P5=[Par1] GROUP BY P2 PIVOT P3

 

Если результатом запроса будет несколько записей, то по умолчанию:

 

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

·         в любой другой элемент бланка, в котором будет использован данный запрос, будет записано объединение всех полученных значений через символ «|».

 

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

 

·         «VALUE:=» + порядковый номер значения. В этом случае элемент получит значение исходя из порядкового номера. Например, «2» будет означать, что возьмется значение из второй записи полученного набора записей.

 

SELECT P4 FROM NmkFullInfo_RptSheet WHERE P2=[Par1]

Par1=2 VALUE:=2

 

·         «VALUE:=» + символ-разделитель (произвольное количество любых символов) для объединения полученных значений элемента.

 

SELECT P4 FROM NmkFullInfo_RptSheet WHERE P2=[Par1]

Par1=2 VALUE:=,

 

Текст, начинающийся со служебного слова «VALUE:=», должен находиться в конце служебной части описания запроса, так как для объединения значений будут использоваться все символы после служебного слова «VALUE:=» и до конца текста служебной части.

 

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

 

SELECT P4 FROM TechnoPreviews_RptSheet WHERE P2=[Par1] AND P3=[Par2]

Par1=2;Par2=3 IMAGE

 

SELECT P4 FROM TechnoPreviews_RptSheet WHERE P2=[Par1] AND P3=[Par2]

Par1=2;Par2=3 IMAGE VALUE:=2

 

SELECT P4 FROM TechnoPreviews_RptSheet WHERE P2=[Par1] AND P3=[Par2]

PARAMETERS:=Par1=2;Par2=3 IMAGE VALUE:=2

 

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

 

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

 

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

 

! См. также:

15.10 Создание бланка