При работе с современными интернет-магазинами мы часто сталкиваемся с необходимостью передавать объемные описания товаров, включающие технические характеристики, маркетинговые тексты и инструкции. Однако стандартные механизмы 1С:Управление торговлей 11.4 (УТ 11.4) иногда накладывают досадное ограничение в 1024 символа. Разберем подробно, почему возникает эта проблема и как ее решить, используя штатные инструменты и минимальные программные доработки.
Прежде всего, проанализируем ситуацию. Ограничение в 1024 знака не является фундаментальным лимитом базы данных 1С — платформа способна хранить строки неограниченной длины. Проблема кроется в одном из трех мест:
Строка фиксированной длины, система сама обрежет текст.ЗначенияРеквизитов, где по умолчанию установлено ограничение на длину значения.Лев(Текст, 1024) перед формированием XML-файла.Рассмотрим самый правильный и «чистый» способ. В 1С:УТ 11.4 карточка номенклатуры содержит специальный функционал для хранения описаний в формате HTML или простого текста. Эти данные хранятся в отдельной справочной таблице ПрисоединенныеФайлы и технически не имеют лимита в 1024 символа.
Разберем по шагам, как задействовать это поле:
Этот метод позволяет передавать тексты любого объема, сохраняя форматирование.
Если мы используем сторонний модуль интеграции, проблема часто заключается в том, что описание по ошибке передается как обычное свойство (доп. реквизит). Проанализируем структуру настройки модуля:
В настройках выгрузки товаров перейдем на вкладку «Настройка соответствия полей номенклатуры». Выясним, какое поле назначено источником для детального описания. Если там выбран Дополнительный реквизит, заменим его на Файл описания (хранилище). Это заставит систему обращаться к расширенному хранилищу данных НоменклатураПрисоединенныеФайлы, минуя строковые ограничения справочника.
Бывают ситуации, когда текст обрезается самой обработкой выгрузки. Если мы видим, что в файле import.xml описание обрезано ровно на 1024 символе, значит, нам необходимо вмешаться в код. Посмотрим на пример того, как это может выглядеть в общем модуле или обработке ОбменССайтом.
Нам нужно найти участок кода, отвечающий за формирование тега Описание. Часто там встречается подобная конструкция:
// Опасный участок кода, обрезающий данные
ЗначениеОписания = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОписаниеТовара, 1024)[0];
ЗаписатьXML(ЗаписьXML, "Описание", ЗначениеОписания);
Для решения задачи создадим Расширение конфигурации и перехватим процедуру формирования XML. Нам нужно заменить принудительную обрезку на передачу полной строки. Рассмотрим пример корректного кода в расширении:
&Вместо("СформироватьУзелОписание")
Процедура Ист_СформироватьУзелОписание(ТекстОписания, ЗаписьXML)
// Убираем Лев(Текст, 1024) и передаем строку целиком
Если ЗначениеЗаполнено(ТекстОписания) Тогда
ЗаписатьXML(ЗаписьXML, "Описание", ТекстОписания);
КонецЕсли;
КонецПроцедуры
Важно помнить, что при передаче слишком больших объемов текста размер XML-пакета может значительно вырасти. Проанализируем настройки сервера на стороне сайта: убедитесь, что параметры post_max_size и memory_limit в php.ini позволяют принимать файлы увеличенного размера.
Если по каким-то причинам мы не можем менять программный код или использовать штатное HTML-описание, применим метод разделения. Создадим несколько дополнительных реквизитов: Описание_Часть1, Описание_Часть2 и так далее. На стороне сайта в коде импорта необходимо будет реализовать функцию склеивания этих полей в одно.
Хотя этот метод кажется рабочим, мы рекомендуем использовать его только в крайнем случае, так как он усложняет администрирование данных и может привести к ошибкам при редактировании контента контент-менеджерами.
Мы выяснили, что ограничение в 1024 символа — это чаще всего вопрос настройки модуля обмена или выбора неверного поля в 1С. Для профессиональной работы с контентом следует использовать хранилище присоединенных файлов и передавать данные через тег Описание в формате HTML. Это гарантирует отсутствие потерь данных и корректное отображение товара в интернет-магазине.