GetPerson. Интерфейс работы с картотекой исполнителей |
Файл: Example\Src\VIP\Staff\GetPerson.vip
Издание 01.2007. Добавлены директивы документирования.
Издание 01.2006. Исправлена ошибка: событие cmInsert, возникавшее в главном окне (окно выбора) по F7, не передавалось в окно редактирования winGetPersonEdit. Вместо этого оно обрабатывалось в главном окне после закрытия окна winGetPersonEdit. Добавлена переменная bInsMode - режим открытия окна редактирования. Значение переменной устанавливается в главном окне. Обработка cmInsert в главном окне подавляется. В окне winGetPersonEdit событие cmInsert дублируется в обработчике cmInit.
Издание 01.2006. Убрана панель (как лишняя сущность). Соответствующие табличные события вынесены в обработчик tableEvent.
//****************************************************************************** // (c) корпорация Галактика // Демопроект 1.0 - Управление персоналом // Интерфейс работы с картотекой сотрудников (выбор, ввод и корректировка) //****************************************************************************** #component "C_STAFF" //****************************************************************************** objInterface objGetPerson; end; vipInterface GetPerson implements objGetPerson licensed(free); //****************************************************************************** #doc Интерфейс работы с картотекой сотрудников (выбор, ввод и корректировка). #end interface GetPerson 'Картотека исполнителей' EscClose, Cyan, DoAccept; show at (0,0,79,20); create view var bInsMode : boolean; // режим открытия окна winKatMaterialsEdit: true - добавить запись, false - редактировать cTmp : comp; as select KatPersons.* from KatPersons ; parameters cTmp; //============================================================================== // winGetPersonEdit //============================================================================== window winGetPersonEdit 'Картотека исполнителей' (,, scGetPersonEdit); show at (1,1,78,18); browse brwGetPerson; table KatPersons; fields KatPersons.LastName #3'Фамилия' : [15], noProtect; KatPersons.FirstName #3'Имя' : [10], noProtect; KatPersons.MiddleName #3'Отчество' : [15], noProtect; KatPersons.cDepartment->Name #3'Подразделение', (,,scGetPersonEditPick) : [10], pickButton, protect; KatPersons.cPost->Name #3'Должность' (,,scGetPersonEditPick) : [10], pickButton, protect; KatPersons.TaxRate #3'Оклад' : [5], noProtect; KatPersons.Raise #3'Доплаты' : [5], noProtect; end; // browse brwStages; //------------------------------------------------------------------------------ handleEvent cmInit: // если вошли по cmInsert, то в этом окне ее надо продублировать if (bInsMode) PutCommand (cmInsert); end; tableEvent table KatPersons cmPick: { if(curField = #KatPersons_cDepartment_KatDeps.Name) { var cTmp : comp; if (RunInterface(GetDepartment, cTmp) = cmDefault) set KatPersons.cDepartment := cTmp; } else if(curField = #KatPersons_cPost_KatPosts.Name) { var cTmp : comp; if (RunInterface(GetPost, cTmp) = cmDefault) set KatPersons.cPost := cTmp; } } cmUpdateRecord: if (update current KatPersons <> tsOK) message('Ошибка при выполнении операции.' + chr(13) + 'Повторите ввод данных.', OkButton+Error); cmInsertRecord: if (insert current KatPersons <> tsOK) message('Ошибка при выполнении операции.' + chr(13) + 'Повторите ввод данных.', OkButton+Error); cmDeleteRecord: if (delete current KatPersons <> tsOK) message('Ошибка при выполнении операции.' + chr(13) + 'Повторите удаление данных.', OkButton+Error); end; end; // window winGetPersonEdit //============================================================================== // Main Window //============================================================================== browse brwGetPerson2 (,,scGetPersonSelect); show at (1,1,78,19); table KatPersons; fields KatPersons.LastName #3'Фамилия' : [15], protect; KatPersons.FirstName #3'Имя' : [10], protect; KatPersons.MiddleName #3'Отчество' : [15], protect; KatPersons.cDepartment->Name #3'Подразделение' : [15], protect; KatPersons.cPost->Name #3'Должность' : [15], protect; end; //------------------------------------------------------------------------------ handleEvent cmInsert: { bInsMode := true; // открыть окно в режиме добавления записи runWindow(winGetPersonEdit); stop; // заблокировать стандартную обработку cmInsert в этом окне } cmPersonEdit: { bInsMode := false; // открыть окно в режиме редактирования runWindow(winGetPersonEdit); } cmDone: cTmp := KatPersons.NRec; end; end.