Exemple #1
0
    def _addFormObjEventStd(self, res_filename_requisite, name_requisite,
                            value):
        """
        Добавить событие в объект формы. Обычная форма.
        @param res_filename_requisite: Имя файла ресурса формы.
        @param name_requisite: Имя объекта формы и события в формате
        <Имя объекта>.<Имя события>
        @param value: Значение которое необходимо прописать в событии.
        """
        res = iccfresource.icCFResource(res_filename_requisite)
        res.loadData()

        name_requisites = name_requisite.split('.')
        if len(name_requisites) != 2:
            log.warning(
                u'Object name_requisite and event name_requisite <%s> not define!'
                % name_requisites)
            return

        obj_name_requisite = util1c.encodeText(name_requisites[0], 'unicode',
                                               'utf-8')
        evt_name_requisite = util1c.encodeText(name_requisites[1], 'unicode',
                                               'utf-8')
        value = util1c.encodeText(value, 'unicode', 'utf-8')

        if evt_name_requisite in self._SupportEventNames:
            if obj_name_requisite:
                # Если имя объекта указано, то это объект формы
                for obj_res in res.data[1][2][2][1:]:
                    if obj_res[4][1] == obj_name_requisite:
                        full_evt_name_requisite = obj_name_requisite + evt_name_requisite
                        res_evt_name_requisites = [
                            evt[2][1] for evt in obj_res[2][4][1:]
                        ]
                        if full_evt_name_requisite not in res_evt_name_requisites:
                            evt_template = self._createFormObjEventResStd(
                                full_evt_name_requisite, value,
                                self._evtID[evt_name_requisite])
                            obj_res[2][4].append(evt_template)
                            # Увеличить счетчик событий формы
                            obj_res[2][4][0] += 1
                        break
            else:
                res_evt_name_requisites = [
                    evt[2][1] for evt in res.data[4][1:]
                ]
                if evt_name_requisite not in res_evt_name_requisites:
                    # Если имя объекта не указано, то это сама форма
                    evt_template = self._createFormObjEventResStd(
                        evt_name_requisite, value,
                        self._evtID[evt_name_requisite])
                    res.data[4].append(evt_template)
                    # Увеличить счетчик событий формы
                    res.data[4][0] += 1
        else:
            log.warning(u'Event \'%s\' not support' % evt_name_requisite)
            return

        return res.saveData()
Exemple #2
0
    def _addInFormModuleStd(self, mod_filename_requisite, txt):
        """
        Добавить в модуль формы текст. Обычная форма.
        @param mod_filename_requisite: Имя файла модуля формы.
        @param txt: Добавляемый текст.
        @return: True - добавление прошло успешно, False - добавления не произошло.
        """
        prg_txt = util1c.encodeText(txt, 'unicode', 'utf-8')

        f = None
        try:
            f = open(mod_filename_requisite, 'r')
            txt = f.read()
            f.close()
            f = None
            if prg_txt not in txt:
                try:
                    f = open(mod_filename_requisite, 'a')
                    f.write(prg_txt)
                    f.close()
                except:
                    if f:
                        f.close()
                        f = None
                    raise
            return True
        except:
            if f:
                f.close()
                f = None
            raise
        return False
Exemple #3
0
    def delInModule(self, txt):
        """
        Удалить из модуля объекта текст.
        @param txt: Удаляемый текст.
        @return: True - удаление прошло успешно, False - удаления не произошло.
        """
        txt = util1c.encodeText(txt)

        module_filename = os.path.join(self.getCFDir(), self.uid + '.0',
                                       'text')

        f = None
        try:
            f = open(module_filename, 'w')
            txt = f.read()
            txt = txt.replace(txt, '')
            f.write(txt)
            f.close()
            return True
        except:
            if f:
                f.close()
                f = None
            raise
        return False
Exemple #4
0
 def getUnicodeName(self):
     """
     Имя объекта в представлении Unicode.
     """
     if isinstance(self.name, unicode):
         return self.name
     else:
         return util1c.encodeText(str(self.name), 'utf-8', 'unicode')
Exemple #5
0
    def _updateInFormModuleStd(self, mod_filename_requisite, txt, *args,
                               **kwargs):
        """
        Заменить текст всех процедур и функций.
        @param mod_filename_requisite: Имя файла модуля формы.
        @param txt: Заменяемый текст.
        @return: True - замена прошла успешно, False - замена не произошла.
        """
        txt = util1c.encodeText(txt, 'unicode', 'utf-8')

        f = None
        try:
            f = open(mod_filename_requisite, 'r')
            mod_txt = f.read()
            f.close()
            f = None
        except:
            if f:
                f.close()
                f = None
            raise
        # Обновить блоки процедур/функций
        mod_blocks = self._splitModuleProcBlock(mod_txt)
        update_blocks = self._splitModuleProcBlock(txt)
        for update_block in update_blocks:
            if update_block[0]:
                is_add = True
                for i, mod_block in enumerate(mod_blocks):
                    if update_block[0] == mod_block[0]:
                        # Заменить блок
                        mod_blocks[i] = update_block
                        is_add = False
                        break
                # Если такой процедуры нет в тексте модуля, то добавить ее
                if is_add:
                    mod_blocks = self._appendInModuleBlocks(
                        mod_blocks, update_block)

        # Собрать текст модуля из обновленных блоков
        mod_txt = ''
        for mod_block in mod_blocks:
            mod_txt += mod_block[1] + '\n'
        mod_txt = mod_txt.replace('\r\n', '\n').replace('\n', '\r\n')
        try:
            f = open(mod_filename_requisite, 'w')
            f.write(mod_txt)
            f.close()
            f = None
        except:
            if f:
                f.close()
                f = None
            raise
        return True
Exemple #6
0
    def _addFormObjEventCtrl(self, res_filename_requisite, name_requisite,
                             value):
        """
        Добавить событие в объект формы. Управляемая форма.
        @param res_filename_requisite: Имя файла ресурса формы.
        @param name_requisite: Имя объекта формы и события в формате
        <Имя объекта>.<Имя события>
        @param value: Значение которое необходимо прописать в событии.
        """
        res = iccfresource.icCFResource(res_filename_requisite)
        res.loadData()

        name_requisites = name_requisite.split('.')
        if len(name_requisites) != 2:
            log.warning(
                u'Object name_requisite and event name_requisite <%s> not define!'
                % name_requisites)
            return

        obj_name_requisite = util1c.encodeText(name_requisites[0], 'unicode',
                                               'utf-8')
        evt_name_requisite = util1c.encodeText(name_requisites[1], 'unicode',
                                               'utf-8')
        obj_idx = self._findObjResIdx(res.data, obj_name_requisite)

        if evt_name_requisite == 'ПередНачаломДобавления':
            if obj_idx:
                evt_idx = (1, 27, 73)
                evt_res = res.getByIdxList(evt_idx)
                if evt_res == [0]:
                    # Если событие не определено
                    evt_template = copy.deepcopy(
                        CTRL_BEFORE_ADD_START_EVENT_TEMPLATE)
                    evt_template[-1] = util1c.encodeText(
                        value, 'unicode', 'utf-8')
                    res.data[1][27][73] = evt_template
        else:
            log.warning(u'Event \'%s\' not support' % evt_name_requisite)
            return

        return res.saveData()
Exemple #7
0
    def _addInFormModuleCtrl(self, res_filename_requisite, txt):
        """
        Добавить в модуль формы текст. Управляемая форма.
        @param res_filename_requisite: Имя файла ресурса формы.
        @param txt: Добавляемый текст.
        @return: True - добавление прошло успешно, False - добавления не произошло.
        """
        res = iccfresource.icCFResource(res_filename_requisite)
        res.loadData()

        txt = util1c.encodeText(txt, 'unicode', 'utf-8')
        if txt not in res.data[2]:
            prg_txt = res.data[2] + txt
            res.data[2] = prg_txt

        return res.saveData()
Exemple #8
0
    def addInModule(self, txt):
        """
        Добавить в модуль объекта текст.
        @param txt: Добавляемый текст.
        @return: True - добавление прошло успешно, False - добавления не произошло.
        """
        txt = util1c.encodeText(txt)

        module_filename = os.path.join(self.getCFDir(), self.uid + '.0',
                                       'text')
        if not os.path.exists(module_filename):
            return

        f = None
        try:
            f = open(module_filename, 'r')
            txt = f.read()
            f.close()
            f = None
            if txt not in txt:
                try:
                    f = open(module_filename, 'a')
                    f.write(txt)
                    f.close()
                except:
                    if f:
                        f.close()
                        f = None
                    raise
            return True
        except:
            if f:
                f.close()
                f = None
            raise
        return False