Как можно получить и использовать пользовательские поля складов в компоненте sale.order.ajax?

У меня есть интеграция с 1С, из которого поступают склады с некорректными названиями (см. скрин 1). Когда я заменяю их на свои названия, они возвращаются к исходным при следующем обмене. Я хотел бы заменить эти названия на пользовательское свойство (см. скрин 2). Однако в файле sale.order.ajax -> order_ajax.js в функции createPickUpItem: function(currentStore, options) не видно пользовательского свойства UF_NEW_NAME. Как мне его туда добавить?
  • 12 ноября 2024 г. 17:33
Ответы на вопрос 1
Чтобы использовать пользовательские поля складов в компоненте `sale.order.ajax`, вам нужно будет модифицировать JavaScript код компонента, а также, возможно, битриксовый компонент или модель данных, если вы хотите, чтобы данные автоматически загружались в ваш JavaScript.

### Шаги для добавления пользовательского поля в компонент sale.order.ajax:

1. **Сначала создайте пользовательское поле для складов.**
   Убедитесь, что у вас есть пользовательское поле (например, `UF_NEW_NAME`) в настройках свойств ваших складов.

2. **Добавьте пользовательское поле в выборку данных.**
   Скорее всего, вашему полю не передается значение в JS. Найдите место в коде, где создается выборка складов (обычно это происходит в PHP-коде компонента). 

   Например, в файле компонента `sale.order.ajax`, вы можете изменить метод, который происходит независимо или во время инициализации. Убедитесь, что ваша выборка получает пользовательское поле:

   ```php
   // Пример выборки данных склада, добавьте в выборку UF_NEW_NAME
   $arStores = array();
   $res = \Bitrix\Sale\Store::getList(array(
       'select' => array('ID', 'TITLE', 'UF_NEW_NAME'), // ваш пользовательский поле здесь
   ));

   while ($store = $res->fetch()) {
       $arStores[] = $store;
   }
   ```

3. **Передайте данные в JavaScript.**
   После того как вы получаете данные на стороне PHP, вам необходимо передать их в JavaScript. Если ваш компонент использует `arResult` для передачи данных в шаблон, убедитесь, что в `arResult` включены данные о складах:

   ```php
   $this->arResult['STORES'] = $arStores;
   ```

4. **Обновите JavaScript код.**
   Теперь, когда данные о складах содержат пользовательское поле, вам нужно обновить ваш JavaScript, чтобы использовать `UF_NEW_NAME`. Откройте `order_ajax.js` и найдите функцию `createPickUpItem`. В этой функции добавьте логику для отображения или использования `UF_NEW_NAME` вместо `TITLE`.

   Например:

   ```javascript
   createPickUpItem: function(currentStore, options) {
       var storeName = currentStore.UF_NEW_NAME || currentStore.TITLE; // используем наше пользовательское поле

       // Используйте storeName в вашем коде
   }
   ```

5. **Проверьте изменения.**
   После этих изменений проверьте ваш фронтенд, чтобы убедиться, что замененные названия теперь отображаются корректно.

### Дополнительные советы:
- **Кэширование.** Если вы используете кэширование или CDN, не забудьте очистить кэш после внесения изменений.
- **Отладка.** Используйте инструменты разработчика в браузере для отладки и проверки данных, если они правильно передаются на фронтенд.
- **Документация и ресурсы.** Ознакомьтесь с официальной документацией по Bitrix, чтобы убедиться в совместимости ваших изменений и сохранении функциональности.

Таким образом, вы можете использовать пользовательские поля в компонентах Bitrix и менять отображаемые значения в интерфейсе.
Похожие вопросы