ImageCMS. Ошибка во время выгрузки заказов в 1С:Предприятие
Рубрика: Программирование -> Без рамки
Метки: cms | image.cms | soft | интернет магазины | программирование | советы | фейлы
Просмотров: 4831
Совсем недавно я рассказывал о выборе CMS для интернет магазина. Помимо рассмотрения определенных решений, в той заметке я поведал о негативном опыте, связанном с использованием ImageCMS. На этой CMS у меня остался один проект (он в стадии перевода на Diafan.CMS) и как назло сегодня с ним случилась проблема. Позвонил мой клиент и сообщил, что не может загрузить сформированные заказы из интернет магазина в «1С:Управление торговлей». Зная, что модуль выгрузки нам «допиливали» до работоспособного состояния уже на боевом сервере, я рискнул предположить, что проблема именно в нем. Оказалось, что я не ошибся.
Практически все популярные CMS, ориентированные на создание интернет магазинов, из коробки поддерживают обмен данными с конфигурациями 1С. Разработчики CMS поступают в большинстве случае правильно – не пытаются изобретать собственный механизм обмена, а используют формат CommerceML. Он хорошо документирован и со многими конфигурациями 1C поставляется обработка, позволяющая сразу же выгрузить данные на сайт (например, номенклатуру). Если производители CMS не поленились и реализовали в должном объеме поддержку этого формата, то обмен работает из коробки.
Разработчики ImageCMS не стали отступать от хороших традиций и снабдили свой продукт поддержкой CommerceML. Снабдить, то снабдили, но обработать элементарные ситуации, видимо забыли. Не буду вдаваться в нюансы реализации, скажу лишь, что разработчики не удосужились предусмотреть экранирование недопустимых для XML символов. Возможно, в новых версиях эту проблему исправили, но в 4-й она есть. Следовательно, у меня возникает вопрос: «Как пользователи этой системы терпели такую хрень целых 4 релиза?». Хорошо, быть может, большинство пользователей не пользуются обменом с 1С, но команду разработчиков ImageCMS это не оправдывает.
Думаю, все, кому хоть раз приходилось работать с форматом XML, знают, что его спецификация предусматривает список недопустимых символов, которые обязательно нужно экранировать. Например:
" => " © => © ® => ® ™ => ™ ? => € Ј => £ „ => „ “ => “ « => « » => » > => > < => < ≥ => ≥ ≤ => ≤ ≈ => ≈ ≠ => ≠ ≡ => ≡ § => § & => & ∞ => ∞
Если этого не делать, то правильные парсеры будут ругаться матом и отказываться от дальнейшего разбора таких файлов. Разработчики ImageCMS об этом явно не подумали или надеялись, что подобных ситуаций возникнуть не может.
Как окажется позже, мой клиент просто добавил в базу пару позиций, указав в наименовании символ кавычек и знак меньше (<). Это, на первый взгляд невинное действие, и стало виновником испорченной выгрузки. Файл с обменом, сформированный ImageCMS содержал недопустимые символы и 1С’ка напрочь отказывалась его обрабатывать.
Проблема решается просто
Вечером, вернувшись с работы, я принялся осматривать сформированный файл выгрузки. С помощью текстового редактора я заменил недопустимые XML символы и сразу проверил загрузку файла в 1С. Она прошла успешно. Мне ничего не осталось, как оперативно пропатчить файл сценария exchange.php (в нем реализована логика обмена):
$someProduct = str_replace("&", "&", $product->product_name);
$someProduct = str_replace('"', """, $someProduct);
…
Этот код заменяет недопустимые символы соответствующими мнемониками.
В сухом остатке
Понимаю, что проблема мелочная и для исправления (при наличии соответствующего опыта) требуется немного времени. Огорчает, что разработчики забивали на это в течение 4-х версий! А быть может, забивают и до сих пор.
В связи с этим у меня возникает резонный вопрос: «Почему их CMS столько стоит?». Супер качественная? Нет, баги есть и их много. Замечательна поддержка? Опять нет, в свое время мы с ней повоевали. 1С:Битрикс, NetCat стоят не намного дороже, но там таких откровенных фейлов нет. Я молчу о diafan, цена которого в два раза меньше, но работает он в разы стабильней и функциями совершенно не обделен. Спрашивается, из чего тогда складывается такая стоимость и как происходит пре-продакшн тестирование? На живых пользователях?
2014-04-10 в 06:17:27
К сожалению, из таких мелочей в результате и складывается мнение о продукте. У ImageCMS этих косяков просто нереально много. Работает все только с первого взгляда, а стоит копнуть глубже, сразу понимаешь весь масштаб рукожопости программистов. :)
2014-04-10 в 09:16:40
Никогда не забуду, как мы с тобой поймали первый косяк сразу после установки. Тогда была еще 3.ххх. Помнишь? Пароль админа подставлялся в базе дефолтный, а не введенный во время установки. Забавно было :-) Тогда мы думали, что на этом все проблемы кончаются. Увы, они только начинались.
2014-04-10 в 22:20:29
Помню, конечно же =) При этом следующий же нежданчик случился при попытке зайти на главную страницу свежеустановленной CMS: PHP Fatal error. Я был в шоке... ведь это был stable релиз! :-D
2014-04-10 в 22:21:42
И на каждом stable релизе возникала !stable херня :-)