Если вы работаете с платформой 1С:Предприятие и столкнулись с аббревиатурой CFU в документации, коде или настройках, но не понимаете, что она означает — эта статья для вас. Термин встречается в контексте интеграций, обмена данными и работы с внешними системами, но его расшифровка и функционал часто остаются "за кадром" даже для опытных разработчиков.
На практике CFU (или КФУ в русскоязычной документации) — это не просто технический жаргон, а ключевой элемент архитектуры 1С, который отвечает за конвертацию форматов данных при обмене между разными системами. Без правильной настройки CFU многие интеграции (например, с 1С:EDT, EnterpriseData или сторонними API) просто не будут работать. В этой статье мы подробно разберём:
- 🔹 Что такое CFU и как расшифровывается аббревиатура
- 🔹 Где применяется в типовых и нетиповых конфигурациях 1С
- 🔹 Как настроить CFU для обмена данными с внешними системами
- 🔹 Типичные ошибки и способы их устранения
1. Расшифровка CFU: что скрывается за аббревиатурой
Аббревиатура CFU расшифровывается как Conversion Format Unit (в русскоязычных источниках — Конвертер Форматов Универсальный). Это встроенный механизм платформы 1С:Предприятие 8, предназначенный для преобразования данных из одного формата в другой при обмене между системами.
Проще говоря, CFU выполняет роль "переводчика" между:
- 📄 Внутренним форматом 1С (например, данные в виде объектов конфигурации: справочники, документы, регистры)
- 📥 Внешними форматами (JSON, XML, CSV, Protobuf и др.)
- 🔄 Форматами других систем 1С (например, при обмене между 1С:УТ 11 и 1С:БП 3.0)
Ключевая особенность CFU — поддержка двунаправленной конвертации: механизм умеет не только экспортировать данные из 1С во внешний формат, но и импортировать их обратно, сохраняя структуру и связи между объектами. Это критично для интеграций, где важна синхронизация (например, остатки товаров на сайте и в 1С).
⚠️ Внимание: В документации 1С термин CFU может упоминаться как часть Библиотеки стандартных подсистем (БСП) или модуля EnterpriseData. Если в вашей конфигурации этих компонентов нет, функционал CFU может быть ограничен или отсутствовать.
2. Где используется CFU в 1С: типовые сценарии
Механизм CFU активно применяется в следующих случаях:
| Сценарий использования | Примеры | Типовые конфигурации |
|---|---|---|
| Обмен данными между базами 1С | Синхронизация справочников Номенклатура и Контрагенты между 1С:УТ и 1С:БП |
Управление торговлей, Бухгалтерия, ERP |
| Интеграция с веб-сервисами | Выгрузка каталога товаров на сайт в формате JSON или загрузка заказов из API интернет-магазина | УТ 11, Розница, Комплексная автоматизация |
| Работа с 1С:EDT (Enterprise Development Tools) | Конвертация метаданных конфигурации для совместной разработки в команде | Любые конфигурации при использовании EDT |
| Экспорт/импорт данных в внешние системы | Обмен с CRM (Bitrix24, amoCRM), WMS, или банковскими системами (клиент-банк) | ERP, УТ, ЗУП |
В типовых конфигурациях (например, 1С:Управление торговлей 11 или 1С:ERP) механизм CFU часто скрыт за стандартными обработками обмена данными. Однако в нетиповых решениях или при кастомизации может потребоваться ручная настройка конвертеров.
Пример из практики: если вы настраиваете выгрузку товаров на сайт, то без CFU данные придётся конвертировать вручную через ЗаписьJSON или ЗаписьXML, что занимает в разы больше времени и чревато ошибками.
Перед настройкой CFU проверьте, не реализован ли нужный обмен через стандартные механизмы (например, УниверсальныйОбменДанными в БСП). Это сэкономит время на разработку.
3. Структура CFU: из чего состоит конвертер форматов
Механизм CFU в 1С состоит из нескольких ключевых компонентов:
- Описание формата (Format Description) — шаблон, определяющий структуру данных (например, какие поля объекта 1С соответствуют полям в JSON).
- Правила конвертации (Conversion Rules) — логика преобразования типов данных (например, как конвертировать
Дата1С в строку ISO 8601). - Обработчики событий — пользовательский код, который выполняется на этапах чтения/записи данных (например, для валидации или трансформации значений).
- Настройки связей — определение, как объекты 1С сопоставляются с объектами внешней системы (например, справочник
Контрагенты→ таблицаCustomersв базе PostgreSQL).
Визуально структуру CFU можно представить так:
┌───────────────────────┐ ┌───────────────────────┐
│ Данные 1С │ │ Внешний формат │
│ (Справочники, │ │ (JSON, XML, Protobuf) │
│ Документы, Регистры) │ │ │
└──────────┬────────────┘ └───────────┬───────────┘
│ │
▼ ▼
┌───────────────────────────────────────────┐
│ CFU (Конвертер) │
│ ┌─────────────┐ ┌─────────────────┐ │
│ │ Описание │ │ Правила │ │
│ │ формата │ │ конвертации │ │
│ └─────────────┘ └─────────────────┘ │
│ ┌─────────────┐ ┌─────────────────┐ │
│ │ Обработчики │ │ Настройки связей │ │
│ │ событий │ │ │ │
│ └─────────────┘ └─────────────────┘ │
└───────────────────────────────────────────┘
│ │
▼ ▼
┌───────────────────────┐ ┌───────────────────────┐
│ Преобразованные │ │ Данные во внешней │
│ данные 1С │ │ системе │
└───────────────────────┘ └───────────────────────┘
В 1С:EDT описание CFU хранится в отдельных файлах с расширением .cfu (например, Catalogs.cfu для справочников). В классической конфигурации настройка ведётся через объекты метаданных или программно.
Как выглядит файл CFU в 1С
EDT?:Файл CFU в Enterprise Development Tools — это текстовый файл в формате JSON, который описывает структуру данных. Например, для справочника "Номенклатура" он может содержать:
{
"name": "Catalog_Номенклатура",
"source": {
"type": "CatalogObject.Номенклатура",
"fields": ["Наименование", "Артикул", "ЕдиницаИзмерения"]
},
"target": {
"format": "json",
"structure": {
"id": "{Ref}",
"name": "{Наименование}",
"article": "{Артикул}",
"unit": "{ЕдиницаИзмерения.Наименование}"
}
}
}
4. Пошаговая инструкция: как настроить CFU в 1С
Рассмотрим процесс настройки CFU на примере выгрузки справочника Номенклатура в формат JSON для интеграции с сайтом. Инструкция актуальна для конфигураций на управляемых формах (8.3.10+).
Создать резервную копию базы|Проверить наличие прав администратора|Убедиться, что в конфигурации подключена БСП или EnterpriseData|Подготовить описание структуры данных для внешней системы-->
Шаг 1. Создание описания формата
Откройте конфигуратор и перейдите в ветку Общие → КонвертацияДанных → ОписанияФорматов. Создайте новый объект:
- Укажите имя, например
JSON_НоменклатураДляСайта. - В поле
Тип форматавыберитеJSON. - В разделе
Структураопишите соответствие полей:{
"Номенклатура": {
"id": "Ссылка.УникальныйИдентификатор()",
"name": "Наименование",
"article": "Артикул",
"price": "ЦенаПродажи"
}
}
Шаг 2. Настройка правил конвертации
Перейдите в Общие → КонвертацияДанных → ПравилаКонвертации и создайте новое правило:
- 📌 Укажите источник: справочник
Номенклатура. - 📌 Выберите целевой формат:
JSON_НоменклатураДляСайта(созданный на шаге 1). - 📌 Настройте преобразование типов:
- Для поля
ЦенаПродажиукажите формат числа с 2 знаками после запятой. - Для поля
Ссылкадобавьте обработчик, который преобразует ссылку 1С в строковыйGUID.
- Для поля
Шаг 3. Реализация обмена данными
Создайте обработку с следующим кодом для выгрузки данных:
Процедура ВыгрузитьНоменклатуруВJSON(КаталогВыгрузки)
// 1. Получаем данные из 1С
Выборка = Справочники.Номенклатура.Выбрать();
ДанныеДляВыгрузки = Новый Массив();
Пока Выборка.Следующий() Цикл
ДанныеДляВыгрузки.Добавить(Выборка.Ссылка);
КонецЦикла;
// 2. Создаём конвертер
Конвертер = КонвертацияДанных.СоздатьКонвертер();
Конвертер.ДобавитьПравило("Правило_НоменклатураВJSON");
// 3. Выгружаем в файл
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ОткрытьФайл(КаталогВыгрузки + "номенклатура.json");
Конвертер.ЗаписатьДанные(ДанныеДляВыгрузки, ЗаписьJSON);
ЗаписьJSON.Закрыть();
КонецПроцедуры
Для обратной загрузки (импорта данных из JSON в 1С) используйте метод Конвертер.ПрочитатьДанные().
Всегда тестируйте конвертацию на копии базы! Ошибки в правилах CFU могут привести к потере данных или нарушению ссылочной целостности.
5. Типичные ошибки при работе с CFU и их решения
При настройке CFU разработчики часто сталкиваются со следующими проблемами:
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка конвертации: не найдено правило для типа "СправочникСсылка.Номенклатура" |
Отсутствует правило конвертации для указанного типа данных. | Проверьте, что правило добавлено в КонвертацияДанных.ПравилаКонвертации и корректно связано с описанием формата. |
Не удалось записать значение: тип не поддерживается (Дата) |
Формат даты в 1С не совпадает с ожидаемым форматом во внешней системе. | Добавьте обработчик события ПриКонвертацииЗначения для преобразования даты в строку (например, Формат(Дата, "ДФ=yyyy-MM-dd")). |
Циклическая ссылка при сериализации объекта |
В данных есть рекурсивные связи (например, справочник ссылается сам на себя). | Используйте параметр ГлубинаРекурсии в настройках конвертера или исключите циклические поля из выгрузки. |
| В внешней системе не отображаются русские символы (кракозябры). | Неверная кодировка при записи файла. | Укажите кодировку UTF-8 при создании объекта ЗаписьJSON или ЗаписьXML. |
Если ошибка не устраняется, проверьте:
- 🔍 Логи обмена: включите запись логов в настройках CFU (параметр
ВключитьПротоколирование). - 🔍 Совместимость версий: в старых версиях 1С (до 8.3.10) функционал CFU может отличаться.
- 🔍 Права доступа: убедитесь, что у пользователя есть права на чтение/запись объектов, участвующих в обмене.
⚠️ Внимание: При обмене данными между разными версиями 1С (например, 8.3.15 и 8.3.20) могут возникать ошибки из-за изменений в метаданных. В этом случае используйте промежуточный формат (например, XML с явным описанием структуры).
6. CFU vs альтернативные способы обмена данными
CFU — не единственный способ интеграции 1С с внешними системами. Рассмотрим альтернативы и их особенности:
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| CFU (Конвертер Форматов) |
✅ Встроен в платформу ✅ Поддерживает сложные преобразования ✅ Работает с большинством форматов |
❌ Требует настройки ❌ Возможны ошибки при изменении структуры данных |
Для регулярного обмена с внешними системами, где важна гибкость преобразований. |
| УниверсальныйОбменДанными (БСП) |
✅ Простота настройки ✅ Поддерживает типовые конфигурации |
❌ Ограниченная кастомизация ❌ Не подходит для нестандартных форматов |
Для обмена между типовыми конфигурациями 1С (например, УТ ↔ БП). |
| Прямой доступ к базе (SQL, ODBC) | ✅ Максимальная скорость |
❌ Нарушает целостность данных ❌ Требует глубоких знаний структуры БД |
Только для опытных разработчиков и критических по производительности задач. |
| REST API / HTTP-сервисы |
✅ Современный подход ✅ Подходит для облачных систем |
❌ Требует настройки на стороне 1С и внешней системы ❌ Возможны проблемы с авторизацией |
Для интеграции с веб-сервисами (например, Bitrix24, MoySklad). |
Выбор метода зависит от задачи:
- 🔹 Для внутреннего обмена между базами 1С подойдёт
УниверсальныйОбменДанными. - 🔹 Для интеграции с сайтом или CRM оптимален CFU или REST API.
- 🔹 Для одноразовой миграции данных можно использовать
ЗагрузкаДанныхИзТабличногоДокумента.
7. Продвинутые возможности CFU: что умеет механизм
Помимо базовой конвертации, CFU поддерживает ряд продвинутых функций:
- 🔹 Преобразование коллекций: автоматическая обработка массивов и таблиц значений. Например, выгрузка табличной части документа в массив JSON.
- 🔹 Поддержка версионности: можно сохранять несколько версий описаний форматов для обратной совместимости.
- 🔹 Валидация данных: проверка корректности данных перед конвертацией (например, обязательность полей).
- 🔹 Расширения через код: подключение собственных обработчиков на 1С или C# (в 1С:EDT).
- 🔹 Кэширование: ускорение повторной конвертации за счёт сохранения промежуточных результатов.
Пример расширенного использования: если вам нужно выгрузить не только справочник Номенклатура, но и связанные с ним Цены и Остатки, можно создать композитное правило конвертации, которое объединит несколько объектов в один JSON-документ:
{
"products": [
{
"id": "Номенклатура.Ссылка.УникальныйИдентификатор()",
"name": "Номенклатура.Наименование",
"prices": [
{
"type": "ТипЦен.Наименование",
"value": "Цены.Цена"
}
],
"stock": {
"quantity": "Остатки.Количество",
"warehouse": "Остатки.Склад.Наименование"
}
}
]
}
Для работы с такими сложными структурами может потребоваться написание кастомных обработчиков на встроенном языке 1С.
CFU позволяет создавать многоуровневые правила конвертации, что особенно полезно для выгрузки иерархических данных (например, дерево категорий товаров с вложенными элементами).
8. Будущее CFU: что меняется в новых версиях 1С
В последних версиях платформы 1С:Предприятие 8.3.20+ механизм CFU претерпевает следующие изменения:
- 🔹 Улучшенная поддержка Protobuf: более эффективная сериализация данных для высоконагруженных систем.
- 🔹 Интеграция с 1С:EDT: визуальный редактор правил конвертации (аналог XSLT для XML).
- 🔹 Автоматическое генерирование схем: для JSON Schema и OpenAPI на основе метаданных 1С.
- 🔹 Поддержка асинхронного обмена: для интеграций с системами, требующими неблокирующих запросов.
Одно из ключевых нововведений — расширенная диагностика ошибок. Теперь при сбое конвертации CFU выдаёт не только текст ошибки, но и:
- 📍 Точное место в правиле, где произошла ошибка.
- 📍 Контекст данных (значения полей, вызвавших сбой).
- 📍 Рекомендации по устранению (например, "Добавьте обработчик для типа
Дата").
Если вы работаете с 1С:EDT, обратите внимание на новый инструмент CFU Designer — графический интерфейс для создания и отладки правил конвертации. Он позволяет:
- 🔹 Перетаскивать поля из метаданных 1С в структуру целевого формата.
- 🔹 Автоматически генерировать шаблоны для JSON/XML.
- 🔹 Тестировать конвертацию на примерах данных без записи в базу.
⚠️ Внимание: В версиях 1С ниже 8.3.15 часть функционала CFU может отсутствовать или работать иначе. Например, поддержка Protobuf появилась только в 8.3.18. Перед использованием новых возможностей проверьте совместимость с вашей версией платформы.
FAQ: Частые вопросы о CFU в 1С
Можно ли использовать CFU для обмена данными с Excel?
Да, но не напрямую. CFU работает с текстовыми форматами (JSON, XML, CSV), поэтому для обмена с Excel нужно:
- Выгрузить данные из 1С в CSV с помощью CFU.
- Импортировать CSV в Excel (или наоборот).
Для прямой работы с Excel удобнее использовать COM-соединение или библиотеку Epplus (для .NET).
Как отладить ошибку "Не найдено описание формата"?
Эта ошибка означает, что CFU не может найти шаблон для конвертации. Проверьте:
- Корректно ли указано имя описания формата в правиле конвертации.
- Существует ли файл
.cfu(в 1С:EDT) или объект в метаданных (в классической конфигурации). - Не изменялось ли имя формата после обновления конфигурации.
Если описание формата создавалось вручную, убедитесь, что оно сохранено и опубликовано (в EDT — коммичено в репозиторий).
Поддерживает ли CFU работу с binary-данными (например, картинками)?
Да, но с оговорками. Для binary-данных (например, поле Картинка в справочнике Номенклатура) нужно:
- В описании формата указать тип поля как
BinaryData. - При конвертации в JSON или XML binary-данные кодируются в
Base64. - Для обратной загрузки — декодировать
Base64обратно в двоичный формат.
Пример правила для картинки:
{
"image": {
"data": "Картинка.ПолучитьДвоичныеДанные()",
"format": "base64"
}
}
Можно ли использовать CFU для обмена с мобильным приложением?
Абсолютно да! CFU идеально подходит для интеграции 1С с мобильными приложениями, так как:
- 📱 Поддерживает JSON — основной формат обмена для мобильных клиентов.
- 📱 Позволяет гибко настраивать структуру данных под нужды приложения.
- 📱 Обеспечивает двустороннюю синхронизацию (например, загрузку заказов из приложения в 1С и выгрузку статусов обратно).
Для ускорения обмена рекомендуется:
- Использовать сжатие данных (gzip).
- Выгружать только изменённые объекты (по дате модификации).
- На стороне мобильного приложения кэшировать часто запрашиваемые данные.
Где хранится история изменений правил CFU в 1С:EDT?
В 1С:Enterprise Development Tools история изменений файлов .cfu хранится в системе контроля версий (Git или Apache Subversion, в зависимости от настройки проекта). Чтобы посмотреть историю:
- Откройте файл
.cfuв EDT. - Кликните правой кнопкой по файлу и выберите
Team → Show History. - В открывшемся окне вы увидите все коммиты с изменениями правила.
Если вы работаете без системы контроля версий, история не сохраняется — рекомендуется регулярно создавать резервные копии файлов .cfu.