790th
30.09.15 — 09:40
Вопрос: Почему не принимает данные, сформированные в настройке обмена (но при этом принимает если данные сформировать обработкой обмена)?
Создал правила выгрузки одного элементарного справочника из УТ 10.3.16.1 (обычное приложение, платформа 8.2.19.102) в Самописную (управляемое приложение, платформа 8.3.6.2152)
Настроил в УТ узлы и планы обмена, сделал настройку обмена данными и выгрузил. В файл данных вошло два элемента справочника.
Привожу содержание «ошибочного» XML:
<?xml version=»1.0″ encoding=»UTF-8″?>
<ФайлОбмена ВерсияФормата=»2.0″ ДатаВыгрузки=»2015-09-30T09:03:50″ ИмяКонфигурацииИсточника=»УправлениеТорговлей» ИмяКонфигурацииПриемника=»Конфигурация» ИдПравилКонвертации=»fc7e8361-6fbe-42bb-90d4-6ee69b6c1794″ Комментарий=»»>
<ПравилаОбмена>
<ВерсияФормата>2.01</ВерсияФормата>
<Ид>fc7e8361-6fbe-42bb-90d4-6ee69b6c1794</Ид>
<Наименование>СервисДляCRM —> CRM</Наименование>
<ДатаВремяСоздания>2015-09-28T12:18:38</ДатаВремяСоздания>
<Источник>УправлениеТорговлей</Источник>
<Приемник>Конфигурация</Приемник>
<Параметры/>
<Обработки/>
<ПравилаКонвертацииОбъектов>
<Правило>
<Код>Направления</Код>
<Источник>СправочникСсылка.Айсберг_Направления</Источник>
<Приемник>СправочникСсылка.Направления</Приемник>
</Правило>
</ПравилаКонвертацииОбъектов>
<ПравилаОчисткиДанных/>
<Алгоритмы/>
<Запросы/>
</ПравилаОбмена>
<ИнформацияОТипахДанных>
<ТипДанных Имя=»СправочникСсылка.Направления»>
<Код>Строка</Код>
<ПометкаУдаления>Булево</ПометкаУдаления>
<Наименование>Строка</Наименование>
<Родитель>СправочникСсылка.Направления</Родитель>
<ЭтоГруппа>Булево</ЭтоГруппа>
</ТипДанных>
</ИнформацияОТипахДанных>
<ДанныеПоОбмену ПланОбмена=»МоскваCRM» Кому=»CRM» ОтКого=»Москва» НомерИсходящегоСообщения=»5″ НомерВходящегоСообщения=»0″/>
<ДанныеПоФоновомуОбмену ПланОбмена=»» Кому=»0″ ОтКого=»0″ ДобавлениеОбъектовИзФоновогоОбмена=»0″ КоличествоОбъектовДляФоновогоОбмена=»500″ ПереданоОбъектовФоновогоОбмена=»0″/>
<Объект Нпп=»1″ Тип=»СправочникСсылка.Направления» ИмяПравила=»Направления»><Ссылка Нпп=»1″>
<Свойство Имя=»{КлючПоискаВИБИсточнике}»>
<Значение>{«#»,0bd0deec-1479-4cdf-ae4b-f10e71f3205a,111:9ed000248cc4a20411e26f88824de171}</Значение>
</Свойство>
<Свойство Имя=»{ИмяТипаВИБИсточнике}»>
<Значение>СправочникСсылка.Айсберг_Направления</Значение>
</Свойство>
<Свойство Имя=»{ИмяТипаВИБПриемнике}»>
<Значение>СправочникСсылка.Направления</Значение>
</Свойство>
<Свойство Имя=»Код»>
<Значение>000000013</Значение>
</Свойство>
</Ссылка>
<Свойство Имя=»Наименование»>
<Значение>СВЧ</Значение>
</Свойство>
<Свойство Имя=»ПометкаУдаления»>
<Значение>false</Значение>
</Свойство>
<Свойство Имя=»Родитель»/>
<Свойство Имя=»ЭтоГруппа»>
<Значение>false</Значение>
</Свойство>
</Объект>
<Объект Нпп=»2″ Тип=»СправочникСсылка.Направления» ИмяПравила=»Направления»><Ссылка Нпп=»2″>
<Свойство Имя=»{КлючПоискаВИБИсточнике}»>
<Значение>{«#»,0bd0deec-1479-4cdf-ae4b-f10e71f3205a,111:9ed000248cc4a20411e26f88824de173}</Значение>
</Свойство>
<Свойство Имя=»{ИмяТипаВИБИсточнике}»>
<Значение>СправочникСсылка.Айсберг_Направления</Значение>
</Свойство>
<Свойство Имя=»{ИмяТипаВИБПриемнике}»>
<Значение>СправочникСсылка.Направления</Значение>
</Свойство>
<Свойство Имя=»Код»>
<Значение>000000014</Значение>
</Свойство>
</Ссылка>
<Свойство Имя=»Наименование»>
<Значение>СМ</Значение>
</Свойство>
<Свойство Имя=»ПометкаУдаления»>
<Значение>false</Значение>
</Свойство>
<Свойство Имя=»Родитель»/>
<Свойство Имя=»ЭтоГруппа»>
<Значение>false</Значение>
</Свойство>
</Объект>
</ФайлОбмена>
Для загрузки использую обработку из поставки КД 2.1.8.2: V8Exchan83.epf в режиме работы На сервере.
Получаю ошибки:
Ошибка формата файла обмена
ИмяУзла = ДанныеПоОбмену
…
Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5256)}: Ошибка при вызове метода контекста (Выполнить): {(1, 68)}: Синтаксическая ошибка «=»
ВЫБРАТЬ Ссылка ИЗ Справочник.Направления ГДЕ {ИмяТипаВИБИсточнике} <<?>>= &{ИмяТипаВИБИсточнике} И Код = &Код И {ИмяТипаВИБПриемнике} = &{ИмяТипаВИБПриемнике} И {КлючПоискаВИБИсточнике} = &{КлючПоискаВИБИсточнике}
…
Загружено объектов: 0
(см. фото) https://yadi.sk/i/LwzcPBr-jQxMw
НО! это при выгрузке из УТ через настройку обмена. Ошибка исчезает если выгружать данные обработкой из поставки КД: V8Exchan82.epf (82 не смотря на то что платформа 83, т.к. в режиме Обычного приложения).
Привожу содержание «правильного» XML:
<?xml version=»1.0″ encoding=»UTF-8″?>
<ФайлОбмена ВерсияФормата=»2.0″ ДатаВыгрузки=»2015-09-30T09:26:42″ НачалоПериодаВыгрузки=»0001-01-01T00:00:00″ ОкончаниеПериодаВыгрузки=»0001-01-01T00:00:00″ ИмяКонфигурацииИсточника=»УправлениеТорговлей» ИмяКонфигурацииПриемника=»Конфигурация» ИдПравилКонвертации=»fc7e8361-6fbe-42bb-90d4-6ee69b6c1794″ Комментарий=»»>
<ПравилаОбмена>
<ВерсияФормата>2.01</ВерсияФормата>
<Ид>fc7e8361-6fbe-42bb-90d4-6ee69b6c1794</Ид>
<Наименование>СервисДляCRM —> CRM</Наименование>
<ДатаВремяСоздания>2015-09-28T12:18:38</ДатаВремяСоздания>
<Источник>УправлениеТорговлей</Источник>
<Приемник>Конфигурация</Приемник>
<Параметры/>
<Обработки/>
<ПравилаКонвертацииОбъектов>
<Правило>
<Код>Направления</Код>
<Источник>СправочникСсылка.Айсберг_Направления</Источник>
<Приемник>СправочникСсылка.Направления</Приемник>
</Правило>
</ПравилаКонвертацииОбъектов>
<ПравилаОчисткиДанных/>
<Алгоритмы/>
<Запросы/>
</ПравилаОбмена>
<Объект Нпп=»1″ Тип=»СправочникСсылка.Направления» ИмяПравила=»Направления»><Ссылка Нпп=»1″>
<Свойство Имя=»Код» Тип=»Строка»>
<Значение>000000013</Значение>
</Свойство>
</Ссылка>
<Свойство Имя=»Наименование» Тип=»Строка»>
<Значение>СВЧ</Значение>
</Свойство>
<Свойство Имя=»ПометкаУдаления» Тип=»Булево»>
<Значение>false</Значение>
</Свойство><Свойство Имя=»Родитель» Тип=»СправочникСсылка.Направления»>
<Пусто/>
</Свойство>
<Свойство Имя=»ЭтоГруппа» Тип=»Булево»>
<Значение>false</Значение>
</Свойство>
</Объект>
<Объект Нпп=»2″ Тип=»СправочникСсылка.Направления» ИмяПравила=»Направления»><Ссылка Нпп=»2″>
<Свойство Имя=»Код» Тип=»Строка»>
<Значение>000000014</Значение>
</Свойство>
</Ссылка>
<Свойство Имя=»Наименование» Тип=»Строка»>
<Значение>СМ</Значение>
</Свойство>
<Свойство Имя=»ПометкаУдаления» Тип=»Булево»>
<Значение>false</Значение>
</Свойство><Свойство Имя=»Родитель» Тип=»СправочникСсылка.Направления»>
<Пусто/>
</Свойство>
<Свойство Имя=»ЭтоГруппа» Тип=»Булево»>
<Значение>false</Значение>
</Свойство>
</Объект>
</ФайлОбмена>
И еще в Управляемом приложении не позволяет сформировать модуль отладки загрузки. При нажатии на любую из указанных кнопок ничего не происходит (см. фото) https://yadi.sk/i/pk8RMDXxjQyCm
790th
7 — 30.09.15 — 11:41
Правила от КД 2.1.8.2
Удалось избавиться от главной ошибки
«Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5255)}: Ошибка при вызове метода контекста (Выполнить): {(1, 68)}: Синтаксическая ошибка «=»
ВЫБРАТЬ Ссылка ИЗ Справочник.Направления ГДЕ {ИмяТипаВИБИсточнике} <<?>>= &{ИмяТипаВИБИсточнике} И Код = &Код И {ИмяТипаВИБПриемнике} = &{ИмяТипаВИБПриемнике} И {КлючПоискаВИБИсточнике} = &{КлючПоискаВИБИсточнике}»
Таким образом вставил кусок из обработки из УТ. Поместил в обработку Приемника (коммент //Юрасов):
Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта.НайтиЭлементЗапросом(…)
…
// не по всем параметрам можно искать
Если ИмяПараметра = «{УникальныйИдентификатор}»
ИЛИ ИмяПараметра = «{ИмяПредопределенногоЭлемента}»
//Юрасов++
ИЛИ ИмяПараметра = «{КлючПоискаВИБИсточнике}»
ИЛИ ИмяПараметра = «{КлючПоискаВИБПриемнике}»
ИЛИ ИмяПараметра = «{ИмяТипаВИБИсточнике}»
ИЛИ ИмяПараметра = «{ИмяТипаВИБПриемнике}» Тогда
//Юрасов—
Продолжить;
КонецЕсли;
Теперь загружает данные, хоть и остались ошибки:
Ошибка формата файла обмена
ИмяУзла = ДанныеПоОбмену
…
Ошибка формата файла обмена
ИмяУзла = ДанныеПоФоновомуОбмену
790th
8 — 30.09.15 — 13:09
Эти две ошибки тоже убрал. Пришлось перенести еще один кусок в приемник:
Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта.ПроизвестиЧтениеДанных(…)
…
ИначеЕсли (ИмяУзла = «ФайлОбмена») И (ФайлОбмена.ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда
//Юрасов++
ИначеЕсли ИмяУзла = «ДанныеПоОбмену» Тогда
// обработка удаления объекта из информационной базы
ИмяПланаОбмена = одАтрибут(ФайлОбмена, одТипСтрока, «ПланОбмена»);
КодКому = одАтрибут(ФайлОбмена, одТипСтрока, «Кому»);
КодОтКого = одАтрибут(ФайлОбмена, одТипСтрока, «ОтКого»);
УзелОбменаЗагрузкаДанных = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодОтКого);
Если Не ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда
ВызватьИсключение «Не найден узел обмена для загрузки данных. План обмена: » + ИмяПланаОбмена + «, Код: » + КодОтКого;
КонецЕсли;
мНомерВходящегоСообщения = одАтрибут(ФайлОбмена, одТипЧисло, «НомерИсходящегоСообщения»);
НомерПринятогоСообщения = одАтрибут(ФайлОбмена, одТипЧисло, «НомерВходящегоСообщения»);
Если УзелОбменаЗагрузкаДанных.НомерПринятого >= мНомерВходящегоСообщения Тогда
ВызватьИсключение «Номер сообщения меньше либо равен ранее принятому»;
КонецЕсли;
//Юрасов++
//ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения);
//мЗапросНаличияСтрокВРегистреСоответствия.УстановитьПараметр(«Узел», УзелОбменаЗагрузкаДанных);
//мЗапросНаличияПустыхДляИсточникаВРегистреСоответствия.УстановитьПараметр(«Узел», УзелОбменаЗагрузкаДанных);
//Юрасов—
Попытка
мПрефиксДокументовПриЗагрузке = СокрЛП(УзелОбменаЗагрузкаДанных.ПрефиксДляЗагружаемыхДокументов);
мДлинаПрефиксаДокументовПриЗагрузке = СтрДлина(мПрефиксДокументовПриЗагрузке);
Исключение
мПрефиксДокументовПриЗагрузке = «»;
мДлинаПрефиксаДокументовПриЗагрузке = 0;
КонецПопытки;
Попытка
мДатаДокументовДляУстановкиПрефикса = УзелОбменаЗагрузкаДанных.ДатаНачалаВыгрузкиДокументов;
Исключение
мДатаДокументовДляУстановкиПрефикса = Неопределено;
КонецПопытки;
Попытка
мИспользоватьИнформациюОМестеСозданияОбъектовПриЗагрузке = УзелОбменаЗагрузкаДанных.ИспользоватьИнформациюОМестеСозданияОбъектовПриВыгрузкеИЗагрузкеДанных;
Исключение
мИспользоватьИнформациюОМестеСозданияОбъектовПриЗагрузке = Неопределено;
КонецПопытки;
одПропустить(ФайлОбмена, «ДанныеПоОбмену»);
ИначеЕсли ИмяУзла = «ДанныеПоФоновомуОбмену» Тогда
// обработка удаления объекта из информационной базы
ИмяПланаОбмена = одАтрибут(ФайлОбмена, одТипСтрока, «ПланОбмена»);
КодКому = одАтрибут(ФайлОбмена, одТипСтрока, «Кому»);
КодОтКого = одАтрибут(ФайлОбмена, одТипСтрока, «ОтКого»);
Если Не ПустаяСтрока(ИмяПланаОбмена) Тогда
Попытка
УзелОбменаЗагрузкаФоновыхДанных = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодОтКого);
Исключение
УзелОбменаЗагрузкаФоновыхДанных = Неопределено;
КонецПопытки;
Иначе
УзелОбменаЗагрузкаФоновыхДанных = Неопределено;
КонецЕсли;
ДобавлениеОбъектовИзФоновогоОбменаЗагрузка = одАтрибут(ФайлОбмена, одТипЧисло, «ДобавлениеОбъектовИзФоновогоОбмена»);
КоличествоОбъектовДляФоновогоОбменаЗагрузка = одАтрибут(ФайлОбмена, одТипЧисло, «КоличествоОбъектовДляФоновогоОбмена»);
ПолученоОбъектовФоновогоОбмена = одАтрибут(ФайлОбмена, одТипЧисло, «ПереданоОбъектовФоновогоОбмена»);
одПропустить(ФайлОбмена, «ДанныеПоФоновомуОбмену»);
// Если Не ПустаяСтрока(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена) Тогда
//
// Попытка
//
// Если ФлагРежимОтладкиОбработчиков Тогда
//
// Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, «ПослеПолученияИнформацииОбУзлахОбмена»));
//
// Иначе
//
// Выполнить(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена);
//
// КонецЕсли;
//
// Исключение
// СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), «ПослеПолученияИнформацииОбУзлахОбмена (конвертация)»);
//
// Если Не ФлагРежимОтладки Тогда
// ВызватьИсключение СтрокаСообщенияОбОшибке;
// КонецЕсли;
//
// //Возврат Ложь;
// Возврат;
// КонецПопытки;
//
// КонецЕсли;
//Юрасов—
Иначе
СтруктураЗаписи = Новый Структура(«ИмяУзла», ИмяУзла);
ЗаписатьВПротоколВыполнения(9, СтруктураЗаписи);
КонецЕсли;
Это штатная функция, которая уже давно присутствует начиная с версии программных продуктов «1С:Предприятие 8.1», редакция Управление торговлей (версия 10.3.4) и «1С-Битрикс: Управление сайтом» версии 6.5, в редакциях Малый бизнес, Бизнес и Большой бизнес.
Торговля в интернете не имеет никаких отличий от обычного ритейла в плане ведения бухгалтерской отчетности. В связи с этим возникает вопрос согласования продаж через интернет-магазин и проводки их по системе учета «1С». Для «1С-Битрикс: Управление сайтом» интеграция с «1С» – не проблема. Это штатная функция, которая уже давно присутствует начиная с версии продуктов «1С:Предприятие 8.1», редакция Управление торговлей (версия 10.3.4) и «1С-Битрикс: Управление сайтом» версии 6.5, в редакциях Малый бизнес, Бизнес и Большой бизнес.
Несмотря на существующую документацию по продукту, у многих разработчиков сайтов возникают сложности с обменом данными в этих двух программах. Сложности интеграции бывают разные. Рассмотрим некоторые, самые типовые, которые возникают у многих пользователей.
Типовые проблемы можно сгруппировать примерно таким образом:
- Ошибки с производительностью на стороне сервера
- Ошибки при работе с файлами данных
- Проблемы авторизации
- Ошибки MySQL
- Логические ошибки
Начнем по порядку.
Ошибки на стороне сервера
Ошибки на стороне сервера происходят в силу целого ряда причин, но общее у них то, что виноваты не столько настройки программ «1С-Битрикс: Управление сайтом» или «1С:Предприятие«, сколько настройки сервера или проблемы в линиях связи. В основном они «лечатся» соответствующей настройкой серверного оборудования и программного обеспечения. И только при невозможности этого – путем единовременного снижения объемов выгрузки. Для решения большинства этих проблем вам не избежать обращения к службе технической поддержки хостинговой компании, где размещен ваш сайт.
Наиболее частые проявления этих ошибок:
- Ошибка работы с Интернет, выводится сообщение: failed sending data to the peer (no headers, no data);
- Получен пустой ответ сервера;
- Ошибки 502, 500 или ошибка 404 уже в процессе обмена;
- Ошибка нехватки памяти, например выводится сообщение: Fatal error : Allowed memory size of 67108864 bytes exhausted (tried to allocate 102401…)
- Не удалось получить текущее состояние процесса обмена. Данные обмена отправлены, но не загружены.
Общие методы решения – это изменение настроек сервера. Во-первых, можно увеличить лимит времени и памяти в настройках PHP.
- Откройте для редактирования файл php.ini.oci, расположенный в папке /apache.
- Найдите в файле группу параметров Resource Limits.
- Увеличьте значения параметров max_execution_time и memory_limit.
- Перезагрузите сервер.
Во-вторых, часто помогает увеличение таймаута сервера. С этим лучше обратиться к хостеру, так как у вас, скорее всего, не будет на это прав доступа. Но если есть возможность сделать это самому, то нужно произвести следующую последовательность действий:
- Откройте для редактирования файл httpd.conf, размещенный в папке /apache/conf/
- Измените значение параметра Timeout.
- Перезагрузите сервер.
Другой вариант решения этой проблемы (если хостер не соглашается на увеличение таймаута) — сделать равным таймаут сервера и таймаут «1С-Битрикс: Управление сайтом» (страница Магазин > Настройки магазина > Интеграция с 1С, поле Интервал одного шага в секундах). В этом случае пошаговое выполнение будет идти синхронно.
Если указанные меры не помогли или указанные параметры невозможно изменить, то, в крайнем случае, можно сделать следующее:
Наконец, можно уменьшить объем выгрузки товаров за 1 раз. Настройте фильтр по номенклатуре на стороне «1С»:
- Запустите мастер настройки обмена данными (Сервисы > Обмен данными с WEB-сайтом > Настроить обмен данными с WEB-сайтом)
- На первом шаге мастера выберите Изменить существующую настройку обмена данными и нажмите кнопку Далее.
- Выберите настройку для редактирования и дважды кликните по ней.
- В закладке Выгрузка товаров (Или Обмен заказами, в зависимости от ситуации) измените значения фильтра.
- Сохраните изменения и повторите синхронизацию.
Ошибки при работе с файлами данных
Ошибки при работе с файлами вызваны в основном неправильной настройкой прав доступа к файлам. Типовые сообщения при этом выглядят следующим образом: «Ошибка открытия файла» и «Ошибка записи файла». Способы решения проблемы, естественно, — настройка прав доступа на уровне операционной системы.
Обратим внимание на фразу «на уровне операционной системы». Права на уровне «1С-Битрикс: Управление сайтом», как правило, выставлены всегда правильно. Тем не менее, проверить права на осуществление импорта/экспорта не помешает. Делается это на странице Магазин > Настройки магазина > Интеграция с 1С.
Наиболее вероятные причины:
- У пользователя, от которого ведется обмен данными, нет прав на запись в папку /upload .
- Файл создается с правами, которые не позволяют чтение файла.
- Файл также может быть передан на сервер в zip-архиве, но по определённым причинам не удалось распаковать архив, например, некорректно работает функция zip_open на сервере.
Решения данных проблем довольно просты и понятны из самих проблем и решаются обращением к хостеру, который установит нужные права.
Выставление корректных прав на создаваемые файлы в рамках «1С-Битрикс: Управление сайтом» производится следующим образом:
- Откройте для редактирования файл dbconn.php из папки /bitrix/ php_interface.
- В строке define(«BX_FILE_PERMISSIONS», 0644); установите значения, которые порекомендовал хостер вместо 0644 выставленных по умолчанию.
Точно также нужно проверить выставить права на создаваемые папки. Только это делается уже в строке define(«BX_DIR_PERMISSIONS», 0755);.
Вот так выглядит проверка наличия расширения ZIP в настройках PHP:
- Откройте в браузере страницу http://<ваш_сайт>//bitrix/admin/phpinfo.php. (Либо выполните команду if (exist_function (“zip_open”)) echo “OK”;). В браузере отобразится таблица:
Таблица свойств PHP - В области ZIP посмотрите настройки. Для строки ZIP должно стоять «enabled».
Заметим, что ошибки при работе с файлами данных могут возникать и из-за того, что на компьютере, где установлена учетная система от 1С, имеется файрволл или антивирус, препятствующий корректной передаче файла или блокирующий отправку файла на сервер.
Проблемы авторизации
1С не может пройти процедуру аутентификации на сайт и в этой связи выдается ошибка. Вызвано это, как правило, неверной настройкой «1С-Битрикс: Управление сайтом».
«1С» может получать некорректный ответ при попытке авторизации на сайте. Это может быть ошибкой разработчика вашего сайта. Дело в том, что при авторизации первой строчкой ответа «1С» ждет «success». Но в ходе создания сайта разработчики могли в процессе разработки случайно оставить вывод в файлах тестовые строки.
Например, в файле /bitrix/php_interface/init.php или /bitrix/php_interface/dbconn.php и др.
Таким образом, 1С может получить ответ не «success», а «testsuccess» хотя данный авторизации отправлены корректные.
Другая типичная ошибка состоит в правах доступа на импорт каталога. Авторизация может не производиться, если пользователь, проводящий импорт, не обладает достаточным уровнем прав. Проверить это можно на странице Магазин > Настройки магазина > Интеграция с 1С.
Перейдите на указанную страницу и произведите следующие действия:
- В поле Разрешить загрузку группам пользователей посмотрите, каким пользователям разрешен импорт/экспорт данных.
- В зависимости от вашей конкретной ситуации или измените права доступа на импорт для нужных групп или включите нужного пользователя в группу, которой разрешен импорт из «1С».
Но в авторизации могут возникать и особые ошибки. Например, при работе PHP в режиме CGI. Это характерно для сайтов, размещенных на Windows-серверах. Можно это проверить с помощью файла test.php, как мы это делали при проверке свойств ZIP. В свойства сервера Apache в строке Server API в таком случае стоит CGI. Можно попытаться обойти эту проблему, а если не получится, то целесообразно обратиться в техподдержку хостинга.
Для «обхода» проблемы необходимо чтобы на сервере была включена обработка .htaccess и поддержка mod_rewrite. Выполните следующие действия:
- В корне сайта в файл .htaccess добавьте строки:
RewriteEngine on
RewriteRule .* — [E=REMOTE_USER:%{HTTP:Authorization},L] - Закоментируйте следующие строки в файле .htaccess папки bitrix/admin/, которые отключают mod_rewrite:
#
# RewriteEngine Off
#
- В файл dbconn.php папки bitrix/php_interface/ добавьте строки:
$remote_user = $_SERVER[«REMOTE_USER»]
? $_SERVER[«REMOTE_USER»] : $_SERVER[«REDIRECT_REMOTE_USER»];
$strTmp = base64_decode(substr($remote_user,6));
if ($strTmp)
list($_SERVER[‘PHP_AUTH_USER’], $_SERVER[‘PHP_AUTH_PW’]) = explode(‘:’, $strTmp);
Ошибки MySQL
Ошибки базы данных могут иметь много причин, равно как и решений. Самые очевидные из них сводятся к следующим:
- Выводится сообщение: Lost connection to MySQL server during query. Ошибка, скорее всего здесь в таймауте.
Возможное решение проблемы: $DB->Query(«SET wait_timeout=28800»);
Если это не помогает, то необходимо обратиться к службе поддержки хостинговой компании для увеличения таймаута.
- Конфликт кодировок. Например, выводится сообщение:
[Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation ‘=’]
Причиной является то, что таблицы базы данных в одной кодировке, а сам база в другой. В данном случае база в latin1 и новые таблицы создаются в latin1. При выгрузке из «1С» создается временная таблица b_xml_tree в «некорректной» кодировке latin1.
Решение простое и понятное: смена кодировки базы на корректную. Для решения этой проблемы нужно обратиться к хостеру.
Логические ошибки
Логические ошибки происходят, если пользователем неверно понимается процесс обмена данными и, соответственно, им неверно выполняются какие-то действия.
Наиболее частая ошибка при выгрузке каталога товаров появляется вместе сообщением: «Изменения товаров не зарегистрированы. Выгрузка товаров не произведена». Как правило, в этом случае неверно настроен фильтр товаров. Нужно проверить эти настройки. Как правило, там выбраны параметры, которые не позволяют правильно отфильтровать параметры для выгрузки.
Но, бывают ситуации, когда такое сообщение – нормальная ситуация. Это происходит в случае, если в настройках Режима обмена данными с WEB-сайтом установлено: Выгружать только измененные объекты с момента последнего обмена.
Другая ошибка при выгрузке каталога товаров — сообщение: «Не удалось найти вид номенклатуры». Эта ошибка возникает, если в «1С» нет видов «Услуга» и «Товар». Эти типы критичны для процесса обмена данными с сайтом. Решение проблемы – создать в «1С» указанные виды номенклатуры.
Если в процессе обмена возникает ошибка: «Поле объекта не обнаружено», то это означает, что не установлены соответствия для полей заказа в «1С-Битрикс: Управление сайтом». Проверьте настройки, заданные в закладке Экспорт в «1С:Предприятие» страницы Настройки > Настройки продукта > Настройки модулей > Интернет-магазин. Поля «Полное Название» и «Название» критичны для 1С., то есть без задачи соответствия этих полей экспорт выполняться не будет. Обратите внимание, что настройка соответствий производится отдельно для разных типов плательщиков.
Резюме
Экспорт/импорт товаров и заказов в связке «1С-Битрикс: Управление сайтом» и «1С:Предприятие» позволяет решить проблемы синхронизации данных на сайте и в системе учета. Как и в работе любой другой сложной системы, в этой «связке» могут возникать проблемы и неточности. Однако все они решаемы. Купить Битрикс можно у партнеров 1Софт.
Роберт Басыров
Все права защищены. По вопросам использования статьи обращайтесь к администраторам сайта
- Ошибки на стороне веб-сервера
- Ошибки при работе с файлами данных
- Проблемы авторизации
- Ошибки MySQL
- Логические ошибки
- Диагностика отладки
- Отладка обмена на стороне 1С-Битрикс
- Модуль отладки обмена от ИНТЕРВОЛГИ
- Выводы
Настроить обмен между «1С» и «1С-Битрикс» интернет-магазина или сайта – не проблема. Эта функция присутствует «из коробки» начиная с ранних версий продуктов «1С:Предприятие», редакция Управление торговлей и «1С-Битрикс: Управление сайтом» в редакциях Малый бизнес и Бизнес.
Даже с учётом имеющейся документации по продукту, у многих разработчиков сайтов возникают сложности в корректной настройке обмена данными между этими системами. Рассмотрим самые частые проблемы, которые возникают у тех кто пытался.
Мы выделили несколько групп ошибок:
- проблемы авторизации;
- ошибки на стороне сервера;
- ошибки при работе с файлами данных;
- ошибки MySQL;
- логические ошибки.
Далее мы детально рассмотрим сами ошибки и способы их исправления.
Ошибки на стороне веб-сервера
К этой группе относятся ошибки, возникающие в подсистемах веб-сервера, отвечающих за выполнение PHP-кода. Обычно это: Nginx, Apache и сам интерпретатор языка PHP.
Возможны 2 варианта:
- Ошибка действительно вызвана неоптимальными настройками Nginx/Apache/PHP. Если Вы чувствуете неуверенность в своем веб-сервере или совсем недавно на него переехали — привлеките администратора для проверки и изменения настроек.
| Название ошибки | Как исправить |
|---|---|
| Failed sending data to the peer (no headers, no data). |
|
| Получен пустой ответ сервера. | |
| Ошибка нехватки памяти, например выводится сообщение: Fatal error : Allowed memory size of 67108864 bytes exhausted (tried to allocate 102401…). | Проверить настройку memory_limit в php.ini. Должно быть указано не менее 512Mb, увеличить значение и перезагрузить сервер. Или не изменяя настройки сервера сделать равным таймаут сервера и таймаут «1С-Битрикс: Управление сайтом» (страница Магазин > Настройки магазина > Интеграция с 1С, поле Интервал одного шага в секундах). Если проблема с нехваткой памяти, данное решение не подойдёт. |
- Подобная ошибка может маскировать либо некорректную настройку объема одной порции загружаемых данных (10К товаров за раз, например), либо логическую ошибку в программном коде (например, пересчет каких-нибудь значений в товарах по событию изменения).
Способы решения:
- уменьшать объем передаваемых за раз данных (проверить на 1 товаре, но лучше выставлять значение поочередно, 1, 100, 1000, 10000 и смотреть, какое значение оптимально для ваших настроек);
- временно закомментировать обработчики событий в файле /bitrix/php_interface/init.php, может быть они мешают обмену.
Ошибки при работе с файлами данных
Данные ошибки возникают при неверной настройке прав доступа к файлу. Отображение ошибок звучит следующим образом: «Ошибка открытия файла» и «Ошибка записи файла». Возможные причины и их решение:
| Название ошибки | Как исправить | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Закончилось место на диске. |
Удалить старые бэкапы или увеличить тариф на хостинге. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
По ftp файлы загружаются, а через веб-интерфейс административного раздела сайта нет. |
Обратиться в техническую поддержку хостинг-провайдера. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Не работает или некорректно работает сжатие данных при обмене. |
Для начала можно попробовать выключить сжатие в настройках модуля обмена. Также можно проверить работу функции zip_open на сервере Откройте в браузере страницу http://<ваш_сайт>//bitrix/admin/phpinfo.php (Либо выполните команду if (exist_function (“zip_open”)){ echo “OK”; } В браузере отобразится таблица:
Заметим, что ошибки при работе с файлами данных могут возникать и из-за того, что на компьютере, где установлена учетная система от 1С, имеется файрволл или антивирус, препятствующий корректной передаче файла или блокирующий отправку файла на сервер. Проблемы авторизации 1С не может пройти процедуру аутентификации на сайт и в этой связи выдается ошибка. Вызвано это, как правило, неверной настройкой «1С-Битрикс: Управление сайтом». «1С» может получать некорректный ответ при попытке авторизации на сайте. Это может быть ошибкой разработчика вашего сайта. Дело в том, что при авторизации первой строчкой ответа «1С» ждет «success». Но в ходе создания сайта разработчики могли в процессе разработки случайно оставить вывод в файлах тестовые строки. Например, в файле /bitrix/php_interface/init.php или /bitrix/php_interface/dbconn.php и др. Другая типичная ошибка состоит в правах доступа на импорт каталога. Авторизация может не производиться, если пользователь, проводящий импорт, не обладает достаточным уровнем прав. Проверить это можно на странице Магазин > Настройки магазина > Интеграция с 1С. Перейдите на указанную страницу и произведите следующие действия:
Но в авторизации могут возникать и особые ошибки. Например, при работе PHP в режиме CGI. Это характерно для сайтов, размещенных на Windows-серверах. Можно это проверить с помощью файла test.php, как мы это делали при проверке свойств ZIP. В свойства сервера Apache в строке Server API в таком случае стоит CGI. Можно попытаться обойти эту проблему, а если не получится, то целесообразно обратиться в техподдержку хостинга. Для «обхода» проблемы необходимо чтобы на сервере была включена обработка .htaccess и поддержка mod_rewrite. Выполните следующие действия:
Ошибки MySQL Ошибки базы данных могут иметь много причин, равно как и решений. Самые очевидные из них сводятся к следующим:
Возможное решение проблемы: $DB->Query(«SET wait_timeout=28800»); Если это не помогает, то необходимо обратиться к службе поддержки хостинговой компании для увеличения таймаута.
[Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation ‘=’] Причиной является то, что таблицы базы данных в одной кодировке, а сам база в другой. В данном случае база в latin1 и новые таблицы создаются в latin1. При выгрузке из «1С» создается временная таблица b_xml_tree в «некорректной» кодировке latin1. Решение простое и понятное: смена кодировки базы на корректную. Для решения этой проблемы нужно обратиться к хостеру. Логические ошибки Логические ошибки происходят, если пользователем неверно понимается процесс обмена данными и, соответственно, им неверно выполняются какие-то действия. Наиболее частая ошибка при выгрузке каталога товаров появляется вместе сообщением: «Изменения товаров не зарегистрированы. Выгрузка товаров не произведена». Как правило, в этом случае неверно настроен фильтр товаров. Нужно проверить эти настройки. Как правило, там выбраны параметры, которые не позволяют правильно отфильтровать параметры для выгрузки. Но, бывают ситуации, когда такое сообщение – нормальная ситуация. Это происходит в случае, если в настройках Режима обмена данными с WEB-сайтом установлено: Выгружать только измененные объекты с момента последнего обмена. Другая ошибка при выгрузке каталога товаров — сообщение: «Не удалось найти вид номенклатуры». Эта ошибка возникает, если в «1С» нет видов «Услуга» и «Товар». Эти типы критичны для процесса обмена данными с сайтом. Решение проблемы – создать в «1С» указанные виды номенклатуры. Если в процессе обмена возникает ошибка: «Поле объекта не обнаружено», то это означает, что не установлены соответствия для полей заказа в «1С-Битрикс: Управление сайтом». Проверьте настройки, заданные в закладке Экспорт в «1С:Предприятие» страницы Настройки > Настройки продукта > Настройки модулей > Интернет-магазин. Поля «Полное Название» и «Название» критичны для 1С., то есть без задачи соответствия этих полей экспорт выполняться не будет. Обратите внимание, что настройка соответствий производится отдельно для разных типов плательщиков. Резюме Экспорт/импорт товаров и заказов в связке «1С-Битрикс: Управление сайтом» и «1С:Предприятие» позволяет решить проблемы синхронизации данных на сайте и в системе учета. Как и в работе любой другой сложной системы, в этой «связке» могут возникать проблемы и неточности. Однако все они решаемы. Купить Битрикс можно у партнеров 1Софт. Роберт Басыров Все права защищены. По вопросам использования статьи обращайтесь к администраторам сайта
Настроить обмен между «1С» и «1С-Битрикс» интернет-магазина или сайта – не проблема. Эта функция присутствует «из коробки» начиная с ранних версий продуктов «1С:Предприятие», редакция Управление торговлей и «1С-Битрикс: Управление сайтом» в редакциях Малый бизнес и Бизнес. Даже с учётом имеющейся документации по продукту, у многих разработчиков сайтов возникают сложности в корректной настройке обмена данными между этими системами. Рассмотрим самые частые проблемы, которые возникают у тех кто пытался. Мы выделили несколько групп ошибок:
Далее мы детально рассмотрим сами ошибки и способы их исправления. Ошибки на стороне веб-сервераК этой группе относятся ошибки, возникающие в подсистемах веб-сервера, отвечающих за выполнение PHP-кода. Обычно это: Nginx, Apache и сам интерпретатор языка PHP. Возможны 2 варианта:
Способы решения:
Ошибки при работе с файлами данныхДанные ошибки возникают при неверной настройке прав доступа к файлу. Отображение ошибок звучит следующим образом: «Ошибка открытия файла» и «Ошибка записи файла». Возможные причины и их решение:
Проблемы авторизацииСамая распространённая проблема, если пользователь не указал данные или указал их неверно.
Ошибки MySQLОшибки возникают при соединении с базой данных MySQL, настроенной на сайте.
Логические ошибкиОшибки пользователей неверно понимающих процесс обмена данными и, соответственно, неверно выполняющих какие-то действия.
Диагностика отладкиМы применяем два инструмента отладки обмена между 1С и 1С-Битрикс. Отладка обмена на стороне 1С-БитриксПри настройке выгрузки необходимо проверить существование папки /upload/1c_catalog/. В эту папку будут загружаться файлы при обмене. При необходимости, можно удалять из папки файлы последнего обмена, т.к. по завершению обмена файлы последней операции будут храниться именно в этой папке. Выполнение этой задачи возможно сделать автоматически, например запустить «Режим отладки» процесса обмена на сайте. При включенном «режиме отладки» не будут удаляться старые файлы из этого каталога после успешного обмена. Включить «режим отладки» можно отредактировав файл dbconn.php. А именно, создать константу такого вида: define(«BX_CATALOG_IMPORT_1C_PRESERVE», true). На стороне 1С-Битрикс мы можем увидеть только конечные данные. Если данные приходят корректные, то они попадают в инфоблоки и это видно. Если данные приходят некорректные, то либо неверные данные были выгружены из 1С, либо выставлен неверный тип данных. Например вы пытаетесь передать многострочный список как строку. Модуль отладки обмена от ИНТЕРВОЛГИДля упрощения диагностики мы создали модуль отладки обмена. Он встраивается между 1С и 1С-Битрикс и пишет логи того, что происходит при обмене. По этим логам можно выяснить, где ошибка и исправить её. Отображение логов происходит в административной части сайта. Модуль отладки обмена от ИНТЕРВОЛГИ лучше логов со стороны 1С-Битрикс, потому что он:
ВыводыЕсли не разбираться в вопросе и попытаться исправить обмен, то можно сделать только хуже и придётся или переписывать код модуля или ставить модуль обмена заново. Наша компания обладает компетенциями в вопросе отладки обмена. Если у вас возникла подобная проблема, напишите, обсудим. Вам может быть интересно:
Показывать по Новая тема Ответить Письмо в техподдержку 1С отправить копию письма на мой адрес отправить копию письма на адрес: [Прочее] Выгрузка из ЗУП в Бухгалтерию. Ошибка открытия файла обмена данными
Tigra777
Дата регистрации: 13.10.2008 ЗУП 2.5.9, Бухгалтерия 1.6.10. При загрузке дынных из ЗУП через «Универсальный обмен данными» появляется ошибка: «Ошибка открытия файла обмена данных». Что это может быть за ошибка..как исправить? Показывать по 790th
|
30.09.15 — 09:40
|
Вопрос: Почему не принимает данные, сформированные в настройке обмена (но при этом принимает если данные сформировать обработкой обмена)?
Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5256)}: Ошибка при вызове метода контекста (Выполнить): {(1, 68)}: Синтаксическая ошибка «=»
Загружено объектов: 0
НО! это при выгрузке из УТ через настройку обмена. Ошибка исчезает если выгружать данные обработкой из поставки КД: V8Exchan82.epf (82 не смотря на то что платформа 83, т.к. в режиме Обычного приложения). 790th
|
7 — 30.09.15 — 11:41
|
Правила от КД 2.1.8.2
«Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5255)}: Ошибка при вызове метода контекста (Выполнить): {(1, 68)}: Синтаксическая ошибка «=»
Таким образом вставил кусок из обработки из УТ. Поместил в обработку Приемника (коммент //Юрасов):
// не по всем параметрам можно искать
//Юрасов++ Продолжить; КонецЕсли; Теперь загружает данные, хоть и остались ошибки:
Ошибка формата файла обмена
Ошибка формата файла обмена 790th
|
8 — 30.09.15 — 13:09
|
Эти две ошибки тоже убрал. Пришлось перенести еще один кусок в приемник: ИначеЕсли (ИмяУзла = «ФайлОбмена») И (ФайлОбмена.ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда Обмен товарами (1С -> Битрикс).Данный тип обмена (type=catalog) используется для создания и обновления на сайте следующих сущностей:
При обмене товарами 1С формирует XML-файлы, передает их на сайт и контролирует их обработку сайтом. 1С может передать 4 вида файлов:
На шаге авторизации в случае успеха сервер вернет дополнительный параметр timestamp (текущее время). 1С сохранит timestamp и передаст на сайт на последнем шаге обмена товарами. Шаг 1. Передача файла (повторяющийся).
Шаг может выполняется несколько раз. Каждый файл выгружается частями не более file_limit байт (см. предыдущий шаг) в бинарном виде через сырой POST-запрос. Сайт создает файл, если его нет. Имя файла берет из GET-параметра filename и дописывает в него переданный контент. Так продолжается до тех пор, пока 1С не передаст все части этого файла.
Шаг 2. Основной.
Этот шаг — особенный. Файл уже целиком загружен на сайт и Битрикс готов его обработать. Его обработка может состоять из 11 более мелких операций, о которых 1С ничего не знает. Поэтому в параметре GET приходит mode=import (один и тот же запрос!), но сайт выполняет совершенно разные операции. Текущий прогресс Битрикс сохраняет в сессии в переменной $_SESSION[BX_CML2_IMPORT][NS]. Например, узел STEP в этом массиве отвечает как раз за номер внутренней операции импорта. Шаг 2.1 Распаковка архива (повторяющийся, необязательный).
Шаг исполняется, только если 1С передала файл в формате ZIP. Распаковка происходит в той же директории, где лежат все файлы обмена товарами (по умолчанию — /upload/1c_catalog/). Эта операция не нумеруется внутри Битрикса (значение STEP в сессии не изменяется).
Шаг 2.2 Удаление временных таблиц.
Работать напрямую с файлом XML (тем более, если он большой) неудобно и неэффективно. Поэтому все данные прочитываются во временную таблицу b_xml_tree. На этом подготовительном шаге таблица b_xml_tree, если она существует, удаляется. Шаг 2.3 Создание временных таблиц.
Таблица b_xml_tree создается. Если объявлена PHP константа BX_XML_CREATE_INDEXES_IMMEDIATELY, таблица сразу же индексируется. В конце этого шага Битрикс испускает событие OnBeforeCatalogImport1C.
Шаг 2.4 Загрузка файла во временную таблицу (повторяющийся).
Битрикс шаг за шагом начинает читать переданный из 1С файл, добавляя записи в таблицу b_xml_tree. Чтобы избежать проблем с временем исполнения, процесс происходит пошагово. Управление продолжительностью шага происходит на странице «Интеграция с 1С» в панели управления сайтом.
Шаг 2.5 Индексация временных таблиц.
Для повышения скорости работы импорта таблица b_xml_tree индексируется после прочтения файла.
Шаг 2.6 Импорт метаданных.
На этом шаге создаются или обновляются следующие данные:
Возможные ошибки
Шаг 2.7 Импорт разделов каталога.
На этом шаге в инфоблоке создаются и обновляются все разделы каталога, которые были в XML файле. Сопоставление разделов из XML-файла и в БД происходит по XML_ID. Если на сайте нет раздела с XML_ID из файла, он создается. Если есть, то выполняется сравнение полей из XML файла с аналогичными полями в БД.
Если изменения нет, то Битрикс только обновляет поле TIMESTAMP_X и пропускает раздел. Если изменения есть — происходит полноценное обновление. Это происходит независимо от настроек сайта. Для экономии ресурсов сервера добавление разделов происходит без пересчета дерева (речь о полях LEFT_MARGIN и RIGHT_MARGIN).
Объясним, как поможет повтор шага или всей выгрузки. Допустим, в XML-файле и на сайте 20001 раздел. Пусть за один проход Битрикс успевает импортировать только 10000 разделов.
Битрикс каждый раз обрабатывает столько разделов, сколько успевает. При повторении выгрузки первые 10000 разделов он пропустит (обновит только TIMESTAMP_X) и обновит еще 10000 разделов, пока не наступил тайм-аут. И только на 3-ей выгрузке из 1С шаг будет завершен корректно. Шаг 2.8 Пересчет дерева разделов.
На этом шаге Битрикс выполняет две задачи:
В старых версиях 1С отличить полную выгрузку от частичной просто: при частичной в узле «Классификатор» был атрибут СодержитТолькоИзменения=»true», при полной его не было. В 2019 году 1С всегда выгружает этот атрибут. Если этого атрибута нет, Битрикс мог (и до сих пор может, просто этот код не используется) удалить, деактивировать старые разделы (или пропустить их). На выбор влиял параметр на странице «Интеграция с 1С». Сейчас эта настройка уже ни на что не влияет и ни деактивации, ни удаления не происходит. Шаг 2.9 Импорт товаров (повторяющийся).
На этом шаге в инфоблоке создаются и обновляются все товары, которые были в XML файле. Сопоставление товаров в файле товарам на сайте происходит по полю XML_ID.
Шаг 2.10 Деактивация/удаление товаров (повторяющийся).
На этом шаге раньше (как и на шаге 2.8 Пересчет дерева разделов) Битрикс проводил чистку товаров. Чистка товаров происходила только если в узле “Классификатор” XML файла не было пометки СодержитТолькоИзменения=»true» (старый формат выгрузки). Есть аналогичная настройка для выбора, что делать с товарами. В 2019 году на этом шаге ничего не происходит. Шаг 2.11 Завершение импорта
Служебный шаг. Обработки данных нет, только испускается событие OnSuccessCatalogImport1C. Шаг 3. Деактивация старых данных.
На этом шаге в 2019 году Битрикс деактивирует все товары и разделы каталога, не затронутые в текущей сессии. Для этого время последнего изменения сравнивается с timestamp, который передает 1С — время начала текущей сессии, полученное на шаге авторизации. Этот шаг будет выполнен, только если современная 1С делает полную выгрузку. Для выгрузки изменений и в старых версиях 1С этого шага нет. Шаг 4. Завершение импорта.
Служебный шаг. Обработки данных нет, только испускается недокументированное событие модуля catalog OnCompleteCatalogImport1C. Аргументы обработчика аналогичны обработчикам события OnSuccessCatalogImport1C, возвращаемого значения нет.
Настроить обмен между «1С» и «1С-Битрикс» интернет-магазина или сайта – не проблема. Эта функция присутствует «из коробки» начиная с ранних версий продуктов «1С:Предприятие», редакция Управление торговлей и «1С-Битрикс: Управление сайтом» в редакциях Малый бизнес и Бизнес. Даже с учётом имеющейся документации по продукту, у многих разработчиков сайтов возникают сложности в корректной настройке обмена данными между этими системами. Рассмотрим самые частые проблемы, которые возникают у тех кто пытался. Мы выделили несколько групп ошибок:
Далее мы детально рассмотрим сами ошибки и способы их исправления. Ошибки на стороне веб-сервераК этой группе относятся ошибки, возникающие в подсистемах веб-сервера, отвечающих за выполнение PHP-кода. Обычно это: Nginx, Apache и сам интерпретатор языка PHP. Возможны 2 варианта:
Способы решения:
Ошибки при работе с файлами данныхДанные ошибки возникают при неверной настройке прав доступа к файлу. Отображение ошибок звучит следующим образом: «Ошибка открытия файла» и «Ошибка записи файла». Возможные причины и их решение:
Проблемы авторизацииСамая распространённая проблема, если пользователь не указал данные или указал их неверно.
Ошибки MySQLОшибки возникают при соединении с базой данных MySQL, настроенной на сайте.
Логические ошибкиОшибки пользователей неверно понимающих процесс обмена данными и, соответственно, неверно выполняющих какие-то действия.
Диагностика отладкиМы применяем два инструмента отладки обмена между 1С и 1С-Битрикс. Отладка обмена на стороне 1С-БитриксПри настройке выгрузки необходимо проверить существование папки /upload/1c_catalog/. В эту папку будут загружаться файлы при обмене. При необходимости, можно удалять из папки файлы последнего обмена, т.к. по завершению обмена файлы последней операции будут храниться именно в этой папке. Выполнение этой задачи возможно сделать автоматически, например запустить «Режим отладки» процесса обмена на сайте. При включенном «режиме отладки» не будут удаляться старые файлы из этого каталога после успешного обмена. Включить «режим отладки» можно отредактировав файл dbconn.php. А именно, создать константу такого вида: define(«BX_CATALOG_IMPORT_1C_PRESERVE», true). На стороне 1С-Битрикс мы можем увидеть только конечные данные. Если данные приходят корректные, то они попадают в инфоблоки и это видно. Если данные приходят некорректные, то либо неверные данные были выгружены из 1С, либо выставлен неверный тип данных. Например вы пытаетесь передать многострочный список как строку. Модуль отладки обмена от ИНТЕРВОЛГИДля упрощения диагностики мы создали модуль отладки обмена. Он встраивается между 1С и 1С-Битрикс и пишет логи того, что происходит при обмене. По этим логам можно выяснить, где ошибка и исправить её. Отображение логов происходит в административной части сайта. Модуль отладки обмена от ИНТЕРВОЛГИ лучше логов со стороны 1С-Битрикс, потому что он:
ВыводыЕсли не разбираться в вопросе и попытаться исправить обмен, то можно сделать только хуже и придётся или переписывать код модуля или ставить модуль обмена заново. Наша компания обладает компетенциями в вопросе отладки обмена. Если у вас возникла подобная проблема, напишите, обсудим. Вам может быть интересно:
Заказать сайт Обратившись ко мне вы получите надежного и сведущего исполнителя, который быстро и качественно реализует любую задачу для Вас и Вашего бизнеса. Настройки подключения к 1С должны быть произведены согласно официальной документации Очистка кеша после импортаВ файле
Запуск импорта вручнуюДля этого нужно перейти по адресу: Так же импорт можно запустить из отладочного файла Включение отладкиВ файле
Для каждого обновляемого файла получим массив вида
Поиск проблемного файла при получении во время импорта из 1С ответа
|





