snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
---
title: Обработка ошибок и проверка
description: Просматривайте и исправляйте ошибки импорта прямо в интерфейсе перед подтверждением.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Предварительная проверка импорта
После загрузки файла и сопоставления полей Twenty проверяет ваши данные **перед** импортом. Это позволяет обнаруживать и исправлять ошибки, не затрагивая ваши существующие данные.
## Как это работает
1. **Загрузите** ваш CSV-файл
2. **Сопоставьте** столбцы с полями Twenty
3. **Просмотрите** потенциальные ошибки, выделенные желтым
4. **Исправляйте ошибки** прямо в интерфейсе
5. **Подтвердите** импорт
<VimeoEmbed videoId="1145273857" title="Видеодемонстрация" />
## Отображение ошибок
Строки с ошибками выделены **желтым**. Вы можете:
* **Отредактируйте ячейку напрямую**, чтобы исправить ошибку
* **Удалите строку**, чтобы пропустить её целиком
Такое встроенное редактирование экономит время — не нужно возвращаться к таблице, исправлять ошибки и загружать файл заново.
## Распространённые типы ошибок
### Дублирующиеся значения
**Причина**: значение уникального поля (email, домен) уже есть в Twenty или встречается дважды в вашем файле.
**Решение**:
* Отредактируйте дублирующееся значение в интерфейсе импорта
* Удалите одну из строк-дубликатов
См. [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints) для подробностей о том, как обеспечивается уникальность.
### Недопустимый формат
**Причина**: данные не соответствуют ожидаемому формату (например, некорректный email, неверный формат даты).
**Решение**: отредактируйте ячейку, указав правильный формат.
См. [Сопоставление полей](/l/ru/user-guide/data-migration/capabilities/field-mapping), чтобы узнать ожидаемый формат для каждого типа поля.
### Отсутствуют обязательные поля
**Причина**: обязательное поле пусто.
**Решение**: введите значение в обязательное поле или удалите строку.
### Связь не найдена
**Причина**: ссылочная запись не существует (например, домен компании, который не был импортирован).
**Решение**:
* Сначала импортируйте родительские записи
* Или исправьте ссылочное значение
См. [Импорт связей](/l/ru/user-guide/data-migration/capabilities/import-relations) для правильного порядка импорта и способов связывания записей.
## Советы для уменьшения количества ошибок
1. **Загрузите шаблон** для просмотра ожидаемого формата перед импортом вашего файла
2. **Очистите данные** сначала в таблице
3. **Импортируйте файлы в правильном порядке**, чтобы импортировать связи (Компании → Контакты → Сделки)
4. **Протестируйте на небольших партиях** перед полным импортом
5. **Проверьте наличие дублей** перед загрузкой
6. **Ограничить каждый файл до 10000 записей**

View File

@@ -0,0 +1,198 @@
---
title: Сопоставление полей
description: Как работает сопоставление полей при импорте данных.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Как работает сопоставление полей
Когда вы загружаете файл, Twenty анализирует ваши столбцы и пытается сопоставить их с существующими полями.
### Автоматическое сопоставление
Twenty пытается сопоставлять столбцы на основе:
* Названий заголовков столбцов (точные или похожие совпадения)
* Определения типа данных (даты, числа, адреса электронной почты)
* Распространённых шаблонов полей
<Note>**Небольшой совет:** Экспортируйте несколько строк из объекта, который вы хотите импортировать. Экспортированный файл будет содержать точные названия столбцов, которые ожидает Twenty, поэтому автоматическое сопоставление при импорте пройдёт без лишних действий.</Note>
### Варианты ручного сопоставления
Для каждого столбца вы можете:
* **Сопоставить с полем**: выберите соответствующее поле Twenty из выпадающего списка
* **Не сопоставлять**: полностью пропустить столбец (данные не будут импортированы)
<Note>**Поля должны существовать до импорта.** Импорт создаёт записи, а не поля. Создайте настраиваемые поля в разделе **Настройки → Модель данных** перед импортом.</Note>
## Совместимость типов полей
Все типы полей, доступные в Модели данных, поддерживаются для импорта.
Вы также можете импортировать значения `id`, чтобы назначать конкретный идентификатор новым записям или обновлять существующие.
<img src="/images/user-guide/fields/all-field-types.png" style={{width:'100%'}} />
## Требования к формату данных
<Note>**У некоторых полей есть особый синтаксис.** Рекомендуем перед подготовкой импорта скачать образец файла, чтобы увидеть ожидаемый синтаксис для каждого типа поля.</Note>
### Поля адреса
Адрес — это вложенное поле с несколькими столбцами. Некоторые можно оставить пустыми.
* **Адрес / Адрес 1**: Первая строка адреса
* **Адрес / Адрес 2**: Вторая строка адреса
* **Адрес / Город**: Название города
* **Адрес / Штат**: Штат или провинция
* **Адрес / Страна**: Название страны
* **Адрес / Почтовый индекс**: Почтовый индекс/ZIP-код
### Поля массива
Используйте следующий формат:
```
["value1","value2"]
```
### Булевы поля
Используйте `TRUE` или `FALSE` (заглавными) — не `true` и не `false`
### Валютные поля
Валюта — это **вложенное поле** с двумя столбцами, которые **оба должны быть заполнены**:
* **Сумма / Сумма**: Числовое значение (например, `1234.56`)
* **Сумма / Валюта**: Код валюты (например, `USD`, `EUR`)
### Поля даты
Поддерживаемые форматы:
* `YYYY-MM-DD` (рекомендуется)
* `MM/DD/YYYY`
* `DD/MM/YYYY`
* Формат ISO 8601
### Поля доменов
* Рекомендуется использовать формат `https://domain.com`, чтобы избежать создания дубликатов, так как именно этот формат используется для Companies, создаваемых синхронизациями почты и календаря
* Можно заполнить `Domain Label` и `Domain URL`: лучшая практика — указать `domain.com` в метке и `https://domain.com` в URL
* Домены должны быть уникальными в объекте Companies
* **Домены должны быть уникальными внутри импортируемого файла**
### Поля электронной почты
* Должен быть корректный формат электронной почты
* Адреса электронной почты должны быть уникальными в объекте People
* **Адреса электронной почты должны быть уникальными внутри импортируемого файла**
* Для дополнительных адресов: используйте **Emails / Primary Email** для основного адреса и **Emails / Additional Emails** в следующем формате:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### Поля идентификаторов
Указание `id` при импорте необязательно. Twenty автоматически сгенерирует его, если он не указан.
Варианты использования сопоставления столбца `id`:
* **Задать конкретный ID**: выберите UUID для создаваемых записей
* **Обновить существующие записи**: сопоставьте с существующими записями, чтобы обновить их вместо создания дубликатов. В этом случае рекомендуется не сопоставлять другие уникальные поля: сопоставление только одного уникального поля обеспечивает более беспроблемный импорт.
<Note>Если вы указываете `id`, он должен быть в формате UUID (например, `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
### Поля JSON
Используйте допустимый формат JSON:
```
{"key":"value","key2":"value2"}
```
### Поля ссылок
Аналогично полям доменов:
* Заполните оба столбца — метку и URL: **Links / Link URL** и **Links / Link Label**
* Используйте полный формат URL: `https://example.com`
* Для дополнительных ссылок используйте столбец **Links / Secondary Links** со следующим форматом:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### Поля множественного выбора
Используйте имена API (а не отображаемые метки) в следующем формате:
```
["VALUE1","VALUE2"]
```
См. [здесь](#finding-api-names-for-select-fields), где найти имена API.
<Note>Новые варианты списка не будут созданы автоматически при импорте. Добавьте их в **Настройки → Модель данных** перед импортом.</Note>
<Warning>
**Импорт перезаписывает, а не добавляет.**
Если у записи уже выбраны `VALUE2` и `VALUE3`, а вы импортируете `["VALUE1"]`, после импорта у записи останется только `VALUE1`. Предыдущие выбранные значения заменяются, а не объединяются.
</Warning>
### Числовые поля
* Только числа
* Десятичные дроби — через точку: `1234.56`
* Без разделителей тысяч
### Поля телефона
Телефон — это **вложенное поле** с несколькими столбцами, которые **должны быть заполнены**
* **Phones / Primary Phone Number**: Номер телефона (например, `4159095555`)
* **Phones / Primary Phone Country Code**: Код страны (например, `US`)
* **Phones / Primary Phone Calling Code**: Телефонный код (например, `+1`)
### Поля рейтинга
Используйте формат имени API: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
### Поля связи
См. нашу отдельную статью: [Импорт связей между объектами](/l/ru/user-guide/data-migration/capabilities/import-relations)
### Выбор полей
Используйте **имя API** варианта (а не отображаемую метку):
```
VALUE1
```
См. [здесь](#finding-api-names-for-select-fields), где найти имена API.
<Note>Новые варианты списка не будут созданы автоматически при импорте. Добавьте их в **Настройки → Модель данных** перед импортом.</Note>
### Текстовые поля
* Специальное форматирование не требуется
* Начальные и конечные пробелы удаляются
## Поиск имен API
Для полей Select, Multi-Select и Array с предопределёнными вариантами необходимо использовать **имена API**, а не отображаемые метки.
### Как найти имена API
1. Перейдите в **Настройки → Модель данных**
2. Выберите объект и поле
3. Включите **Расширенный режим** (переключатель внизу справа на странице настроек)
4. Просмотрите имя API для каждого варианта
<VimeoEmbed videoId="1144910809" title="Видеодемонстрация" />

View File

@@ -0,0 +1,48 @@
---
title: Поддерживаемые форматы файлов
description: Форматы файлов, поддерживаемые для импорта данных в Twenty.
---
## Поддерживаемые форматы
Twenty поддерживает три формата файлов для импорта:
| Формат | Расширение | Заметки |
| ---------------------- | ---------- | --------------------------------------- |
| **CSV** | .csv | Рекомендуется, наибольшая совместимость |
| **Excel** | .xlsx | Современный формат Excel |
| **Excel (устаревший)** | .xls | Старый формат Excel |
## Требования к файлам
| Требование | Значение |
| ----------------- | ------------------------------------------------- |
| **Кодировка** | Рекомендуется UTF-8 |
| **Лимит записей** | 10 000 записей на файл |
| **Структура** | Первая строка должна содержать заголовки столбцов |
| **Содержимое** | Один тип объекта в файле |
## Лучшие практики CSV
* **Разделитель**: используйте запятую (`,`) или точку с запятой (`;`)
* **Квалификатор текста**: используйте двойные кавычки (`"`) для текста, содержащего запятые
* **Окончания строк**: поддерживаются оба варианта — Windows (CRLF) и Unix (LF)
* **Пустые значения**: оставляйте ячейки пустыми, не используйте "NULL" или "N/A"
## Лучшие практики Excel
При экспорте из Excel:
* Удалите формулы (экспортируйте только значения)
* Удалите пустые строки в конце
* Убедитесь, что нет объединённых ячеек
* Используйте только первый лист
## Большие наборы данных
Для наборов данных более 10 000 записей:
* Разбейте на несколько файлов
* Или используйте [импорт через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api) для неограниченного количества записей
<Note>Для очень больших миграций (100 000+ записей) API значительно быстрее и надёжнее, чем импорт CSV.</Note>

View File

@@ -0,0 +1,148 @@
---
title: Импорт связей между объектами
description: Импорт связей между записями с помощью CSV.
---
## Обзор
Twenty поддерживает импорт связей между объектами при импорте CSV. Это позволяет связывать записи (например, прикреплять Людей к Компаниям) в рамках миграции данных.
<Note>**В настоящее время поддерживается для импорта**: связи «один-ко-многим», указывающие на один тип объекта с каждой стороны (например, Люди → Компании). Связи, указывающие на несколько типов объектов, пока не поддерживаются для импорта/экспорта.</Note>
## Как работают связи в Twenty
### Один-ко-многим / Многие-к-одному
Twenty поддерживает стандартные связи, когда одна запись связана со многими другими:
* **Одна Компания → Многие Люди**: у компании может быть несколько сотрудников, но каждый человек принадлежит одной компании
* **Одна Компания → Многие Сделки**: у компании может быть несколько сделок, но каждая сделка принадлежит одной компании
### Связи, которые могут указывать на несколько типов объектов
Некоторые связи могут связывать разные типы объектов. Это работает двумя способами:
**Паттерн 1: Многие записи, каждая из которых связана с одной записью каждого типа объекта**
Несколько заметок или задач можно прикрепить к нескольким типам объектов:
* **Заметки** могут одновременно быть связаны с одним Человеком, одной Компанией и одной Сделкой
* **Задачи** могут одновременно быть связаны с одним Человеком, одной Компанией и одной Сделкой
Здесь Заметки/Задачи находятся на стороне «многие». Каждая из них связывается с одной записью каждого типа объекта.
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
**Паттерн 2: Одна запись, получающая связи от многих записей разных типов объектов**
Проект может получать связи от множества записей разных типов объектов:
* **Проект** может иметь много связанных с ним Людей, много связанных Компаний и много прикреплённых к нему Заметок
Здесь Проект находится на стороне «один». Несколько записей из разных объектов могут ссылаться на один и тот же Проект.
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**Ограничение импорта/экспорта**: связи, указывающие на несколько типов объектов (например, Заметки → Люди/Компании/Сделки), **пока не поддерживаются** при импорте или экспорте CSV.
* **Импорт**: можно импортировать только связи «один-ко-многим», указывающие на один тип объекта с каждой стороны
* **Экспорт**: столбцы для связей, указывающих на несколько типов объектов, на данный момент остаются пустыми
Это запланировано в нашей дорожной карте.
</Warning>
### Что пока не поддерживается
**Связи «многие-ко-многим»** пока недоступны. Например, сейчас вы не можете создать связь, где:
* Многие Люди связаны со многими Проектами
<Note>Связи «многие-ко-многим» запланированы на 2 полугодие 2026 года.</Note>
## Связывание записей при импорте
<Note>**Напоминание**: можно импортировать только связи «один-ко-многим», указывающие на один тип объекта (например, Люди → Компании). Связи, указывающие на несколько типов объектов (например, Заметки → Люди/Компании/Сделки), пока не поддерживаются.</Note>
### Шаг 1: Определите стороны «один» и «многие»
Сначала определите, какой объект находится на стороне «один», а какой — на стороне «многие» в этой связи.
**Пример**:
* **Компания** — это сторона «один» (у одной компании много сотрудников)
* **Люди** — это сторона «многие» (каждый человек принадлежит одной компании)
### Шаг 2: Убедитесь, что записи стороны «один» существуют
Прежде чем импортировать сторону «многие», записи стороны «один» уже должны существовать в Twenty.
* Сначала импортируйте или создайте записи стороны «один» (например, Компании)
* Проверьте их уникальный идентификатор. Это может быть:
* `id` (UUID в Twenty)
* Поле, помеченное как уникальное (например, `domain` для Компаний или внешний идентификатор из вашей предыдущей системы)
<Warning>Импорт завершится с ошибкой, если ссылка указывает на несуществующую запись.</Warning>
### Шаг 3: Подготовьте файл CSV
Добавьте столбец в CSV-файл для стороны «многие», который ссылается на запись стороны «один».
**Пример**: для CSV-файла Людей, связывающего с Компаниями:
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**Важно**:
* Значение должно **в точности совпадать** с уникальным полем в записи Компании
* Для доменов используйте **URL домена** (например, `https://acme.com`), а не метку домена
* Сопоставляйте только **один** уникальный идентификатор на связь: так импорт пройдёт более гладко
### Шаг 4: Убедитесь, что поле связи существует
Перед загрузкой файла убедитесь, что между вашими объектами существует поле связи.
Если его нет:
1. Перейдите в **Настройки → Модель данных**
2. Выберите ваш объект (например, Люди)
3. Создайте поле связи, указывающее на целевой объект (например, Компания)
### Шаг 5: Загрузите и сопоставьте связь
1. Загрузите ваш CSV-файл через интерфейс импорта
2. На шаге сопоставления полей найдите столбец связи (например, `companyDomain`)
3. Сопоставьте его с полем связи (например, Компания)
4. Twenty автоматически свяжет каждую запись с соответствующим родителем
### Доступные уникальные поля для связей
| Объект | Доступные уникальные поля |
| ------------------------------------------------- | ------------------------------------------------------ |
| **Компании** | `id`, `domain`, любое пользовательское уникальное поле |
| **Люди** | `id`, `email`, любое пользовательское уникальное поле |
| **Участники рабочего пространства** | `id`, `email` (не имя) |
| **Прочие стандартные и пользовательские объекты** | `id`, любое поле, помеченное как уникальное |
<Note>**Связь с участниками рабочего пространства**: когда связь указывает на Участников рабочего пространства (ваша команда, входящая в Twenty), указывайте их по **адресу электронной почты**, а не по имени.</Note>
<Note>Мы рекомендуем использовать `domain` для Компаний и `email` для Людей, так как эти значения человекочитаемы и их легко поддерживать в таблицах.</Note>
<Note>**Напоминание**: Мягко удалённые записи (видны в Командном меню → Показать удалённые записи) учитываются при проверке уникальности. Если вы импортируете запись с тем же уникальным значением, что и у удалённой записи, удалённая запись будет восстановлена. См. [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints) для подробностей.</Note>
## Правило порядка импорта
<Warning>
**Всегда сначала импортируйте сторону «один»!**
1. **Компании** в первую очередь (без зависимостей)
2. **Люди** во вторую очередь (связаны с Компаниями)
3. **Сделки** в третью очередь (связаны с Компаниями/Людьми)
4. **Пользовательские объекты** с учётом их зависимостей
Родительская запись должна существовать до того, как вы сможете на неё сослаться.
</Warning>

View File

@@ -0,0 +1,72 @@
---
title: Ограничения уникальности
description: Как Twenty обеспечивает уникальность данных при импорте.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Обзор
Twenty обеспечивает уникальность для определённых полей, чтобы предотвратить дублирование записей и обеспечить целостность данных. Понимание этих ограничений важно для успешного импорта.
## Уникальные поля по умолчанию
| Объект | Уникальные поля |
| ---------------------------- | -------------------------- |
| **Люди** | `id`, `email` |
| **Компании** | `id`, `domain` |
| **Пользовательские объекты** | Только `id` (по умолчанию) |
<Note>Поле `id` — внутренний идентификатор Twenty, автоматически создаётся для каждой записи. Используется формат UUID (например, `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
## Пользовательские уникальные поля
Вы можете задать дополнительные уникальные поля в разделе **Настройки → Модель данных**:
1. Перейдите в **Настройки → Модель данных**
2. Выберите объект
3. Нажмите на поле
4. Включите **Уникальность** в настройках поля
### Сценарии использования пользовательских уникальных полей
* **Внешние идентификаторы**: храните идентификаторы из других систем (Salesforce ID, HubSpot ID)
* **Бизнес-идентификаторы**: номера сотрудников, коды клиентов
* **Альтернативные контактные данные**: профиль LinkedIn, номер телефона
<Note>Имя поля `id` зарезервировано для внутреннего идентификатора Twenty. Для внешних идентификаторов используйте другое имя, например `externalId` или `legacyId`.</Note>
## Поведение при импорте
### Создание новых записей
Если значение уникального поля отсутствует, создаётся новая запись.
### Обновление существующих записей
Если значение уникального поля совпадает с существующей записью, эта запись будет **обновлена** новыми данными.
<Warning>Чтобы **обновлять существующие записи**, рекомендуется **сопоставлять только одно уникальное поле**.</Warning>
### Записи, помеченные как удалённые
<Warning>
**Записи, помеченные как удалённые, учитываются при проверке уникальности.**
Записи, помеченные как удалённые (видны в Командном меню → Показать удалённые записи), учитываются при проверке уникальности. Если вы импортируете запись с тем же уникальным значением, что и у удалённой записи, удалённая запись будет **восстановлена** с новыми данными.
</Warning>
## Обнаружение дубликатов при импорте
На этапе проверки:
* Дубликаты в вашем файле подсвечиваются жёлтым
* Вы можете отредактировать или удалить строки-дубликаты в интерфейсе перед началом импорта
<VimeoEmbed videoId="1145246326" title="Видеодемонстрация" />
## Лучшие практики
1. **Удалите дубликаты** из файла перед импортом
2. **Проверьте наличие существующих записей** в Twenty перед импортом
3. **Используйте внешние идентификаторы** при миграции из других систем
4. **Указывайте уникальные поля**, если хотите обновлять существующие записи

View File

@@ -0,0 +1,32 @@
---
title: Экспорт FAQ
description: Часто задаваемые вопросы об экспорте данных.
---
<AccordionGroup>
<Accordion title="Можем ли мы экспортировать все данные рабочей области до отмены, включая пользовательские объекты, пользовательские поля, отношения, заметки, задачи, вложения, потоки, права доступа и историю аудита?">
Данные проекта могут быть экспортированы перед отменой за некоторыми исключениями: панели управления, процессы и разрешения должны быть переданы вручную; журналы аудита не могут быть переданы.
</Accordion>
<Accordion title="Какие элементы не могут быть экспортированы или перенесены?">
Большинство элементов можно экспортировать или мигрировать за некоторыми исключениями:
* рабочие процессы, панели инструментов и все настройки (ключи API, вебхуки, журналы аудита, пользовательские настройки и т.д.) должно быть перенесено вручную
* Объекты и поля приложения, созданные приложением, могут быть перенесены путем установки указанного приложения в другом проекте. Они не должны быть перенесены вручную
* некоторые записи, такие как версии рабочего процесса и рабочий процесс, не передаются вообще, и ожидается потеря
* некоторые объекты, такие как сообщения и связанные с календарем объекты, не должны экспортироваться, так как они создаются, когда аккаунт подключен и периодически синхронизируется. Они будут синхронизированы снова, как только вы подключите свою учетную запись (пока у вас есть доступ к указанной учетной записи) если это аккаунт члена команды, который покинул вашу компанию, то эти сообщения должны быть экспортированы, в противном случае они будут утеряны)
</Accordion>
<Accordion title="Есть ли официальное облако для самостоятельной процедуры миграции или для службы миграции?">
На данный момент отсутствует официальная процедура миграции с использованием облака на самообслуживание. Общая идея заключается в следующем:
* сначала установите приложения для создания объектов и полей
* репликация пользовательских объектов и полей, добавленных пользователями
* использовать скрипт с клавишами API или инструменты ИИ для переноса всех данных из одной рабочей области в другую
* все непередаваемые объекты должны быть перенесены вручную
Пожалуйста, имейте в виду:
* Вы можете отправить до 50 запросов в минуту на план Pro или 100 запросов в минуту на план организации перед тем, как попасть в запрос / мин. лимит
* каждый запрос API может иметь до 200 записей
* некоторые данные в таких полях, как Created by Timeline активностей и Updated by будут потеряны во время импорта и перезаписаны системой
</Accordion>
<Accordion title="Экспортируются ли файлы в открытых и документированных форматах?">
Экспортированные файлы в интерфейсе находятся в формате Excel, все API запросы могут быть сохранены в формате JSON.
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,209 @@
---
title: Экспортируйте ваши данные
description: Полное пошаговое руководство по экспорту данных из Twenty.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Обзор
Экспортируйте данные своего рабочего пространства в CSV для резервного копирования, отчетности или миграции.
**Сценарии использования:**
* **Регулярные резервные копии** — храните копии ваших данных
* **Внешняя отчетность** — анализируйте данные в Excel, Google Sheets или инструментах BI
* **Миграция** — перенесите данные в другую систему
* **Массовые обновления** — экспортируйте, редактируйте и повторно импортируйте для обновления записей
## Что нужно знать
### Ограничения экспорта
* **Максимум 20 000 записей** на один экспорт
* Экспортируются только **видимые столбцы**
* Экспортируются только **отфильтрованные записи** (на основе вашего текущего представления)
<Note>Для больших объемов экспорта (20 000+ записей) используйте фильтры для пакетного экспорта или [API](/l/ru/developers/extend/api).</Note>
### Разрешения
Для экспорта данных вам требуется разрешение **"Export CSV"**. Свяжитесь с администратором рабочего пространства, если у вас нет этой опции.
## Шаг 1: Перейдите к объекту
Перейдите к объекту, который хотите экспортировать:
* **People** — для контактов
* **Companies** — для организаций
* **Opportunities** — для сделок
* **Пользовательские объекты** — любой объект, который вы создали
## Шаг 2: Настройте ваше представление
**Важно:** Экспорт включает только то, что видно в вашем текущем представлении.
### Добавление/удаление столбцов
1. Нажмите **Параметры → Поля** (или **+** в конце столбцов)
2. Отметьте поля, которые хотите экспортировать
3. Снимите отметку с полей, которые вам не нужны
### Фильтрация записей (необязательно)
Если вам нужен только поднабор данных:
1. Нажмите **Фильтр**
2. Добавьте условия фильтра (например, "Created date > January 1, 2024")
3. Будут экспортированы только соответствующие записи
### Сортировка записей (необязательно)
1. Нажмите заголовок столбца, чтобы отсортировать
2. Экспорт сохранит ваш порядок сортировки
<Note>**Создайте отдельное представление для экспорта.** Сохраните представление, специально настроенное для экспорта, чтобы вам не приходилось перенастраивать его каждый раз.</Note>
## Шаг 3: Экспорт данных
1. Нажмите значок **⋮** в правом верхнем углу таблицы
2. Выберите **Экспорт представления**
3. Выберите, куда сохранить файл CSV
4. Дождитесь завершения загрузки
## Что экспортируется
| Включено | Не включено |
| ---------------------------------------- | ----------------------------------- |
| Все видимые столбцы | Скрытые столбцы |
| Записи, соответствующие текущим фильтрам | Записи, исключенные фильтрами |
| Значения пользовательских полей | Поля, отсутствующие в представлении |
| ID записей | Файловые вложения |
| ID связей | Изображения |
### Поля связи
Идентификаторы связей экспортируются только на стороне **"many"** связи:
* **Экспорт People** включает столбец `companyId` (связь People → Company)
* **Экспорт Companies** НЕ включает `peopleIds` (Companies — это сторона "one")
Это означает, что вы можете использовать экспорт People для повторного импорта и сохранения связи с Company, но вам нужно будет повторно импортировать People после Companies, чтобы восстановить связи.
## Экспорт для конкретных целей
### Для резервного копирования
1. Создайте представление, в котором видны **все поля**
2. Удалите все фильтры, чтобы включить все записи
3. Экспортируйте каждый тип объекта отдельно
4. Храните экспортированные файлы в защищенном месте
5. Настройте регулярное напоминание (еженедельно/ежемесячно)
### Для внешней отчетности
1. Включайте только те поля, которые нужны для анализа
2. Примените фильтры, чтобы сосредоточиться на релевантных данных
3. Рассмотрите сортировку по полю, которое вы будете анализировать
### Для массовых обновлений
1. Экспортируйте записи, которые хотите обновить
2. Включайте уникальный идентификатор (`email`, `domain` или `id`)
3. Отредактируйте экспортированный файл
4. Импортируйте повторно, чтобы обновить записи
См.: [Как обновить существующие записи](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import)
### Для миграции
Если вы экспортируете для миграции в другую систему:
1. **Экспортируйте каждый объект отдельно** — People, Companies, Opportunities и т. д.
2. **Включайте поля с ID** — они помогают сохранять связи
3. **Задокументируйте сопоставления полей** — отметьте, как поля Twenty соответствуют вашей целевой системе
## Обработка больших наборов данных (20 000+ записей)
Лимит экспорта — 20 000 записей. Для больших наборов данных:
### Вариант 1: Экспорт партиями
1. Добавьте фильтр (например, диапазоны "Created date")
2. Экспортируйте первую партию
3. Измените фильтр
4. Экспортируйте следующую партию
5. Объедините файлы в вашей таблице
**Примеры фильтров для разбиения на партии:**
* По диапазону дат (январь, февраль, март...)
* По владельцу (участник команды A, участник команды B...)
* По статусу (Активен, Неактивен...)
### Вариант 2: Используйте API
В API нет ограничения по числу записей:
1. Получите ключ API в **Настройки → Разработчики**
2. Используйте GraphQL API для выборки записей
3. Обрабатывайте результаты в вашем приложении
См.: [Документация по API](/l/ru/developers/extend/api)
## Советы и лучшие практики
### Создавайте представления для экспорта
Сохраняйте представления, специально настроенные для экспорта:
1. Настройте столбцы и фильтры
2. Нажмите **Параметры представления** → **Сохранить как новое представление**
3. Назовите его "Export - [Purpose]"
### Защитите экспортируемые данные
Экспортированные файлы могут содержать конфиденциальные данные:
* Храните в защищенных местах
* Удаляйте старые экспортированные файлы, когда они больше не нужны
* Будьте осторожны при обмене экспортированными файлами
### Проверьте перед экспортом
<Check>Отображаются нужные столбцы</Check>
<Check>Фильтры настроены корректно (или отключены для полного экспорта)</Check>
<Check>У вас есть разрешение на экспорт</Check>
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Почему в моем экспорте отсутствуют некоторые столбцы?">
Экспортируются только видимые столбцы. Перед экспортом добавьте нужные столбцы через **Параметры → Поля**.
</Accordion>
<Accordion title="Почему мой экспорт содержит не все записи?">
Проверьте ваши фильтры. Экспорт включает только записи, соответствующие фильтрам вашего текущего представления. Удалите фильтры, чтобы экспортировать все записи.
</Accordion>
<Accordion title="Могу ли я экспортировать более 20 000 записей?">
Не одним экспортом. Используйте фильтры для экспорта партиями или используйте API для больших наборов данных.
</Accordion>
<Accordion title="В каком формате файл экспорта?">
CSV (значения, разделенные запятыми). Открывается в Excel, Google Sheets или любом табличном приложении.
</Accordion>
<Accordion title="Включаются ли идентификаторы связей?">
Да, но только на стороне "many" в связях. Например, экспорт People включает `companyId`, а экспорт Companies не включает ID людей.
</Accordion>
<Accordion title="Могу ли я автоматизировать экспорт?">
Не напрямую через интерфейс. Используйте API, чтобы создать автоматизированные рабочие процессы экспорта.
</Accordion>
</AccordionGroup>
## Следующие шаги
* [Как обновить существующие записи](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import) — отредактируйте и импортируйте ваш экспорт повторно
* [Как импортировать данные через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api) — для больших наборов данных
* [Документация по API](/l/ru/developers/extend/api) — создавайте собственные рабочие процессы экспорта

View File

@@ -0,0 +1,430 @@
---
title: Устранение ошибок импорта
description: Полное руководство по устранению ошибок импорта CSV.
---
## Обзор
Импорт не работает? Это руководство поможет вам поэтапно выявлять и устранять распространённые ошибки импорта.
## Как работает проверка импорта
После загрузки файла и сопоставления столбцов Twenty проверяет ваши данные:
1. **Запускается проверка** — Twenty проверяет каждую строку на ошибки
2. **Ошибки подсвечиваются** — проблемные строки отображаются **жёлтым**
3. **Исправляйте на месте** — редактируйте ячейки прямо в интерфейсе импорта
4. **Или удалите строки** — полностью пропустите проблемные записи
<Note>**Исправляйте ошибки в интерфейсе.** Вам не нужно возвращаться к своей таблице. Редактируйте ячейки прямо во время импорта, чтобы сэкономить время.</Note>
## Пошаговое устранение неполадок
### Шаг 1: Определите тип ошибки
Нажмите на подсвеченную строку, чтобы увидеть конкретное сообщение об ошибке. Распространённые типы ошибок:
| Сообщение об ошибке | Что это означает |
| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Дублирующиеся значения, подсвеченные жёлтым | Значение уже существует в Twenty или встречается дважды в вашем файле |
| `{field} не является допустимым {type}` (наведите курсор на жёлтую ячейку) | Данные не соответствуют ожидаемому формату |
| Подсвечено обязательное поле | Обязательное поле пусто |
| `Не удаётся подключиться к {object}. Уникальная запись не найдена...` (импорт не удался) | Связанная запись не существует |
| `Слишком много записей. Разрешено не более 10000` (загрузка заблокирована) | В файле более 10 000 записей |
### Шаг 2: Исправьте ошибку
Следуйте приведённым ниже инструкциям для каждого типа ошибки.
---
## Ошибка: Дублирующееся значение
### Что вы увидите
Строки с дублирующимися значениями **подсвечиваются жёлтым** в интерфейсе импорта до начала импорта.
### Что это означает
Уникальное поле (email, домен) либо:
* Уже существует в Twenty
* Встречается дважды в вашем файле
### Как исправить
**Вариант 1: Измените дублирующееся значение**
1. Нажмите на ячейку с ошибкой
2. Измените на уникальное значение
3. Продолжайте импорт
**Вариант 2: Удалите строку-дубликат**
1. Нажмите X рядом со строкой
2. Эта строка будет пропущена при импорте
**Вариант 3: Разрешите Twenty обновить существующую запись**
1. Убедитесь, что ваш файл содержит уникальный идентификатор (`email`, `domain` или `id`)
2. Сопоставьте поле уникального идентификатора
3. Twenty обновит существующую запись вместо создания дубликата
<Note>
**Можно обновлять и уникальные поля.**
* Если вы оставите `id`, но измените `email` → адрес электронной почты будет обновлён
* Если вы оставите `email`, но измените `id` → идентификатор будет обновлён
Пока совпадает хотя бы один уникальный идентификатор, Twenty обновит запись.
</Note>
### Как предотвратить эту ошибку
Перед импортом:
1. Отсортируйте таблицу по уникальному полю
2. Удалите строки-дубликаты
3. Проверьте, существуют ли записи уже в Twenty
<Warning>
**Записи, помеченные как удалённые, учитываются при проверке уникальности.**
Откройте Командное меню → Просмотреть удалённые записи. Записи там по-прежнему учитываются при проверке уникальности. Удалите их окончательно или восстановите и обновите.
</Warning>
Подробнее: [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
---
## Ошибка: Неверный формат
### Что вы увидите
Значение ячейки подсвечено жёлтым. Наведите на него курсор, чтобы увидеть сообщение об ошибке:
```
{field name} is not a valid {field type}
```
### Что это означает
Данные не соответствуют ожидаемому формату для этого типа поля.
### Как исправить — по типам полей
#### Электронная почта
**Проблема:** Неверный формат email
**Решение:** Используйте формат `name@domain.com`
```
❌ john.smith@
❌ john smith@acme.com
✓ john.smith@acme.com
```
#### Домен
**Проблема:** Несогласованный формат может вызывать дубликаты
**Решение:** Используйте формат `https://domain.com` (рекомендуется)
```
⚠️ acme.com (valid, but not recommended)
⚠️ www.acme.com (valid, but not recommended)
✅ https://acme.com (recommended)
```
<Note>Все форматы допустимы, но `https://domain.com` рекомендуется, потому что он соответствует формату, используемому при синхронизации почты/календаря. Использование других форматов может привести к созданию дублирующихся компаний.</Note>
#### Дата
**Проблема:** Нераспознанный формат даты
**Решение:** Используйте формат `YYYY-MM-DD` последовательно по всему файлу
```
✓ 2024-03-15 (YYYY-MM-DD)
❌ 03/15/2024 (MM/DD/YYYY)
❌ 15/03/2024 (DD/MM/YYYY)
```
#### Телефон
**Проблема:** Отсутствуют обязательные столбцы
**Решение:** Добавьте все столбцы для телефонов
| Столбец | Пример |
| ---------------------------------------------- | ------------ |
| **Телефоны / Основной номер телефона** | `4159095555` |
| **Телефоны / Код страны основного номера** | `US` |
| **Телефоны / Телефонный код основного номера** | `+1` |
#### Логический тип
**Проблема:** Неверное логическое значение
**Решение:** Используйте прописные `TRUE` или `FALSE`
```
❌ true
❌ yes
❌ 1
✓ TRUE
✓ FALSE
```
#### Выбор / Множественный выбор
**Проблема:** Значение не совпадает с существующими опциями
**Решение:** Используйте **имена API**, а не отображаемые метки
Как найти имена API:
1. Перейдите в **Настройки → Модель данных**
2. Выберите объект и поле
3. Включите **Расширенный режим** (переключатель внизу справа)
4. Используйте имя API (например, `OPTION_1`, а не "Option 1")
```
❌ High Priority
✓ HIGH_PRIORITY
```
#### Валюта
**Проблема:** Отсутствует сумма или код валюты
**Решение:** Заполните оба столбца
| Столбец | Пример |
| ------------------ | --------- |
| **Сумма / Сумма** | `1234.56` |
| **Сумма / Валюта** | `USD` |
#### Число
**Проблема:** Нечисловые символы
**Решение:** Только цифры, точка для десятичных дробей
```
❌ $1,234.56
❌ 1,234.56
✓ 1234.56
```
Полная справка по форматам: [Справочник по сопоставлению полей](/l/ru/user-guide/data-migration/capabilities/field-mapping)
---
## Ошибка: Отсутствует обязательное поле
### Что вы увидите
Строка подсвечена жёлтым, а ячейка обязательного поля отмечена.
### Что это означает
В этой строке не заполнено обязательное поле.
### Как исправить
**Вариант 1: Введите значение**
1. Нажмите на пустую ячейку
2. Введите значение
3. Продолжайте импорт
**Вариант 2: Удалите строку**
1. Если данных нет, нажмите X, чтобы пропустить строку
### Как предотвратить эту ошибку
Перед импортом определите обязательные поля:
1. Перейдите в **Настройки → Модель данных**
2. Выберите ваш объект
3. Проверьте, какие поля помечены как обязательные
---
## Ошибка: Связь не найдена
### Что вы увидите
Эта ошибка возникает **после начала импорта** — импорт завершается с сообщением вроде:
```
Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
```
Это означает, что в Twenty нет компании с таким идентификатором.
<Note>В отличие от других ошибок, эта не обнаруживается на этапе проверки данных. Импорт начнётся, а затем завершится с ошибкой, когда встретит отсутствующую связь.</Note>
### Что это означает
Вы пытаетесь сослаться на запись, которой не существует в Twenty.
### Как исправить
**Вариант 1: Сначала импортируйте родительские записи**
1. Отмените текущий импорт
2. Импортируйте родительские записи (например, Компании)
3. Затем импортируйте дочерние записи (например, Контакты)
**Вариант 2: Исправьте ссылочное значение**
1. Проверьте ссылочное значение в вашем файле
2. Убедитесь, что оно в точности совпадает с существующей записью
3. Проверьте формат: домены должны быть в виде `https://domain.com`
**Вариант 3: Удалите связь**
1. Очистите ячейку, чтобы импортировать без связи
2. Добавьте связь вручную позже
### Как предотвратить эту ошибку
1. **Импортируйте в правильном порядке:**
* Сначала — Компании
* Затем — Контакты (со ссылками на компании)
* Третьими — Возможности
2. **Проверьте ссылочные значения:**
* Экспортируйте родительские записи, чтобы получить точные идентификаторы
* Используйте формат домена `https://domain.com`
* Проверьте опечатки и учтите регистр
<Warning>
**Импорт завершится с ошибкой, если ссылка указывает на несуществующую запись.**
Всегда импортируйте родительские объекты перед дочерними объектами.
</Warning>
Подробнее: [Импорт связей](/l/ru/user-guide/data-migration/capabilities/import-relations)
---
## Ошибка: Слишком большой файл
### Что вы увидите
Эта ошибка появляется **при загрузке файла** — загрузка полностью блокируется:
```
Too many records. Up to 10000 allowed
```
Вы не сможете перейти к этапу проверки данных, пока не уменьшите размер файла.
### Что это означает
В вашем файле более 10 000 записей.
### Как исправить
**Вариант 1: Разделите на несколько файлов**
1. Разделите данные на файлы по 10 000 записей или меньше
2. Импортируйте каждый файл отдельно
3. Соблюдайте порядок импорта (Компании перед Контактами)
**Вариант 2: Используйте импорт через API**
Для очень больших наборов данных используйте API, у которого нет ограничения по количеству записей.
См.: [Как импортировать данные через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api)
---
## Ошибка: Поле не распознано
### Что это означает
Столбец в вашем файле нельзя сопоставить, потому что такого поля нет в Twenty.
### Как исправить
1. Перейдите в **Настройки → Модель данных**
2. Выберите объект, который вы импортируете
3. Нажмите **+ Добавить поле**
4. Создайте настраиваемое поле с соответствующим типом
5. Загрузите файл повторно
<Note>Импорт CSV создаёт записи, а не поля. Все поля должны существовать до начала импорта.</Note>
---
## Ошибка: Пустая связь с пользователем
### Что это означает
Вы пытаетесь назначить запись пользователю (Owner, Assignee), но связь не сопоставляется.
### Распространённые причины
1. **Пользователь не принял приглашение** — пользователь ещё не существует в Twenty
2. **Используется ID пользователя из старой системы** — Twenty не может сопоставить идентификаторы из другой системы
3. **Неверный формат email** — адрес электронной почты не совпадает с аккаунтом пользователя в Twenty
### Как исправить
1. Убедитесь, что все пользователи **приняли приглашение** в ваше рабочее пространство Twenty
2. Используйте **адрес электронной почты** пользователя (не его имя и не ID из старой системы)
3. Используйте тот же адрес электронной почты, который использовался для присоединения к Twenty
<Warning>
**Пользователи должны принять приглашения до начала импорта.**
Если пользователь не принял приглашение, у записей, ссылающихся на него, будет пустая пользовательская связь.
</Warning>
---
## Контрольный список перед импортом
Избегайте ошибок, проверив следующее перед импортом:
### Требования к файлу
<Check>Файл в формате CSV, XLSX или XLS</Check>
<Check>В файле менее 10 000 записей</Check>
<Check>Файл использует кодировку UTF-8</Check>
### Качество данных
<Check>Нет дублирующихся адресов электронной почты (для Контактов)</Check>
<Check>Нет дублирующихся доменов (для Компаний)</Check>
<Check>Все даты используют единый формат</Check>
<Check>Все домены в формате `https://domain.com`</Check>
### Форматы полей
<Check>Логические поля используют `TRUE` или `FALSE` (прописные)</Check>
<Check>Поля типа Select используют имена API, а не отображаемые метки</Check>
<Check>Телефонные поля содержат все обязательные столбцы</Check>
<Check>Поля валюты содержат и сумму, и код валюты</Check>
### Связи
<Check>Родительские записи импортированы до дочерних записей</Check>
<Check>Столбцы со связями ссылаются на существующие записи</Check>
<Check>Формат домена точно соответствует формату Twenty</Check>
### Модель данных
<Check>Все настраиваемые поля существуют в Настройки → Модель данных</Check>
<Check>Опции для Select созданы до импорта</Check>
---
## Всё ещё возникают проблемы?
Если вы попробовали решения выше:
1. **Скачайте пример файла** — посмотрите точный формат, который ожидает Twenty
2. **Экспортируйте существующие записи** — сравните свой файл с рабочими данными
3. **Протестируйте на небольшой выборке** — сначала попробуйте 5–10 строк
4. **Ознакомьтесь со справочными статьями:**
* [Справочник по сопоставлению полей](/l/ru/user-guide/data-migration/capabilities/field-mapping)
* [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
* [Импорт связей](/l/ru/user-guide/data-migration/capabilities/import-relations)
* [Обработка ошибок](/l/ru/user-guide/data-migration/capabilities/error-handling)

View File

@@ -0,0 +1,201 @@
---
title: Импорт компаний через CSV
description: Полное пошаговое руководство по импорту компаний в Twenty.
---
## Обзор
Это руководство проведет вас через процесс импорта ваших компаний в Twenty. **Компании следует импортировать в первую очередь**, поскольку Люди и Сделки связываются с Компаниями.
## Перед началом
### Контрольный список предварительных требований
<Check>
Ваш файл в формате CSV, XLSX или XLS
</Check>
<Check>
В файле менее 10 000 записей
</Check>
<Check>
В вашем файле нет повторяющихся доменов
</Check>
<Check>
Все пользовательские поля созданы в **Настройки → Модель данных**
</Check>
<Note>
Нужно импортировать более 10 000 компаний? Разбейте на несколько файлов или используйте [импорт через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api).
</Note>
## Шаг 1: Подготовьте данные о компаниях
### Обязательные и рекомендуемые поля
| Поле | Обязательно? | Формат | Заметки |
| ------------------------- | ------------- | -------------------- | ----------------------------------- |
| **Название** | Рекомендуется | Текст | Отображаемое название компании |
| **Домен** | Рекомендуется | `https://domain.com` | Уникальный идентификатор |
| **Адрес** | Необязательно | Несколько столбцов | См. ниже |
| **Сотрудники** | Необязательно | Число | Количество сотрудников |
| **Пользовательские поля** | Необязательно | Различается | Должны существовать в модели данных |
### Формат домена
<Warning>
**Используйте формат `https://domain.com` для доменов.**
Это соответствует формату, используемому, когда Компании автоматически создаются при синхронизации почты/календаря, что предотвращает появление дубликатов в дальнейшем.
</Warning>
**Столбцы домена:**
* **Domain / Domain Label**: `acme.com`
* **Domain / Domain URL**: `https://acme.com`
### Формат адреса
Адрес — это вложенное поле с несколькими столбцами:
```
Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
123 Main Street,San Francisco,CA,USA,94105
```
### Пример структуры CSV
```csv
name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
Widget Co,https://widgets.co,widgets.co,New York,USA,50
```
<Note>
**Совет профессионала:** Нажмите **Download sample file** во время импорта, чтобы увидеть точные названия столбцов, которые ожидает Twenty.
</Note>
## Шаг 2: Откройте функцию импорта
**Вариант 1: Из представления Компании**
1. Перейдите к разделу **Компании** в левой боковой панели
2. Нажмите значок **⋮** в правом верхнем углу
3. Выберите **Импорт записей**
**Вариант 2: Через командное меню**
1. Нажмите `Cmd + K` (Mac) или `Ctrl + K` (Windows)
2. Введите "import"
3. Выберите **Импорт записей**
4. Выберите **Компании**
## Шаг 3: Загрузите свой файл
1. Нажмите **Выбрать файл**
2. Выберите свой файл CSV, XLSX или XLS
3. Подождите, пока Twenty проанализирует ваш файл
## Шаг 4: Сопоставьте ваши столбцы
Twenty автоматически пытается сопоставить ваши столбцы с полями. Проверьте и при необходимости скорректируйте:
1. **Проверьте автоматические сопоставления** — убедитесь, что они верны
2. **Исправьте неверные сопоставления** — нажмите на раскрывающийся список, чтобы выбрать нужное поле
3. **Пропустите столбцы** — выберите **Do not map** для столбцов, которые вы не хотите импортировать
### Важные правила сопоставления
* **Домен**: сопоставьте с **Domain / Domain URL** (не с Domain Label)
* **Адрес**: сопоставьте каждую часть с соответствующим столбцом (City, State и т. д.)
* **Поля Select**: значения должны соответствовать существующим вариантам (или вы сопоставите их на следующем шаге)
<img src="/images/user-guide/import-export-data/match-columns.png" style={{width:'100%'}} />
## Шаг 5: Сопоставление значений полей Select
Если у вас есть поля Select или Multi-Select:
1. Twenty показывает ваши значения рядом с существующими вариантами
2. Сопоставьте каждое значение в вашем файле с вариантом Twenty
3. Или при необходимости создайте новые варианты
<Note>
Для вариантов Select используются **имена API**, а не отображаемые метки. Перейдите в **Настройки → Модель данных** → включите **Расширенный режим**, чтобы увидеть имена API.
</Note>
## Шаг 6: Проверьте и исправьте ошибки
Перед завершением импорта Twenty проверяет ваши данные:
1. Нажмите **Следующие шаги**
2. Строки с ошибками выделены **желтым**
3. **Исправляйте ошибки напрямую** — нажмите на ячейку и отредактируйте значение
4. **Удалите проблемные строки** — нажмите X, чтобы пропустить эту строку
### Распространенные ошибки импорта компаний
| Ошибка | Причина | Решение |
| --------------------------------- | ----------------------------- | ------------------------------------------------- |
| **Дублирующийся домен** | Домен уже существует в Twenty | Удалите из файла или обновите существующую запись |
| **Недопустимый формат домена** | Неверный формат | Используйте `https://domain.com` |
| **Отсутствует обязательное поле** | Обязательное поле пусто | Заполните значение или удалите строку |
## Шаг 7: Завершите импорт
1. Просмотрите сводку импорта
2. Нажмите **Подтвердить**, чтобы импортировать
3. Дождитесь завершения импорта
4. Проверьте, просмотрев несколько записей
## После импорта компаний
Теперь вы можете импортировать записи, которые привязываются к Компаниям:
1. **[Импортируйте Людей](/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv)** — привяжите их к Компаниям с помощью домена
2. **Импортируйте Сделки** — свяжите их с Компаниями
3. **Проверьте импорт** — выборочно просмотрите несколько записей, чтобы убедиться в корректности данных
## Обновление существующих компаний
Чтобы обновлять компании вместо создания новых:
1. Добавьте в файл столбец `domain` или `id`
2. Twenty сопоставляет записи по этому уникальному идентификатору
3. Существующие компании обновляются; новые создаются
См. [как обновить существующие записи](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import) для подробностей.
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Почему две компании не могут иметь одинаковый домен?">
Домен — уникальный идентификатор в Twenty. Это предотвращает дубли компаний и обеспечивает корректную привязку писем к нужной компании при синхронизации электронной почты.
</Accordion>
<Accordion title="Что делать, если у некоторых компаний нет домена?">
Вы можете оставить домен пустым. Однако мы рекомендуем по возможности добавлять домены для улучшения качества данных и автоматической привязки писем.
</Accordion>
<Accordion title="Могу ли я импортировать компании без связанных контактов?">
Да! Сначала вы можете импортировать компании, а позже импортировать контакты и связать их с помощью домена компании.
</Accordion>
<Accordion title="Что произойдет, если я импортирую домен, который уже существует?">
Если вы укажете уникальный идентификатор (домен или id), который совпадает с существующей компанией, Twenty обновит эту компанию вместо создания дубликата.
</Accordion>
<Accordion title="Как исправить ошибки 'duplicate domain'?">
Либо удалите дубликат из вашего файла, либо добавьте `id` компании, чтобы вместо этого обновить существующую запись.
</Accordion>
</AccordionGroup>
## Устранение неполадок
Возникли проблемы? Проверьте:
* [Как исправить ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
* [Справочник по сопоставлению полей](/l/ru/user-guide/data-migration/capabilities/field-mapping)
* [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)

View File

@@ -0,0 +1,242 @@
---
title: Импорт контактов через CSV
description: Полное пошаговое руководство по импорту людей/контактов в Twenty.
---
## Обзор
Это руководство проведет вас через процесс импорта ваших контактов (People) в Twenty.
## Перед началом
### Контрольный список предварительных требований
<Check>
Ваш файл в формате CSV, XLSX или XLS
</Check>
<Check>
В файле менее 10 000 записей
</Check>
<Check>
В вашем файле нет повторяющихся адресов электронной почты
</Check>
<Check>
**Компании импортированы первыми** (если вы связываете Людей с Компаниями)
</Check>
<Check>
Все пользовательские поля созданы в **Настройки → Модель данных**
</Check>
<Warning>
**Импортируйте Компании перед импортом Людей**
Если вы хотите связать Людей с Компаниями, сначала импортируйте Компании. Компания должна существовать до того, как вы сможете на неё сослаться.
</Warning>
## Шаг 1: Подготовьте данные контактов
### Обязательные и рекомендуемые поля
| Поле | Обязательно? | Формат | Заметки |
| ------------------------- | ------------- | ------------------ | ----------------------------------- |
| **Электронная почта** | Рекомендуется | `name@domain.com` | Должен быть уникальным |
| **Имя** | Рекомендуется | Текст | |
| **Фамилия** | Рекомендуется | Текст | |
| **Компания** | Необязательно | Домен или ID | Связывает с существующей Компанией |
| **Телефон** | Необязательно | Несколько столбцов | См. ниже |
| **Должность** | Необязательно | Текст | |
| **Пользовательские поля** | Необязательно | Различается | Должны существовать в модели данных |
### Формат электронной почты
* Должен быть корректный формат электронной почты: `name@domain.com`
* **Должен быть уникальным** — без дубликатов в вашем файле или в Twenty
* Для дополнительных адресов используйте столбец **Emails / Additional Emails**:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### Формат телефона
Телефон — это **вложенное поле**, требующее нескольких столбцов:
| Столбец | Пример |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
### Связывание с компаниями
Добавьте столбец с уникальным идентификатором компании:
| Название столбца | Формат | Пример |
| ---------------- | ---------- | -------------------------------------- |
| `companyDomain` | Формат URL | `https://acme.com` |
| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Note>
**Используйте формат URL домена** (`https://acme.com`), а не метку. Это соответствует тому, как Компании хранятся в Twenty.
</Note>
### Пример структуры CSV
```csv
firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
```
<Note>
**Совет профессионала:** Нажмите **Download sample file** во время импорта или экспортируйте несколько существующих Людей, чтобы увидеть точные названия столбцов, которые ожидает Twenty.
</Note>
## Шаг 2: Откройте функцию импорта
**Вариант 1: Из представления Люди**
1. Перейдите к разделу **Люди** в левой боковой панели
2. Нажмите значок **⋮** в правом верхнем углу
3. Выберите **Импорт записей**
**Вариант 2: Через командное меню**
1. Нажмите `Cmd + K` (Mac) или `Ctrl + K` (Windows)
2. Введите "import"
3. Выберите **Импорт записей**
4. Выберите **Люди**
## Шаг 3: Загрузите свой файл
1. Нажмите **Выбрать файл**
2. Выберите свой файл CSV, XLSX или XLS
3. Подождите, пока Twenty проанализирует ваш файл
## Шаг 4: Сопоставьте ваши столбцы
Twenty автоматически пытается сопоставить ваши столбцы с полями. Проверьте и при необходимости скорректируйте:
1. **Проверьте автоматические сопоставления** — убедитесь, что они верны
2. **Исправьте неверные сопоставления** — нажмите на раскрывающийся список, чтобы выбрать нужное поле
3. **Пропустите столбцы** — выберите **Do not map** для столбцов, которые вы не хотите импортировать
### Важные правила сопоставления
| Тип столбца | Сопоставить с | Заметки |
| --------------------------------------- | ------------------------------ | --------------------------------- |
| Ссылка на Компанию | Поле связи **Компания** | Используйте домен ИЛИ id, не оба |
| Электронная почта | **Электронная почта** | Основной адрес электронной почты |
| Дополнительные адреса электронной почты | **Emails / Additional Emails** | Формат массива |
| Телефон | Отдельные столбцы | Номер, код страны, телефонный код |
<img src="/images/user-guide/import-export-data/match-columns.png" style={{width:'100%'}} />
### Сопоставление связи с Компанией
При сопоставлении столбца компании:
1. Найдите столбец ссылки на компанию (например, `companyDomain`)
2. Сопоставьте его с полем связи **Компания**
3. Twenty свяжет каждого человека с соответствующей Компанией
<Warning>
**Сопоставляйте только ОДИН уникальный идентификатор для связей.**
Не сопоставляйте одновременно `companyId` И `companyDomain`. Выберите один — предпочтительно домен, так как он понятен человеку.
</Warning>
## Шаг 5: Сопоставление значений полей Select
Если у вас есть поля Select или Multi-Select (например, Lead Source):
1. Twenty показывает ваши значения рядом с существующими вариантами
2. Сопоставьте каждое значение в вашем файле с вариантом Twenty
3. Или при необходимости создайте новые варианты
<Note>
Для вариантов Select используются **имена API**, а не отображаемые метки. Перейдите в **Настройки → Модель данных** → включите **Расширенный режим**, чтобы увидеть имена API.
</Note>
## Шаг 6: Проверьте и исправьте ошибки
Перед завершением импорта Twenty проверяет ваши данные:
1. Нажмите **Следующие шаги**
2. Строки с ошибками выделены **желтым**
3. **Исправляйте ошибки напрямую** — нажмите на ячейку и отредактируйте значение
4. **Удалите проблемные строки** — нажмите X, чтобы пропустить эту строку
### Распространенные ошибки импорта контактов
| Ошибка | Причина | Решение |
| ------------------------------------------------ | ----------------------------------------------------------- | -------------------------------------------------- |
| **Дублирующийся адрес электронной почты** | Адрес электронной почты уже существует в Twenty или в файле | Удалите дубликат или обновите существующую запись |
| **Недопустимый формат адреса электронной почты** | Неверный формат адреса электронной почты | Исправьте на `name@domain.com` |
| **Связь не найдена** | Компания не существует | Сначала импортируйте Компании или исправьте ссылку |
| **Отсутствует обязательное поле** | Обязательное поле пусто | Заполните значение или удалите строку |
## Шаг 7: Завершите импорт
1. Просмотрите сводку импорта
2. Нажмите **Подтвердить**, чтобы импортировать
3. Дождитесь завершения импорта
4. Проверьте, открыв несколько записей и их ссылки на Компанию
## После импорта контактов
Ваши контакты теперь в Twenty! Следующие шаги:
1. **Проверьте связи с Компанией** — откройте несколько записей Людей, чтобы убедиться, что они связаны с нужной Компанией
2. **Импортируйте Сделки** — при необходимости свяжите их с Людьми и Компаниями
3. **Настройте синхронизацию электронной почты** — подключите свой почтовый ящик, чтобы видеть историю писем в записях контактов
## Обновление существующих контактов
Чтобы обновлять контакты вместо создания новых:
1. Добавьте в файл столбец `email` или `id`
2. Twenty сопоставляет записи по этому уникальному идентификатору
3. Существующие контакты обновляются; новые создаются
См. [Как обновить существующие записи](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import) для подробностей.
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Почему у двух Людей не может быть один и тот же адрес электронной почты?">
Адрес электронной почты — уникальный идентификатор в Twenty. Это предотвращает дубли контактов и обеспечивает корректную привязку писем к нужному контакту при синхронизации электронной почты.
</Accordion>
<Accordion title="Что делать, если у некоторых Людей нет адреса электронной почты?">
Вы можете оставить поле email пустым. Однако мы рекомендуем по возможности добавлять адреса электронной почты для лучшего качества данных и корректной работы синхронизации электронной почты.
</Accordion>
<Accordion title="Как связать Людей с Компаниями при импорте?">
Добавьте столбец с доменом Компании (например, `https://acme.com`) или ID. При сопоставлении свяжите этот столбец с полем связи с Компанией.
</Accordion>
<Accordion title="Что, если Компания еще не существует?">
Сначала импортируйте Компании, затем импортируйте Людей. Компания должна существовать до того, как вы сможете на нее сослаться.
</Accordion>
<Accordion title="Можно ли импортировать ID из предыдущей CRM?">
Да! Создайте настраиваемое поле с пометкой "уникальное" в вашей модели данных для хранения внешнего ID. Примечание: имя поля `id` зарезервировано для внутреннего ID Twenty.
</Accordion>
<Accordion title="Как исправить ошибки 'relation not found'?">
Компания, на которую вы ссылаетесь, не существует. Либо сначала импортируйте Компанию, либо проверьте, что домен/ID в точности совпадает с существующей Компанией.
</Accordion>
</AccordionGroup>
## Устранение неполадок
Возникли проблемы? Проверьте:
* [Как исправить ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
* [Как импортировать связи](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
* [Справочник по сопоставлению полей](/l/ru/user-guide/data-migration/capabilities/field-mapping)

View File

@@ -0,0 +1,176 @@
---
title: Импорт данных через API
description: Когда и как использовать API Twenty для массового импорта данных.
---
## Обзор
Twenty предоставляет как **GraphQL**, так и **REST API** для программного импорта данных. Используйте API, когда импорт CSV непрактичен для вашего объёма данных или когда вам нужен автоматизированный регулярный импорт.
## Когда использовать импорт через API
| Сценарий | Рекомендуемый метод |
| ------------------------------------ | -------------------------------------------- |
| Менее 10,000 записей | Импорт CSV |
| 10,000 - 50,000 записей | Импорт CSV (разбить на файлы) |
| **50,000+ записей** | **Импорт через API** |
| Однократная миграция | Любой из вариантов (в зависимости от объёма) |
| **Регулярный импорт** | **Импорт через API** |
| **Синхронизация в реальном времени** | **Импорт через API** |
| **Интеграция с другими системами** | **Импорт через API** |
<Note>Для наборов данных в сотни тысяч записей API значительно быстрее и надёжнее, чем многократный импорт CSV.</Note>
## Лимиты скорости API
Twenty применяет лимиты скорости для обеспечения стабильности системы:
| Лимит | Значение |
| --------------------------------------- | ------------------ |
| **Запросов в минуту** | 100 |
| **Записей на один пакетный вызов** | 60 |
| **Максимальная пропускная способность** | ~6,000 записей/мин |
<Warning>
**Планируйте импорт с учётом этих ограничений.**
Для 100,000 записей при максимальной пропускной способности ожидайте примерно 17 минут на импорт. Добавьте запас времени на обработку ошибок и повторные попытки.
</Warning>
## Начало работы
### Шаг 1: Получите свой API-ключ
1. Перейдите в **Настройки → Разработчики**
2. Нажмите **+ Создать API-ключ**
3. Дайте вашему ключу информативное имя
4. Сразу скопируйте API-ключ (он больше не будет показан)
5. Храните его в защищённом месте
<Warning>
**Держите ваш API-ключ в секрете.**
Любой, у кого есть ваш API-ключ, может получить доступ к данным вашего рабочего пространства и изменять их. Никогда не добавляйте его в репозитории кода и не публикуйте публично.
</Warning>
### Шаг 2: Выберите API
Twenty поддерживает два типа API:
| API | Лучше всего подходит для | Документация |
| ----------- | ------------------------------------------------------------ | --------------------------------------------- |
| **GraphQL** | Гибкие запросы, получение связанных данных, сложные операции | [Документация по API](/l/ru/developers/extend/api) |
| **REST** | Простые операции CRUD, привычные шаблоны REST | [Документация по API](/l/ru/developers/extend/api) |
Оба API поддерживают:
* Создание, чтение, обновление и удаление записей
* **Пакетные операции** — создание или обновление до 60 записей за один вызов
**Для импорта используйте пакетные операции**, чтобы максимизировать пропускную способность в рамках лимитов.
### Шаг 3: Спланируйте порядок импорта
Как и при импорте CSV, для связей **важен порядок**:
1. **Компании** в первую очередь (без зависимостей)
2. **Контакты** во вторую очередь (могут быть связаны с компаниями)
3. **Возможности** в третью очередь (могут быть связаны с компаниями и контактами)
4. **Задачи/Заметки** (могут быть связаны с любым из вышеперечисленных)
5. **Пользовательские объекты** (с учётом их зависимостей)
## Лучшие практики
### Объединяйте запросы в пакеты
* Не отправляйте записи по одной
* Группируйте до **60 записей на один вызов API**
* Так вы максимально используете пропускную способность в рамках лимитов
### Обрабатывайте ограничения скорости
* Реализуйте задержки между запросами (минимум 600 мс для длительных импортов)
* При достижении лимитов используйте экспоненциальное увеличение интервала повторных попыток
* Отслеживайте ответы 429 (Too Many Requests)
### Сначала проверьте данные
* Очистите и проверьте данные перед импортом
* Проверьте, что обязательные поля заполнены
* Убедитесь, что форматы соответствуют требованиям Twenty (см. [Сопоставление полей](/l/ru/user-guide/data-migration/capabilities/field-mapping))
### Логируйте всё
* Логируйте каждую импортированную запись (включая идентификаторы)
* Логируйте ошибки с полным контекстом
* Это помогает устранять неполадки и подтверждать завершение
### Сначала протестируйте
* Протестируйте на небольшой выборке (10-20 записей)
* Проверьте, что данные корректно отображаются в Twenty
* Затем запустите полный импорт
### Upsert для предотвращения дубликатов
GraphQL API поддерживает **пакетный upsert** — обновление, если запись существует, и создание, если нет. Это предотвращает дубликаты при повторном запуске импорта.
## Поиск названий объектов и полей
Чтобы увидеть доступные объекты и поля:
1. Перейдите в **Настройки → API и вебхуки**
2. Просмотрите **Metadata API**
3. Просмотрите все стандартные и пользовательские объекты и их поля
В документации перечислены все стандартные и пользовательские объекты, их поля и ожидаемые типы данных.
## Профессиональные услуги
Для сложных миграций по API наши партнёры могут помочь:
| Услуга | Что включено |
| -------------------------------- | ------------------------------------------------- |
| **Проектирование модели данных** | проектирование оптимальной структуры данных |
| **Скрипты миграции** | написание и запуск скриптов импорта |
| **Преобразование данных** | обработка сложного сопоставления и очистки данных |
| **Проверка и контроль качества** | проверка завершённости миграции |
**Лучше всего подходит для:**
* Миграции объёмом 100 000+ записей
* Сложные преобразования данных
* Сжатые сроки
* Команды без ресурсов на разработку
Свяжитесь с нами по адресу [contact@twenty.com](mailto:contact@twenty.com) или изучите наши [услуги по внедрению](/l/ru/user-guide/getting-started/capabilities/implementation-services).
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="В чём разница между GraphQL и REST?">
GraphQL позволяет запрашивать ровно те данные, которые нужны, в одном запросе и лучше подходит для сложных операций. REST использует стандартные методы HTTP (GET, POST, PUT, DELETE) и может быть более привычен, если вы работали с традиционными API.
</Accordion>
<Accordion title="Могу ли я обновлять существующие записи через API?">
Да! Используйте мутации обновления (GraphQL) или запросы PUT/PATCH (REST) с `id` записи.
</Accordion>
<Accordion title="Как обрабатывать дубликаты?">
Сначала запросите существующие записи, используя уникальные идентификаторы (email, домен). Обновляйте, если запись существует, и создавайте, если нет.
</Accordion>
<Accordion title="Могу ли я удалять записи через API?">
Да, используйте мутации удаления (GraphQL) или запросы DELETE (REST).
</Accordion>
<Accordion title="Есть ли SDK для Python или Node.js?">
Пока нет, но оба API работают с любым HTTP-клиентом на любом языке.
</Accordion>
</AccordionGroup>
## Документация по API
Полная информация о реализации, примеры кода и справочник по схеме:
* [Документация по API](/l/ru/developers/extend/api)

View File

@@ -0,0 +1,225 @@
---
title: Импорт связей между объектами с помощью CSV
description: Полное пошаговое руководство по связыванию записей при импорте CSV.
---
## Обзор
В этом руководстве показано, как импортировать связи между объектами — например, связывать Людей с Компаниями, или Возможности с Людьми.
<Note>**Что можно импортировать:** Только связи типа «один-ко-многим», указывающие на один тип объекта. Связи, указывающие на несколько типов объектов (например, Заметки, связанные с Людьми И Компаниями), пока не поддерживаются для импорта.</Note>
## Понимание связей
### Что такое связь «один-ко-многим»?
В связи «один-ко-многим»:
* **Одна** компания имеет **много** людей (сотрудников)
* **Одна** компания имеет **много** возможностей
* **Один** человек имеет **много** задач
Сторона «один» — это **родитель**. Сторона «многие» — это **дочерняя** сторона.
### Типичные связи в Twenty
| Связь | Сторона «один» (родитель) | Сторона «многие» (дочерняя) |
| ---------------------- | ------------------------- | --------------------------- |
| Компании → Люди | Компания | Люди |
| Компании → Возможности | Компания | Возможности |
| Люди → Задачи | Человек | Задачи |
| Люди → Заметки | Человек | Заметки |
## Шаг 1: Определите стороны «один» и «многие»
Перед импортом определите, какой объект является родительским, а какой — дочерним.
**Спросите себя:** «У одного [Объект A] есть много [Объект B]?»
* Одна Компания → Много Людей ✓ (Компания — родитель)
* Один Человек → Много Компаний ✗ (Это неверно — человек принадлежит одной компании)
## Шаг 2: Сначала импортируйте родительские записи
Родительская запись (сторона «один») должна существовать в Twenty, прежде чем вы сможете на неё сослаться.
**Порядок импорта:**
1. **Компании** в первую очередь (без зависимостей)
2. **Люди** во вторую очередь (связь с компаниями)
3. **Возможности** в третью очередь (связь с компаниями и/или людьми)
4. **Задачи/Заметки** (связь с любым из вышеперечисленных)
<Warning>
**Если родительская запись не существует, импорт завершится с ошибкой.**
Всегда проверяйте, что Компании импортированы до импорта Людей со ссылками на компании.
</Warning>
## Шаг 3: Запишите уникальный идентификатор родительской записи
Вам нужно ссылаться на родительскую запись с помощью **уникального идентификатора**. Доступные варианты:
| Родительский объект | Доступные уникальные идентификаторы |
| ----------------------------------- | -------------------------------------------------------------------------------- |
| **Компании** | `id` (UUID), `domain` (рекомендуется) или любое пользовательское уникальное поле |
| **Люди** | `id` (UUID), `email` или любое пользовательское уникальное поле |
| **Участники рабочего пространства** | `id` (UUID), `email` (не имя) |
| **Пользовательские объекты** | `id` (UUID) или любое поле, отмеченное как уникальное |
<Note>**Рекомендуется:** Используйте `domain` для Компаний и `email` для Людей. Они удобочитаемы и их легко проверить в вашей таблице.</Note>
### Поиск идентификатора
Если вам нужен `id`:
1. Экспортируйте родительские записи из Twenty
2. Экспорт включает столбец `id`
3. Используйте эти ID в файле дочерних записей
## Шаг 4: Убедитесь, что поле связи существует
Перед импортом убедитесь, что между вашими объектами существует поле связи.
**Чтобы проверить или создать:**
1. Перейдите в **Настройки → Модель данных**
2. Выберите ваш дочерний объект (например, Люди)
3. Найдите поле связи, указывающее на родителя (например, Компания)
4. Если его нет, создайте его:
* Нажмите **+ Добавить поле**
* Выберите тип **Связь**
* Выберите родительский объект
## Шаг 5: Подготовьте ваш файл CSV
Добавьте в ваш дочерний CSV столбец, который ссылается на родителя по его уникальному идентификатору.
### Пример: Связывание Людей с Компаниями
**Ваш CSV-файл для Людей:**
```csv
firstName,lastName,email,jobTitle,companyDomain
John,Smith,john@acme.com,CEO,https://acme.com
Jane,Doe,jane@widgets.co,CTO,https://widgets.co
Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
```
Столбец `companyDomain` ссылается на домен Компании.
### Требования к формату
| Идентификатор | Формат | Пример |
| ----------------- | ----------------------------------- | -------------------------------------- |
| Домен | Формат URL | `https://acme.com` |
| Электронная почта | Стандартный адрес электронной почты | `john@acme.com` |
| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Warning>
**Формат домена имеет значение!**
Используйте `https://domain.com` (не просто `domain.com`). Это соответствует тому, как Twenty хранит домены Компаний, и предотвращает ошибки сопоставления.
</Warning>
### Важные правила
1. **Требуется точное совпадение** — значение должно в точности соответствовать родительской записи
2. **Сопоставляйте только ОДИН уникальный идентификатор** — не указывайте одновременно `companyId` И `companyDomain`
3. **С учётом регистра** — `Acme.com` ≠ `acme.com`
## Шаг 6: Загрузите и сопоставьте связь
1. Перейдите к дочернему объекту (например, Люди)
2. Нажмите **⋮** → **Импорт записей**
3. Загрузите ваш CSV-файл
4. На шаге сопоставления полей:
* Найдите столбец связи (например, `companyDomain`)
* Сопоставьте его с полем связи **Компания**
5. Завершите оставшееся сопоставление
6. Проверьте ошибки и подтвердите
Twenty автоматически свяжет каждую дочернюю запись с соответствующим родителем.
## Шаг 7: Проверьте импорт
После импорта:
1. Откройте несколько дочерних записей (например, Люди)
2. Убедитесь, что в поле связи указан правильный родитель (например, Компания)
3. Откройте родительскую запись и проверьте раздел связанных записей
## Распространённые ошибки, которых следует избегать
| Ошибка | Проблема | Решение |
| -------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------- |
| **Неправильный порядок импорта** | Импорт Людей раньше Компаний | Всегда сначала импортируйте родительские записи, затем дочерние |
| **Неверный формат домена** | Использование `acme.com` вместо `https://acme.com` | Используйте полный формат URL с `https://` |
| **Несколько уникальных полей** | Сопоставление одновременно `companyId` И `companyDomain` | Сопоставляйте только ОДИН уникальный идентификатор |
| **Отсутствует поле связи** | Поля связи нет в модели данных | Создайте его в **Настройки → Модель данных** перед импортом |
| **Несуществующие записи** | Родительская запись не существует в Twenty | Сначала импортируйте родительские записи или проверьте опечатки |
| **Несовпадение регистра** | `Acme.com` в файле, но `acme.com` в Twenty | Обеспечьте точное совпадение регистра |
## Связь с участниками рабочего пространства
При связывании с участниками рабочего пространства (вашей командой):
* Используйте их **адрес электронной почты**, а не имя
* Пример: `owner@yourcompany.com`, а не «John Smith»
```csv
taskName,assignedTo
Follow up with client,john@yourcompany.com
Review proposal,jane@yourcompany.com
```
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Что, если у моей родительской записи нет домена или адреса электронной почты?">
У вас есть два варианта:
1. Используйте Twenty `id` (экспортируйте родительские записи, чтобы получить их ID)
2. Создайте пользовательское уникальное поле в вашей модели данных для хранения внешнего ID из вашей предыдущей системы
</Accordion>
<Accordion title="Могу ли я обновлять связи у существующих записей?">
Да! Укажите уникальный идентификатор дочерней записи (например, `email` для Людей) и новое значение связи. Импорт обновит связь.
</Accordion>
<Accordion title="Могу ли я импортировать связи многие-ко-многим?">
Связи многие-ко-многим пока не поддерживаются для импорта. Это запланировано на первое полугодие 2026 года.
</Accordion>
<Accordion title="Могу ли я связывать с несколькими типами объектов (например, Заметки с Людьми И Компаниями)?">
Связи, указывающие на несколько типов объектов, пока не поддерживаются для импорта/экспорта. Это запланировано в нашей дорожной карте.
</Accordion>
<Accordion title="Что происходит, если родительской записи не существует?">
Импорт покажет ошибку для этой строки. Вы можете либо:
* Сначала импортируйте родительскую запись, затем повторите импорт
* Исправьте ссылочное значение
* Исключите строку из импорта
</Accordion>
<Accordion title="Почему связь устанавливается некорректно?">
Распространённые причины:
* Неверный формат (для доменов используйте `https://domain.com`)
* Несовпадение регистра (проверьте точное написание)
* Родитель не существует (сначала импортируйте родителей)
* Сопоставление нескольких идентификаторов (используйте только один)
</Accordion>
</AccordionGroup>
<Warning>
**Помните: записи, помеченные как удалённые, учитываются при проверке уникальности.**
Если вы получаете ошибки «not found», но запись, кажется, существует, проверьте Command Menu → See deleted records. Возможно, родитель был помечен как удалённый.
</Warning>
## Устранение неполадок
Возникли проблемы? Проверьте:
* [Как исправить ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
* [Возможности импорта связей](/l/ru/user-guide/data-migration/capabilities/import-relations)
* [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)

View File

@@ -0,0 +1,289 @@
---
title: "Миграция с других CRM-систем "
description: Пошаговое руководство по миграции ваших данных из любой CRM в Twenty.
---
## Обзор
Это руководство проведет вас через процесс миграции ваших данных из любой CRM в Twenty. Процесс включает аудит ваших данных, подготовку рабочего пространства Twenty, экспорт из вашей текущей системы и импорт в Twenty.
<Note>Представления, рабочие процессы и права доступа необходимо воссоздать вручную после миграции. Запланируйте время на эту настройку.</Note>
## Шаг 1: Проведите аудит текущих данных
Миграция — это возможность начать с чистого листа. Не переносите лишние данные.
**Что сохранить:**
* Активные контакты и компании
* Открытые возможности и сделки
* Важные заметки и активности
* Пользовательские поля, которые вы действительно используете
**Что не переносить:**
* Устаревшие контакты (нет активности более 2 лет)
* Дубликаты записей
* Тестовые данные
* Неиспользуемые пользовательские поля
## Шаг 2: Сопоставьте модель данных
Создайте документ сопоставления между вашей текущей CRM и Twenty:
| Ваша CRM | Twenty |
| ----------------------- | --------------------------- |
| Аккаунт / Организация | **Компания** |
| Контакт / Персона | **Люди** |
| Сделка / Возможность | **Возможность** |
| Активность | **Задача** или **Заметка** |
| Пользовательский объект | **Пользовательский объект** |
**Для каждого поля задокументируйте:**
* Имя исходного поля
* Целевое поле Twenty
* Необходимые преобразования формата (даты, номера телефонов и т. д.)
<Note>Держите этот документ сопоставления под рукой во время импорта — вы будете ссылаться на него при сопоставлении столбцов.</Note>
## Шаг 3: Настройте рабочее пространство Twenty
Прежде чем импортировать данные, подготовьте рабочее пространство Twenty:
### Создайте пользовательские объекты и поля
1. Перейдите в **Настройки → Модель данных**
2. Создайте все нужные пользовательские объекты
3. Добавьте пользовательские поля к стандартным и пользовательским объектам
4. Настройте параметры полей (уникальность, обязательность, варианты выбора и т. д.)
<Warning>
**Все поля должны существовать до начала импорта.**
Импорт CSV создаёт записи, а не поля. Создайте все пользовательские поля в разделе Настройки → Модель данных перед импортом.
</Warning>
### Пригласите свою команду
<Warning>
**Пригласите пользователей ПЕРЕД импортом данных.**
Если ваши данные содержат ссылки на пользователей (владелец аккаунта, исполнитель и т. д.), эти пользователи должны существовать в Twenty до импорта. В противном случае эти связи нельзя будет сопоставить.
</Warning>
1. Перейдите в **Настройки → Участники**
2. Пригласите всех участников команды
3. **Дождитесь, пока все примут** приглашения
4. Проверьте, что все пользователи отображаются в списке «Участники»
## Шаг 4: Экспорт из вашей текущей CRM
Экспортируйте данные из вашей текущей CRM:
1. Найдите функцию **Export** (обычно в разделах Настройки, Управление данными или Администрирование)
2. По возможности экспортируйте в **формат CSV**
3. Экспортируйте каждый тип объектов отдельно (компании, контакты, сделки и т. д.)
4. Включите все поля, которые вы хотите перенести
**Экспортируйте следующие объекты (в этом порядке, для справки):**
1. Компании / Аккаунты / Организации
2. Контакты / Люди
3. Сделки / Возможности
4. Заметки и активности
5. Пользовательские объекты
## Шаг 5: Очистите и отформатируйте данные
Откройте каждый экспортированный CSV в табличном приложении и подготовьте его для Twenty.
### Удалите дубликаты
1. Отсортируйте по уникальному полю (электронная почта для контактов, домен для компаний)
2. Удалите или объедините строки-дубликаты
3. Убедитесь, что в Twenty уже нет дубликатов
### Правильно отформатируйте поля
| Тип поля | Требуемый формат |
| --------------------- | ---------------------------------------------- |
| **Домен** | `https://domain.com` |
| **Электронная почта** | `name@domain.com` (должен быть уникальным) |
| **Дата** | `YYYY-MM-DD` |
| **Телефон** | Три столбца: номер, код страны, телефонный код |
| **Логический тип** | `TRUE` или `FALSE` (прописными буквами) |
| **Поля Select** | Используйте имена API, а не отображаемые метки |
<Warning>
**Формат домена критически важен.**
Используйте `https://domain.com` (не `domain.com` и не `www.domain.com`). Это соответствует формату Twenty и предотвращает дубликаты при подключении синхронизации электронной почты/календаря.
</Warning>
См. [как подготовить файлы CSV](/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files) для полного перечня требований к форматированию для всех типов полей.
### Добавьте столбцы для связей
Чтобы связать записи (например, контакты с компаниями), добавьте столбец с уникальным идентификатором родительской записи.
**Пример: CSV контактов со ссылкой на компанию**
```csv
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
См. [как импортировать связи](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) для подробных инструкций по связыванию записей.
### Обновите ссылки на пользователей
Если ваши данные содержат назначения пользователей (владелец, исполнитель):
1. Добавьте столбец с **электронной почтой пользователя** (а не только его ID из старой системы)
2. Используйте те же адреса электронной почты, которые пользователи использовали для присоединения к вашему рабочему пространству Twenty
См. [как подготовить файлы CSV](/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files) для полного руководства по форматированию.
## Шаг 6: Импорт в Twenty
<Warning>
**Порядок импорта имеет значение!**
Всегда импортируйте в следующем порядке:
1. **Компании** в первую очередь (без зависимостей)
2. **Контакты** во вторую очередь (связь с компаниями)
3. **Возможности** в третью очередь (связь с компаниями/контактами)
4. **Заметки и задачи** (связь с записями)
5. **Пользовательские объекты** с учётом их зависимостей
Родительская запись должна существовать до того, как вы сможете на неё сослаться.
</Warning>
### Импортируйте каждый объект
Для каждого CSV-файла, по порядку:
1. Перейдите к объекту в Twenty
2. Нажмите **⋮ → Импорт записей**
3. Загрузите файл CSV
4. Сопоставьте столбцы с полями:
* Сопоставьте столбцы с адресами электронной почты пользователей соответствующим полям связей
* Сопоставьте столбцы связей (например, `companyDomain`) с полями связей
5. Проверьте и исправьте любые ошибки в интерфейсе
6. Подтвердите импорт
7. Проверьте несколько записей, прежде чем переходить к следующему файлу
**Подробные руководства:**
* [Как импортировать компании](/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv)
* [Как импортировать контакты](/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv)
* [Как импортировать связи](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
## Шаг 7: Крупные миграции (50,000+ записей)
Для крупных миграций:
| Объём | Рекомендуемый подход |
| ----------------------- | --------------------------------- |
| Менее 10,000 записей | Импорт одним CSV-файлом |
| 10,000 - 50,000 записей | Разделите на несколько CSV-файлов |
| 50,000+ записей | Используйте API |
**Для импорта через API:**
* Быстрее и надёжнее для больших наборов данных
* Поддерживает пакетные операции (до 60 записей за вызов)
* См. [как импортировать данные через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api)
## Шаг 8: Настройка после миграции
После импорта данных завершите настройку рабочего пространства:
### Воссоздайте представления
* Настройте сохранённые представления с фильтрами, сортировками и настройками столбцов
* Создайте при необходимости канбан- или календарные представления
### Воссоздайте рабочие процессы
* Воссоздайте автоматизации в **Настройки → Рабочие процессы**
* Начните с наиболее критичных рабочих процессов
* Протестируйте каждый из них, прежде чем полагаться на него
### Настройте роли и разрешения
* Настройте роли в **Настройки → Участники → Роли**
* Назначьте пользователей на соответствующие роли
### Подключите электронную почту и календарь
* Каждый пользователь подключает свою учётную запись в разделе **Настройки → Учётные записи**
* Twenty начнёт синхронизировать электронные письма с записями контактов
* См. [Электронная почта и календарь](/l/ru/user-guide/calendar-emails/overview)
### Обучите свою команду
* Совместно ознакомьтесь с новым интерфейсом
* Задокументируйте любые процессы, специфичные для команды
## Распространенные проблемы и решения
| Проблема | Причина | Решение |
| -------------------------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Ошибки из-за дубликатов** | Адрес электронной почты/домен уже существует | Удалите дубликаты из файла или включите уникальный идентификатор, чтобы обновить существующие записи |
| **Связь не найдена** | Родительская запись не существует | Импортируйте сначала родительские объекты (компании перед контактами) |
| **Отсутствующие поля** | Пользовательское поле не существует | Создайте поле в разделе Настройки → Модель данных перед импортом |
| **Ошибки полей Select** | Используются отображаемые метки | Используйте имена API (включите расширенный режим в Настройках, чтобы их найти) |
| **Пустая связь с пользователем** | Пользователь не принял приглашение | Убедитесь, что все пользователи приняли приглашения перед импортом |
См. [как исправить ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors) для подробных шагов по устранению неполадок.
## Послемиграционный контрольный список
### Целостность данных
<Check>Все записи импортированы (сравните количество с исходной системой)</Check>
<Check>Связи работают корректно (контакты связаны с компаниями)</Check>
<Check>Назначения пользователей сопоставлены корректно (владелец, исполнитель)</Check>
<Check>Пользовательские поля заполнены</Check>
<Check>Нет неожиданных дубликатов</Check>
### Конфигурация
<Check>Представления воссозданы</Check>
<Check>Рабочие процессы воссозданы и протестированы</Check>
<Check>Роли и разрешения настроены</Check>
<Check>Синхронизация электронной почты/календаря подключена</Check>
### Готовность команды
<Check>Команда обучена новой системе</Check>
<Check>Определён план доступа к старой CRM (оставить для справки? Когда отключить?)</Check>
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Можно ли автоматически перенести рабочие процессы?">
Пока нет. Рабочие процессы необходимо воссоздать вручную в Twenty.
</Accordion>
<Accordion title="Что насчёт вложений?">
Вложения не включаются в экспорт CSV. Вам потребуется загрузить их вручную повторно, перенести через API или связаться с нашей командой за помощью.
</Accordion>
<Accordion title="Можно ли держать обе системы запущенными во время миграции?">
Да, мы рекомендуем оставлять вашу старую CRM запущенной, пока вы не убедитесь, что миграция завершена. Просто следите за тем, чтобы не создавать новые данные в обеих системах.
</Accordion>
<Accordion title="Сколько обычно занимает миграция?">
Зависит от объёма и сложности данных. Небольшие миграции (менее 10,000 записей) можно выполнить за несколько часов. Крупные миграции могут занять несколько дней, включая очистку данных и тестирование.
</Accordion>
</AccordionGroup>
## Нужна Помощь?
<Tip>
Нужна помощь с переносом данных? [Найти сертифицированного Двадцать партнера](https://twenty.com/partners/list?categories=SOLUTIONING\&ref=docs-migrate-crm) для перемещения данных, трубопроводов и пользователей сквозно.
</Tip>

View File

@@ -0,0 +1,173 @@
---
title: Миграция с локального на облако
description: Пошаговое руководство по миграции вашего самостоятельно размещённого экземпляра Twenty в Twenty Cloud.
---
## Обзор
В этом руководстве описан процесс переноса ваших данных из самостоятельно размещённого экземпляра Twenty в Twenty Cloud. Процесс включает настройку облачного рабочего пространства, экспорт данных и их повторный импорт.
<Note>Представления, рабочие процессы и роли необходимо воссоздать вручную после миграции. Запланируйте время на эту настройку.</Note>
## Шаг 1: Создайте облачное рабочее пространство
1. Перейдите на [app.twenty.com](https://app.twenty.com) и создайте новое рабочее пространство
2. Пройдите начальный мастер настройки
3. Запишите URL нового рабочего пространства
## Шаг 2: Воссоздайте модель данных
Перед импортом данных воссоздайте ваши пользовательские объекты и поля:
1. Перейдите в **Настройки → Модель данных** в вашем облачном экземпляре
2. Создайте пользовательские объекты, соответствующие вашей конфигурации в самостоятельно размещённом экземпляре
3. Добавьте пользовательские поля к стандартным и пользовательским объектам
4. Настройте параметры полей (уникальность, обязательность и т. д.)
<Note>Сделайте скриншоты модели данных вашего самостоятельно размещённого экземпляра для справки или держите оба экземпляра открытыми рядом.</Note>
## Шаг 3: Пригласите всех пользователей
<Warning>
**Важно: Пригласите пользователей ПЕРЕД импортом данных.**
Пользователи должны принять приглашения до импорта любых записей, которые на них ссылаются (например, поля владельца аккаунта). Если пользователи ещё не существуют, эти связи нельзя будет сопоставить.
</Warning>
1. Перейдите в **Настройки → Участники** в вашем облачном экземпляре
2. Пригласите всех участников команды, у которых были аккаунты в самостоятельно размещённой версии
3. **Дождитесь, пока все примут** приглашения
4. Проверьте, что все пользователи отображаются в списке «Участники»
## Шаг 4: Экспортируйте данные из самостоятельно размещённой версии
Экспортируйте каждый объект из вашего самостоятельно размещённого экземпляра:
1. Перейдите к каждому объекту (Компании, Люди, Возможности и т. д.)
2. Настройте представление так, чтобы отображались **все столбцы**, которые вы хотите перенести
3. Нажмите **⋮ → Экспорт представления**
4. Сохраните каждый CSV-файл с понятным именем (например, `companies-export.csv`)
**Экспортируйте в следующем порядке** (для справки при импорте):
1. Компании
2. Люди
3. Возможности
4. Пользовательские объекты (с учётом зависимостей)
5. Задачи, заметки
## Шаг 5: Обновите ссылки на участников рабочего пространства
Экспортированные CSV-файлы содержат идентификаторы пользователей из вашего самостоятельно размещённого экземпляра. Эти идентификаторы не совпадут с облачным экземпляром, поэтому их нужно заменить на адреса электронной почты.
**Для каждого CSV-файла со ссылками на пользователей (владелец, исполнитель и т. д.):**
1. Откройте CSV в табличном редакторе
2. Добавьте новый столбец рядом с каждым столбцом идентификатора пользователя (например, `accountOwnerEmail` рядом с `accountOwnerId`)
3. Укажите **адрес электронной почты** каждого пользователя
4. Вы можете удалить старый столбец с идентификатором или оставить его (при импорте он будет пропущен)
**Пример:**
До:
```csv
name,domain,accountOwnerId
Acme Corp,https://acme.com,old-uuid-123
```
После:
```csv
name,domain,accountOwnerEmail
Acme Corp,https://acme.com,john@yourcompany.com
```
<Note>Используйте те же адреса электронной почты, которые пользователи использовали для принятия приглашения в облачное рабочее пространство.</Note>
## Шаг 6: Спланируйте порядок импорта
Импортируйте файлы в правильном порядке, чтобы сохранить связи:
1. **Компании** в первую очередь (без зависимостей)
2. **Люди** во вторую очередь (связь с компаниями)
3. **Возможности** в третью очередь (связь с компаниями и людьми)
4. **Пользовательские объекты** (с учётом зависимостей)
5. **Задачи и заметки** в последнюю очередь (связь с другими записями)
См. [как импортировать связи](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) для подробностей о сохранении связей.
## Шаг 7: Импорт в облако
Для каждого CSV-файла, по порядку:
1. Перейдите к объекту в вашем облачном экземпляре
2. Нажмите **⋮ → Импорт записей**
3. Загрузите файл CSV
4. Сопоставьте столбцы с полями:
* Сопоставьте столбцы с адресами электронной почты пользователей соответствующим полям связей
* Сопоставьте остальные столбцы как обычно
5. Проверьте и исправьте любые ошибки
6. Подтвердите импорт
7. Проверьте несколько записей, прежде чем переходить к следующему файлу
## Шаг 8: Воссоздайте конфигурацию
После импорта данных вручную воссоздайте:
### Представления
* Воссоздайте сохранённые представления с фильтрами, сортировками и настройками столбцов
* Настройте канбан- и календарные представления
### Рабочие процессы
* Воссоздайте автоматизации в **Настройки → Рабочие процессы**
* Протестируйте каждый рабочий процесс, прежде чем полагаться на него
### Роли и разрешения
* Настройте роли в **Настройки → Участники → Роли**
* Назначьте пользователям соответствующие роли
### Интеграции
* Подключите заново синхронизацию почты и календаря для каждого пользователя
* Перенастройте любые интеграции API с новыми ключами API
## Послемиграционный контрольный список
<Check>Все данные успешно импортированы</Check>
<Check>Связи между объектами работают корректно</Check>
<Check>Назначения пользователей (владелец, исполнитель) сопоставлены корректно</Check>
<Check>Представления воссозданы</Check>
<Check>Рабочие процессы воссозданы и протестированы</Check>
<Check>Роли и разрешения настроены</Check>
<Check>Синхронизация почты/календаря восстановлена</Check>
<Check>Интеграции API обновлены новыми ключами</Check>
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Можно ли автоматически перенести рабочие процессы?">
Пока нет. Рабочие процессы необходимо воссоздать вручную в вашем облачном экземпляре.
</Accordion>
<Accordion title="Что насчёт вложений и изображений?">
Вложения не включаются в экспорт CSV. Вам потребуется повторно загрузить все вложения вручную, перенести их через API или связаться с нашей командой для помощи при крупных миграциях.
</Accordion>
<Accordion title="Можно ли держать оба экземпляра запущенными во время миграции?">
Да, мы рекомендуем оставлять самостоятельно размещённый экземпляр запущенным, пока вы не убедитесь, что миграция в облако завершена. Просто следите, чтобы не создавать новые данные в обеих системах.
</Accordion>
<Accordion title="Что делать, если пользователь ещё не принял приглашение?">
Записи, ссылающиеся на этого пользователя, не будут импортированы, либо связь останется пустой. Убедитесь, что все пользователи приняли приглашения перед импортом данных.
</Accordion>
</AccordionGroup>
## Нужна Помощь?
<Tip>
Мигрируете крупное или сложное рабочее пространство? [Найдите сертифицированного партнёра Twenty](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-migrate-cloud), который возьмёт перенос на себя от начала и до конца. *(Или подключите нашу команду: [contact@twenty.com](mailto:contact@twenty.com).)*
</Tip>

View File

@@ -0,0 +1,267 @@
---
title: Подготовить файлы CSV
description: Полное пошаговое руководство по форматированию ваших данных для импорта в Twenty.
---
## Обзор
Это руководство проведет вас через подготовку файла CSV для успешного импорта. Следуйте этим шагам, чтобы избежать ошибок.
## Шаг 1: Проверьте требования к файлу
Прежде чем начать, убедитесь, что ваш файл соответствует этим требованиям:
| Требование | Подробности |
| ----------------------- | ------------------------ |
| **Формат** | CSV, XLSX или XLS |
| **Ограничение размера** | 10 000 записей на файл |
| **Кодировка** | Рекомендуется UTF-8 |
| **Структура** | Один тип объекта на файл |
<Note>Для наборов данных более 10 000 записей разделите их на несколько файлов или используйте [импорт через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api).</Note>
## Шаг 2: Скачайте образец файла
**Это самый важный шаг.** Образец файла показывает точные названия столбцов и формат, который ожидает Twenty.
1. Перейдите к объекту (Люди, Компании и т. д.)
2. Нажмите **⋮** → **Импортировать записи**
3. Нажмите **Скачать образец файла**
4. Используйте этот файл как шаблон
<Note>**Профессиональный совет:** Экспортируйте несколько существующих записей. Это даст вам реальные примеры того, как должны быть отформатированы данные, а названия столбцов будут сопоставлены автоматически во время импорта.</Note>
## Шаг 3: Удалите повторяющиеся значения
Twenty требует уникальности для некоторых полей. Дубликаты вызовут ошибки импорта.
| Объект | Уникальные поля |
| ---------------------------- | ------------------------------------------------------------ |
| **Люди** | `id`, `email` |
| **Компании** | `id`, `domain` |
| **Пользовательские объекты** | `id`, а также любое поле, которое вы пометили как уникальное |
**Перед импортом:**
1. Отсортируйте таблицу по уникальному полю (email или домен)
2. Удалите или объедините дублирующиеся строки
3. Проверьте наличие дубликатов, которые уже существуют в Twenty
<Warning>**Записи, помеченные как удалённые, учитываются при проверке уникальности.** Записи в Командном меню → Просмотреть удалённые записи вызовут ошибки из‑за дубликатов. Удалите их окончательно или восстановите и обновите.</Warning>
## Шаг 4: Правильно отформатируйте каждый тип поля
Разные типы полей требуют специфического формата. Полная справка:
### Текстовые поля
* Специальное форматирование не требуется
* Начальные и конечные пробелы автоматически удаляются
### Поля электронной почты
* Должны быть в корректном формате email: `name@domain.com`
* Должны быть уникальными (без дубликатов в файле и в Twenty)
* Для дополнительных адресов используйте этот формат в столбце **Emails / Additional Emails**:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### Поля домена
* **Рекомендуемый формат**: `https://domain.com`
* Это соответствует формату, используемому синхронизацией почты/календаря (предотвращает дубликаты)
* Заполните оба столбца:
* **Domain / Domain Label**: `domain.com`
* **Domain / Domain URL**: `https://domain.com`
* Должны быть уникальными в вашем файле и в Twenty
### Поля телефона
Телефон — это **вложенное поле**, требующее нескольких столбцов:
| Столбец | Пример |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
### Поля адреса
Адрес — это **вложенное поле** с несколькими столбцами (некоторые можно оставить пустыми):
* **Адрес / Адрес 1**: Первая строка адреса
* **Адрес / Адрес 2**: Вторая строка адреса (необязательно)
* **Адрес / Город**: Название города
* **Адрес / Штат**: Штат или провинция
* **Адрес / Страна**: Название страны
* **Адрес / Почтовый индекс**: Почтовый индекс/ZIP-код
### Поля даты
Используйте единый формат по всему файлу:
* `YYYY-MM-DD` (рекомендуется): `2024-03-15`
* ISO 8601: `2024-03-15T10:30:00Z`
### Числовые поля
* Только числа (без текста)
* Используйте точку в качестве десятичного разделителя: `1234.56`
* Без разделителей тысяч (не `1,234.56`)
### Валютные поля
Валюта — это **вложенное поле**, требующее двух столбцов, которые **оба должны быть заполнены**:
| Столбец | Пример |
| ------------------ | --------- |
| **Сумма / Сумма** | `1234.56` |
| **Сумма / Валюта** | `USD` |
### Булевы поля
Используйте верхний регистр: `TRUE` или `FALSE`
<Warning>Строчные `true` или `false` не будут работать.</Warning>
### Выбор полей
Используйте **имя API** варианта, а не отображаемую метку.
**Как найти имена API:**
1. Перейдите в **Настройки → Модель данных**
2. Выберите объект и поле
3. Включите **Расширенный режим** (переключатель внизу справа)
4. Скопируйте имя API (например, `OPTION_1`, а не "Option 1")
<Note>Новые варианты списка не создаются автоматически. Добавьте их в **Настройки → Модель данных** перед импортом.</Note>
### Поля множественного выбора
Используйте имена API в формате массива:
```
["VALUE1","VALUE2"]
```
### Поля массива
Используйте формат массива JSON:
```
["value1","value2"]
```
### Поля рейтинга
Используйте формат: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4` или `RATING_5`
### Поля ссылок/URL
Заполните оба столбца:
* **Ссылки / Метка ссылки**: `Twenty`
* **Ссылки / URL ссылки**: `https://twenty.com`
Для дополнительных ссылок используйте столбец **Ссылки / Дополнительные ссылки**:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### Поля JSON
Используйте допустимый формат JSON:
```
{"key":"value","key2":"value2"}
```
### Поля идентификаторов
* **Необязательно**: Twenty автоматически генерирует идентификаторы, если они не указаны
* **Формат**: UUID (например, `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
* **Сценарий использования**: укажите идентификатор, чтобы обновить существующие записи вместо создания новых
## Шаг 5: Добавьте столбцы связей (если связываете записи)
Чтобы связать записи с другими объектами (например, контакты с компаниями), добавьте столбец с уникальным идентификатором связанной записи.
**Пример**: связывание контактов с компаниями
Добавьте столбец в CSV контактов:
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**Важные правила для связей:**
* Родительская запись должна уже существовать в Twenty
* Используйте формат URL домена (`https://domain.com`), а не метку
* Сопоставляйте только ОДИН уникальный идентификатор (не указывайте одновременно `companyId` И `companyDomain`)
* Для участников рабочей области используйте их email (а не имя)
<Warning>
**Порядок импорта имеет значение!**
Сначала импортируйте сторону «один», затем сторону «многие»:
1. Сначала — **Компании**
2. Затем — **Контакты** (со ссылкой на компанию)
3. Третьими — **Возможности**
Родительская запись должна существовать до того, как вы сможете на неё сослаться.
</Warning>
См. [как импортировать связи](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) для подробных инструкций.
## Шаг 6: Убедитесь, что поля существуют в Twenty
Импорт создаёт записи, а не поля. Все поля, которые вы хотите импортировать, должны уже существовать в вашей модели данных.
**Перед импортом:**
1. Перейдите в **Настройки → Модель данных**
2. Выберите объект
3. Создайте все необходимые пользовательские поля
4. Запишите точные названия полей (они должны совпадать с заголовками столбцов)
## Шаг 7: Итоговый контрольный список
Перед загрузкой файла убедитесь, что:
<Check>Файл в формате CSV, XLSX или XLS</Check>
<Check>В файле менее 10 000 записей</Check>
<Check>Кодировка — UTF-8</Check>
<Check>Нет повторяющихся email-адресов (для контактов) или доменов (для компаний)</Check>
<Check>Даты используют единый формат по всему файлу</Check>
<Check>Домены в формате `https://domain.com`</Check>
<Check>Булевы поля используют `TRUE` или `FALSE` (в верхнем регистре)</Check>
<Check>Поля выбора используют имена API, а не отображаемые метки</Check>
<Check>Все пользовательские поля существуют в Настройках → Модели данных</Check>
<Check>Родительские записи импортированы до дочерних</Check>
<Check>Столбцы связей ссылаются на существующие записи</Check>
## Распространённые ошибки, которых следует избегать
| Ошибка | Решение |
| ---------------------------------------------------- | -------------------------------------------------- |
| Использование `true` вместо `TRUE` | Логические значения должны быть в верхнем регистре |
| Использование отображаемых меток для полей выбора | Найдите и используйте имена API в Настройках |
| Импорт контактов раньше компаний | Всегда импортируйте сначала родительские объекты |
| Отсутствует код валюты для валютных полей | Заполните столбцы «Сумма» и «Валюта» |
| Неверный формат домена | Последовательно используйте `https://domain.com` |
| Сопоставление нескольких уникальных полей для связей | Сопоставляйте только ОДИН (домен ИЛИ id, не оба) |
## Следующие шаги
Ваш файл готов! Теперь:
* [Импорт компаний](/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv) (сначала импортируйте их)
* [Импорт контактов](/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv)
* [Исправьте ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)

View File

@@ -0,0 +1,198 @@
---
title: Обновление существующих записей через импорт
description: Полное пошаговое руководство по массовому обновлению записей с помощью импорта CSV.
---
## Обзор
Нужно обновить много записей сразу? Вместо того чтобы редактировать их по одной, используйте импорт CSV для массового обновления существующих записей.
**Сценарии использования:**
* Обновить должности для нескольких людей
* Массово изменить информацию о компаниях
* Добавить данные в новые настраиваемые поля
* Исправить ошибки данных во множестве записей
## Как это работает
Когда вы импортируете файл, содержащий **уникальный идентификатор**, который совпадает с существующей записью, Twenty обновляет эту запись вместо создания дубликата.
| Если уникальный идентификатор... | Twenty выполнит... |
| -------------------------------- | ------------------------------------------------------------- |
| Совпадает с существующей записью | **Обновит** существующую запись |
| Не совпадает ни с одной записью | **Создаст** новую запись |
| Отсутствует в вашем файле | **Создаст** новую запись (с автоматически сгенерированным ID) |
<Warning>
**Поля с множественным выбором перезаписываются, а не объединяются.**
Если в записи выбраны `Option A` и `Option B`, и вы импортируете `["Option C"]`, после импорта в записи останется только `Option C`. Импорт заменяет все предыдущие выбранные значения — он не добавляет к ним новые.
Чтобы сохранить существующие значения, включите их все в импорт: `["Option A","Option B","Option C"]`
</Warning>
## Шаг 1: Экспортируйте текущие данные
Сначала экспортируйте записи, которые хотите обновить:
1. Перейдите к объекту (Люди, Компании и т. д.)
2. **Добавьте нужные столбцы** — нажмите **Options → Fields**, чтобы отобразить поля, которые хотите обновить
3. **При необходимости примените фильтр** — сузьте выборку до тех записей, которые хотите обновить
4. Нажмите **⋮** → **Экспорт представления**
5. Сохраните файл CSV
<Note>**Зачем сначала экспорт?** Экспортированный файл имеет корректный формат, включает уникальные идентификаторы и автоматически сопоставляется при импорте.</Note>
### Что экспортируется
* Все видимые столбцы в текущем представлении
* Уникальные идентификаторы записи (`id`, `email`, `domain`)
* Текущие значения полей, которые можно изменить
## Шаг 2: Отредактируйте файл CSV
Откройте экспортированный файл в табличном редакторе (Excel, Google Sheets и т. д.):
1. **Сохраните столбец с уникальным идентификатором** — не удаляйте `id`, `email` или `domain`
2. **Обновите значения** в столбцах, которые хотите изменить
3. **Удалите столбцы, которые не нужно обновлять** (необязательно, но так будет аккуратнее)
4. **Не изменяйте значения уникальных идентификаторов** — иначе Twenty создаст новые записи
### Пример: обновление должностей
**Экспортированный файл:**
```csv
id,email,firstName,lastName,jobTitle
550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
```
**После ваших изменений:**
```csv
id,email,firstName,lastName,jobTitle
550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
```
<Warning>
**Не изменяйте значения уникальных идентификаторов.**
Если вы измените `john@acme.com` на `john.smith@acme.com`, Twenty создаст новую запись вместо обновления существующей.
</Warning>
## Шаг 3: Импортируйте обновлённый файл
1. Перейдите к объекту
2. Нажмите **⋮** → **Импорт записей**
3. Загрузите отредактированный файл CSV
4. **Убедитесь, что уникальный идентификатор сопоставлен** — проверьте, что `email`, `domain` или `id` сопоставлены корректно
5. Проверьте сопоставление полей
6. Проверьте наличие ошибок
7. Нажмите **Подтвердить**
Twenty сопоставляет записи по уникальному идентификатору и обновляет их новыми значениями.
## Выбор подходящего уникального идентификатора
| Объект | Рекомендуется | Альтернатива | Заметки |
| ---------------------------- | --------------------- | ------------ | ------------------------------------------------- |
| **Люди** | `электронная почта` | `id` | Email человекочитаем |
| **Компании** | `домен` | `id` | Домен человекочитаем |
| **Пользовательские объекты** | Любое уникальное поле | `id` | Используйте своё пользовательское уникальное поле |
<Note>**Используйте только ОДИН уникальный идентификатор.** Не сопоставляйте одновременно `email` И `id`. Это может привести к путанице и ошибкам.</Note>
### Использование пользовательских уникальных полей
Если у вас есть пользовательское поле, помеченное как уникальное (например, внешний ID из другой системы):
1. Включите это поле в экспорт и импорт
2. Сопоставьте его при импорте
3. Twenty будет сопоставлять по этому полю
## Шаг 4: Проверьте обновления
После импорта:
1. Откройте несколько обновлённых записей
2. Убедитесь, что изменения применены
3. Проверьте, что не были созданы дубликаты записей
## Что с полями, которых нет в вашем файле?
**Поля, не включённые в файл импорта, остаются без изменений.**
| Ваш файл включает... | Результат |
| ---------------------------- | --------------------------------------------------------------- |
| `email`, `jobTitle` | Обновляется только `jobTitle`; остальные поля остаются прежними |
| `email`, `jobTitle`, `phone` | Обновляются `jobTitle` и `phone` |
Это означает, что нужно включать только те поля, которые вы хотите изменить (плюс уникальный идентификатор).
## Совмещение обновлений и новых записей
Вы можете обновлять существующие записи И создавать новые в одном и том же импорте:
```csv
email,firstName,lastName,jobTitle
john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
```
## Распространённые ошибки, которых следует избегать
| Ошибка | Проблема | Результат | Решение |
| ---------------------------------------- | ----------------------------------------------------- | -------------------------------------- | ------------------------------------------------------- |
| **Изменение уникального идентификатора** | Заменили `john@acme.com` на `john.smith@acme.com` | Создаёт новую запись вместо обновления | Не изменяйте уникальные идентификаторы |
| **Несколько уникальных полей** | Сопоставлены одновременно `email` И `id` | Возможные конфликты сопоставления | Сопоставляйте только ОДИН уникальный идентификатор |
| **Нет уникального идентификатора** | В файле только `firstName`, `lastName`, `jobTitle` | Все строки создают новые записи | Всегда включайте `email`, `domain` или `id` |
| **Несовпадение регистра** | В файле `John@acme.com`, а в Twenty — `john@acme.com` | Создаёт новую запись | Экспортируйте из Twenty, чтобы получить точные значения |
## Часто задаваемые вопросы
<AccordionGroup>
<Accordion title="Что, если некоторых записей ещё нет?">
Записи с уникальными идентификаторами, которые не совпадают с существующими, будут созданы как новые. Это позволяет обновлять и создавать в одном импорте.
</Accordion>
<Accordion title="Можно ли очистить значение поля?">
Да, оставьте ячейку пустой в вашем CSV. Импорт очистит значение этого поля в существующей записи.
</Accordion>
<Accordion title="Что происходит с полями, которые я не включаю в импорт?">
Поля, отсутствующие в файле импорта, остаются без изменений в существующих записях. Обновляются только включённые вами поля.
</Accordion>
<Accordion title="Можно ли обновлять поля связей (например, Company)?">
Да! Включите уникальный идентификатор связи (например, `companyDomain`) и сопоставьте его с полем связи. Связь будет обновлена.
</Accordion>
<Accordion title="Как узнать, какие записи будут обновлены, а какие созданы?">
На этапе проверки импорта Twenty показывает, сколько записей будет обновлено и сколько создано, исходя из совпадений уникальных идентификаторов.
</Accordion>
<Accordion title="Можно ли отменить массовое обновление?">
Автоматической отмены нет. Рекомендуем экспортировать ваши данные в качестве резервной копии перед массовыми обновлениями.
</Accordion>
</AccordionGroup>
## Лучшие практики
1. **Сначала экспорт** — всегда начинайте с экспорта, чтобы обеспечить корректный формат
2. **Создайте резервную копию перед обновлением** — экспортируйте данные перед массовыми изменениями
3. **Протестируйте на нескольких записях** — сначала попробуйте обновить 5–10 записей, прежде чем делать большой пакет
4. **Используйте человекочитаемые идентификаторы** — `email` и `domain` легче проверить, чем `id`
5. **Включайте только нужные столбцы** — меньше столбцов означает меньший риск ошибок
## Устранение неполадок
Возникли проблемы? Проверьте:
* [Как исправить ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
* [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
* [Справочник по сопоставлению полей](/l/ru/user-guide/data-migration/capabilities/field-mapping)

View File

@@ -0,0 +1,83 @@
---
title: Миграция данных
description: Импортируйте и экспортируйте данные вашей CRM через файлы CSV или API.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Способы импорта
Twenty поддерживает два основных способа импорта данных:
| Метод | Лучше всего подходит | Ограничение объема |
| -------------- | ------------------------------------------- | ---------------------- |
| **Импорт CSV** | Стандартные миграции, регулярные обновления | 10 000 записей на файл |
| **Импорт API** | Крупномасштабные миграции, автоматизация | Без ограничений |
<Note>Для очень больших наборов данных (сотни тысяч записей) используйте API. Наши [партнеры по внедрению](/l/ru/user-guide/getting-started/capabilities/implementation-services) при необходимости помогут запустить эти скрипты.</Note>
## Основы импорта CSV
Вы можете импортировать данные для любого объекта, используя файлы CSV, XLSX или XLS. Каждый файл должен содержать **только один тип объекта** (например, только записи «Люди»).
<Note>**Поля должны существовать до импорта.** Загрузка CSV создает записи, но не создает поля. Если вам нужны настраиваемые поля, сначала создайте их в разделе **Settings → Data Model**.</Note>
### Шаги
1. Перейдите к объекту, в который вы хотите импортировать данные
2. Нажмите значок **⋮** в правом верхнем углу (это Командное меню) и выберите **Импорт записей**
3. Скачайте шаблон файла, чтобы убедиться, что ваши данные в ожидаемом формате
4. Загрузите подготовленный файл CSV
5. Сопоставьте ваши столбцы с полями Twenty
6. Просмотрите ошибки (выделены желтым) и исправьте их, редактируя прямо в интерфейсе
7. Подтвердите импорт
### Импорт связей между объектами
Вы можете импортировать связи между объектами с помощью функции импорта CSV. Вам нужно ссылаться на связанный объект, используя уникальное поле этого объекта: `id`, `email` для «Люди» и участников рабочего пространства, `domain` для компаний, либо любое другое поле, помеченное как уникальное в модели данных для любого другого объекта.
<Note>**Удаленные записи учитываются при проверке уникальности.** Мягко удаленные записи (видны в Командном меню → See deleted records) включаются в проверки уникальности. Если вы импортируете запись с тем же уникальным значением, что и у удаленной записи, удаленная запись будет восстановлена.</Note>
<Warning>
**Порядок импорта имеет значение!**
При импорте связанных объектов загружайте файлы в следующем порядке:
1. Сначала **Компании** (сторона «один» в отношениях)
2. **Люди** во вторую очередь (связаны с Компаниями через companyId)
3. **Сделки** в третью очередь (связаны с Компаниями/Людьми)
4. **Пользовательские объекты** со связями — в последнюю очередь
Почему? Сторона «один» в связи типа «один-ко-многим» должна существовать, прежде чем вы сможете на нее ссылаться. Например, запись компании должна существовать до импорта человека с идентификатором этой компании.
</Warning>
Обратитесь к [этой статье](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) за пошаговым руководством.
## Экспорт данных
Экспортируйте данные вашего рабочего пространства для резервного копирования, отчетности или миграции.
### Шаги
1. Перейдите к объекту, который вы хотите экспортировать
2. Настройте представление с нужными столбцами
3. Нажмите **⋮** → **Экспортировать представление**
4. Сохраните файл CSV
<Note>**Экспортируются только видимые столбцы.** Файл CSV будет содержать только столбцы, отображаемые в вашем текущем представлении. Добавьте или скройте столбцы перед экспортом, чтобы управлять тем, какие данные будут включены.</Note>
<Note>**Ограничения экспорта**: до 20 000 записей за один экспорт.</Note>
## Разрешения
Импорт и экспорт данных требуют определенных разрешений:
* **Импорт**: требуется разрешение "Import CSV"
* **Экспорт**: требуется разрешение "Export CSV"
Свяжитесь с администратором вашего рабочего пространства, если у вас нет этих разрешений.
## Следующие шаги
* [Подготовьте файлы CSV](/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files)
* [Импорт связей между объектами](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
* [Импорт через API для больших наборов данных](/l/ru/user-guide/data-migration/how-tos/import-data-via-api)