Пока mazzy проверит и разместит в собственно FAQ-е помещу сюда... Кому не лень - дополните плиз.
Хочу дополнить теоретической подоплекой.
Класс RunBaseBatch очень важен в Аксапте и буквально красной нитью проходит по всем процессам в ней. Подавляющее большинство menuitem-ов прямо или косвенно запускают наследников этого класса.
И это очень важный момент - в идеологии аксапты любая мало мальски трудоёмкая операция обязана иметь возможность быть отложенной в очередь заданий на пакетную обработку. Под "любой мало мальски трудоёмкой операцией" как правило подразумеваются все действия, которые находятся в менюшках "Журналы" (при выполнении разносок, резервирований и т.п.), "Периодические операции", "Отчёты".
Для пользователя это выглядит следующим образом: при нажатии на кнопку (или пункт меню) начинающую какую либо операцию (например разноску журнала или формирование отчёта) сперва открывается диалог содержащий в себе параметры операции и либо закладку "Пакет" либо кнопку "Пакет". По нажатию на OK операция либо начинается выполнятся сразу, либо (если проставлены соответствующие опции), откладываеся в очередь заданий для пакетной обработки (Основное->Запросы->Пакеты) где будет лежать, до тех пор пока её не запустят оттуда вручную, либо пока её не запустит сервер пакетной обработки (Основное->Периодические операции->Пакет->Режим сервера).
Для программиста в простейшем случае это выглядит так, как описал mazzy выше. Т.е. создаётся класс, наследник от RunbaseBatch по вышеприведенной схеме, и по нажатии на кнопки запускается именно он.
Но схема по которой сделан класс tutorial_RunBaseBatch неудобна, когда параметров в диалоге много и между ними нужно организовать какую нибудь функциональную взаимосвязь (другими словами - "умно" реагировать на ввод пользователя в диалог). Обычный диалог позволяет лишь "накидать на него" поля ввода и по нажатию на OK прочитать их значения.
Когда требуется сложная форма диалога для RunBaseBatch существует возможность задать для этого диалога свою собственную форму, разработанную в AOT - как это делается показано в классе tutorial_RunBaseForm. В методе dialog() помещается примерно следующий код:
Код:
public Object dialog()
{
dialogRunbase dialog = dialog::newFormnameRunbase(formstr(имя_нашей формы_в_AOT),this);
;
dialog = super(dialog);
// Заполнение полей или передача их в форму
...
return dialog;
}
К форме предявляются следующие требования:
1. В ней должен быть Tab с именем Tab - в него автоматически подставится закладка "Пакет" при запуске
2. В ней должна быть группа (Group) с именем dialogStartGrp - в неё будут помещены поля, которые вы добавляете через метод addField
3. Ну и разумеется две кнопки типа CommanButton: OK и Cancel
Существует еще возможность вместо закладки "Пакет" помещать на свою форму только кнопку "Пакет", при нажатии на которую откроется дополнительный диалог с параметрами пакетных заданий и тем самым сэкономить место на форме - для этого надо поместить на форму menuItemButton настроенный на menuItem BatchDialog, и подавить вывод закладки "Пакет" (как это сделать - отдельный разговор, к которому я пока не готов

).
Ну и последнее что остаётся сказать - это RunbaseBatch для отчётов.
Так как формирование отчётов как правило является трудоёмкой операцией отчёты - наипрямейшие кандидаты в очередь пакетных заданий.
Но в самих отчётах такой функциональности нет, и поэтому большинство стандартных menuItem-ов отчётов указывают не непосредственно на сами отчёты, а на классы наследники от RunbaseReport (см. tutorial_RunbaseReport). Самое главное в таком классе-наследнике переопределить метод lastValueElementName так, чтобы он возвращал имя отчёта в АОТ:
Код:
identifiername lastValueElementName()
{
return reportStr(MyReport);
}
Так же как и в других наследниках от RunbaseBatch здесь можно организовывать ввод параметров для дальнешей передачи в отчёт.