- •Анненков и. В.
- •Глава 1. Это нельзя понять, это нужно запомнить.
- •IbExpert. Хранимые процедуры.
- •Скрипт.
- •Алгоритмы.
- •Журнал.
- •Глава 2. На старт. Внимание. Марш. Прежде, чем создавать объекты. Полезные советы.
- •Создадим новый справочник.
- •Создадим новый отчет.
- •Глава 3. И что у нас на финише. Или - дожить до апдейта. Это сладкое слово - апдейт.
- •Iec – дело тонкое.
- •Выгружаем отчет.
- •Выгружаем справочник.
- •Cmd, или навесим документу добротных алгоритмов.
- •Глава 4. Это как же, вашу мать, извиняюсь, понимать?
- •До свидания.
- •Процедура для выборки номеров и дат всех документов за период.
- •Объекты Avarda по закладкам.
Скрипт.
Для правильного написания любого скрипта, хоть в форме, хоть в отчете, хоть в алгоритме надо немного. Во первых – немного знать паскаль, надеюсь, что с этим у Вас проблем нет. Во вторых – соблюдать стилевые требования.
К сожалению, мне не удалось найти собранные в одном документе стилевые требования к текстам скриптов в AVARDA. Возможно, такого документа нет, или мне просто не повезло. Опытным путем удалось вывести некоторые простые правила:
Перед и после знаков операций должны быть пробелы.
После знаков препинания надо ставить пробел.
н
program
show; uses
doc,find; var
lid:integer;lname:string; begin
lid:=2025;lname:=
''; end.
то же самое, исправлено:
program
show; uses
doc,
find; var
lid:
integer; lname: string; begin
lid
:= 2025; lname := ''; end.
Один оператор на одной строчке. (После точки с запятой сразу новая строка)
т
program
show; uses
doc,
find; var
lid:
integer;
lname:
string; begin
lid
:= 2025;
lname
:= ''; end.
При переносе простого оператора на вторую строку (например, после := или then) отступ два пробела.
т
if
lid = 0 then lid
:= FindGetIntField('LID');
т
if
lid = 0 then
lid
:= FindGetIntField('LID');
Ключевые слова - в нижнем регистре.
В составном операторе begin - с новой строки без отступа, после begin сразу новая строка и отступ два пробела, end - на одном уровне с соответствующим begin.
п
if
(flag = 3) AND (concept = 200) then
BEGIN
lname := 'найден';
id
:= lid;
END else
BEGIN lname := 'отсутствует';
id
:= id - 1001;
END;
то же, исправлено:
if
(flag = 3) and (concept = 200) then
begin
lname
:= 'найден';
id
:= lid;
end
else
begin
lname
:= 'отсутствует'; id
:= id - 1001;
end;
Различные стандарты стилевых требований можно найти в интернете. Они, конечно, не руководство к действию, но определенную информацию для размышления дают. Рекомендую почитать:
Ткаченко А. В. Стандарт стилевого оформления исходного кода DELPHI.
http://www.delphikingdom.com/article/coderules.htm
Вячеслав Колдовский. Стандарты написания исходного кода в Delphi
http://www.delphiplus.org/articles/delphi/source_code_standards/index.html
Алгоритмы.
Существует очень много типов алгоритмов в AVARDA. Для начала работы необходимо уметь обращаться с тремя - “Dll на шапку документа” KID=28040, “Выбор из журнала” KID=28050, “Скрипт” KID=28112. Остальные или редко встречаются, или похожи на один из этих трех.
“Скрипт”(28112) он и есть скрипт, собственно из скрипта он и состоит. Как его писать – в разделе “Скрипт”.
Алгоритм 28040 – на самом деле позволяет запустить форму из документа, или из меню, или откуда надо. Почему он называется “Dll на шапку документа”? Не буду писать, что я вас попрошу сделать, если Вы это выясните. Для работы алгоритма нужно просто указать ему какую форму он будет запускать.
Алгоритм 28050 Выбор из журнала. Позволяет запустить из нужного места журнал. Для работы алгоритма нужно просто указать ему какой журнал он будет запускать.
Если Вы возьмете за правило при создании алгоритма сразу задавать ему кнопку и картинку, то избежите замечаний по этому поводу.
Форма.
Форма, она же Дизайн-форма, она же Форма TW5. Позволяет делать почти все, что угодно. Запускается, как правило, алгоритмом “Dll на шапку документа”(28040), имеет форму и скрипт. Ага, я догадываюсь, что Вы немного запутались в этом месте, по поводу кто же кого имеет. Ничего страшного, в системе AVARDA названия объектов часто дублируются, и одно слово в разном контексте имеет разное значение, давайте распутываться.
Итак, разделим понятия, и запомним что:
Алгоритм “Скрипт” и скрипт формы это совершенно разные понятия. Алгоритм “Скрипт” это самостоятельный объект системы, а скрипт формы – объект формы. Хотя и то и другое пишется на одном языке, но даже в написании есть различия, не все операции, которые можно сделать в алгоритме-скрипте получится сделать в скрипте формы и наоборот, соответственно, не все операции, которые можно сделать в скрипте формы получится сделать в алгоритме-скрипте. Что в каком скрипте можно делать, это вопрос тонкий, отнеситесь к нему с вниманием, почитайте в документации, там это есть. Надо еще упомянуть, что у отчетов тоже есть скрипт. Обычно, когда говорят просто «скрипт», то имеют в виду алгоритм-скрипт, про иные скрипты говорят «скрипт формы» или «скрипт отчета».
По поводу того, как форма может иметь форму. Это еще проще. Наверно, будет достаточно сказать, что у формы есть объект Form, и все сразу станет ясно. Обычно так и говорят и пишут, «форма» и «form».
Кроме объекта «Форма», в конфигураторе существуют объекты «Форма поиска» и «Форма действия», это совершенно разные объекты.
При оформлении form формы надо помнить несколько простых правил:
Form.Name должен иметь значение ‘Form’ + IDформы. Это потому, что имена form в конфигурации должны быть уникальными, иначе могут возникнуть ошибки.
Шрифт контроллов на форме и самой формы Arial.
Если нет особой необходимости для того, чтобы пользователь мог менять размеры формы, то Form.BorderStyle должен иметь значение bsDialog.
Если Ваша форма должна просто сделать что-то, не показываясь пользователю на глаза, например запустить отчет, то поставьте Form.Hide в значение True.
Шрифт надписей(Label) на форме обычно жирный, подчеркнутый.
Цвет надписей зависит от того, какой принят стандарт в конкретной конфигурации, мне встречались два цвета - стандартный черный и цвет Navy.
Форма должна быть разумно поджата. С боков, сверху, снизу не должно быть большого свободного пространства.
Отчет.
Отчеты делают на FastReport. На том, как их делают на FastReport-2 я, с Вашего позволения, останавливаться не буду, что было – то было, и даст Бог, быльем поросло. Поговорим про отчеты FR3.
Во первых, возникает вопрос, как его, собственно, создать? Создаем, понимаешь ли, отчет, ищем куда нажать, чтобы стал он FR3, а что ни жмем - все без толку, как был старый отчет, так он и остается. Ничего, зайдите в редактирование, и поставьте в KID1 число 3. Ах тройка, птица – тройка… но что-то это я отвлекся. А собственно уже и все, отчет уже FR3.
Замечание. Не пытайтесь таким образом перевести уже готовый отчет из FR2 в FR3, многие пытались, да ничего пока из этого ни у кого не вышло, только отчет запортите.
Во вторых, как отчет запускать? Дело в том, что отчет FR3 нельзя ни из меню вызвать, ни на документ навесить. Стандартная последовательность действий:
Создаем отчет.
Создаем форму, которая будет вызывать отчет.
Создаем алгоритм 28040, который будет вызывать форму, которая будет вызывать отчет.
Читаем стихотворение «Дом который построил Джек».
Впрочем, пункт 4. можно и не выполнять.
Теперь прописать в меню, или навесить на нужный объект можно алгоритм, который и будет вызывать отчет.
В третьих, как передать в отчет параметры? А просто, параметры собираются формой и передаются в отчет через SetParam/GetParam, см. рис. 5.1 и 5.2. Диалог ввода параметров можно построить прямо в отчете, но, насколько мне известно, этой возможностью пользуются редко. Через форму удобнее.
Хорошее правило – связанным отчету, форме и алгоритму давать имена одинаковые, или, по крайней мере, похожие. Иначе трудно обратный поиск делать. Дело в том, что в конфигураторе легко определить по алгоритму, какую форму он запускает, но совершенно невозможно определить по форме, каким алгоритмом (какими алгоритмами) она запускается. Аналогично, по форме легко определить, какой отчет она вызывает, и невозможно определить по отчету, из какой формы (из каких форм) он вызывается. Чтобы не лезть каждый раз в IBExpert, и не писать поисковый запрос удобно искать по совпадению имен.
Если Вы делаете отчет впервые, то обязательно проверьте точно ли совпадают поля и не налезают ли они друг на друга. Как не странно, это одна из распространеннейших ошибок. И очень желательно проверить отчет на реальной печати на бумагу.
Еще тонкость, в PageFooter отчета рекомендуется написать: «Документ подготовлен программой "AVARDA" . Разработчик - ООО "АВАРДА Консалтинг". +7 (495) 781-8464 www.avarda.ru Напечатано: [DATE] [TIME] Стр.[PAGE#». Ну, или что-то подобное, что будет актуально на момент разработки.