Exemplo n.º 1
0
    def _gen_tab_requisite_res(self):
        """
        Сгенерировать ресурс табличного реквизита.
        """
        from work_flow.usercomponents import requisite
        from work_flow.usercomponents import nsi_requisite
        from work_flow.usercomponents import tab_requisite

        # Преобразовать русское наименование из 1С в латинское
        name_lat = ic_str.rus2lat(self.name)
        res = util.icSpcDefStruct(copy.deepcopy(tab_requisite.ic_class_spc),
                                  None)
        res['name'] = name_lat
        res['_uuid'] = self.uid
        res['description'] = self.description
        res['label'] = self.description

        # Добавляем реквизиты
        for cf_requisite in self.requisites:
            if cf_requisite.type_value[0] == iccfobject.REF_SIGNATURE_1C:
                # Если это ссылка, то считаем что это ссылка на справочник
                requisite_res = util.icSpcDefStruct(
                    copy.deepcopy(nsi_requisite.ic_class_spc), None)
            else:
                requisite_res = util.icSpcDefStruct(
                    copy.deepcopy(requisite.ic_class_spc), None)
                requisite_res['type_val'] = cf_requisite._gen_field_type_res()
            requisite_res['name'] = ic_str.rus2lat(cf_requisite.name)
            requisite_res['_uuid'] = cf_requisite.uid
            requisite_res['description'] = cf_requisite.description
            requisite_res['label'] = cf_requisite.description
            res['child'].append(requisite_res)

        return res
Exemplo n.º 2
0
    def _gen_registry_res(self,
                          prj_res_ctrl=None,
                          name=None,
                          description=u'',
                          uuid=iccfobject.NONE_UID):
        """
        Генерация ресурса регистра накопления 1С.
        @param prj_res_ctrl: Контроллер управления ресурсом проекта.
        @param name: Наименование объекта ресурса.
        @param description: Описание объекта ресурса.
        @param uuid: Уникальный идентификатор объекта ресурса.
        @return: Ресурс справочника перечисления 1С.
        """
        from work_flow.usercomponents import acc_registry
        from work_flow.usercomponents import requisite
        from work_flow.usercomponents import nsi_requisite

        # Преобразовать русское наименование из 1С в латинское
        name_lat = ic_str.rus2lat(name)
        res = util.icSpcDefStruct(copy.deepcopy(acc_registry.ic_class_spc),
                                  None)
        res['name'] = name_lat
        res['_uuid'] = uuid
        res['description'] = description
        res['db'] = self._get_db_psp(prj_res_ctrl)
        res['dimension_requisites'] = [
            ic_str.rus2lat(cf_requisite.name)
            for cf_requisite in self.dimensions
        ]
        res['resource_requisites'] = [
            ic_str.rus2lat(cf_requisite.name)
            for cf_requisite in self.resources
        ]
        res['operation_table'] = name_lat + '_operation_tab'
        res['result_table'] = name_lat + '_result_tab'

        # Добавляем реквизиты
        all_requisites = self.dimensions + self.resources + self.requisites
        for cf_requisite in all_requisites:
            if cf_requisite.type_value[0] == iccfobject.REF_SIGNATURE_1C:
                # Если это ссылка, то считаем что это ссылка на справочник
                requisite_res = util.icSpcDefStruct(
                    copy.deepcopy(nsi_requisite.ic_class_spc), None)
            else:
                requisite_res = util.icSpcDefStruct(
                    copy.deepcopy(requisite.ic_class_spc), None)
                requisite_res['type_val'] = cf_requisite._gen_field_type_res()
            requisite_res['name'] = ic_str.rus2lat(cf_requisite.name)
            requisite_res['_uuid'] = cf_requisite.uid
            requisite_res['description'] = cf_requisite.description
            requisite_res['label'] = cf_requisite.description
            res['child'].append(requisite_res)

        return res
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    def _gen_registry(self, prj_res_ctrl=None):
        """
        Генерация ресурса регистра накопления 1С.
        @param prj_res_ctrl: Контроллер управления ресурсом проекта.
        @return: True/False.
        """
        if prj_res_ctrl is None:
            log.warning(
                u'Не определен контроллер управления ресурсом проекта. Генерация ресурса 1С не взможна.'
            )
            return False

        reg_res = self._gen_registry_res(prj_res_ctrl,
                                         name=self.name,
                                         description=self.description,
                                         uuid=self.uid)

        res_name = ic_str.rus2lat(self.name)

        if prj_res_ctrl.isRes(res_name, 'mtd'):
            prj_res_ctrl.delRes(res_name, 'mtd')

        # Сохранить ресурс
        prj_res_ctrl.saveRes(res_name, 'mtd', reg_res)
        return True
Exemplo n.º 5
0
 def _get_sprav_tabname(self, prj_res_ctrl=None):
     """
     Имя таблицы хранения справочника 1С.
     @param prj_res_ctrl: Контроллер управления ресурсом проекта.
     """
     name_lat = ic_str.rus2lat(self.name)
     return 'nsi_' + name_lat
Exemplo n.º 6
0
    def _gen_doc_res(self,
                     prj_res_ctrl=None,
                     name=None,
                     description=u'',
                     uuid=iccfobject.NONE_UID):
        """
        Генерация ресурса дакумента 1С.
        @param prj_res_ctrl: Контроллер управления ресурсом проекта.
        @param name: Наименование объекта ресурса.
        @param description: Описание объекта ресурса.
        @param uuid: Уникальный идентификатор объекта ресурса.
        @return: Ресурс справочника перечисления 1С.
        """
        from work_flow.usercomponents import document
        from work_flow.usercomponents import requisite
        from work_flow.usercomponents import nsi_requisite

        # Преобразовать русское наименование из 1С в латинское
        name_lat = ic_str.rus2lat(name)
        res = util.icSpcDefStruct(copy.deepcopy(document.ic_class_spc), None)
        res['name'] = name_lat
        res['_uuid'] = uuid
        res['description'] = description
        res['db'] = self._get_db_psp(prj_res_ctrl)

        # Добавляем реквизиты
        for cf_requisite in self.requisites:
            if cf_requisite.type_value[0] == iccfobject.REF_SIGNATURE_1C:
                # Если это ссылка, то считаем что это ссылка на справочник
                requisite_res = util.icSpcDefStruct(
                    copy.deepcopy(nsi_requisite.ic_class_spc), None)
            else:
                requisite_res = util.icSpcDefStruct(
                    copy.deepcopy(requisite.ic_class_spc), None)
                requisite_res['type_val'] = cf_requisite._gen_field_type_res()
            requisite_res['name'] = ic_str.rus2lat(cf_requisite.name)
            requisite_res['_uuid'] = cf_requisite.uid
            requisite_res['description'] = cf_requisite.description
            requisite_res['label'] = cf_requisite.description
            res['child'].append(requisite_res)

        # Добавляем табличные части
        for tab_requisite in self.tabs:
            requisite_res = tab_requisite._gen_tab_requisite_res()
            res['child'].append(requisite_res)

        return res
Exemplo n.º 7
0
    def set_default_data(self):
        """
        Установить данные справочника по умолчанию.
        Данные беруться из таблицы справочника БАЛАНС+.
        """
        log.info(u'Start set_default_data')
        if not os.path.exists(SPRAV_DBF_FILENAME):
            log.warning(
                u'Отсутствует файл <%s> для импорта данных справочника типов документов'
                % SPRAV_DBF_FILENAME)
            return

        tab = self.get_object()
        # Очистить таблицу
        tab.clear()

        dbf_tab = None
        try:
            dbf_tab = dbf.icDBFFile()
            dbf_tab.Open(SPRAV_DBF_FILENAME)
            record = dbf_tab.getRecDict()
            while not dbf_tab.EOF():
                if int(record['TYP']) in SPRAV_TYPE_CODES:
                    typ = ic_str.limit_len_text(record['TYP'], 3, '0')
                    if record['COD'].strip():
                        cod = unicode(record['COD'].strip(),
                                      DBF_DEFAULT_ENCODE)
                        cod = ic_str.limit_len_text(ic_str.rus2lat(cod), 10,
                                                    '0')
                    else:
                        cod = u''
                    name = unicode(record['NAM'], DBF_DEFAULT_ENCODE)
                    try:
                        log.debug('NSI [%s : %s : %s]' % (typ, cod, name))
                    except UnicodeDecodeError:
                        log.debug('NSI [%s : %s]' % (typ, cod))

                    new_cod = typ + cod
                    # Удаление на случай двойного описания
                    # одного и того же в DBF файле
                    tab.del_where(tab.c.cod == new_cod)
                    new_rec = dict(type='NSITst', cod=new_cod, name=name)
                    tab.add(**new_rec)

                dbf_tab.Next()
                record = dbf_tab.getRecDict()
            dbf_tab.Close()
            dbf_tab = None
        except:
            if dbf_tab:
                dbf_tab.Close()
                dbf_tab = None
            log.fatal(
                u'Ошибка импорта данных справочника типов документов БАЛАНС+')
Exemplo n.º 8
0
    def _gen_sprav_res(self,
                       prj_res_ctrl=None,
                       name=None,
                       description=u'',
                       uuid=iccfobject.NONE_UID):
        """
        Генерация ресурса справочника 1С.
        @param prj_res_ctrl: Контроллер управления ресурсом проекта.
        @param name: Наименование объекта ресурса.
        @param description: Описание объекта ресурса.
        @param uuid: Уникальный идентификатор объекта ресурса.
        @return: Ресурс справочника перечисления 1С.
        """
        from NSI.usercomponents import sprav
        from NSI.usercomponents import spravlevel

        # Преобразовать русское наименование из 1С в латинское
        name_lat = ic_str.rus2lat(name)
        tab_name = self._get_sprav_tabname(prj_res_ctrl)
        res = util.icSpcDefStruct(copy.deepcopy(sprav.ic_class_spc), None)
        res['name'] = name_lat
        res['_uuid'] = uuid
        res['description'] = description
        res['table'] = (('Table', tab_name, None, '%s.tab' % tab_name,
                         ic.getPrjName()), )
        res['db'] = self._get_db_psp(prj_res_ctrl)
        # Справочнки меняются со временем, поэтому временная таблица нужна
        res['is_tab_time'] = True

        # Добавляем уровни
        if not self.is_hierarchy:
            # Справочник не иерархичный то у нас только 1 уровень
            level_res = util.icSpcDefStruct(
                copy.deepcopy(spravlevel.ic_class_spc), None)
            level_res['name'] = 'lvl' + name_lat
            level_res['description'] = description
            level_len = self._get_sprav_spravlevel_len()
            level_res['len'] = level_len
            res['child'].append(level_res)
        else:
            level_count = self.hierarchy_level_count if self.is_limit_hierarchy else MAX_SPRAV_LEVEL_COUNT
            for i_level in range(level_count):
                level_res = util.icSpcDefStruct(
                    copy.deepcopy(spravlevel.ic_class_spc), None)
                level_res['name'] = 'lvl%d' % (i_level + 1) + name_lat
                level_res['description'] = u''
                level_len = self._get_sprav_spravlevel_len()
                level_res['len'] = level_len
                res['child'].append(level_res)

        return res
Exemplo n.º 9
0
    def _gen_enum_sprav_res(self,
                            prj_res_ctrl=None,
                            name=None,
                            description=u'',
                            uuid=iccfobject.NONE_UID):
        """
        Генерация ресурса справочника перечисления 1С.
        @param prj_res_ctrl: Контроллер управления ресурсом проекта.
        @param name: Наименование объекта ресурса.
        @param description: Описание объекта ресурса.
        @param uuid: Уникальный идентификатор объекта ресурса.
        @return: Ресурс справочника перечисления 1С.
        """
        from NSI.usercomponents import sprav
        from NSI.usercomponents import spravlevel

        # Преобразовать русское наименование из 1С в латинское
        name_lat = ic_str.rus2lat(name)
        tab_name = self._get_enum_tabname(prj_res_ctrl)
        res = util.icSpcDefStruct(copy.deepcopy(sprav.ic_class_spc), None)
        res['name'] = name_lat
        res['_uuid'] = uuid
        res['description'] = description
        res['table'] = (('Table', tab_name, None, '%s.tab' % tab_name,
                         ic.getPrjName()), )
        res['db'] = self._get_db_psp(prj_res_ctrl)
        # Перечисления не меняются со временем, пэтому временная таблица не нужна
        res['is_tab_time'] = False

        # Для перечислений добавляем 1 уровень
        level_res = util.icSpcDefStruct(copy.deepcopy(spravlevel.ic_class_spc),
                                        None)
        level_res['name'] = 'lvl' + name_lat
        level_res['description'] = description
        level_len = self._get_enum_spravlevel_len()
        level_res['len'] = level_len
        res['child'].append(level_res)
        return res
Exemplo n.º 10
0
    def _gen_sprav_tab_res(self, prj_res_ctrl=None, table_name=None):
        """
        Создать ресурс таблицы хранения справочника 1С.
        @param prj_res_ctrl: Контроллер управления ресурсом проекта.
        """
        from ic.components.user import ic_tab_wrp

        if table_name is None:
            table_name = self._get_sprav_tabname(prj_res_ctrl)

        tab_res = util.icSpcDefStruct(copy.deepcopy(ic_tab_wrp.ic_class_spc),
                                      None)
        # Установить свойства таблицы
        tab_res['name'] = table_name
        tab_res['description'] = ic_str.str2unicode(self.description)
        tab_res['table'] = table_name.lower()
        tab_res['source'] = self._get_db_psp(prj_res_ctrl)

        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='type',
                                      field_description=u'Тип справочника'))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='cod',
                                      field_description=u'Код справочника'))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='name',
                                      field_description=u'Наименование'))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='count',
                                      field_type='I',
                                      field_description=u'Cчетчик'))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='access',
                                      field_description=u'Доступ'))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='s1',
                                      field_type='T',
                                      field_default=u''))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='s2',
                                      field_type='T',
                                      field_default=u''))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='s3',
                                      field_type='T',
                                      field_default=u''))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='n1',
                                      field_type='I',
                                      field_default=0))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='n2',
                                      field_type='I',
                                      field_default=0))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='n3',
                                      field_type='I',
                                      field_default=0))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='f1',
                                      field_type='F',
                                      field_default=0.0))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='f2',
                                      field_type='F',
                                      field_default=0.0))
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='f3',
                                      field_type='F',
                                      field_default=0.0))
        # Добавить поле UID объекта из 1С. Его необходимо заполнять при заполнении данными
        # Через это поле будет контролироваться целосность данных при импорте данных из 1С
        tab_res['child'].append(
            self._gen_sprav_field_res(field_name='uid1c',
                                      field_type='T',
                                      field_description=u'UID объекта из 1С'))
        # Генерация полей реквизитов
        for requisite in self.requisites:
            field_name = ic_str.rus2lat(requisite.name)
            field_type = requisite._gen_field_type_res()
            tab_res['child'].append(
                self._gen_sprav_field_res(
                    field_name=field_name,
                    field_type=field_type,
                    field_description=requisite.description,
                    field_default=requisite._get_field_default_res()))

        return tab_res