Интеграция KafkaSync
Утилита забирает сообщения из брокера Kafka из определенных определённых очередей (топиков) и создает создаёт структуру в Vitro MP на основе этих данных.
Обрабатываемые топики
ИСУП
isup.project-1- — сообщения о проектах системыisup.constructions-object-1- — объекты строительства системыisup.construction-object-type-1- — (справочник) типы объектов строительстваisup.place-of-implementation-1— (справочник) места реализацииisup.building-unit-1- — корпусы
ФСК Проектирование
kup.schedule-1- графики (сущность ФСК Проектирования). — графикиkup.schedule-responsibles-1- — ответственные у графиковkup.performers-groups-1- (справочник) - — группы исполнителейkup.direction-1- (справочник) — направления ЦГИПkup.task-1- задачи
...
- — задачи
Исходящие (Vitro → Kafka)
vitro.event-status— смена статуса альбома (раздел 5)vitro.status-list— справочник статусов (раздел 5.1)
1. Описание интеграции
ИСУП предоставляет сообщения о верхнеуровневой структуре системы: Проект - → Объект Строительства - строительства → Корпус.
Сущности распространяются на 3 спискасписки:
- Реестр проектов
- Файлы
- Задачи план-графика
В Файловой структуре вместо "Объект строительства" создается "Очередь", которая является агрегатором нескольких объектов строительства. Отношение объекта к очереди определено через Связи.
ФСК Проектирование предоставляет информацию о всех сущностях ниже ТЭ "Корпус":
- Стадия
- Комплект
- Раздел
- Альбом
В реестре проектов сохраняется полная иерархия ИСУП. В файловой структуре создаются проект и корпус; корпус размещается непосредственно под проектом. Промежуточный элемент «Очередь» и связи через список «Связи» больше не используются.
Связь корпуса с проектом в файлах обеспечивается полем proekt_id_isup на карточке корпуса в реестре (заполняется вычислением, см. раздел 7.3).
ФСК Проектирование предоставляет сущности ниже ТЭ «Корпус»: Стадия, Комплект, Раздел, Альбом, ИЗМ и другие типы из KupMap.
Связь ИСУП и ФСК Проектирование — через справочник «Графики KUP» Связь между ИСУП и ФСК Проектирование осуществляется через дополнительный Справочник "Графики КУП" (kup.direction-1).
При создании Корпус корпуса в системе настроена автоматизация на разворачивание шаблона Vitro. Внутри этого шаблона есть элемент с полем sync_kup по которому определяется, в какую папку должна попасть интеграция ФСК Проектирование
На схеме ниже изображена логика построения папочной структуры из ФСК Проектирования
KafkaSync записывает числовые id ИСУП и иерархию parent_id. Guid-лукапы заполняются в Vitro через вычисления и автоматизации (раздел 7).
2. Требования к системе
2.1.
...
Атрибуты
| Название | Системное имя | Тип |
|---|
| Описание |
|---|
| ID ИСУП |
| id_isup | Integer | числовой идентификатор |
| в ИСУП | |||
| GUID 1C | guid_1c | string | идентификатор из 1С |
| Короткое имя | short_name | string | короткое имя |
| Описание | description | Note | полное описание |
| Проект (карточка) | project_card | Lookup | лукап на |
| карточку проекта |
| Карточка корпуса | building_lookup |
| Lookup | лукап на |
2.2 Типы элементов
Необходимы следующие типы элементов и минимальный набор атрибутов к ним. Дополнительные атрибуты не мешают работе.
...
2.3 Списки
В системе должны быть заведены следующие списки, с привязанными ТЭ:
...
3 Настройка config.json
Файл расположен в корне с исполняемым файлом утилиты. Пример конфигурации для vitro.dev FSK без паролей.
{
"WebUrl": "https://vitro.dev.fsk.ru",
"Login": "admin",
"Password": "password",
"LibraryListId": "966e62c5-a803-49a0-a1be-e680d130c481",
"LibraryParentId": "5da4709f-3c94-4a82-b335-800117096b46",
"ReferenceListId": "5b911635-5f2a-4049-926b-60ec11be3d17",
"ObjectTypeListId": "1a0671ac-6ffd-4c2a-ac83-177c4902377d",
"KafkaMessageContentTypeId": "c3629456-3773-49b8-8a58-d4198e77ad8e",
"KafkaExportListId": "d244569a-fb9b-46f9-8a04-925c8baba2bb",
"KafkaImportListId": "9955d107-98e8-42e9-8cd6-19817764cfd3",
"ObjectTypeContentTypeId": "c8988a65-df34-4f60-88fd-90d23965c1fe",
"ProjectReferenceContentTypeId": "74546a61-799e-46aa-9a79-7f7661bb707f",
"ProjectContentTypeId": "540ff572-4a29-4d8e-8dfb-8eda093c583a",
"ObjectReferenceContentTypeId": "2ecac8b4-e621-400d-a63f-d456f4820efb",
"ObjectContentTypeId": "529c78d4-cc65-44d5-9055-71d33845d084",
"ObjectLinkContentTypeId": "7a03c92a-72cc-4eb5-8098-9b11e625b286",
"BuildingReferenceContentTypeId": "7175d8a2-2253-4172-b68b-150b823d855c",
"BuildingContentTypeId": "5c16ee47-fe94-4fc2-bd68-32ce0beb2a68",
"ParcticipantContentTypeId": "8c339404-3c15-421f-a867-d0867bd791c8",
"PerformerGroupContentTypeId": "7a5850e5-c2f4-4121-8ed4-450e3f0b4439",
"PerformerGroupListId": "daf3fd57-a7a4-4524-ae87-a359e6ffe082",
"ScheduleContentTypeId": "8e692548-5786-4aa5-b9af-8ad5ac157819",
"ScheduleListId": "e3d0f0ac-cc64-49b0-a06e-774fdc618ea2",
"DirectionContentTypeId": "9846503c-0b8a-4405-9d10-44f672f83fd5",
"DirectionListId": "66ec35fd-a050-45b6-87b2-61d65115cf90",
"IsupBlackListId": "af70989d-ca8f-450e-9422-6f323e9fcf65",
"KupMap": {
"STAGE": "64a15f4c-083e-420b-b54e-fc75d44f31b7",
"SET": "78109552-37b6-4d87-b57f-bf11867bbaa9",
"SECTION": "ae453be5-c213-4ec6-b0ca-4efa2f9a98b7",
"ALBUM": "28a48961-35e0-43ae-ad6b-8f159cfd7202"
},
"KafkaConfig": {
"GroupId": "vitro.test",
"BootstrapServers": "kafka.k8s-dev.fsk.ru:9094",
"SaslUsername": "vitro",
"SaslPassword": "password",
"SecurityProtocol": "SaslPlaintext"
}
}
...
Производится на усмотрение администраторов системы. Пример https://portal.vitrocad.ru/pages/viewpage.action?pageId=23659062
5 Обратная интеграция. Настройка автоматизации
Тип элемента: Альбом. Атрибут триггера: Статус.
Вызов внешнего сервиса.
Условия: IsNotNull(This("GUID КУП"))
Действия:
Format('{0}/api/automation/post?baseUrl={0}/api/item/update¶m=[{{\"list_id\":\"d244569a-fb9b-46f9-8a04-925c8baba2bb\",\"content_type_id\":\"c3629456-3773-49b8-8a58-d4198e77ad8e\",\"success_kafka\":false,\"topic_kafka\":\"vitro.event-status\",\"message_kafka\":\"{{\\\"update_date\\\":\\\"{1}\\\",\\\"guid_kup\\\":\\\"{2}\\\",\\\"template_task_guid\\\":\\\"{3}\\\",\\\"key\\\":\\\"{4}\\\",\\\"document_status\\\":\\\"{5}\\\",\\\"building_id\\\":\\\"{6}\\\",\\\"type\\\":\\\"PDF\\\",\\\"change_number\\\":{7} }}\"}}]',Cfg('Site.PortalUrl'), DateTime(This('Изменен'), 'yyyy-MM-ddTHH:mm:ss.fffZ'), This('GUID КУП'), This('ИД Шаблона КУП'), This('ИД КУП'), Id(This('Статус')), Field(Parent('Корпус'),'id_isup'), This('Номер ИЗМа'))
Guid после list_id и content_type_id могут различаться в разных системах. List_id – guid списка Экспорт в Kafka; content_type_id – guid типа элемента Сообщение Kafka.
Для всех статусов, которые необходимо отправлять в Kafka необходимо добавить данную автоматизацию. При большом количестве статусов лучше сделать скриптом.
6 Черный список проектов ИСУП
В черном списке хранятся все проекты и объекты строительства, которые не будут созданы или обновлены в Vitro
...
- Создать элемент типа «Карточка проекта» указав произвольное название и заполнить ключевое поле id_isup. id_isup можно посмотреть в адресной строке веб-интерфейса ИСУП. Или в Vitro в Карточке проекта или в проекте в файловой структуру, если проект уже был синхронизирован
- Если проект уже был синхронизирован, но его нужно добавить в черный список, то его необходимо удалить вручную
- Объекты добавлять не нужно, они добавляются автоматически утилитой при наличии проекта в черном списке
...
- В списке «Черный список проектов ИСУП»:
- Записать все id_isup объектов строительства, которые принадлежат восстанавливаемому проекту
- Удалить объекты строительства из черного списка, id который были записаны
- Удалить сам проект
В списке «Импорт из kafka»:
- Для каждого записанного id_isup объекта строительства выполнить поиск по сообщениям Ошибка Kafka = “BlackListException”, Сообщение Kafka=”object: {id_объекта строительства}”. Найденным элементам проставить флаг «Обработано Kafka» = false. (Восстановление корпусов и очередей) - Выполнить поиск по сообщениям Ошибка Kafka = “BlackListException”, Сообщение Kafka=”project: {id_isup Проекта}”. Найденным записям проставить флаг «Обработано Kafka» = false. (Восстановление объектов)
- Выполнить поиск по сообщениям Ошибка Kafka = “BlackListException”, Сообщение Kafka=”idIsup: {id_isup Проекта}”. Найденной записи проставить флаг «Обработано Kafka» = false. (Восстановление проекта)
...
| карточку корпуса | |||
| ID проекта ИСУП | proekt_id_isup | Integer | id_isup проекта для размещения корпуса в файлах |
| Тип объекта (значение ИСУП) | object_type_isup_value | Integer | числовой id типа объекта из Kafka |
| Тип объекта строительства | construction_object_type | Lookup | лукап на справочник типов |
| Место реализации (значение) | mesto_realizacii_isup_value | Integer | числовой id места реализации |
| Место реализации | mesto_realizacii | Lookup | лукап на справочник мест |
| GUID KUP | guid_kup | string | идентификатор ФСКП |
| ИД КУП | short_name_kup | string | Key в ФСКП |
| ИД Шаблона КУП | template_task_id | string | шаблон задачи ФСКП |
| Сортировка КУП | order_kup | string | порядок элемента |
| Тип KUP | type_kup | string | тип задачи из Kafka |
| Path GUID KUP | path_guid_kup | string | уникальный путь элемента |
| Schedule ID KUP | schedule_id_kup | string | идентификатор графика |
| Основной график | is_primary_kup | boolean | флаг основного графика |
| Полное название | full_name | Note | полное имя |
| Направление ЦГИП | division_tsgip_att | Lookup | направление ЦГИП |
| ГИП | chief_project_engineer | Lookup | на корпусе |
| Помощник ГИПа | chief_engineer_assistant | Lookup | на корпусе |
| ГИП наружных сетей | chief_project_engineer_site_utilities | Lookup | на корпусе |
| ГИП заказчика | gip_customer | Lookup | на корпусе |
| Руководитель проекта | project_manager | Lookup | на корпусе |
| Ответственный | responsible | Lookup | на задачах ФСКП |
| Лист согласования | approval_user_list | Lookup | исполнители |
| Наличие внешнего проектировщика | external_designer_condition | Lookup | тип исполнителя |
| Сообщение Kafka | message_kafka | Note | текст сообщения |
| Топик Kafka | topic_kafka | string | топик |
| Ошибка Kafka | error_kafka | string | ошибка обработки |
| Обработано Kafka | success_kafka | boolean | флаг обработки |
2.2. Типы элементов
| Тип элемента | Атрибуты |
|---|---|
| Карточка проекта | id_isup, short_name, description, guid_1c, mesto_realizacii_isup_value, mesto_realizacii |
| Карточка объекта строительства | id_isup, guid_1c, object_type_isup_value, construction_object_type |
| Карточка корпуса | id_isup, proekt_id_isup, construction_object_type |
| Место реализации | id_isup |
| Тип объекта строительства | id_isup |
| Проект | id_isup, guid_1c, short_name, description, project_card, mesto_realizacii |
| Корпус | id_isup, building_lookup, construction_object_type, chief_project_engineer, chief_engineer_assistant, chief_project_engineer_site_utilities, gip_customer, project_manager |
| Стадия / Комплект / Раздел / Альбом / ИЗМ | guid_kup, order_kup, short_name_kup, template_task_id, type_kup, path_guid_kup, schedule_id_kup, full_name |
| Альбом | + division_tsgip_att, responsible, approval_user_list, external_designer_condition |
| Задача план-графика | id_isup |
| Карточка направления ЦГИП | guid_kup |
| График KUP | guid_kup, id_isup, is_primary_kup |
| Сообщение Kafka | message_kafka, topic_kafka, error_kafka, success_kafka |
2.3. Списки
| Название | Типы элементов |
|---|---|
| Файлы | Альбом, Комплект, Раздел, Стадия, Корпус, Проект, ИЗМ |
| Реестр проектов | Карточка проекта, Карточка объекта строительства, Карточка корпуса |
| Типы объектов строительства | Тип объекта строительства |
| Места реализации | Место реализации |
| Справочник направлений ЦГИП | Карточка направления ЦГИП |
| Графики KUP | График KUP |
| Импорт из Kafka | Сообщение Kafka |
| Экспорт в Kafka | Сообщение Kafka |
| Черный список проектов ИСУП | Карточка проекта, Карточка объекта строительства |
| Черный список элементов ФСКП | Папка |
3. Настройка config.json
Файл в корне с исполняемым файлом. Пример для vitro.dev FSK без паролей:
{
"WebUrl": "https://vitro.dev.fsk.ru",
"Login": "admin",
"Password": "password",
"LibraryListId": "966e62c5-a803-49a0-a1be-e680d130c481",
"LibraryParentId": "5da4709f-3c94-4a82-b335-800117096b46",
"ReferenceListId": "5b911635-5f2a-4049-926b-60ec11be3d17",
"ObjectTypeListId": "1a0671ac-6ffd-4c2a-ac83-177c4902377d",
"PlaceImplListId": "fcdecebd-4a57-41ed-8265-9c3d4d586b8b",
"KafkaMessageContentTypeId": "c3629456-3773-49b8-8a58-d4198e77ad8e",
"KafkaExportListId": "d244569a-fb9b-46f9-8a04-925c8baba2bb",
"KafkaImportListId": "9955d107-98e8-42e9-8cd6-19817764cfd3",
"ObjectTypeContentTypeId": "c8988a65-df34-4f60-88fd-90d23965c1fe",
"PlaceImplContentTypeId": "4002a57c-d5ad-42e9-a7f5-531c5d3ad99e",
"ProjectReferenceContentTypeId": "74546a61-799e-46aa-9a79-7f7661bb707f",
"ProjectContentTypeId": "540ff572-4a29-4d8e-8dfb-8eda093c583a",
"ObjectReferenceContentTypeId": "2ecac8b4-e621-400d-a63f-d456f4820efb",
"BuildingReferenceContentTypeId": "7175d8a2-2253-4172-b68b-150b823d855c",
"BuildingContentTypeId": "5c16ee47-fe94-4fc2-bd68-32ce0beb2a68",
"PerformerGroupContentTypeId": "7a5850e5-c2f4-4121-8ed4-450e3f0b4439",
"PerformerGroupListId": "daf3fd57-a7a4-4524-ae87-a359e6ffe082",
"ScheduleContentTypeId": "8e825548-5786-4aa5-b9af-8ad5ac157819",
"ScheduleListId": "e3d0f0ac-cc64-49b0-a06e-774fdc618ea2",
"DirectionContentTypeId": "9846503c-0b8a-4405-9d10-44f672f83fd5",
"DirectionListId": "66ec35fd-a050-45b6-87b2-61d65115cf90",
"IsupBlackListId": "af70989d-ca8f-450e-9422-6f323e9fcf65",
"KupBlackListId": "e77e04d3-f830-4b97-9d3a-d7cb39bd76b6",
"KupMap": {
"STAGE": "64a15f4c-083e-420b-b54e-fc75d44f31b7",
"SET": "78109552-37b6-4d87-b57f-bf11867bbaa9",
"SECTION": "ae453be5-c213-4ec6-b0ca-4efa2f9a98b7",
"ALBUM": "28a48961-35e0-43ae-ad6b-8f159cfd7202",
"IZM": "40a444c3-0f78-407f-8dba-d79ab0db2583",
"APR": "39c299a7-8c85-4c5c-811f-b654e2eb3099",
"STAGE_P": "da4a52ff-ceda-4b5e-b593-5a6339b50233",
"AGR": "0ae0d7cb-b8a2-43fe-8e40-9841c016adad",
"AGO": "f971344d-2e33-4d3a-8c84-cd942db81096",
"PSO": "b4a23642-bc6b-4aa2-97fb-b53631c732bd",
"FACTORY_PREORDER": "75e05071-cf52-4068-963f-622e66ecf7c8",
"RD": "de5012af-fa90-443e-b79b-cf2f56e0b5ed",
"CORRECTION_P": "8f586139-8987-4572-bae7-281d9d31acac",
"IEMD": "78109552-37b6-4d87-b57f-bf11867bbaa9",
"ITERATION_SET": "09ad2c16-6047-4dfb-8274-6c4a5f1edbe5",
"CORRECTION_P_ZOS": "09ad2c16-6047-4dfb-8274-6c4a5f1edbe5"
},
"PerformerTypeMap": {
"CONTRACTOR": "67e87ece-0994-4bf0-98d2-8837f6f87abf"
},
"KafkaConfig": {
"GroupId": "vitro.test",
"BootstrapServers": "kafka.k8s-dev.fsk.ru:9094",
"SaslUsername": "vitro",
"SaslPassword": "password",
"SecurityProtocol": "SaslPlaintext"
}
}
4. Настройка времени запуска утилиты
На усмотрение администраторов. Пример: https://portal.vitrocad.ru/pages/viewpage.action?pageId=23659062
5. Обратная интеграция. Настройка автоматизации
- Тип элемента: Альбом
- Атрибут триггера: Статус
- Действие: Вызов внешнего сервиса
Условия: IsNotNull(This("GUID КУП"))
Действия:
Format('{0}/api/automation/post?baseUrl={0}/api/item/update¶m=[{"list_id":"d244569a-fb9b-46f9-8a04-925c8baba2bb","content_type_id":"c3629456-3773-49b8-8a58-d4198e77ad8e",
"success_kafka":false,"topic_kafka":"vitro.event-status",
"message_kafka":"{\\"update_date\\":\\"{1}\\",\\"guid_kup\\":\\"{2}\\",\\"template_task_guid\\":\\"{3}\\",\\"key\\":\\"{4}\\",\\"document_status\\":\\"{5}\\",\\"building_id\\":\\"{6}\\",\\"type\\":\\"PDF\\",\\"change_number\\":{7} }"}]',
Cfg('Site.PortalUrl'), DateTime(This('Изменен'), 'yyyy-MM-ddTHH:mm:ss.fffZ'), This('GUID КУП'), This('ИД Шаблона КУП'), This('ИД КУП'), Id(This('Статус')), Field(Parent('Корпус'),'id_isup'), This('Номер ИЗМа'))
При срабатывании создаётся элемент в «Экспорт в Kafka» с success_kafka = false. Утилита отправляет его в vitro.event-status.
5.1. Экспорт справочника статусов
Утилита автоматически экспортирует изменённые статусы в vitro.status-list. Автоматизация не требуется. Формат: {"status":"{название}","id":"{guid}"}
6. Черный список проектов ИСУП
Проекты и объекты строительства, которые не будут созданы или обновлены.
Добавление
- Создать «Карточку проекта» с
id_isup. - Если проект уже синхронизирован — удалить вручную.
- Объекты добавляются утилитой автоматически.
Удаление
В «Черном списке»: записать id_isup объектов, удалить объекты и проект.
В «Импорт из Kafka»: для сообщений с BlackListException проставить success_kafka = false.
Шаг «восстановление очередей» больше не актуален.
6.1. Черный список элементов ФСКП
Список KupBlackListId. Элементы с неизвестным type из kup.task-1 или дочерние заблокированного родителя попадают сюда автоматически.
7. Настройка Vitro для работы интеграции
Инструкция первичной настройки. Предполагается, что базовые списки заведены, но изменения по новой схеме ИСУП (без очередей) ещё не выполнены.
7.1. Добавить атрибуты в систему
| Название | Системное имя | Тип |
|---|---|---|
| Место реализации | mesto_realizacii | Lookup → справочник мест реализации |
| Место реализации (значение ИСУП) | mesto_realizacii_isup_value | Integer |
| Тип объекта (значение ИСУП) | object_type_isup_value | Integer |
| ID проекта ИСУП | proekt_id_isup | Integer |
| Тип объекта строительства | construction_object_type | Lookup → типы объектов |
| Проект (карточка) | project_card | Lookup → реестр проектов |
| Карточка корпуса | building_lookup | Lookup → реестр проектов |
7.2. Привязать атрибуты к типам элементов
| Тип элемента | Добавить атрибуты |
|---|---|
| Карточка проекта | mesto_realizacii_isup_value, mesto_realizacii |
| Карточка объекта строительства | object_type_isup_value, construction_object_type |
| Карточка корпуса | proekt_id_isup, construction_object_type |
| Проект (Файлы) | project_card, mesto_realizacii |
| Корпус (Файлы) | building_lookup, construction_object_type |
7.3. Настроить вычисления
Формулы вычисления (не автоматизации). Имена типов в Parent('…') — как в UI.
| Тип элемента | Атрибут | Формула |
|---|---|---|
| Карточка корпуса | proekt_id_isup | Field(Parent('Карточка проекта'), 'id_isup') |
| Карточка корпуса | construction_object_type | Field(Parent("Карточка объекта строительства"), "construction_object_type") |
| Корпус (Файлы) | construction_object_type | Field(This("building_lookup"), "construction_object_type") |
| Проект (Файлы) | mesto_realizacii | Field(This('project_card'), 'mesto_realizacii') |
7.4. Настроить автоматизации
Остальные лукапы — записи в списке «Автоматизация». Общий алгоритм:
- Создать элемент в списке «Автоматизация».
- Триггер: «Изменено значение атрибута» — выбрать тип элемента и атрибут-триггер.
- Условие: формула, возвращающая
true(поле «Формула» у условия). - Действие: «Установить значение атрибута» — целевой атрибут и формула значения.
- GUID списков и типов — из
config.jsonцелевой среды.
Таблица автоматизаций:
| № | Название | Тип элемента | Тип действия | Триггер | Атрибут действия |
|---|---|---|---|---|---|
| 1 | Проект → project_card | Проект (Файлы) | Установить значение атрибута | id_isup | project_card |
| 2 | Карточка проекта → mesto_realizacii | Карточка проекта | Установить значение атрибута | mesto_realizacii_isup_value | mesto_realizacii |
| 3 | Карточка объекта → construction_object_type | Карточка объекта строительства | Установить значение атрибута | object_type_isup_value | construction_object_type |
| 4 | Корпус → building_lookup | Корпус (Файлы) | Установить значение атрибута | id_isup | building_lookup |
Автоматизация 1. Проект → project_card
Условие:
Count(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"74546a61-799e-46aa-9a79-7f7661bb707f\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true)) == 1
Формула действия:
Join("", Select(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"74546a61-799e-46aa-9a79-7f7661bb707f\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true), "Str(Id())"))
Автоматизация 2. Карточка проекта → mesto_realizacii
Условие:
Count(GetList(
"fcdecebd-4a57-41ed-8265-9c3d4d586b8b",
"i => i.ContentTypeId == Guid(\"4002a57c-d5ad-42e9-a7f5-531c5d3ad99e\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("mesto_realizacii_isup_value")),
false)) == 1
Формула действия:
Join("", Select(GetList(
"fcdecebd-4a57-41ed-8265-9c3d4d586b8b",
"i => i.ContentTypeId == Guid(\"4002a57c-d5ad-42e9-a7f5-531c5d3ad99e\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("mesto_realizacii_isup_value")),
false), "Str(Id())"))
Автоматизация 3. Карточка объекта → construction_object_type
Условие:
Count(GetList(
"1a0671ac-6ffd-4c2a-ac83-177c4902377d",
"i => i.ContentTypeId == Guid(\"c8988a65-df34-4f60-88fd-90d23965c1fe\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("object_type_isup_value")),
false)) == 1
Формула действия:
Join("", Select(GetList(
"1a0671ac-6ffd-4c2a-ac83-177c4902377d",
"i => i.ContentTypeId == Guid(\"c8988a65-df34-4f60-88fd-90d23965c1fe\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("object_type_isup_value")),
false), "Str(Id())"))
Автоматизация 4. Корпус → building_lookup
Условие:
Count(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"7175d8a2-2253-4172-b68b-150b823d855c\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true)) == 1
Формула действия:
Join("", Select(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"7175d8a2-2253-4172-b68b-150b823d855c\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true), "Str(Id())"))
