Делаем бренды ярче, цифровые продукты эффективнее, а клиентов счастливее.
Мы очень давно работаем с 1С-битрикс и, как и многие другие компании, у нас к этому продукту отечественной разработки весьма противоречивые чувства.
На этот раз наша команда столкнулась с интересным багом (конечно же не первым)!
Перед нами стояла не сложная, на первый взгляд, задача — выгрузить товары из 1С и расставить цены в зависимости от категории товара и объема.
Например:
Ну и мы по накатанной пошли в файлик init.php добавили обработчик, который срабатывает перед обновлением цены (OnBeforePriceUpdate).
Сам обработчик делал очень простые операции:
В итоге в карточке товара получаем вот такой результат:
Вроде всё как нужно встало. Идём на сайт и проверяем.
Меняем количество товара и наблюдаем за изменением цены. Тут тоже работает всё как надо, пока не доходим до оптовой цены 2!
Выбираем количество больше 20 и цена ставится розничная.
Проверили шаблон — там всё ок с логикой, используется стандартный функционал битриксовый.
Написали в тех. поддержку. С поддержкой прошли семь кругов ада (сначала младший спец, потом чуть выше младшего и так до самого старшего разработчика дошли).
Переговоры с поддержкой тоже зашли в тупик.
Пришлось довольно много поэкспериментировать. В ходе экспериментов обнаружили, что если открыть в админке карточку товара и просто нажать кнопочку «Сохранить» или «Применить», то баг пропадает!
Начали копать дальше — получили все записи из базы данных для этого товара в 2-х состояниях:
[
...
'QUANTITY_FROM' => 20,
'QUANTITY_TO' => 0,
...
]
[
...
'QUANTITY_FROM' => 20,
'QUANTITY_TO' => null,
...
]
Заметили разницу?!
Вот и мы заметили и были весьма удивлены! Ведь мы перечитали в доль и поперек документацию битрикса и там сказано было:
Ну мы и использовали и false и пустое значение, но в этом случае в базу писался 0.
А вот когда присвоили принудительно null, всё встало на свои места!
Самое, что досадное старший разработчик нам усиленно втирал совершенно разные варианты, далекие от нужных, и мы кучу времени на этой мелкой задаче потеряли.
Зато получили массу полезного опыта и в очередной раз убедились, что документация 1С-битрикс это просто какая-то формальность и она зачастую далека от реальности.