def createDbf(self): dbfName = os.path.join(self.parent.getTmpDir(), 'Fap_' + self.getDbfName() + '.dbf') dbf = Dbf(dbfName, new=True, encoding='cp866') dbf.addField( ('SMO_CODE', 'C', 4), # код СМО плательщика (п.1 примечаний); обязательное; SPR02 ( 'CODE_MO', 'C', 5 ), # код структурноего подразделения медицинской организации в системе ОМС(ФАП) (п.7 примечаний); обязательное; SPR01 ( 'SPV', 'N', 1 ), # тип документа, подтверждающего факт страхования по ОМС; обязательное ( 'SPS', 'C', 12 ), # серия документа, подтверждающего факт страхования по ОМС; обязательное для документов ОМС, имеющих серию ( 'SPN', 'C', 20 ), # номер документа, подтверждающего факт страхования по ОМС (п.3 примечаний); обязательное ('FIO', 'C', 40), # фамилия (п.4 примечаний); обязательное ('IMA', 'C', 40), # имя (п.4 примечаний); обязательное ('OTCH', 'C', 40), # отчество (п.4 примечаний) ('DATR', 'D'), # дата рождения (п.5 примечаний); обязательное ( 'RESULT', 'N', 1 ), # результат сверки (п.6 примечаний); обязательное, заполняется СМО по результатам проведенной сверки ) return dbf
def createSpr22Dbf(self): dbf = Dbf(self.wizard().getFullDbfFileName('SPR22'), new=True, encoding='cp866') dbf.addField( ('CODE_MO', 'C', 5), # Код МО ('KUSL', 'C', 15), # Код услуги ('DATN', 'D', 30), # Дата начала действия тарифа ('DATO', 'D', 30), # Дата окончания тарифа ('TARIF', 'N', 10, 2), # Стоимость услуги # ('TARIF_B', 'N', 10, 2), # Базовая часть стоимости услуги # ('TARIF_DM', 'N', 10, 2), # что-то # ('TARIF_D', 'N', 10, 2), # Сумма примененных коэффициентов # ('TARIF_UC', 'N', 10, 2), # Цена "коэффициента участковости" # ('CENA_KD', 'N', 10, 2), # Цена койко-дня # ('LEVEL', 'C', 5), # Уровень оказания МП ) return dbf
def openFile(self, fileName): archive, nameFiles = getFilesZipArchive(fileName) if archive: for name in nameFiles: if not unicode(name.lower()).endswith('spr20.dbf'): continue self.importDBF = getDBFFileFromZipArchive(archive, name) break else: if unicode(fileName.lower()).endswith('spr20.dbf'): self.importDBF = Dbf(fileName, encoding='cp866') if not self.importDBF: self.logBrowser.append(u'В архиве нет spr20.dbf файла.' if archive else u'Необходимо выбрать файл spr20.dbf.') self.logBrowser.update() return self.btnImport.setEnabled(True)
def openDBF(self): dbf = None fileName = forceStringEx(self.edtFileName.text()) result = os.path.isfile(fileName) if result: dbf = Dbf(fileName, readOnly=True, encoding='cp866') fieldsList = ['CODE', 'NAME', 'ORG', 'ISPAY', 'DATN', 'DATO'] if not dbfCheckNames(dbf, fieldsList): raise CException(u'файл %s\nне содержит одного из полей:\n%s' % (fileName, ', '.join(fieldsList))) self.labelNum.setText(u'всего записей в источнике: '+str(dbf.recordCount)) return dbf
def openDBF(self, fileName, fieldsList): dbf = None result = os.path.isfile(fileName) if result: dbf = Dbf(fileName, readOnly=True, encoding='cp866') if not dbfCheckNames(dbf, fieldsList): raise CException(u'файл %s\nне содержит одного из полей:\n%s' % (fileName, ', '.join(fieldsList))) self.totalRecordCount += dbf.recordCount self.labelNum.setText(u'всего записей в источниках: ' + str(self.totalRecordCount)) return dbf
def update(self): self.clear() labels = self._labels.copy() isRollback = False dbfFile = None self._db.transaction() try: for fileName in self._fileNames: if fileName[:1] in labels.keys(): try: dbfFile = Dbf(os.path.join(self._dirName, fileName), readOnly=True, encoding='cp866') if dbfFile.recordCount: if not self._callbackUpdate(fileName, 0, dbfFile.recordCount): isRollback = True return insertRowCount = 0 rbTable = self._db.table('rbCheckAccounts' + fileName[:1]) for dbfRow in dbfFile: newRecord = rbTable.newRecord() for fieldName, fieldValue in dbfRow.asDict().items(): fieldValue = forceStringEx(fieldValue) if fieldValue: newRecord.setValue(forceString(fieldName), toVariant(fieldValue)) self._db.insertRecord(rbTable, newRecord) insertRowCount += 1 if not self._callbackUpdate(fileName, insertRowCount, dbfFile.recordCount): isRollback = True return del labels[fileName[:1]] dbfFile.close() dbfFile = None except Exception as e: isRollback = True raise self.InsertError(fileName, e) requiredFiles = [label for label, required in labels.items() if required] if requiredFiles: isRollback = True raise self.RequiredFilesNotFoundError(requiredFiles) self._db.commit() finally: if isRollback: self._db.rollback() if dbfFile: dbfFile.close() QtGui.qApp.removeTmpDir(self._dirName)
def createDbf(self): u"""Создает структуру для паспортной части реестра счетов.""" dbfName = os.path.join(self.parent.getTmpDir(), self.getDbfBaseName()) dbf = Dbf(dbfName, new=True, encoding='cp866') dbf.addField( ('NS', 'N', 5, 0), # номер реестра счетов (п. 1 примечаний) обязательное ('VS', 'C', 1), # тип реестра счетов (п. 2;4 примечаний) обязательное SPR21 ( 'DATS', 'D' ), # дата формирования реестра счетов (п. 3 примечаний) обязательное ('SN', 'N', 12, 0), # номер персонального счета обязательное ('DATPS', 'D'), # дата формирования персонального счета обязательное ('CODE_MO', 'C', 5), # код МО, оказавшей медицинскую помощь обязательное SPR01 ('PL_OGRN', 'C', 15), # ОГРН плательщика ('FIO', 'C', 30), # фамилия (п. 5 примечаний) обязательное ('IMA', 'C', 20), # имя (п. 5 примечаний) обязательное ('OTCH', 'C', 30), # отчество (п. 5 примечаний) ('POL', 'C', 1), # символьное (1) пол (М/Ж) (п. 6 примечаний) обязательное ('DATR', 'D'), # дата рождения (п. 7 примечаний) обязательное ('SNILS', 'C', 14), # СНИЛС ( 'OKATO_OMS', 'C', 5 ), # код ОКАТО территории страхования по ОМС обязательное для инокраевых SPR39 ('SPV', 'N', 1), # вид полиса ('SPS', 'C', 10), # серия полиса ОМС обязательное ('SPN', 'C', 20), # номер полиса ОМС обязательное # ('STAT_P', 'C', 1), # статус представителя пациента обязательное SPR41 ( 'Q_G', 'C', 10 ), # признак "Особый случай" при регистрации обращения за медицинской помощью (п. 8 примечаний) SPR42 # ('NOVOR', 'C', 9), # признак новорожденного (п. 18 примечаний) ( 'FAMP', 'C', 30 ), # фамилия родителя (представителя) пациента (п. 5 примечаний) обязательное ( 'IMP', 'C', 20 ), # имя родителя (представителя) пациента (п. 5 примечаний) обязательное ('OTP', 'C', 30 ), # отчество родителя (представителя) пациента (п. 5 примечаний) ( 'POLP', 'C', 1 ), # пол представителя пациента (М/Ж) (п. 6 примечаний) Да (при STAT_P <> “0”) ( 'DATRP', 'D' ), # дата рождения представителя пациента (п. 7 примечаний) Да (при STAT_P <> “0”) ( 'C_DOC', 'N', 2, 0 ), # код типа документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) SPR43 ( 'S_DOC', 'C', 10 ), # серия документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) ( 'N_DOC', 'C', 15 ), # номер документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) ('DATN', 'D'), # дата начала лечения обязательное ('DATO', 'D'), # дата окончания лечения обязательное ) return dbf
def getDataFromDbfFile(parentWidget, fileName): from library.dbfpy.dbf import Dbf reportDataByNumbers = {} dbf = Dbf(fileName, readOnly=True, encoding='cp866', enableFieldNameDups=True) unexistsFields = [] for needField in [ 'NREESTR', 'NSVOD', 'KODLPU', 'KSPEC', 'NSCHT', 'STOIM', 'ZPL', 'DOPL', 'MED', 'M_INV', 'NAKL' ]: if needField not in dbf.fieldNames: unexistsFields.append(needField) if unexistsFields: QtGui.QMessageBox.warning( parentWidget, u'Ошибка', u'В указанном файле исходных данных отчета\n отсутсвтуют поля:\n%s' % ('\n'.join(unexistsFields)), buttons=QtGui.QMessageBox.Ok, defaultButton=QtGui.QMessageBox.NoButton) return reportDataByNumbers, '_____________________________________________' rows = dbf.recordCount row = 0 nr = u'%05d' % forceInt(dbf[row]['NREESTR']) table = QtGui.qApp.db.table('Organisation') platrec = QtGui.qApp.db.getRecordEx( table, 'shortName', 'infisCode LIKE \'61%%%s\' and deleted = 0' % nr[:2]) plat = forceString(platrec.value('shortName')) specialityNameCashe = {} while row < rows: dbfRecord = dbf[row] nsvod = forceString(dbfRecord['NSVOD']) reportData = reportDataByNumbers.setdefault(nsvod, {}) orgStructureCode = forceStringEx(dbfRecord['KODLPU']) serviceCode = forceString(dbfRecord['KSPEC']) if not specialityNameCashe.has_key(serviceCode): rbSpecialityTable = QtGui.qApp.db.table('rbSpeciality') specialityNameCashe[serviceCode] = forceString( QtGui.qApp.db.translate(rbSpecialityTable, rbSpecialityTable['federalCode'], serviceCode, rbSpecialityTable['OKSOName'])) specialityName = specialityNameCashe[serviceCode] visitCount = 1 nscht = forceInt(dbfRecord['NSCHT']) tariffPrice = forceDouble(dbfRecord['STOIM']) sum = visitCount * tariffPrice wages = forceDouble(dbfRecord['ZPL']) #1 additionalPayments = forceDouble(dbfRecord['DOPL']) #5 drugs = forceDouble(dbfRecord['MED']) #2 softInventory = forceDouble(dbfRecord['M_INV']) #3 overhead = forceDouble(dbfRecord['NAKL']) #4 orgStructureData = reportData.setdefault(serviceCode, {}) serviceData = orgStructureData.setdefault( serviceCode, { 'orgStructureCode': orgStructureCode, 'serviceCode': serviceCode, 'specialityName': specialityName, 'visitCount': 0, 'eventCount': 0, 'sum': 0.0, 'wages': 0.0, 'additionalPayments': 0.0, 'drugs': 0.0, 'softInventory': 0.0, 'overhead': 0.0, 'nschtValueSet': [] }) serviceData['visitCount'] += visitCount if nscht not in serviceData['nschtValueSet']: serviceData['nschtValueSet'].append(nscht) serviceData['eventCount'] += 1 serviceData['sum'] += sum serviceData['wages'] += wages serviceData['additionalPayments'] += additionalPayments serviceData['drugs'] += drugs serviceData['softInventory'] += softInventory serviceData['overhead'] += overhead row += 1 dbf.close() return reportDataByNumbers, plat
def update(self): isRollback = False dbfFile = Dbf(os.path.join(self._dirName, self._fileName), readOnly=True, encoding='cp866') try: if not self._callbackUpdate(0, dbfFile.recordCount): return fileHash = forceString( hashlib.md5(dbfFile.stream.read()).hexdigest()) if not self._rbTable or fileHash != forceString(self._metaData.value('hash')) or \ self._db.getCount(self._rbTable, countCol='id') != dbfFile.recordCount: self._drop() rbTableFields = [ trim(field) for field in forceString( self._metaData.value('fields')).split(',') ] fieldsStatement = '' fieldsStatementCount = 0 for dbfField in dbfFile.fieldDefs: if forceString(dbfField.name) in rbTableFields: fieldsStatement += u'`%s` %s DEFAULT NULL COMMENT \'Поле %s\', ' % ( forceString( dbfField.name), self._getType(dbfField), forceString(dbfField.name)) fieldsStatementCount += 1 if len(rbTableFields) != fieldsStatementCount: raise self.MetadataMappingError() rbTableIndexes = [ index for index in map( trim, forceString(self._metaData.value('indexes')).split( ',')) if index ] indexesStatement = '' for index in rbTableIndexes: indexesStatement += u', INDEX `%s` (`%s`)' % (index, index) createStatement = u""" CREATE TABLE `%s` ( `id` int(11) NOT NULL AUTO_INCREMENT, `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Отметка удаления записи', %s PRIMARY KEY (`id`) %s ) ENGINE = InnoDB DEFAULT charset = utf8 COMMENT = '%s';""" % ( forceString(self._metaData.value('tableName')), fieldsStatement, indexesStatement, forceString(self._metaData.value('name'))) try: self._db.query(createStatement) self._db.transaction() try: insertRowCount = 0 self._rbTable = self._db.table( forceString(self._metaData.value('tableName'))) for dbfRow in dbfFile: newRecord = self._rbTable.newRecord() for field in rbTableFields: fieldValue = forceStringEx(dbfRow[field]) if fieldValue: newRecord.setValue(field, toVariant(fieldValue)) self._db.insertRecord(self._rbTable, newRecord) insertRowCount += 1 if not self._callbackUpdate( insertRowCount, dbfFile.recordCount): isRollback = True return self._metaData.setValue('hash', toVariant(fileHash)) self._db.updateRecord(self._additionalRBs, self._metaData) self._db.commit() except: isRollback = True raise except Exception as e: raise self.CreateError(e) else: self._callbackUpdate(dbfFile.recordCount, dbfFile.recordCount) finally: if isRollback: self._db.rollback() self._drop() dbfFile.close()
class CImportMKB(QtGui.QDialog, Ui_ImportMKB): def __init__(self, parent): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.progressBar.setMinimum(0) self.progressBar.setMaximum(1) self.progressBar.setValue(0) self.btnImport.setEnabled(False) self.importDBF = None def openFile(self, fileName): archive, nameFiles = getFilesZipArchive(fileName) if archive: for name in nameFiles: if not unicode(name.lower()).endswith('spr20.dbf'): continue self.importDBF = getDBFFileFromZipArchive(archive, name) break else: if unicode(fileName.lower()).endswith('spr20.dbf'): self.importDBF = Dbf(fileName, encoding='cp866') if not self.importDBF: self.logBrowser.append(u'В архиве нет spr20.dbf файла.' if archive else u'Необходимо выбрать файл spr20.dbf.') self.logBrowser.update() return self.btnImport.setEnabled(True) def updateMKB(self, mapMKB): db = QtGui.qApp.db self.progressBar.setRange(0, len(mapMKB)) self.logBrowser.append(u'Конструирование запроса') dateLeft = dateLeftInfinity.toString('yyyy-MM-dd') dateRight = dateRightInfinity.toString('yyyy-MM-dd') stmt = u'UPDATE MKB_Tree SET begDate=\'%s\', endDate=\'%s\', OMS=\'1\' WHERE parent_code IS NULL;\n' % ( dateLeft, dateRight) for i, code in enumerate(mapMKB): stmt += u'UPDATE MKB SET OMS=\'{OMS}\', begDate=\'{begDate}\', endDate=\'{endDate}\', DiagName=\'{name}\' WHERE DiagID=\'{code}\';\n' \ u'UPDATE MKB_Tree SET OMS=\'{OMS}\', begDate=\'{begDate}\', endDate=\'{endDate}\', DiagName=\'{name}\' WHERE DiagID=\'{code}\';\n'.format( OMS=mapMKB[code][0], begDate=mapMKB[code][1] or dateLeft, endDate=mapMKB[code][2] or dateRight, code=code, name=mapMKB[code][3] ) self.progressBar.setValue(i) if not i % 30: db.query(stmt) stmt = '' db.query(stmt) def insertMKB(self, mapMKB): self.progressBar.setRange(0, 0) mapMKB = mapMKB.copy() db = QtGui.qApp.db self.logBrowser.append(u'Конструирование запроса') tbl_tree = db.table('MKB_Tree') view_tree = db.table('vMKBTree') tbl = view_tree.leftJoin(tbl_tree, view_tree['BlockID'].eq(tbl_tree['DiagID'])) blocks = dict((forceString(rec.value(1)), forceString(rec.value(0)).strip('()').split('-')) for rec in db.getRecordList( tbl, 'DISTINCT vMKBTree.BlockID, MKB_Tree.id')) exist = (forceString(rec.value(0)) for rec in db.getRecordList(tbl_tree, 'DiagID')) for diag in exist: if diag in mapMKB: del mapMKB[diag] def get_block(code): for tree_id, mkb_range in blocks.iteritems(): if (len(mkb_range) == 1 and mkb_range[0] == code) or (len(mkb_range) == 2 and mkb_range[0] <= code <= mkb_range[1]): return tree_id return None values = [] dateLeft = dateLeftInfinity.toString('yyyy-MM-dd') dateRight = dateRightInfinity.toString('yyyy-MM-dd') self.progressBar.setRange(0, len(mapMKB)) for k, v in mapMKB.iteritems(): if len(k) == 3: parent = get_block(k) if not parent: continue elif len(k) == 5: parent = k[:3] elif len(k) == 6: parent = k[:5] else: continue values.append( '(\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)' % ( k, # DiagID v[3], # DiagName parent, v[0], # OMS v[1] or dateLeft, # begDate v[2] or dateRight # endDate )) self.progressBar.step() if values: stmt = u'INSERT INTO MKB_Tree (DiagID, DiagName, parent_code, OMS, begDate, endDate, Prim, sex, age, characters, duration, USL_OK1, USL_OK2, USL_OK3, USL_OK4, SELF) ' \ u'VALUES ' + ', '.join(values) db.query(stmt) @QtCore.pyqtSlot() def on_btnImport_clicked(self): db = QtGui.qApp.db mapMKB = {} self.progressBar.setMinimum(0) self.progressBar.setMaximum(len(self.importDBF)) self.progressBar.setValue(0) self.logBrowser.append( u'Импорт начат: %s' % (QtCore.QTime.currentTime().toString('hh:mm:ss'))) self.logBrowser.update() insertValues = [] self.progressBar.setText(u'Считывание данных из файла') for recordDBF in self.importDBF: self.progressBar.step() try: code = forceString(recordDBF['CODE']) mapMKB[code] = (forceString(recordDBF['IS_OMS']), forceString(recordDBF['DATN']), forceString(recordDBF['DATO']), forceString(recordDBF['NAME'])) except KeyError: self.logBrowser.append( u'Неправильный формат файла\nИмпорт прерван: %s' % (QtCore.QTime.currentTime().toString('hh:mm:ss'))) self.logBrowser.update() self.importDBF.close() return self.importDBF.close() db.transaction() try: self.progressBar.setText(u'Обновление записей') self.updateMKB(mapMKB) self.progressBar.setText(u'Вставка записей') self.insertMKB(mapMKB) self.logBrowser.append( u'Импорт окончен: %s' % (QtCore.QTime.currentTime().toString('hh:mm:ss'))) self.logBrowser.update() db.commit() except: self.logBrowser.append( u'Ошибка импорта: %s' % (QtCore.QTime.currentTime().toString('hh:mm:ss'))) db.rollback() QtGui.qApp.logCurrentException() self.progressBar.setRange(0, 1) self.progressBar.setValue(1) @QtCore.pyqtSlot() def on_btnSelectFile_clicked(self): fileName = QtGui.QFileDialog.getOpenFileName( self, u'Укажите файл с данными', self.edtFileName.text(), u'Файлы DBF, ZIP (*.dbf *.zip)') if fileName: self.edtFileName.setText(QtCore.QDir.toNativeSeparators(fileName)) self.openFile(unicode(fileName))
def importSMP(self): self.personId = self.cmbPerson.getValue() self.i = 0 self.visits = 0 self.events = 0 self.clients = 0 self.specialityId = QtGui.qApp.db.translateEx('Person', 'id', self.personId, 'speciality_id') try: self.btnImport.setEnabled(False) fileName = forceStringEx(self.edtFileName.text()) if not fileName: self.logBrowser.append(u'Необходимо выбрать файл!') self.logBrowser.update() return dbf = Dbf(fileName, readOnly=True, encoding='cp866') self.progressBar.setMinimum(0) self.progressBar.setMaximum(dbf.recordCount) self.progressBar.setValue(0) self.logBrowser.append( u'Иморт начат: %s' % (QtCore.QTime.currentTime().toString('hh:mm:ss'))) self.logBrowser.update() self.progressBar.setText(u'Считывание данных из файла') mapSMP = defaultdict(dict) accItemId = 0 for recordDBF in dbf: self.progressBar.step() # accItemId = recordDBF['ACCITEM_ID'] В предоставленном файле не было accItemId += 1 mapSMP[accItemId]['lastName'] = recordDBF['SURNAME'] mapSMP[accItemId]['firstName'] = recordDBF['NAME1'] mapSMP[accItemId]['patrName'] = recordDBF['NAME2'] mapSMP[accItemId]['birthDate'] = recordDBF['BIRTHDAY'] mapSMP[accItemId]['sex'] = recordDBF['SEX'] mapSMP[accItemId]['policySerial'] = recordDBF[ 'POLIS_S'] if recordDBF['POLIS_S'] != '-' else '' mapSMP[accItemId]['policyNumber'] = recordDBF[ 'POLIS_N'] if recordDBF['POLIS_N'] != '-' else '' # mapSMP[accItemId]['policyInsurer'] = recordDBF['POLIS_W'] В предоставленном файле не было mapSMP[accItemId]['policyInsurer'] = recordDBF['PAYER'] mapSMP[accItemId]['documentType'] = recordDBF['TYPEDOC'] mapSMP[accItemId]['docSeries1'] = recordDBF[ 'SER1'] if recordDBF['SER1'] != '-' else '' mapSMP[accItemId]['docSeries2'] = recordDBF[ 'SER2'] if recordDBF['SER2'] != '-' else '' mapSMP[accItemId]['documentNumber'] = recordDBF[ 'NPASP'] if recordDBF['NPASP'] != '-' else '' # mapSMP[accItemId]['snils'] = recordDBF['SNILS'] В предоставленном файле не было mapSMP[accItemId]['tariffType'] = recordDBF['SERV_ID'] mapSMP[accItemId]['emergStreet'] = recordDBF['STREET'] mapSMP[accItemId]['emergStreetType'] = recordDBF['STREETYPE'] mapSMP[accItemId]['emergArea'] = recordDBF['AREA'] mapSMP[accItemId]['emergHouse'] = recordDBF['HOUSE'] mapSMP[accItemId]['emergBuild'] = recordDBF['KORP'] mapSMP[accItemId]['emergFlat'] = recordDBF['FLAT'] # mapSMP[accItemId]['emergLongAddr'] = recordDBF['LONGADDR'] В предоставленном файле не было mapSMP[accItemId]['serviceInfisCode'] = recordDBF['PROFILE'] mapSMP[accItemId]['begDate'] = recordDBF['DATEIN'] mapSMP[accItemId]['endDate'] = recordDBF['DATEOUT'] #TODO:Зависит от isHospitalization #TODO:Где, isHospitalization mapSMP[accItemId]['amount'] = recordDBF['AMOUNT'] mapSMP[accItemId]['diagnosis'] = recordDBF['DIAGNOSIS'] #rbSpeciality Person mapSMP[accItemId]['specialityCode'] = recordDBF['ID_PRVS'] #TODO:rbDiagnosticResult.regionalCode нужен Diagnostic нужен Event mapSMP[accItemId]['idExitus'] = recordDBF['ID_EXITUS'] mapSMP[accItemId]['externalId'] = recordDBF['ILLHISTORY'] # mapSMP[accItemId]['aidProfileCode'] = recordDBF['ID_PRMP'] # mapSMP[accItemId]['eventAidProfileCode'] = recordDBF['ID_PRMP_C'] mapSMP[accItemId]['mkb_pc'] = recordDBF['DIAG_C'] mapSMP[accItemId]['eventResultCode'] = recordDBF['QRESULT'] mapSMP[accItemId]['eventSpecialityCode'] = recordDBF[ 'ID_PRVS_C'] # mapSMP[accItemId]['tmpAmount'] = recordDBF['ID_ED_PAY'] #Уже есть amount # mapSMP[accItemId]['aidKindCode'] = recordDBF['ID_VMP'] mapSMP[accItemId]['personId'] = self.getPersonId( recordDBF['ID_DOC']) #OrgStructure.infisCode от person_id mapSMP[accItemId]['personFormat'] = recordDBF['ID_DEPT'] mapSMP[accItemId]['eisLpuId_C'] = recordDBF['ID_DOC_C'] mapSMP[accItemId]['personFormat_C'] = recordDBF['ID_DEPT_C'] # mapSMP[accItemId]['accountId'] = recordDBF['ACC_ID'] В предоставленном файле не было # mapSMP[accItemId]['clientId'] = recordDBF['CLIENT_ID'] В предоставленном файле не было mapSMP[accItemId]['goal'] = recordDBF['ID_GOAL_C'] mapSMP[accItemId]['currentOrgMiac'] = recordDBF['ID_LPU'] mapSMP[accItemId]['nborn'] = recordDBF['N_BORN'] mapSMP[accItemId]['series'] = mapSMP[accItemId][ 'docSeries1'] + ' ' + mapSMP[accItemId]['docSeries2'] except ValueError: self.logBrowser.append(u'<b><font color=red>ОШИБКА:</b>' u' неверное значение строки "%d" в DBF.' % \ self.progressBar.value()) self.logBrowser.update() self.btnImport.setEnabled(True) raise except Exception as ex: self.logBrowser.append(u'<b><font color=red>ОШИБКА:</b> ' + ex.message) self.logBrowser.update() self.btnImport.setEnabled(True) raise self.progressBar.setText(u'Занесение данных в базу') self.logBrowser.append(u'Занесение данных в базу') self.logBrowser.update() QtGui.qApp.db.transaction() for rec in mapSMP.itervalues(): QtGui.qApp.processEvents() self.addVisit(rec) self.i += 1 # QtGui.qApp.db.rollback() QtGui.qApp.db.commit() self.progressBar.setText(u'Импорт завершен!') self.logBrowser.append(u'Импорт завершен!') self.logBrowser.append( u'Количество занесённых полей Visit: {0:d}\nКоличество занесённых полей Event: {1:d}\nКоличество занесённых полей Client: {2:d}' .format(self.visits, self.events, self.clients)) self.logBrowser.update() self.btnImport.setEnabled(True)