СИСТЕМЫ УПРАВЛЕНИЯ ПРЕДПРИЯТИЕМ
Главная > Дополнительные модули > Объекты пользователя

Объекты пользователя (модуль userobjects.app)

Модуль позволяет подключать к системе ПАРУС 7.ХХ дополнительные модули FoxPro. Для этого app- или fxp-модуль должен иметь префикс af_addon_ (т.к. некоторые доп. функции из стандартной поставки Системы работают некорректно с передаваемыми параметрами).

Во время загрузки Системы управляющий объект, содержащийся в userobjects.app, опрашивает модули af_addon_*.* из каталога Fox в каких формах они будут работать – при этом передаются следующие параметры: nCallCode = 10, oCaller = .NULL., nProgram = 0 и private-переменная cAf_Name. Модуль должен заполнить переменную cAf_Name именем формы (или массив именами форм), причем можно указать "ALL" - это значит, что нужно рабо- тать во всех формах. Регистр символов при задании имени формы не учитывается. Например:
cAf_Name = "ALL"
или
Dimension cAf_Name[2]
cAf_Name[1] = "PVHead_MC"
cAf_Name[2] = "M5Head_MC"

При первой активизации любой формы после ее создания управляющий объект активизирует зарегистрированные модули, при этом передаются следующие пара- метры: nCallCode = 10, oCaller = .NULL., nProgram = 1. Модуль должен создать пользовательский объект и записать ссылку на него в переменную oCaller. Например:
oCaller = CreateObject("AddOn_Demo")
при описании класса объекта в prg-файле, или
oCaller = NewObject("AddOn_Demo", "ClassLib")
при описании класса объекта в VCX-файле.

Ссылки на созданные объекты пользователя записываются в массив и в процессе работы формы им передаются системные сообщения через метод ReceiveMessage(oSender, cMessage, mData). Этот метод должен обязательно присутствовать в классе. Также могут присутствовать свойства: AddOn – будет содержать имя файла модуля, Form – будет содержать ссылку на форму.

Обрабатываются следующие сообщения:

  1. Инициализация формы: cMessage = "Init", oSender – ссылка на форму, mData – пусто. Сообщение обрабатывается для всех форм (в том числе тех, которые не показываются на экране), наследованных от класса TForm, в момент вызова метода Init этого базового класса. Обработку сообщения удобно использовать вместо или вместе с обработкой сообщения "Activate".
  2. Уничтожение формы: cMessage = "Destroy", oSender – ссылка на форму, mData – пусто. Сообщение обрабатывается для всех форм, наследованных от класса TForm, в момент вызова метода Destroy этого базового класса.
  3. Активизация формы: cMessage = "Activate", oSender – ссылка на форму, mData – пусто. Например:
    oSender.AddObject("lblDemo", "TLabel")
    oSender.lblDemo.Caption = "ThisForm.Name = " + oSender.Name
    oSender.lblDemo.Left = 10
    oSender.lblDemo.Top = 10
    oSender.lblDemo.Visible = .T.
  4. Формирование пунктов контекстного меню грида: cMessage = "BuildMenu", oSender – ссылка на грид, mData – пусто. Можно использовать методы:
    * oSender.PopMenu.AddItem(nPos, cMenuName, cCaption, cCommand, cSkipExpr, cMarkExpr, cKeyExpr, cPicture) – добавление пункта меню
    nPos – порядковый номер пункта (0 для подстановки в конец меню)
    cMenuName – имя меню (для верхнего уровня указывать " ")
    cCaption – название пункта
    cCommand – выполняемая команда
    cSkipExpr – выражение для блокировки пункта меню
    cMarkExpr – выражение для пометки пункта меню
    cKeyExpr – выражение для горячей клавиши
    cPicture – имя файла картинки для отображения в пункте меню
    Например:
    oSender.PopMenu.AddItem(0, "", "\-", "")
    oSender.PopMenu.AddItem(0, "", "Демонстрация", "cmdAddOnDemo", ;
    "oSystem.CheckCmd('cmdAddOnDemo')", "", "F4")
    * oSender.PopMenu.DelItem(cCommand) – удаление пункта меню
    сCommand – команда меню
    Например:
    oSender.PopMenu.DelItem("cmdAddOnDemo")
  5. Установка разрешенных команд грида: cMessage = "SetCommands", oSender – ссылка на грид, mData – пусто. Выполняется после установки разрешен- ных команд Системой, поэтому системные установки можно изменить. Например:
    oSystem.SetCmd("cmdAddOnDemo", !IsNull(oSender.MarkList))
  6. Выполнение команды контекстного меню грида: Message = "ExecCommand", oSender – ссылка на грид, mData – строка, содержащая выбранную команду. Выполняется до передачи сообщения в грид, поэтому системные команды можно изменить (для этого нужно очистить mData).
    If cMessage = "ExecCommand" And mData = "cmdAddOnDemo"
    Infomes(mData, This.Form.Caption)
    mData = "" && Остановить цикл передачи сообщения
    EndIf
  7. Обработка нажатия клавиш в гриде: cMessage = "KeyPress", oSender – ссылка на грид, mData – ссылка на структуру параметров (mData.KeyCode – цифровой код нажатой клавиши, mData.ShiftAltCtrl – число, содержащее биты признаков нажатия клавиш Shift, Alt, Ctrl; mData.NoDefault – логический признак прекращения передачи сообщений, запрета на выполнение функции по умолчанию). Выполняется до передачи сообщения в грид, поэтому системные команды можно изменить (для этого нужно установить mData.NoDefault = .T.).
    If cMessage = "KeyPress" ;
    And mData.KeyCode = -3 And mData.ShiftAltCtrl = 0 ; && F4
    And !oSystem.CheckCmd("cmdAddOnDemo")
    Infomes("cmdAddOnDemo", This.Form.Caption)
    mData.NoDefault = .T. && Остановить цикл передачи сообщения
    EndIf
  8. Обработка нажатия клавиш в форме: cMessage = "KeyPress", oSender – ссылка на объект управления, в котором нажата комбинация клавиш, mData – ссылка на структуру параметров (mData.KeyCode – цифровой код нажатой клавиши, mData.ShiftAltCtrl – число, содержащее биты признаков нажатия клавиш Shift, Alt, Ctrl; mData.NoDefault – логический признак прекращения передачи сообщений, запрета на выполнение функции по умолчанию). Выполняется до передачи сообщения в форму, поэтому системные команды можно изменить (для этого нужно установить mData.NoDefault = .T.).
    If cMessage = "KeyPress" And Upper(oSender.BaseClass) = "FORM";
    And mData.KeyCode = -3 And mData.ShiftAltCtrl = 0 && F4
    Infomes("cmdAddOnDemo", oSender.Caption)
    mData.NoDefault = .T. && Остановить цикл передачи сообщения
    EndIf
  9. Восстановление пользовательских настроек при активизации формы системных настроек: cMessage = "LoadConfig", oSender – ссылка на форму настройки, mData – ссылка на страницу настройки (каждый объект пользователя имеет свою вкладку на вкладке "Дополнительно"). Вкладка "Дополнительно" недоступна, если ни один из зарегистрированных модулей не добавил ни одного элемента управления.
    mData.AddObject("chkDemo", "TCheckBox")
    mData.chkDemo.Left = 10
    mData.chkDemo.Top = 10
    mData.chkDemo.Caption = "Демонстрация"
    mData.chkDemo.Value = oConfig.GetValue("Demo_Check", "N", 0)
    mData.chkDemo.Visible = .T.
  10. Сохранение пользовательских настроек при нажатии кнопки "OK" формы системных настроек: cMessage = "SaveConfig", oSender – ссылка на форму настройки, mData – ссылка на страницу настройки.
    oConfig.SetValue("Demo_Check", mData.chkDemo.Value)
  11. Изменение главного меню: cMessage = "ModifyMenu", oSender - .NULL., mData – пусто. Например:
    Local cPopupName, nMenuItem, cCommand
    cPopupName = "Словари"
    If !Popup(cPopupName)
    Return
    EndIf
    nMenuItem = GetBar(cPopupName, CntBar(cPopupName)) + 1
    Define Bar nMenuItem Of (cPopupName) Prompt "\-"
    nMenuItem = nMenuItem + 1
    Define Bar nMenuItem Of (cPopupName) ;
    Prompt "\<Демонстрация работы алгоритма" ;
    Message " Демонстрация работы алгоритма"
    cCommand = 'Do "' + This.AddOn + '" With 1, .NULL., 1'
    On Selection Bar (nMenuItem) Of (cPopupName) &cCommand
  12. Подключение пользователя к базе данных: cMessage = "LoggedIn", oSender - .NULL., mData – пусто.
  13. Отключение пользователя от базы данных: cMessage = "LoggedOut", oSender - .NULL., mData – пусто.
    Отличие сообщений "LoggedIn" и "LoggedOut" от сообщения "ModifyMenu" состоит в том, что первые передаются каждый раз при подключении/отключении пользователя, а последнее – только при запуске Системы.
  14. Начало сеанса пользователя: cMessage = "Start", oSender - .NULL., mData – пусто.
    Сообщение передается при каждом подключении пользователя после выполнения всех предварительных процедур, т.е. когда приложение полностью готово к работе. Можно использовать для вывода различных сообщений для пользователя при старте Системы.
  15. Сообщения "BuildMenu", "SetCommands", "ExecCommand" и "KeyPress" обрабатываются и для дерева каталогов! При этом параметр oSender – ссылка на объект дерева каталогов.

Также модуль userobjects.app позволяет:

  • производить суммирование по числовым колонкам любого грида по всем записям или, если есть помеченные записи, только по помеченным. Для этого нужно кликнуть мышкой или переместить курсор на любую запись в колонке, затем нажать комбинацию клавиш Ctrl+U, и сумма появится в поле над гридом. Если нажать Ctrl+U на текстовой колонке или обновить грид, сумма исчезнет. Если над гридом нет поля, сумма выводится в окне сообщения. На дополнительной панели инструментов добав- лена кнопка "Сумма по колонке";
  • создавать индивидуальные папки настроек интерфейса для каждого пользователя. На форме настроек любого модуля Системы (раздел Дополнительно -> Интерфейс) добавлен соответствующий флажок. При первом подключении пользователя к БД в папке MEM каталога, где установлена Система, автоматически создается подкаталог для хранения настроек интерфейса этого пользователя. Имя каталога совпадает с именем пользователя. Настройка распространяется на всех пользователей;
  • задавать адрес контрагента по умолчанию (любую часть адреса) через фор му настроек любого модуля Системы (раздел Дополнительно -> Адрес по умолчанию) При добавлении адреса контрагента поля формы добавления заполняются значения ми адреса по умолчанию. Настройка индивидуальна для каждого пользователя.

В Систему добавлен раздел "Генератор дополнительных модулей", основанный на принципах стандартного раздела Системы "Генератор отчетов". Раздел позволяет добавлять дополнительные функции, дополнительные отчеты, пользовательские функции, а также отдельные "объекты пользователя", описанные в файлах XML-формата. Теперь достаточно зарегистрировать модуль в Системе один раз, и он будет доступен всем пользователям БД. Пользовательские функции могут использоваться в любом месте Системы, где это возможно: в колонках таблиц, в выражениях дополнительных условий отбора, в отчетах и т.д.

Файл paruszzz.fxp является структурным файлом БД Системы и позволяет модифицировать структуру БД (добавлять/изменять таблицы, представления, индексы, связи, триггеры), добавлять новые процедуры, доступные в любом программном app- модуле, а так же в самой Системе (например, при настройке колонок гридов).

Файл содержит следующие сервисные функции:

  1. Выполнение SQL-запросов (например, в колонках грида)
    GetSQLExpr(cAlias, cField [, cFilter])
    Параметры: cAlias – выражение для части FROM инструкции SELECT
    cField – выражение для списка полей инструкции SELECT
    cFilter – выражение для части WHERE инструкции SELECT
    Результат: значение первой колонки первой строки результата запроса, или ноль, если в результате запроса нет строк.
  2. Получение значения параметра из MEMO-поля или строки
    GetNoteParam(сNote, cName [, cType, mDefault])
    Параметры: cNote – строка для поиска параметра
    cName – имя параметра
    cType – тип результата (по умолчанию – "C")
    mDefault – значение параметра по умолчанию
    Результат: значение в строке для поиска между именем параметра + "\" и концом
    строки, где найден параметр (поиск параметра осуществляется без учета регистра),
    приведенное к заданному типу cType.
  3. Получение номера счета и аналитики по Инструкции 25н
    GetAccCode(cMode, cAcc [, cAn1, cAn2, cAn3, cAn4, cAn5])
    Параметры: cMode – режим работы функции, параметры режима задаются в строке
    друг за другом и разбираются посимвольно (значение логического параметра "1"
    соответствует истине, любое другое значение – ложь):
    1-й символ – признак получения бюджетной классификации (классификация расходов – в плане счетов для счета указано, что шаблон финансирования задается в счете; классификация источников дефицитов бюджетов – для счета указано, что шаблон финансирования задается в аналитике; классификация доходов – для счета указано, что шаблон финансирования задается в аналитике и первый уровень аналитики связан со словарем классификации доходов)
    2-й символ – признак получения счета баланса
    3-й символ – признак получения аналитики
    4-й символ – признак того, что счет и аналитика заданы ссылками
    5-й символ – уровень аналитики для КОСГУ (по умолчанию – 5)
    6-й символ – признак отсутствия разделительных пробелов в результате
    7-й символ – признак удаления начальных точек из аналитики (в случае, если возвращается только аналитика)
    cAcc – номер счета (или ссылка)
    cAn1 – аналитика 1-го уровня (или ссылка)
    . . .
    cAn5 – аналитика 5-го уровня (или ссылка)
    Результат: строка, содержащая заданную комбинацию бюджетной классификации, счета баланса и аналитики с включением КОСГУ в счет баланса и возможным форматированием с помощью вставки пробелов между группами кодов в соответствии со структурой счета по Инструкции 25н.
    Примеры:
    GetAccCode("0100", vAcbBase.Acbount) – форматирование счета баланса
    GetAccCode("1001", vAccbase.Rn) – форматирование БК в плане счетов
    GetAccCode("0101", vAccbase.Rn) – форматирование счета в плане счетов
    GetAccCode("1001", vEopSpec.Rn_Db) – форматирование БК в проводке ХО
    GetAccCode("0111", vEopSpec.Rn_Db, vEopSpec.Rn_Db_A1, vEopSpec.Rn_Db_A2, vEopSpec.Rn_Db_A3, vEopSpec.Rn_Db_A4, vEopSpec.Rn_Db_A5) – счет + аналитика в проводке ХО
  4. Открытие файла функций для шаблона в формате MS Excel
    OpenTemplateFuncsBook(oPrn, cFileName)
    Параметры: oPrn – ссылка на объект печати, наследованный от класса TPrn cFileName – имя файла функций для шаблона (если в имени файла путь не задан, поиск файла осуществляется в каталоге шаблонов по текущим настройкам Системы) Результат: признак успешного завершения работы функции. В результате работы функции в объект печати добавляются свойства: FuncsBook – содержит ссылку на объект Formula One с открытым файлом функций; m_FuncsFileName – содержит полное имя файла функций. В случае ошибок в процессе работы функции в перемен- ной cErrMessage, которая должна быть объявлена Private-переменной, содержится сообщение об ошибке.
    Примеры: вызов функции размещается в начале области "Header" листа настройки в шаблоне MS Excel (в конце области "Footer" листа настройки должен быть вызов функции CloseTemplateFuncsBook, см. ниже)
    __plResult = OpenTemplateFuncsBook(This, "Функции для шаблонов печати.xls")
  5. Закрытие файла функций для шаблона в формате MS Excel
    CloseTemplateFuncsBook(oPrn [, lDeleteSheets)
    Параметры: oPrn – ссылка на объект печати, наследованный от класса TPrn lDeleteSheets – признак удаления листов "Настройка" и "Функции" в результирующем отчете (по умолчанию – .F.)
    Результат: свойство FuncsBook объекта печати содержит значение .NULL., объект Formula One для файла функций удаляется с закрытием файла функций. Если значение второго параметра .T. и файл шаблона содержит листы "Настройка" или "Функции", они удаляются из отчета. В случае ошибок в процессе работы функции в переменной cErrMessage, которая должна быть объявлена Private-переменной, содержится сообщение об ошибке.
  6. Получение текста функции на листе функций шаблона MS Excel или отдельного файла функций (полученная функция может быть выполнена с помощью функции ExecScript, см. справку Visual FoxPro)
    GetTemplateScript(oPrn, cScriptName [, lExternal])
    Параметры: oPrn – ссылка на объект печати, наследованный от класса TPrn cScriptName – имя ячейки листа MS Excel, с которой начинается текст функции (считывание текста функции продолжается до пустой строки) lExternal – признак получения текста функции из отдельного файла функций (который предварительно должен быть открыт функцией OpenTemplateFuncsBook) Результат: текст функции, который может содержать инструкции LParam для передачи параметров в функцию, описания нескольких локальных процедур. Отдельные строки функции разделяются символом возврата каретки.
  7. Выполнение текста функции на листе функций шаблона MS Excel или отдельного файла функций (текст функции выполняется с помощью функции Exec- Script, см. справку Visual FoxPro)
    ExecTemplateScript(oPrn, cScriptName [, lExternal, mParam1, mParam2, ..., mParam15])
    Параметры: oPrn – ссылка на объект печати, наследованный от класса TPrn cScriptName – имя ячейки листа MS Excel, с которой начинается текст функции (считывание текста функции продолжается до пустой строки) lExternal – признак получения текста функции из отдельного файла функций (который предварительно должен быть открыт функцией OpenTemplateFuncsBook) mParam1, ..., mParam15 – дополнительные параметры, которые могут быть переданы в выполняемую функцию
    Результат: результат выполнения полученного текста функции с помощью функции ExecScript. Если значение третьего параметра .F., то поиск текста функции осу- ществляется в шаблоне печатаемого документа, иначе в отдельном файле функций (см. OpenTemplateFuncsBook). Все дополнительные параметры передаются по зна- чению, а не по ссылке.
  8. Установка:

    1. скопировать файл paruszzz.fxp в каталог NET модуля "Администратор" и выполнить преобразование БД;
    2. скопировать файл userobjects.app в каталог FOX тех модулей Системы, где планируется использование "объектов пользователя".

2002-2009 ©ООО "Софт-Сервис" : г. Киров, ул. Щорса, д. 95, оф. 427а, тел. (8332)705-205, 705-206, e-mail: office@soft.kirov.ru