def test(): """ Тестовая функция. """ import ic ok_login = ic.Login('test', '', 'c:/defis/Registr/Registr', True) print('START SpravTreeComboCtrl TEST ... Login:'******'Sprav', 'StdCls', None, 'registr_nsi.mtd', 'Registr'), ) frame = wx.Frame(None) tree_combo_ctrl = icSpravTreeComboCtrlPrototype(sprav_psp, None, True, parent=frame, size=wx.Size(200, -1), level_enable=1, popup_type=1) tree_combo_ctrl.set_label_func(tree_combo_ctrl.getLabel_s1) tree_combo_ctrl.set_selected_sprav_code( u'PA110020010,PA110020020,PA110020030', 's1') button = wx.Button(frame, pos=wx.Point(10, 100)) frame.Show() ic.getKernel().MainLoop() ic.Logout() print('STOP SpravTreeComboCtrl TEST ... OK')
def _refreshData(self): """ Обновить данные по контролам редактирования. """ # Главное окно и горизонтальное меню наследуются у текущего пользователя default_main_win = ic.getKernel().GetAuthUser().resource['main_win'] default_main_menubars = ic.getKernel().GetAuthUser( ).resource['menubars'] data = util.icSpcDefStruct(icUser.SPC_IC_USER, { 'main_win': default_main_win, 'menubars': default_main_menubars }) name_edit = self.GetNameObj('nameEdit') if name_edit: data['name'] = name_edit.GetValue() description_edit = self.GetNameObj('descriptionEdit') if description_edit: data['description'] = description_edit.GetValue() local_dir_edit = self.GetNameObj('localDirEdit') if local_dir_edit: data['local_dir'] = local_dir_edit.GetValue() role_choice = self.GetNameObj('roleChoice') if role_choice: roles = self._manager.getRoles() selection = role_choice.GetSelection() try: data['roles'] = [roles[selection][0]] except: data['roles'] = [] password_edit1 = self.GetNameObj('passwordEdit1') password_edit2 = self.GetNameObj('passwordEdit2') if password_edit1 and password_edit2: password1_txt = password_edit1.GetValue() password2_txt = password_edit2.GetValue() password1_md5 = md5.new(password1_txt).hexdigest() password2_md5 = md5.new(password2_txt).hexdigest() if password1_md5 == password2_md5: if not password1_txt.strip(): # Выбрана пустая строка data['password'] = md5.new('').hexdigest() else: data['password'] = password1_md5 else: ic_dlg.icWarningBox( u'ВНИМАНИЕ!', u'Введенный пароль и подтверждение на совпадают. Введите еще раз.', ParentWin_=self.getDialog()) return None self._data = data return self._data
def Search(self, ParentForm_=None, Context_=None, search_form_psp=None): """ Режим поиска объекта. @param ParentForm_: Родительская форма. @param Context_: Пространство имен. @param search_from_psp: Паспорт формы для подмены стандартной формы вывода. @return: Возвращает UUID выбранного объекта или None, если объект не выбран. """ # Перед созданием формы необходмо создать # все ресурсы таблиц хранения объекта, если # их нет self._createTableResource() # Создание и вывод формы if search_form_psp is None: frm_psp = self.getSearchFormPsp() if not frm_psp: frm_psp = self.createSearchFormRes() else: frm_psp = search_form_psp try: # Сначала полностью проинициализировать контекст if Context_ is None: Context_ = self.GetContext() # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ Context_['OBJ'] = self obj_uuid = None if not self.isDoSearch(): # Создать и открыть форму panel_obj = ic.getKernel().Create(frm_psp, parent=ParentForm_, context=Context_) # Создать и открыть форму frm_obj = ic.getKernel().Create(frm_psp, parent=ParentForm_, context=Context_) frm_obj.ShowModal() if frm_obj.isPressOk(): obj_uuid = frm_obj.get_manager().getSelectedObjUUID() # ВНИМАНИЕ! # Обязательно удалять форму после использования, а то # остаются ссылки на нее frm_obj.Destroy() else: obj_uuid = self.doSearch() return obj_uuid except: ic.io_prnt.outErr(u'Ошибка режима поиска БИЗНЕС-ОБЪЕКТА %s' % self.name)
def _add_values(self, prj_res_ctrl=None): """ Добавить в таблицу значения перечислений. @param prj_res_ctrl: Контроллер управления ресурсом проекта. """ tab_name = self._get_enum_tabname(prj_res_ctrl) if prj_res_ctrl.isRes(tab_name, 'tab'): tab = ic.getKernel().CreateObj(tab_name, tab_name, 'tab') if tab: name_lat = ic_str.rus2lat(self.name) len_code = self._get_enum_spravlevel_len() code_fmt = '%%0%dd' % len_code # Сначала удалить все данные представления tab.del_where(tab.c.type == name_lat) # Затем добавить значения values = self.children[0].children for i, value in enumerate(values): code = code_fmt % (i + 1) tab.add(type=name_lat, cod=code, name=value.description, s1=value.name, uid1c=value.uid) else: log.warning( u'Ошибка создания объекта таблицы хранения перечислений 1С <%s>' % tab_name) else: log.warning( u'Не найден ресурс таблицы хранения перечислений 1С <%s>' % tab_name)
def gen_resource(self): """ Генерация ресурса, соответстствующего объеку 1С. @return: True/False. """ # Открыть проект prj_res_ctrl = ic.getKernel().getProjectResController() if prj_res_ctrl is None: log.warning( u'Не определен контроллер управления ресурсом проекта. Генерация ресурса таблицы хранения перечислений 1С не взможна.' ) return False else: log.debug(u'Контроллер управления ресурсом проекта <%s>' % prj_res_ctrl) prj_res_ctrl.openPrj() # Создать необходимые ресурсные файлы self._gen_enum_tab(prj_res_ctrl) self._gen_enum_spravmanager(prj_res_ctrl) self._gen_enum_sprav(prj_res_ctrl) # Добавить в таблицу значения перечислений self._add_values(prj_res_ctrl) return True
def InitEvalSpace(evalSpace=None): """ Функция создает структуру пространства имен для внешних функций при обработке сообщений в формах. Ключи: - B{_root_obj}: Содержит дерево объектов - B{_dict_obj}: Содержит словарь всех объектов. Имена объектов используются в качестве ключей. - B{_lfp}: Содержит описание параметров последней вызванной функции. - B{_self}: Содержит указатель на объект, где происходят вычисления. - B{_has_source}: Содержит словарь всех объектов, которые обращаются к источникам данных. Признаком таких объектов является ключ 'source' в их ресурсном описании. - B{_sources}: Содержит словарь всех источников данных. """ init_eval_space_modules() if evalSpace is None: evalSpace = icContext.Context(ic.getKernel()) else: space = icContext.Context() space.update(evalSpace) evalSpace = space evalSpace.setKey('CreateForm', icprs.CreateForm) evalSpace.setKey('ResultForm', icprs.ResultForm) evalSpace.setKey('ModalForm', icprs.ModalForm) evalSpace.setKey('method', icres.method) evalSpace.setKey('setKey', setKey) evalSpace.setKey('wx', wx) evalSpace.setKey('ic', ic) evalSpace.setKey('SetFilter', SetFilter) evalSpace.setKey('icImageLibName', common.icImageLibName) evalSpace.setKey('imglib', common) evalSpace.setKey('common', common) return evalSpace
def setBitmap(self, BmpPsp_): """ Функция установки картинки пункта меню. @param BmpPsp_: Паспорт картинки. """ try: item_kind = self.GetKind() # для разделителя нельзя установить картинку if item_kind == wx.ITEM_SEPARATOR: return # Паспорт не определен if not BmpPsp_: return bitmap_obj = ic.getKernel().Create(BmpPsp_) img = bitmap_obj.getBitmap() if img and (item_kind == wx.ITEM_CHECK or item_kind == wx.ITEM_NORMAL): # ВНИМАНИЕ: # Картинки необходимо устанавливать до присоединения # пункта к меню. Иначе она не будет отображаться! self.SetBitmap(img) except: io_prnt.outErr( u'Ошибка установки картинки %s для пункта меню %s!' % (BmpPsp_, self.GetID())) return
def getSpravChoiceListDlg(parent=None, sprav=None): """ Вызов диалогового окна выбора кода справочника. @param parent: Родительское окно. @param sprav: Справочник. Может задаваться как объектом, так и паспортом справочника. @return: Строковый выбранный код. """ result = None if parent is None: parent = wx.GetApp().GetTopWindow() if sprav: if ic_util.is_pasport(sprav): # Справочник задается паспортом # Надо создать объект sprav = ic.getKernel().Create(sprav) dlg = None try: dlg = icSpravChoiceListDialog(parent) dlg.setSprav(sprav) dlg.ShowModal() result = dlg.getSelectedCode() dlg.Destroy() dlg = None except: if dlg: dlg.Destroy() io_prnt.outErr(u'Ошибка диалогового окна выбора кода справочника.') else: io_prnt.outWarning( u'Не определен справочник диалогового окна выбора кода справочника.' ) return result
def _init(self): """ Основная функция инициализации внутренних объектов. """ self.main_win=ic.getKernel().GetContext().getMainWin() #Тестируемый бизнес объект #print 'DEBUGER ic.metadata:',ic.metadata self.business_obj=ic.metadata.work_flow.mtd.test_businessobject.BusinessObj.create()
def _createSprav(self, SpravPsp_): """ Создание справочника. """ kernel = ic.getKernel() if kernel: return kernel.Create(SpravPsp_) return None
def over_test(): """ Тестовая функция граничных значений.""" import ic ok_login = ic.Login('test_user', '', 'c:/defis/NSI/NSI', True) print('START SpravTreeComboCtrl TEST ... Login:'******'Sprav', 'OrganPrinyat', None, 'nsi_sprav.mtd', 'NSI'), ) frame = wx.Frame(None) tree_combo_ctrl = icSpravTreeComboCtrlPrototype(sprav_psp, None, True, parent=frame, size=wx.Size(200, -1)) button = wx.Button(frame, pos=wx.Point(10, 100)) print('SELECTED CODE:', tree_combo_ctrl.getSelectedCode()) frame.Show() ic.getKernel().MainLoop() ic.Logout() print('STOP SpravTreeComboCtrl TEST ... OK')
def Browse(self, ParentForm_=None, Context_=None, choice_form_psp=None): """ Режим выбора объекта с элементом поиска/фильтра. В виде страницы главного нотебука. @param ParentForm_: Родительская форма. @param Context_: Контекст. @param choice_form_psp: Паспорт формы для подмены стандартной формы вывода. """ # Перед созданием необходмо создать # все ресурсы таблиц хранения объекта, если # их нет self._createTableResource() # Создание и вывод if choice_form_psp is None: psp = self.getChoiceFormPsp() if not psp: psp = self.createChoicePanelRes() else: psp = choice_form_psp try: # Сначала полностью проинициализировать контекст if Context_ is None: Context_ = self.GetContext() # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ Context_['OBJ'] = self # Создать и открыть obj = ic.getKernel().Create(psp, parent=ParentForm_, context=Context_) ic.getKernel().GetContext().getMainWin().AddOrgPage( obj, self.description) except: ic.io_prnt.outErr(u'Ошибка режима выбора БИЗНЕС-ОБЪЕКТА <%s>' % self.name)
def TestComponentResource(res, context, parent, *arg, **kwarg): """ Функция тестирования компонента SQL запроса в режиме редактора ресурса. @param res: @param context: @param parent: @param arg: @param kwarg: @return: """ import ic from SCADA.controllers import test_uni_reader_ctrl_dlg log.info(u'Тестирование контроллера <%s>. Имя файла <%s>. Расширение <%s>' % (res['name'], parent._formName, parent.file.split('.')[1])) controller = ic.getKernel().createObjBySpc(None, res, context=context) test_uni_reader_ctrl_dlg.view_test_uni_reader_ctrl_dlg(parent=None, controller=controller)
def test(): """ Тестовая функция. """ import copy mwin = ic.getKernel().GetContext().getMainWin() print('TEST filter constructor START ... ok') env = copy.deepcopy(filter_builder_env.FILTER_ENVIRONMENT) app = wx.PySimpleApp() dlg = wx.Dialog(mwin, -1) constructor = icFilterConstructorTreeList(dlg, -1) constructor.setEnvironment(env) constructor.setDefault() dlg.ShowModal() app.MainLoop() print('TEST filter constructor STOP ... ok')
def TestComponentResource(res, context, parent, *arg, **kwarg): """ Функция тестирования компонента SQL запроса в режиме редактора ресурса. @param res: @param context: @param parent: @param arg: @param kwarg: @return: """ import ic from ic.components.user.objects import view_sql_query_dlg log.info( u'Тестирование запроса <%s>. Имя файла <%s>. Расширение <%s>' % (res['name'], parent._formName, parent.file.split('.')[1])) db = ic.getKernel().Create(res['source']) view_sql_query_dlg.view_sql_query_dlg(parent=None, db=db, sql_txt=res['sql_txt'])
def gen_resource(self): """ Генерация ресурса, соответстствующего объеку 1С. @return: True/False. """ # Открыть проект prj_res_ctrl = ic.getKernel().getProjectResController() if prj_res_ctrl is None: log.warning( u'Не определен контроллер управления ресурсом проекта. Генерация ресурса таблицы хранения справочника <%s> 1С не взможна.' % self.name) return False else: log.debug(u'Контроллер управления ресурсом проекта <%s>' % prj_res_ctrl) prj_res_ctrl.openPrj() # Создать необходимые ресурсные файлы self._gen_registry(prj_res_ctrl) return True
def View(self, ParentForm_=None, Context_=None, UUID_=None, view_form_psp=None): """ Режим просмотра объекта. @param ParentForm_: Родительская форма. @param Context_: Контекст. @param UUID_: Уникальный идентификатор. @param view_from_psp: Паспорт формы для подмены стандартной формы вывода. """ # Перед созданием формы необходмо создать # все ресурсы таблиц хранения объекта, если # их нет self._createTableResource() # Создание и вывод формы if view_form_psp is None: frm_psp = self.getViewFormPsp() if not frm_psp: frm_psp = self.createViewFormRes() else: frm_psp = view_form_psp if UUID_ is None: UUID_ = self.getUUID() try: # Сначала полностью проинициализировать контекст if Context_ is None: Context_ = self.GetContext() # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ Context_['OBJ'] = self # Заполнение значений по умолчанию реквизитов через контекст requisite_values = self.loadRequisiteData(UUID_) ok = None if not self.isDoView(): # Создать и открыть форму инициализации документа frm_obj = ic.getKernel().Create(frm_psp, parent=ParentForm_, context=Context_) frm_obj.GetContext().setValueInCtrl(frm_obj, requisite_values) frm_obj.ShowModal() # ВНИМАНИЕ! # Обязательно удалять форму после использования, а то # остаются ссылки на нее frm_obj.Destroy() ok = frm_obj.isPressOk() else: ok = self.doView(requisite_values=requisite_values) return ok except: ic.io_prnt.outErr(u'Ошибка просмотра БИЗНЕС-ОБЪЕКТА <%s>' % self.name) return False
def Edit(self, ParentForm_=None, Context_=None, UUID_=None, edit_form_psp=None): """ Запуск объекта на редактирование. @param ParentForm_: Родительская форма. @param Context_: Контекст. @param UUID_: Уникальный идентификатор редактируемого объекта. Если None, то идентификатор берется из текущего объекта. @param edit_from_psp: Паспорт формы для подмены стандартной формы вывода. @return: True-исменения успешно сохранены, False-нажата <Отмена>. """ # Перед созданием формы необходмо создать # все ресурсы таблиц хранения объекта, если # их нет self._createTableResource() # Создание и вывод формы if edit_form_psp is None: frm_psp = self.getEditFormPsp() if not frm_psp: frm_psp = self.createEditFormRes() else: frm_psp = edit_form_psp if UUID_ is None: UUID_ = self.getUUID() if not self.startEdit(): # Объект заблокирован return False try: # Сначала полностью проинициализировать контекст if Context_ is None: Context_ = self.GetContext() # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ Context_['OBJ'] = self # Заполнение значений реквизитов через контекст requisite_values = self.loadRequisiteData(UUID_) ok_save = False edit_values = None if not self.isDoEdit(): # Создать и открыть форму инициализации документа frm_obj = ic.getKernel().Create(frm_psp, parent=ParentForm_, context=Context_) frm_obj.GetContext().setValueInCtrl(frm_obj, requisite_values) frm_obj.ShowModal() if frm_obj.isPressOk(): # Сохранить реквизиты объекта edit_values = frm_obj.GetContext().getValueInCtrl(frm_obj) edit_ok = self.validEdit( requisite_values=edit_values, obj_uuid=UUID_) if self.isValidEdit() else True if edit_ok: ok_save = self.saveRequisiteData(edit_values) # ВНИМАНИЕ! # Обязательно удалять форму после использования, а то # остаются ссылки на нее frm_obj.Destroy() else: edit_values = self.doEdit(requisite_values=requisite_values) edit_ok = self.validEdit( requisite_values=edit_values, obj_uuid=UUID_) if self.isValidEdit() else True if edit_ok: ok_save = self.saveRequisiteData(edit_values) self.stopEdit() # Снять блокировку return ok_save except: ic.io_prnt.outErr(u'Ошибка редактирования БИЗНЕС-ОБЪЕКТА <%s>' % self.name) # Снять блокировку self.stopEdit() return False
def Init(self, ParentForm_=None, Context_=None, auto_add=False, init_form_psp=None): """ Запуск инициализации/создания. @param ParentForm_: Родительская форма. @param Context_: Контекст. @param auto_add: Признак автодобавления в БД. @param init_from_psp: Паспорт формы для подмены стандартной формы вывода. @return: Словарь нового объекта или None в случае ошибки. """ # Перед созданием формы необходмо создать # все ресурсы таблиц хранения объекта, если # их нет self._createTableResource() # Создание и вывод формы инициализации if init_form_psp is None: frm_psp = self.getInitFormPsp() if not frm_psp: frm_psp = self.createInitFormRes() else: frm_psp = init_form_psp try: # Сначала полностью проинициализировать контекст if Context_ is None: Context_ = self.GetContext() # Добавить в пространство имен указатель на текущий БИЗНЕС-ОБЪЕКТ Context_['OBJ'] = self # Заполнение значений по умолчанию реквизитов через контекст requisite_values = self.getRequisiteDataDefault() init_values = None if not self.isDoInit(): # Создать и открыть форму инициализации документа frm_obj = ic.getKernel().Create(frm_psp, parent=ParentForm_, context=Context_) frm_obj.GetContext().setValueInCtrl(frm_obj, requisite_values) frm_obj.ShowModal() if frm_obj.isPressOk(): # Сохранить реквизиты доокумента init_values = frm_obj.GetContext().getValueInCtrl(frm_obj) if auto_add: add_ok = self.validInit( requisite_values=init_values) if self.isValidInit( ) else True if add_ok: uuid_new_obj = self.addRequisiteData(init_values) ic.io_prnt.outLog( u'Автодобавление объекта [%s] в <%s>' % (uuid_new_obj, self.name)) # ВНИМАНИЕ! # Обязательно удалять форму после использования, а то # остаются ссылки на нее frm_obj.Destroy() else: init_values = self.doInit(requisite_values=requisite_values) if auto_add and init_values: add_ok = self.validInit(requisite_values=init_values ) if self.isValidInit() else True if add_ok: uuid_new_obj = self.addRequisiteData(init_values) ic.io_prnt.outLog( u'Автодобавление объекта [%s] в <%s>' % (uuid_new_obj, self.name)) # Сохранение реквизитов не произошло return init_values except: ic.io_prnt.outErr(u'Ошибка инициализации БИЗНЕС-ОБЪЕКТА <%s>' % self.name) return None