Поставщик премиальных кормов для животных ведёт сайт-витрину на нескольких европейских языках. Описания товаров сильно пересекаются между позициями, и любая правка превращалась в квест: найти все места, где используется тот же текст, исправить каждое, повторить на каждом языке. Мы разбили тексты на атомарные фрагменты, настроили их хранение в 1С — и теперь одна правка мгновенно обновляет все описания на всех языках. Прототип собрали за несколько часов, а всё решение обошлось около 100 000 рублей.
С какой проблемой столкнулись
Описание каждого корма — это подробный текст: назначение, состав, особенности. Проблема в том, что эти тексты между разными позициями пересекаются очень сильно. Один корм отличается от другого добавкой в составе — значит, его описание полностью копирует предыдущее плюс абзац про эту добавку. Другой корм — тот же состав, но для других пород. И так по всему ассортименту: полностью идентичных описаний почти нет, но общих блоков — большинство.
Теперь умножьте это на несколько языков. Каждое описание нужно перевести, а каждый перевод — выверить.
А теперь представьте, что в составе одного ингредиента поменялась формулировка. Нужно найти все описания, где этот ингредиент упоминается. Исправить в каждом. Потом найти переводы каждого из этих описаний. Исправить в каждом переводе. И нигде не ошибиться, нигде не забыть — потому что продукция позиционируется как премиальная, и расхождения между языковыми версиями или орфографические ошибки здесь недопустимы.
На практике при любом редактировании проблема нарастала лавинообразно. Какое бы качество ни было достигнуто изначально, после нескольких циклов правок неизбежно появлялись рассинхроны: в одном месте исправили, в другом — забыли.
Нужно было организовать хранение и редактирование описаний так, чтобы одна правка автоматически применялась везде — на всех товарах и на всех языках. При этом данные должны продолжать уходить на сайт через стандартный обмен.
Как решали
Раз обмен с сайтом всё равно настроен, логично было хранить тексты на стороне 1С, а не разделять между двумя системами. Но просто перенести полные описания в карточки товаров — это та же проблема, только в другом месте. Правка по-прежнему требовала бы ручного повторения.
Техлид проекта нашёл другой подход. Если посмотреть на все описания разом, видно, что они состоят из одних и тех же блоков: вот текст про назначение, вот про конкретный ингредиент, вот про биодобавки. Блоки повторяются от товара к товару в разных комбинациях. Значит, можно разобрать описания на минимальные фрагменты — «атомы» — и хранить каждый в одном экземпляре. Описание товара тогда превращается не в текст, а в набор ссылок: этот атом + этот + этот. Меняем атом — меняются все описания, где он задействован.
Базовый прототип, который подтвердил работоспособность идеи, был собран за несколько часов. После этого за два-три дня сделали полноценное рабочее место для редактирования текстов.
В 1С хранится только чистый текст, без вёрстки — оформление применяется уже на стороне сайта. Каждый атом переведён на все нужные языки. Ведётся полная история изменений: можно посмотреть, что менялось, сравнить версии, при необходимости откатиться. Всё это — стандартные механизмы платформы, без тяжёлых доработок.
Как это устроено в 1С
Этот раздел — для тех, кому интересны детали реализации. Если вам важнее результат — можно сразу перейти к разделу «Сроки и стоимость».
Атомы текстов хранятся через механизм дополнительных сведений с иерархией. Структура трёхуровневая: на первом уровне — тематический блок (например, «Назначение корма» или «Состав»), на втором — конкретный вариант («Для собак крупных пород», «Для кошек», «Говядина», «Курятина»), на третьем — языковая версия (ru, en, fr, de и так далее).
Описание товара задаётся через дополнительные свойства: в карточке товара набор ссылок указывает на нужные атомы.
Например, для корма для собак крупных пород из говядины и курятины: свойство «Назначение» ссылается на атом «Для собак крупных пород», «Элемент состава 1» — на «Говядина», «Элемент состава 2» — на «Курятина», а «Биодобавки» остаётся пустым.
Для корма для кошек из рыбы с биодобавками набор другой: «Назначение» — «Для кошек», «Элемент состава 1» — «Рыба», а «Биодобавки» — «С добавками».
Обмен с сайтом менять не пришлось. Стандартный модуль обмена 1С с Битрикс умеет выгружать дополнительные реквизиты — этого оказалось достаточно. На стороне сайта данные собираются в готовое описание и оборачиваются в нужную вёрстку.
Типовой интерфейс дополнительных сведений в 1С рабочий, но для постоянной работы с текстами не самый удобный. Поэтому поверх типового хранения мы добавили отдельное рабочее место для редактирования — оно заточено под работу с текстовыми фрагментами и переводами. На первом этапе потребовалось обучение контент-менеджера, но сам принцип быстро становится понятен: редактируешь фрагмент — он обновляется везде.
Сроки и стоимость
Прежде чем настраивать систему, нужно подготовить контент: разобрать существующие описания, выявить повторяющиеся блоки, выстроить структуру атомов. В данном проекте эту работу выполнял клиент своими силами — она заняла две-три недели. При необходимости мы можем помочь с этим этапом. Объём зависит от количества товаров и степени пересечения текстов.
Само техническое решение родилось быстро. Базовый прототип — за несколько часов. Рабочее место для редактирования текстов — ещё за два-три дня. Обмен с сайтом, хранение, версионирование — всё это уже было в 1С, дорабатывать не пришлось.
По текущему прайсу стоимость разработки составила около 100 000 рублей. Для сравнения: заказная разработка аналогичного функционала с нуля — собственный модуль управления контентом с мультиязычностью и версионированием — обошлась бы в разы дороже. Мы нашли способ решить задачу типовыми средствами платформы, и это напрямую отразилось на стоимости.
Что получилось
Рассинхроны между описаниями и между языковыми версиями стали невозможны — не потому, что кто-то стал внимательнее, а потому, что сама архитектура хранения их исключает. Когда понадобилось обновить описание ингредиента, правку внесли в одном месте — и она мгновенно появилась во всех товарах на всех языках.
Когда подходит такое решение
Подход с атомарными текстами полезен не только для мультиязычных каталогов. Он пригодится везде, где описания товаров пересекаются: одна линейка в разных фасовках, один и тот же состав с вариациями, общие блоки «о производителе» или «условия хранения». Мультиязычность усиливает эффект, но и без неё вы перестанете тратить время на ручную синхронизацию текстов.
Если вы работаете в 1С и сталкиваетесь с тем, что правки в описаниях «теряются» или занимают непропорционально много времени — напишите нам. Разберёмся в вашей ситуации и предложим решение.