Описание одной интеграции 1С и Битрикс, и почему я не рекомендую своим клиентам использовать такую интеграцию

Сроду такого не было, и опять то же самое. В.С. Черномырдин.

Я уже говорил об обмене данными между программными продуктами семейства 1С и Битрикс-сайтами в статье "Интеграция программного обеспечения. Описание процесса от бизнес консультанта". Но тогда я рассказал исключительно об общих принципах работы. В другой статье я написал о проблемах 1С и Битрикса. Сегодня я постараюсь не просто описать проблему интеграции сайтов на Битрикс и программных продуктов 1С, но расскажу подробно о возможных «подводных камнях», с которыми сталкиваются специалисты, опишу конкретные проблемы, а также возможные пути их решения. Я уже говорил и не один раз, что программные продукты семейства 1С отличаются большим числом багов, требуют регулярных обновлений, но после их установки очень часто приходится заново настраивать работу конфигурации, а также все плагины, надстройки и обмен данными с другими компонентами, программами, системами.

Именно с такой проблемой ко мне обратился не так давно клиент, представитель веб-студии. Вот так выглядело его предложение о сотрудничестве:

Здравствуйте! Нужно срочно доделать синхронизацию сайта и 1С, точнее – выполнить выгрузку товаров, цен и фото из 1С 8.3 (последняя версия) на сайт. Помощь нужна срочно, если вы свободны, напишите мне, как с вами связаться, чтобы рассказать о проблеме подробнее. Заранее благодарен

Как и многие коллеги, я также зарегистрирован на фриланс-биржах, а потому подобные запросы меня не удивляют. Время у меня было свободное. И хотя пришел этот запрос далеко за полночь, я все же решил взяться за эту задачу. Как я и предполагал, сайт оказался на Битрикс. Заказчик предоставил мне удаленный доступ, обрисовал суть проблемы и я приступил к работе. Итак, исходные данные следующие:

  1. Имеется 1С Управления торговли. По словам клиента – последняя версия
  2. Перестала работать интеграция. Сразу после обновлений.
  3. Клиент утверждал, что обновился полностью.
  4. Битрикс последней версии
  5. Что делать?! Все пропало

Шаг первый. Версия конфигурации

Первое, что я делаю всегда, это проверяю информацию, которую мне предоставляет клиент. А в случае с 1С – обязательно самостоятельно проверяю текущую версию. В данном случае релиз действующей конфигурации оказался 11.1.9.5. Это означало, что конфигурация не обновилась, версия не является последней. Естественно, что я сообщил об этой ошибке клиенту, после чего самостоятельно установил обновления. Конфигурация обновилась. Интеграция так и не заработала.При работе с 1С всегда перепроверяйте версию платформы и конфигурации! Это очень важно! Напомню, что в Управлении Торговлей 11 заявлен стандартный модуль обмена данными между УТ.11 и Битрикс. Это стандартный встроенный модуль, который должен работать без каких-то дополнительных настроек. Но в моем случае после обновлений он так и не заработал. При запуске обмена просто не происходило ничего.

Шаг второй. Проверка платформы

Тогда я проверил релиз платформы. В принципе, его стоит проверять сразу. Лично я советую обязательно всегда самостоятельно проверять релизы и платформы, и конфигурации. Это настолько важно, что я не боюсь написать об этом повторно. Проверяйте актуальность всех релизов самостоятельно! В моем случае с платформой было все в порядке, релиз оказался последним, номер 8.3.5.1248, который вышел 31.10.14. (кстати пока я писал эту статью вышло еще одно обновление платформы ). Итак, версии платформы и конфигурации в порядке, но обмен не работает. Казалось бы, дальше нужно просто проверить модуль на стороне Битрикс. Но, как показала практика, для того, чтобы узнать, какой именно модуль поддерживает обмен со стороны Битрикс, необходимо пройти целый квест. Но не будем забегать вперед. Как и обещал, я рассказываю подробно и по порядку, что и как я делал, и какие решения нашел.

Шаг третий. Проверяем целостность базы данных

Так, первым делом я отправился на сайт Битрикс. Я перешел на следующую страницу: http://1c.1c-bitrix.ru/ecommerce/download.php Из таблицы, которая там представлена, я сделал вывод, что моя конфигурация точно соответствует версии модуля обмена. Как и многие коллеги в подобной ситуации, я обратился за помощью к Интернету. На одном из форумов (mista.ru) я нашел информацию о том, что если не идет какой-то из видов обмена, обязательно нужно исключить из перечня возможных проблем нарушение целостности структуры базы данных. Для того чтобы выполнить это действие, в 1С существует встроенный инструмент: тестирование и исправление базы данных. Итак, программа 1С провела большую и достаточно длительную работу, так как в данном случае база данных была на файловой основе, было исправлено много ошибок. Общее время работы тестирования и исправления – 40 минут. Ждать, конечно, пришлось долго. Но все когда-то оканчивается. И вот, после тестирования, мы с надеждой на лучшее запускаем обмен. Снова нет никаких результатов.

Шаг четвертый. Специальный модуль: поможет ли альтернативное решение?

После того, как не помогла и проверка базы данных, я вспомнил о том, что также прочитал на одном из форумов, что кто-то из Битрикс-специалистов устанавливал специальный модуль обмена и всем его рекомендовал. Ну, что ж. Я также отправился в интернет, искать этот модуль и выяснять, зачем он нужен. Нашел я только один вариант релиза этого модуля, предназначенный для версии 4.0.5.1. Я подумал, решил все же попробовать и скачал этот модуль интеграции. При скачивании я заметил, что версия этого файла у меня на сайте далеко не первая. Мой файл после скачивания назывался так: 4.0.5.1_ UT_11.1.2(3).zip Таким образом, оказывается, я как минимум четвертый человек, который пытался решить эту проблему и скачивал этот модуль. Далее я все же установил этот модуль. В архиве к нему идет небольшая брошюра, что оказалось очень кстати. Но самая версия файла мне не давала покоя. И я решил спросить у клиента, какой я по счету? В ответ услышал, что я уже 5 или 6 специалист, который пытается решить эту проблему. У меня уже появился спортивный интерес. Обратите внимание: уже прошло более часа, как я начал решать, казалось бы, простую задачу, но проблема до сих пор не только не была решена, но и пути ее решения все еще не были определены. Но все же я установил модуль, который уже устанавливали другие специалисты, чтобы посмотреть, что произойдет с выгрузкой. Первое, что я увидел, это явные отличия модуля от стандартного варианта обмена от 1С, который должен работать. Очень неудобно было работать с непривычным интерфейсом.

Кроме того, все эти действия не принесли никакой пользы.

Проверяйте версию модуля обмена данных 1С и Битрикс. Их может быть несколько одновременно: несколько версий, а также несколько разных конфигураций. После попыток установить дополнительный модуль, я обратил внимание на такую надпись вверху экрана:

После прочтения этой надписи, я думал, что это и есть последняя, самая новая конфигурация. Но это было моей ошибкой. Только позже я разобрался, что есть более свежая версия и где ее скачать. Кроме того, очень внимательно нужно следить за выбором модуля. Лично я поначалу запутался в этих модулях для России:

В общем, что я получил в итоге всех действий и проверок:

  • Есть обмен стандартный, который выходит в 1С. Он не работает.
  • Есть модуль обмена данных «Для России». Он также не заработал.
  • Внизу есть еще один модуль обмена. Но и он не работает.

Вот такой вот фокус получается. Много разных модулей, но работать не желает ни один. Что меня еще сбило с толку. Если вы нажмете кнопку «Требования 1С», то увидите такую таблицу: 1c.1c-bitrix.ru/ecommerce/require_1C.php

Здесь также приходится угадывать, что и как скачивать.

Новый модуль обмена: особенности установки

Итак, я все же скачал новый модуль обмена и внедрил его в Управление Торговли. Естественно, при этом я снял конфигурацию с поддержки. Как ни странно, но факт: Казалось бы, дополнения созданы специалистами 1С для программных продуктов 1С, но с поддержки конфигурацию снимать необходимо. Для пользователя, это значит, что обновления не будут проходить стандартным методом. При этом на сайте и в документации присутствуют предупреждения, которые могут даже испугать. Вам не забывают напомнить, что в случае какой-либо вашей ошибки, конфигурация вообще может перестать работать. Не забывайте делать Backup! Обязательно при любых изменениях делайте бэкапы, так как конфигурация может перестать работать на любом из этапов: при обновлении, во время внедрения модуля, во время тестирования выгрузки. В общем, лучше получить лишний Backup, чем лишние проблемы. Итак, я внедрил новый модуль, все проверил, все сделал аккуратно и точно. В результате – обмен не работает. Появляется следующая ошибка:

Невосстановимая ошибка Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm: по причине: Ошибка СУБД: Ошибка SQL: Несовместимые типы в выражении по причине: Ошибка SQL: Несовместимые типы в выражении

Что это значит? О чем говорит данная информация? Мне было не понятно. Для начала я решил просмотреть отладчик. На поиск этой ошибки я потратил около получаса и не нашел вообще ничего. Честно говоря, тогда у меня закрались сомнения, что я вообще справлюсь с поставленной задачей. Я пошел искать больше информации по теме. И нашел форум, на котором наткнулся на такую ветку: http://dev.1c-bitrix.ru/community/forums/forum26/topic19114/?PAGEN_1=65 Информацию об ошибке я благополучно нашел на 65 странице темы.

Ответ модераторов был следующим. Они давали ссылку на другую тему, при этом поясняли, что там уже есть решение этой проблемы, а также можно найти много интересного по этой теме.

Конечно, я перешел по ссылке от модераторов, и там уже узнал, что проблема заключается в платформе. Разработчик об этом писал следующее:

Наш модуль обмена сейчас несовместим с платформой 8.3.5.1248. В этой платформе, похоже, изменили что-то нехорошее. Для того, чтобы модуль заработал — нужно заменить строчки кода: |КОГДА ВариантыКомплектацииНоменклатурыТовары.Характеристика ЕСТЬ NULL |ТОГДА """" На |КОГДА ВариантыКомплектацииНоменклатурыТовары.Характеристика ЕСТЬ NULL |ТОГДА НЕОПРЕДЕЛЕНО В следующей версии модуля будут внесены соответствующие изменения.

Что это значит?

Администратор сайта 1С Битрикс практически признал, что ошибка находится в платформе 1С. После того, как я нашел эту информацию, ошибка была исправлена и обмен, в общем, заработал. Но конкретно все — нет. При выгрузке мы обнаружили, что фото и номенклатура передаются, а цены – нет. К счастью, что делать с этой проблемой, я уже знал. На стороне Битрикс, хоть он, казалось бы, и не работает при обмене, надо провести одно изменение, а именно – в справочнике с ценами поставить галочку «Доступен внешним пользователям». Также странная недоработка, я считаю. Почему-то об этом нюансе в документации не написано ни слова. И в свое время я решение этой проблемы искал аналогичным методом, т.е. на ощупь.

Что получилось в итоге?

Задача была решена успешно. Мы с клиентом все настроили, обмен данными начал работать так, как и должен. Мы отработали со стороны 1С, специалист по Битрикс настроил работу с данными со своей стороны. В результате потребовалось 3 часа напряженной работы.

На что было потрачено это время?

Каждое действие требует определенных временных затрат. Обновления занимают от 10 до 15 минут, индексация и исправление базы данных – 40 минут, каждая попытка обмена – от 15 до 18 минут (если запускать полный обмен). В результате мы потратили очень много времени для того, чтобы заново настроить то, что прекрасно работало перед обновлением конфигурации и платформы 1С.

Выводы

На собственном опыте, а также на основе внимательного чтения той самой ветки форума с проблемами интеграции и их решениями, я сделал такие выводы:

  1. Битрикс – никак или плохо взаимодействует с компанией 1С. Надпись 1С Битрикс ничего не значит, кроме того, что у этих программных продуктов общие владельцы.
  2. Настройка, казалось бы, типового обмена требует недюжинных усилий, при этом всегда есть риск напороться на ошибки с непредсказуемой стороны. Т.е. при обновлении нужно очень четко понимать, какая используется конфигурация, платформа, какая версия модуля применяется, а также надо проверять, нет ли ошибок для этого модуля.

После того, как я разобрался со всеми нюансами, которые перечислил в п.2, я сумел справиться с проблемой восстановления работы обмена данных.

И еще немного интересного из моего личного опыта

Сейчас я работаю над другим проектом, и столкнулся также с любопытной ситуацией. Я и специалисты, с которыми я сотрудничаю, отвечаем за интеграцию сайта со стороны 1С, а на стороне Битрикс работает сторонний специалист. В принципе, мы с самого начала договаривались о том, что они напишут нам отдельную загрузку для 1С. Но в процессе работы специалисты Битрикс нам сообщили, что выполнить эту договоренность невозможно и предложили использовать типовой обмен. Что получается в итоге: Нам нужно выгружать доработанные нашими силами справочники и данные в типовом виде. Таким образом, имеем явное противоречие. Конечно, проблему мы обязательно решим и в этот раз, и в другой. Здесь важно понимать, что подобные накладки и противоречия – постоянные спутники каждого, кто занимается интеграцией 1С и Битрикс.

Если вы решились применять типовой обмен

Первое, что вам нужно понимать, что обмен, который вам предлагают, универсален, а потому сам модуль очень сложен. Кроме того, даже на этой странице v8.1c.ru/edi/edi_stnd/90/92.htm вы увидите, что имеется несколько версий этого обмена, причем, они регулярно меняются. А для полноценной настройки работы подобного обмена и, тем более, для доработки его под ваши потребности, вам придется очень четко понимать, как он работает. Для примера: Формат выгружаемых данных из УТ 11.1.9.56

Формат выгружаемых данных из УТ 11.1.9.56 с помощью модуля от Битрикс:

То есть имеем несогласованность форматов выгрузки от 1С и Битрикса для одной и той же версии платформы и конфигурации. Взаимодействие продуктов 1С и 1С-Битрикс реализуется на базе процедур двунаправленного обмена данными. Обмен данными выполняется с использованием основанного на XML открытого Стандарта обмена коммерческой информацией – CommerceML 2.0. Если вы почитаете, что представляет собой CommerceML 2.0, вы так же, как и я, поразитесь тому, насколько этот стандарт сложен по сравнению с другими. Даже просто описание, т.е. сам файл схемы описаний в формате txt занимает 107 килобайт! И любая ваша ошибка, скорей всего, окончится тем, что обмен вообще перестанет работать. При использовании типового обмена вы вынуждены «подсаживать» и себя и клиента на постоянный мониторинг изменений, которые происходят как на стороне 1С, так и на стороне Битрикс. При каждом обновлении вы рискуете потерять все изменения, которые вносили в обмен. В итоге, вы получите сложный, очень «глючный» и работающий практически независимо от вас механизм. А если к этому добавить еще и постоянные обновления 1С и Битрикс, то вместо работающего обмена вас ожидает постоянная «головная боль».


Как делать интеграцию?

Я уже давал этот совет и дам еще раз: обмен нужно писать самому. Кроме интеграционных механизмов, у вас может возникнуть и другая проблема: сам модуль опирается на определенным образом заполненные данные. И эти правила также могут меняться и регулярно меняются. Итак, в процессе «борьбы с обновлениями» вы справились с платформой, с модулем, а потом натыкаетесь еще и на ошибку, которая идет от неверного формата данных. Оказывается, заполнять их также надо определенным, причем, неявным образом. Вспомните, как я в своем примере указывал необходимость поставить «галочку» на стороне 1С Битрикс, о которой я, к счастью, знал. А иначе бы время работы над настройкой обмена еще больше затянулось бы. И нигде в документации об этой самой «галочке» не сказано ни слова! В принципе, если вы используете типовой обмен, то стоит прислушаться к тому, что говорит сам 1С Битрикс словами администратора: – не обновляйтесь (в то время как 1с говорит – обновляйтесь)

Если вы хотите все-таки использовать типовой модуль, последовательность ваших действий должна быть такой:

  1. Проверили версию платформу
  2. Проверили версию конфигурации
  3. Проверили версию модуля.
  4. Проверили все базы данных, убедились, что данные подхватываются.
  5. Проверили соответствие версий 1С Битрикс и программного продукта 1С.
  6. Проверили целостность баз данных, если они файловые.

Скорей всего, в процессе выполнения этих действий обнаружится ошибка. Кроме того, очень важно помнить: Ни в коем случае не дорабатывайте типовой обмен. При любых попытках доработки типового обмена вы сталкиваетесь с огромным числом проблем в будущем, с необходимостью изучать каждое обновление модуля обмена, и каждый раз вносить ваши доработки в новую версию заново. Как видите, интеграция программных продуктов 1С и сайтов Битрикс – занятие достаточно сложное, требующее внимательности, чаще всего, опыта, и даже он не всегда помогает. К сожалению, помощь по новым багам, которые достаточно стабильно приходят взамен старым, реально найти только на форумах. Именно по этой причине я предпочитаю писать обмен самостоятельно. Но если необходимость возникает, то и решение найдется (я надеюсь).