Инструмент позволяет создать программную взаимосвязь субъектов, которая не представлена в базовом решении (например: замещающие и замещаемые, место регистрации) |
|
Реляции создаются/редактируются в разделе "Классификаторы\Реляции". Могут поставляться как csv файл и загружаться через раздел "Структура системы\Инструменты\Загрузка конфигурации GUI" → Данные в формате csv |
Название реляции, которое будет передаваться в коде как параметр. Название должно быть уникальным
Краткая информация о том, какую взаимосвязь реализует реляция
Алгоритм написанный на JavaScript, который на вход получает субъект 1 и возращает идентификатор субъетка 2 из организационной структуры.
var result; var formText; var parentId; var query; var parent = ctx; var find_up_hierarhy = true; var idConverter = session.getIdConverter(); do { formText = parent.getString('Form'); parentId = 'f3'.equals(formText) ? parent.getString('OName_1Id') : parent.getString('HeadOfficeId'); if (!find_up_hierarhy || (('f1'.equals(formText) || '1'.equals(parent.getString('Leader')) || '1'.equals(parent.getString('IsWho'))) && !''.equals(parent.getString('EPost_PersonId')))) { result = parent.getString('docId'); break; } else if ('f0'.equals(formText) || 'f2'.equals(formText)) { find_up_hierarhy = false; var id = idConverter.unid2PlatformId(parent.getString('docId')); var boss_tabnum = parent.getString('struct_boss_ac'); if (boss_tabnum != null && !''.equals(boss_tabnum)) { query = 'SELECT post.id, app.created_date FROM SO_PersonSys sp JOIN so_appointment app on app.person = sp.id LEFT JOIN (SELECT * FROM so_appointmentplain UNION SELECT * FROM so_appointmenthead) app1 on app1.id = app.id LEFT JOIN so_post post on post.id = app1.post JOIN so_beard brd on brd.id = app.beard WHERE sp.tabnum = \'' + boss_tabnum + '\' and app.isprimary = \'1\' and brd.isactive = \'1\' order by post.isleader desc'; var collection = session.getCollectionService().findCollectionByQuery(query); if (collection != null && collection.size() > 0 && collection.get(0) != null) { parentId = idConverter.buildUnid(collection.get(0).getId(), collection.get(0).getTimestamp('created_date')); } else { find_up_hierarhy = true; } } else { find_up_hierarhy = true; } if (find_up_hierarhy) { query = 'SELECT post.id, app.created_date ' + 'FROM so_structureunit str ' + 'left join so_beard brd on brd.id = str.beard ' + 'left join so_beard brd_chld on brd_chld.hierparent = brd.id ' + 'left join so_appointment app on app.beard = brd_chld.id ' + 'left join (select * from so_appointmentplain ' + 'union select * from so_appointmenthead) app1 on app1.id = app.id ' + 'left join so_post post on post.id = app1.post ' + 'where (post.isleader = \'1\' or brd_chld.orig_type = \'1\') and brd_chld.isActive = \'1\' and brd_chld.isNotVacancy = \'1\' ' + 'and str.id = ' + id.getId() + ' and str.id_type = ' + id.getTypeId() + ' order by post.isleader desc'; var collection = session.getCollectionService().findCollectionByQuery(query); if (collection != null && collection.size() > 0 && collection.get(0) != null) { parentId = idConverter.buildUnid(collection.get(0).getId(), collection.get(0).getTimestamp('created_date')); } else if ('f0'.equals(formText)) { result = ''; } } else {} } parent = session.findByStrId(parentId); } while (result == null && parent != null) ctx.setResult(result) |