> ## Documentation Index
> Fetch the complete documentation index at: https://docs.twenty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Отображение данных связанных записей

> Показывайте данные из связанных записей (например, информацию о компании в сделках) с помощью рабочих процессов.

Отображайте данные из связанных записей прямо в ваших записях — например, показывайте численность сотрудников из компании в её сделках. Этот обходной путь с рабочим процессом полезен, пока вложенные поля не поддерживаются нативно.

## Типичные случаи использования

| Источник    | Назначение  | Поля для копирования                                     |
| ----------- | ----------- | -------------------------------------------------------- |
| Компания    | Возможность | Отрасль, размер компании, ARR                            |
| Контакт     | Возможность | Email, телефон, должность                                |
| Возможность | Компания    | Сумма последней сделки, дата последней выигранной сделки |

## Базовое копирование полей

### Пример: копирование Email контакта в сделку

**Цель**: При указании контактного лица в сделке скопируйте его email в сделку для быстрого доступа.

### Предварительное условие

Создайте целевые поля в **Settings → Data Model → Opportunities** перед созданием рабочего процесса:

* Email контакта (тип: Email)
* Телефон контакта (тип: Phone)

### Настройка

1. **Триггер**: Запись обновлена (Сделки, поле Контактное лицо)

2. **Фильтр**: Проверьте, что поле Контактное лицо не пустое

3. **Поиск записей**: найдите связанного контакта
   * Объект: Контакты
   * Фильтр: ID равен `{{trigger.object.pointOfContact.id}}`

4. **Обновление записи**:
   * Объект: Сделки
   * Запись: `{{trigger.object.id}}`
   * Email контакта: `{{searchRecords[0].email}}`
   * Телефон контакта: `{{searchRecords[0].phone}}`

## Копирование нескольких полей

### Пример: синхронизация данных компании со всеми связанными сделками

**Цель**: Когда данные компании меняются, обновляйте все связанные сделки.

### Настройка

1. **Триггер**: Запись обновлена (Компании)
   * Поля: отрасль, размер компании, годовой доход

2. **Поиск записей**: найдите все сделки для этой компании
   * Объект: Сделки
   * Фильтр: ID компании равен `{{trigger.object.id}}`

3. **Итератор**: цикл по каждой сделке

4. **Обновление записи** (внутри итератора):
   * Объект: Сделки
   * Запись: `{{iterator.currentItem.id}}`
   * Отрасль компании: `{{trigger.object.industry}}`
   * Размер компании: `{{trigger.object.companySize}}`
   * ARR компании: `{{trigger.object.annualRevenue}}`

## Копирование при создании записи

### Пример: предзаполнение сделки данными компании

**Цель**: При создании сделки, связанной с компанией, автоматически копируйте ключевую информацию о компании.

### Предварительное условие

Создайте целевые поля в **Settings → Data Model → Opportunities**:

* Отрасль компании (тип: Text)
* Размер компании (тип: Number)

### Настройка

1. **Триггер**: Запись создана (Сделки)
   * Фильтр: поле Компания не пустое

2. **Поиск записей**: получите сведения о связанной компании
   * Объект: Компании
   * Фильтр: ID равен `{{trigger.object.company.id}}`

3. **Обновление записи**:
   * Объект: Сделки
   * Запись: `{{trigger.object.id}}`
   * Отрасль компании: `{{searchRecords[0].industry}}`
   * Размер компании: `{{searchRecords[0].employees}}`

<Note>
  **Ограничение для задач и заметок**: связи в задачах и заметках жёстко заданы как многие-ко-многим и пока недоступны в триггерах или действиях рабочего процесса. Чтобы получить доступ к этим связям, вместо этого используйте [API](/l/ru/developers/extend/api).
</Note>

## Двунаправленная синхронизация

### Пример: синхронизация основного контакта

**Цель**: Когда в компании меняется основной контакт, обновляйте контакт. Когда контакт становится основным, обновляйте компанию.

### Рабочий процесс 1: Компания → Контакт

1. **Триггер**: Запись обновлена (Компании, поле Основной контакт)
2. **Обновление записи**: установите у контакта "Is Primary Contact" в значение true
3. **Поиск записей**: найдите предыдущего основного контакта
4. **Обновление записи**: установите у предыдущего контакта "Is Primary Contact" в значение false

### Рабочий процесс 2: Контакт → Компания

1. **Триггер**: Запись обновлена (Контакты, Is Primary Contact = true)
2. **Обновление записи**: установите у компании поле Primary Contact на этого контакта

<Note>
  Осторожнее с двунаправленными синхронизациями, чтобы избежать бесконечных циклов. Используйте фильтры, чтобы проверять, действительно ли значение изменилось, прежде чем обновлять.
</Note>

## Использование кода для сложного сопоставления

### Пример: преобразование данных при копировании

**Цель**: Скопировать и отформатировать номер телефона из контакта в сделку.

```javascript theme={null}
export const main = async (params) => {
  const { phone } = params;

  if (!phone) return { formattedPhone: null };

  // Remove non-numeric characters
  const digits = phone.replace(/\D/g, '');

  // Format as (XXX) XXX-XXXX
  const formatted = digits.length === 10
    ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
    : phone;

  return { formattedPhone: formatted };
};
```

## Лучшие практики

### Избегайте циклов

* Не создавайте рабочие процессы, которые бесконечно запускают друг друга
* Используйте конкретные условия для полей
* Добавляйте проверки, что значение действительно изменилось

### Обработка отсутствующих данных

* Всегда проверяйте, что исходная запись существует, перед копированием
* Задавайте значения по умолчанию для необязательных полей
* Используйте фильтры, чтобы пропускать случаи, когда исходное поле пусто

### Производительность

* Выполняйте пакетные обновления при копировании во множество записей
* Используйте запланированные рабочие процессы для массовых операций синхронизации
* Рассмотрите использование Итератора для обновления множества записей

## Связанные материалы

* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions)
* [Триггеры рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
