При настройке интеграции 1С с сайтом на платформе Битрикс часто возникает ситуация, когда вместо запланированной выгрузки только измененных данных система каждый раз выполняет полную выгрузку всего каталога. Это приводит к неоправданному росту нагрузки на сервер и увеличению времени обмена. Давайте разберем по шагам, как диагностировать и устранить эту проблему.
Первым делом проанализируем настройки обмена. Одной из самых частых причин является установка принудительного флага полной выгрузки в регистре сведений. В модуле обмена 1С с Битрикс этот параметр может быть активирован программно или ошибочно записан в информационную базу.
Давайте посмотрим на регистр сведений Б_ИнформацияОНастройкахОбменаССайтом. В нем содержится настройка ВыполнятьПолнуюВыгрузкуПринудительно. Если этот флаг установлен в значение Истина, модуль будет игнорировать любые другие настройки и всегда выполнять полную выгрузку.
Рассмотрим структуру формирования пакетов. В коде модуля, в процедуре ПолучитьПользовательскиеСправочникиОбменаДляФормированияПакетов, существует критическая проверка, которая влияет на логику обмена:
Если (ПараметрыОбмена.ВыгружатьТолькоИзменения И НЕ ПараметрыОбмена.ВыполнятьПолнуюВыгрузкуПринудительно) ИЛИ (ПараметрыОбмена.КоличествоЭлементовСправочникаВПакете <> 0) тогда
XDTOПользовательскиеСправочники.СодержитТолькоИзменения = XMLСтрока(Истина);
Иначе
XDTOПользовательскиеСправочники.СодержитТолькоИзменения = XMLСтрока(Ложь);
КонецЕсли;
Если логика формирования параметров дает сбой и переменная ВыполнятьПолнуюВыгрузкуПринудительно оказывается равной Истина, система автоматически переключается на полную выгрузку. Важно обратить внимание на то, как именно инициализируются эти параметры. В некоторых версиях модуля используется некорректное сравнение строк при чтении настроек:
Выборка = РегистрыСведений.Б_ИнформацияОНастройкахОбменаССайтом.Выбрать(Новый Структура("НастройкаОбмена" , УзелОбмена));
Пока Выборка.Следующий() Цикл
Если Выборка.ВидСостояния = "Принудительная полная выгрузка" тогда
ВыполнятьПолнуюВыгрузкуПринудительно = Выборка.ПринудительнаяПолнаяВыгрузка;
КонецЕсли;
КонецЦикла;
Такой подход делает код уязвимым. Если в регистре изменится строковое представление вида состояния или возникнет проблема с кэшированием данных, логика обмена нарушится.
Даже если настройка установлена верно, выгрузка изменений может не работать, если не происходит корректное удаление записей после успешного обмена. Мы должны проверить процедуру УдалениеПакетовИРегистрацийИзмененияПослеВыгрузкиНаСайт. Если регистрация изменений не очищается после успешной передачи данных, система будет считать, что объекты все еще требуют выгрузки.
Рассмотрим, как модуль очищает очередь:
Если Успешно ИЛИ НЕ ПараметрыОбмена.ВыгружатьНаСайт тогда
НаборЗаписей = РегистрыСведений.Б_ПакетныйОбмен.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пакет.Установить(Пакет);
НаборЗаписей.Отбор.НастройкаОбмена.Установить(ПараметрыОбмена.Ссылка);
НаборЗаписей.Очистить();
НаборЗаписей.Записать(Истина);
КонецЕсли;
Если вы заметили, что в регистре Б_ПакетныйОбмен постоянно накапливаются записи, значит, механизм квитирования или очистки работает со сбоями. Убедитесь, что после каждой успешной синхронизации вызываются методы удаления регистрации изменений из планов обмена, иначе 1С будет бесконечно «видеть» одни и те же измененные товары.
РегистрСведений.Б_ИнформацияОНастройкахОбменаССайтом и вручную убедитесь, что флаг принудительной выгрузки снят.ПараметрыОбмена и проследите, на каком этапе флаг ВыполнятьПолнуюВыгрузкуПринудительно принимает значение Истина.ПланыОбмена.ЗарегистрироватьИзменения и ПланыОбмена.УдалитьРегистрациюИзменений для контроля того, какие объекты 1С считает измененными. Если там пусто, а выгрузка идет — значит, ошибка кроется в логике формирования самого XML-пакета, который «дописывает» товары вне зависимости от их статуса в плане обмена.Работа с модулем обмена требует внимательного контроля как со стороны 1С, так и со стороны администратора сайта. Начав с проверки регистра сведений, вы с большой долей вероятности найдете причину, по которой «изменения» не фильтруются должным образом.