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
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
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_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
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
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
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'Ошибка импорта данных справочника типов документов БАЛАНС+')
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
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
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