МАППИНГ ПОЛЕЙ 1С → PIM
Версия: 2.0.0
Дата: 2025-12-25
Статус: Стандарт
НАЗНАЧЕНИЕ
Правила маппинга полей из 1С OData API в структуру PIM.
СОДЕРЖАНИЕ
- Основные поля
- Дополнительные реквизиты
- Справочники GUID
- Примеры маппинга
1. ОСНОВНЫЕ ПОЛЯ
1.1 Маппинг 1С → pim_products
| # |
Поле в 1С |
Тип 1С |
→ |
Поле в PIM |
Тип PIM |
Обработка |
| ИДЕНТИФИКАТОРЫ |
|
|
|
|
|
|
| 1 |
Ref_Key |
UUID |
→ |
ref_key_1c |
VARCHAR(36) |
Прямое копирование |
| 2 |
Code |
String(11) |
→ |
code_1c |
VARCHAR(11) |
Прямое копирование |
| 3 |
Артикул |
String(50) |
→ |
article |
VARCHAR(50) |
Прямое копирование |
| НАЗВАНИЯ |
|
|
|
|
|
|
| 4 |
Description |
String(100) |
→ |
name_short |
VARCHAR(150) |
Прямое копирование |
| 5 |
НаименованиеПолное |
String(1000) |
→ |
name |
VARCHAR(1000) |
Прямое копирование |
| КАТЕГОРИЯ |
|
|
|
|
|
|
| 6 |
Parent_Key |
UUID |
→ |
category |
VARCHAR(100) |
Маппинг по справочнику |
| 7 |
КатегорияНоменклатуры_Key |
UUID |
→ |
product_type |
VARCHAR(50) |
Маппинг по справочнику |
| ГАБАРИТЫ |
|
|
|
|
|
|
| 8 |
Вес |
Number(10,3) |
→ |
weight_kg |
NUMERIC(10,3) |
Прямое копирование |
| 9 |
Высота |
Number(10,2) |
→ |
height_mm |
INTEGER |
Прямое копирование |
| 10 |
Ширина |
Number(10,2) |
→ |
width_mm |
INTEGER |
Прямое копирование |
| 11 |
Длина |
Number(10,2) |
→ |
length_mm |
INTEGER |
Прямое копирование |
| ПРОЧЕЕ |
|
|
|
|
|
|
| 12 |
ЭтоНабор |
Boolean |
→ |
is_bundle |
BOOLEAN |
Прямое копирование |
| 13 |
Штрихкод |
String(13) |
→ |
barcode |
VARCHAR(13) |
Прямое копирование |
2. ДОПОЛНИТЕЛЬНЫЕ РЕКВИЗИТЫ
2.1 Структура в 1С
В 1С дополнительные характеристики передаются в массиве ДополнительныеРеквизиты:
{
"ДополнительныеРеквизиты": [
{"Свойство": "GUID", "Значение": "значение"}
]
}
2.2 Таблица маппинга по GUID
БРЕНД
| GUID реквизита 1С |
Название |
→ |
Поле PIM |
Обработка |
b86639de-7d0c-11ee-919d-3cecefa69fd9 |
Бренд |
→ |
brand |
Прямое |
КАЛИБР
| GUID реквизита 1С |
Название |
→ |
Поле PIM |
Обработка |
7c85ff2d-6890-11ee-919d-3cecefa69fd9 |
Калибр макс цифра |
→ |
caliber_inch |
Прямое (дюймы) |
| - |
(вычисляемое) |
→ |
caliber_mm |
inch × 25.4 |
9c4aafaf-e5ae-11ed-919d-3cecefa69fd9 |
Калибры |
→ |
calibers_text |
Прямое |
ЗАЛПЫ
| GUID реквизита 1С |
Название |
→ |
Поле PIM |
Обработка |
9c4aafd8-e5ae-11ed-919d-3cecefa69fd9 |
Кол-во выстрелов |
→ |
shots_count |
Прямое |
a7b59bb8-6890-11ee-919d-3cecefa69fd9 |
Количество эффектов |
→ |
effects_count |
Прямое |
19b43d79-7d77-11ee-919d-3cecefa69fd9 |
Спецэффекты |
→ |
effects |
Прямое |
ВРЕМЯ И ВЫСОТА
| GUID реквизита 1С |
Название |
→ |
Поле PIM |
Обработка |
9c4aafe2-e5ae-11ed-919d-3cecefa69fd9 |
Время работы |
→ |
duration_sec |
Прямое (секунды) |
9c4aafe3-e5ae-11ed-919d-3cecefa69fd9 |
Высота разрыва |
→ |
height_mm |
метры × 1000 |
ТИП
| GUID реквизита 1С |
Название |
→ |
Поле PIM |
Обработка |
9c4aafe4-e5ae-11ed-919d-3cecefa69fd9 |
Вид фейерверка |
→ |
salute_type |
Прямое |
МЕДИА
| GUID реквизита 1С |
Название |
→ |
Поле PIM |
Обработка |
1a8a2229-8fe3-11ee-919d-3cecefa69fd9 |
Файл изображения |
→ |
photo_url |
Прямое |
4ff1d78c-6eef-11ee-919d-3cecefa69fd9 |
Видео Youtube |
→ |
video_youtube |
Прямое |
df5d5f35-acf5-11f0-ba8b-1c98ec2a5329 |
Видео Rutube |
→ |
video_rutube |
Прямое |
УПАКОВКА
| GUID реквизита 1С |
Название |
→ |
Поле PIM |
Обработка |
be4a9332-6895-11ee-919d-3cecefa69fd9 |
штук в упаковке |
→ |
pack_qty |
Прямое |
4e8da965-836a-11ee-919d-3cecefa69fd9 |
Фасовка текст |
→ |
packing |
Прямое |
12e08fe1-9013-11ee-919d-3cecefa69fd9 |
наличие |
→ |
is_available |
Прямое |
3. СПРАВОЧНИКИ GUID
3.1 Parent_Key (категории)
| GUID |
→ |
Название категории |
0699197f-e960-11ed-919d-3cecefa69fd9 |
→ |
Батареи салютов |
62b720db-68a0-11ee-919d-3cecefa69fd9 |
→ |
Фонтаны пиротехнические |
414d8f60-e957-11ed-919d-3cecefa69fd9 |
→ |
Римские свечи |
414d8518-e957-11ed-919d-3cecefa69fd9 |
→ |
Петарды |
414d8cba-e957-11ed-919d-3cecefa69fd9 |
→ |
Ракеты |
185b58c6-e960-11ed-919d-3cecefa69fd9 |
→ |
Свечи бенгальские огни |
1aee671d-e960-11ed-919d-3cecefa69fd9 |
→ |
Цветной дым |
04fd1a14-68a1-11ee-919d-3cecefa69fd9 |
→ |
Хлопушки пиротехнические |
5cb9ea4d-68a0-11ee-919d-3cecefa69fd9 |
→ |
Летающие фейерверки |
414d85a3-e957-11ed-919d-3cecefa69fd9 |
→ |
Фестивальные шары |
3.2 Маппинг категорий → типы салютов
Для автоматического определения salute_type из категории 1С:
CATEGORY_TO_SALUTE_TYPE = {
# Категория в 1С → salute_type
'Батареи салютов': 'батарея',
'Фонтаны пиротехнические': 'фонтан',
'Римские свечи': 'римская свеча',
'Петарды': 'петарда',
'Ракеты': 'ракета',
'Свечи бенгальские огни': 'бенгальские',
'Цветной дым': 'дым',
'Хлопушки пиротехнические': 'хлопушка',
'Летающие фейерверки': 'летающий',
'Фестивальные шары': 'миномет',
'Дневные фейерверки': 'дым', # Дневные салюты = дым
'Салюты и фейерверки': 'батарея', # Общая категория
}
4. ПРИМЕРЫ МАППИНГА
4.1 Пример 1: Батарея салютов
Данные из 1С:
{
"Ref_Key": "b12e7ca3-29cb-11ef-8279-00155d029d48",
"Code": "НФ-00001234",
"Артикул": "SAL-PU-049",
"Description": "Батарея салютов Праздничный",
"НаименованиеПолное": "Батарея салютов 25 залпов 0.8\" Праздничный Пиротехника Урала",
"Вес": 2.5,
"Высота": 200,
"Ширина": 150,
"Длина": 250,
"Parent_Key": "0699197f-e960-11ed-919d-3cecefa69fd9",
"ЭтоНабор": false,
"ДополнительныеРеквизиты": [
{"Свойство": "b86639de-7d0c-11ee-919d-3cecefa69fd9", "Значение": "Пиротехника Урала"},
{"Свойство": "7c85ff2d-6890-11ee-919d-3cecefa69fd9", "Значение": 1.2},
{"Свойство": "9c4aafd8-e5ae-11ed-919d-3cecefa69fd9", "Значение": 49},
{"Свойство": "9c4aafe3-e5ae-11ed-919d-3cecefa69fd9", "Значение": 50}
]
}
Результат в PIM (pim_products):
{
"article": "SAL-PU-049",
"code_1c": "НФ-00001234",
"ref_key_1c": "b12e7ca3-29cb-11ef-8279-00155d029d48",
"name": "Батарея салютов \"Праздничный\" 30мм 49 залпов",
"name_short": "Батарея салютов Праздничный",
"brand": "Пиротехника Урала",
"category": "Батареи салютов",
"product_type": "simple",
"weight_kg": 2.500,
"height_mm": 200,
"width_mm": 150,
"length_mm": 250,
"is_bundle": false
}
Результат в PIM (pim_pirotehnika):
{
"article": "SAL-PU-049",
"salute_type": "батарея",
"commercial_name": "Праздничный",
"caliber_inch": 1.2,
"caliber_mm": 30.48,
"calibers_text": "1.2\"",
"shots_count": 49,
"height_mm": 50000,
"is_combo": false,
"weight_kg": 2.500,
"dimensions": "250x150x200"
}
4.2 Алгоритм нормализации
async def normalize_1c_record(record: dict) -> dict:
"""Нормализовать данные из 1С в PIM формат"""
# Извлечь доп.реквизиты
dop_rekvizity = record.get('ДополнительныеРеквизиты', [])
# Маппинг GUID → значения
brand = get_dop_rekvizit(dop_rekvizity, 'b86639de-7d0c-11ee-919d-3cecefa69fd9')
caliber_inch = get_dop_rekvizit_decimal(dop_rekvizity, '7c85ff2d-6890-11ee-919d-3cecefa69fd9')
shots_count = get_dop_rekvizit_int(dop_rekvizity, '9c4aafd8-e5ae-11ed-919d-3cecefa69fd9')
# Вычисления
caliber_mm = caliber_inch * Decimal('25.4') if caliber_inch else None
# Категория из справочника
category = get_category_name(record['Parent_Key'])
# Salute type из маппинга
salute_type = CATEGORY_TO_SALUTE_TYPE.get(category, 'unknown')
return {
# pim_products
'article': record['Артикул'],
'code_1c': record['Code'],
'ref_key_1c': record['Ref_Key'],
'name': record['НаименованиеПолное'],
'name_short': record['Description'],
'brand': brand,
'category': category,
'product_type': 'bundle' if record.get('ЭтоНабор') else 'simple',
'weight_kg': record.get('Вес'),
'height_mm': record.get('Высота'),
'width_mm': record.get('Ширина'),
'length_mm': record.get('Длина'),
'is_bundle': record.get('ЭтоНабор', False),
# pim_pirotehnika
'salute_type': salute_type,
'caliber_inch': caliber_inch,
'caliber_mm': caliber_mm,
'shots_count': shots_count,
}
Версия: 2.0.0
Дата: 2025-12-25