Nostalgie en Direct : Plongez dans l'univers intemporel de la musique
La musique a ce pouvoir magique de nous transporter dans le temps, de réveiller des souvenirs enfouis et de nous faire revivre des moments précieux. Si vous êtes un amoureux des grands classiques,
Битрикс больше не вызывает метод ShowTaskForm из действий (активити) бизнес-процессов на странице выполнения задания. Последняя версия, где работало 24.200.0. Раньше мы могли скопировать активити и сделать своё кастомное действие с формой.
В форме мы могли рисовать свои собственные поля, в том числе таблицы полей. Могли делать вычисления одних полей из других полей и т. п.
В приложении картинка, как выглядело для пользователя Продление командировки, чтобы он заполнил форму прямо в задании.
Последняя версия, в которой работало:
Бизнес-процессы (bizproc) 24.200.0 от 10.04.2024
Далее от bizproc 24.200.0 зависят модули, которые тоже нельзя обновлять выше версий:
Дизайнер бизнес-процессов (bizprocdesigner) 24.600.0 от 28.10.2024
Мобильные бизнес-процессы (bizprocmobile) 24.200.0 от 10.04.2024
CRM (crm) 24.1000.0 от 01.11.2024
Теперь Битрикс предлагает свои активити (запрос дополнительной информации и запрос дополнительной информации с отклонением). Формы активити содержат типовые поля переменных бизнес-процесса, но влезть туда со своим кодом нельзя.
Есть вариант добавить форму, если исправить шаблоны компонентов Битрикс, или с помощью javascript что-то дорисовать. Но это только до следующего обновления, потом придётся восстанавливать.
Тестовый бизнес-процесс:
На новых версиях единственный способ более-менее стандартный, но ужасно некрасивый - в описании задания просить пользователя перейти по ссылке, где-то в другом месте заполнить нашу форму.
Пример текста задания для активити «Утверждение документа»:
Наш документ: {=System:HostUrl}{{=getdocumenturl()}}
1. Перейдите по ссылке и заполните форму для дополнительных сведений к документу:
{=System:HostUrl}/askaron/test.php?ELEMENT_ID={{ID элемента}}&WORKFLOW_ID={=Workflow:ID}
2. После заполнения формы нажмите «Утвердить дополнительные сведения к документу» в этой форме.
На своей странице /askaron/test.php мы рисуем свою форму, которая что-то куда-то сохраняет. Потом в бизнес-процессе мы должны эту информацию прочитать.
В приложении картинки тестового процесса, как можно сделать по-новому.
Сегодня узнал очень простой способ запустить сайт на Битрикс в режиме php-fpm (Когда из веб-сервера только nginx и php) для пользователей хостинг-панели ISPManager. Он поможет запустить, думаю, 95% сайтов на битриксе где используются стандартные роуты. Если роуты кастомные, конфиг уже придется дорабатывать. Для этого в панели ISPManager заходим в настройки нужного сайта и переключаем режим работы в FastCGI (Nginx+PHP-FPM). Далее в списке сайтов выделяем галочкой сайт который только что отредактировали и нажимаем на кнопку "Конфиг. файлы". В открывшемся редакторе ищем строку:
Сохраняем изменения и пересохраняем настройки сайта для применения изменений. Заходим на сайт проверяем что все работает. Если выдается ошибка "Forbidden" - в настройках сайта в секции "Индексная страница" указываем index.php.
Пример использования метода decompose класса QueryHelper, для исправления ошибки выборки при использовании коллекций ORM Bitrix В коллекции будет доступно:
Элементы инфоблока
Элемент инфоблока связанные с элементами инфоблока ($iblockId)
Значения св-ва с кодом COLOR элементов которые связаны с элементами инфоблока ($iblockId)
use Bitrix\Main\ORM\Query\QueryHelper;
$entity = Iblock::wakeUp($iblockId)->getEntityDataClass();
$referencePropCode = 'PROCEDURE_ID'; // код св-ва тип "Привязка к элементам" которое используется для связи элементов инфоблоков
$query = $entity::query()
->setSelect([
'ID',
'NAME',
'PREVIEW_TEXT',
'PREVIEW_PICTURE' => '',
$referencePropCode .'_ID_VALUE' => $referencePropCode,
$referencePropCode . '.ELEMENT.NAME',
$referencePropCode . '.ELEMENT.COLOR.VALUE'
])
->setOrder(["ID" => "desc"])
->setFilter([])
->setLimit(10)
->setOffset(0);
$collection = QueryHelper::decompose($query);
foreach ($collection as $element) {
$element->getId();
}
Публикую актуальную на 2024 год инструкцию по настройке облачного хранилища в модуле "Облачные хранилища" для провайдера Selectel. Selectel в 2023 году переделал интерфейсы и управление доступом к ресурсам, поэтому старые инструкции для новых пользователей Selectel не работают.
Во вкладке "Подключение" заполняем поля: Активность: {важно чекбокс снять!!!} Сортировка: 500 Провайдер: S3 compatible storage Регион: {поле осталось пустым} Имя сервера (API host): s3.ru-1.storage.selcloud.ru Ключ доступа: {Access S3-ключ} Секретный ключ: {Secret S3-ключ} Подключаться с использованием https: {чекбокс отмечен} Контейнер: {оставить то, что подставилось автоматически} Только для чтения: {чекбокс снят} Каноническое имя домена (CNAME): {поле оставляем пустым}
Нажимаем "Применить".
Первый раз вышло сообщение "Ошибка добавления контейнера: нераспознанный ответ службы (ошибка #3)." Настоящая ошибка выглядела так "Error establishing an SSL connection". Поймал настоящую ошибку, изменив в файле bitrix/modules/clouds/classes/general/storage_service_s3.php массив для записи в лог. И в файле init.php включил логирование запросов к провайдеру с помощью константы define('BX_CLOUDS_TRACE', true);
Для исправления ошибки "Error establishing an SSL connection", открыл в браузере https://s3.ru-1.storage.selcloud.ru/ и экспортировал все сертификаты из цепочки. Сертификаты на сервере с сайтом добавил в доверенные.
После добавления сертификатов в доверенные ошибка ушла. Подключение сохранилось и в Selectel контейнер создался.
В Selectel контейнер создается как приватный. Переходим в контейнер на вкладку "Конфигурация" https://my.selectel.ru/storage/{storage uid}/containers/ru-1/{имя контейнера}/configuration, делаем контейнер публичным. После того как сделали контейнер публичным, рядом на вкладке "Домены", появляется ссылка на публичный домен. https://{контейнер uid}.selstorage.ru Копируем публичный домен без https:// в поле "Каноническое имя домена (CNAME)" на вкладке "Подключение" в Битриксе, которое ранее оставили пустым.
Когда поле Каноническое имя домена (CNAME) не заполнено, битрикс формирует ссылки такого вида: https://s3.ru-1.storage.selcloud.ru/{название контейнера}/{путь до файла}, по которым доступ к файлу запрещен. Когда в поле Каноническое имя домена (CNAME) вписываем публичный домен, который предоставляет Selectel, то ссылки становятся https://{публичный домен контейнера}/{путь до файла} и файлы начинают скачиваться.
Переходим на вкладку "Правила". По умолчанию там правило с пустыми полями. Заполняем значения в полях. Если оставить пустыми, то после активации подключения в хранилище полетят ВСЕ новые файлы.
Сохраняем.
В списке подключений https://example.ru/bitrix/admin/clouds_storage_list.php?lang=ru, когда все согласования пройдены, у подключения в контекстном меню нажимаем "Активировать", далее "Переместить файлы в облачное хранилище". Ждем перемещения, после этого сбрасываем кэш сайта.
Здравствуйте, я новичок. Подскажите, как можно исправить ошибку в меню в футере. На всех страницах настроено так, ссылка на раздел становиться некликабельной, когда ты находишься в этом разделе. Стоит class="selected". Но на одной странице у двух разделов в инструменте разработчика отображается class="selected" (и из-за этого ссылка неактивна). Подскажите как это можно исправить?
Какое-то время не формировались фискальные чеки по оплатам. Потребовалось создание чеков коррекции для таких оплат. Требовалось выбрать завершенные оплаты за период, когда была сломана касса, и отобразить их как XML согласно документации XML сохранялся в файл и загружался в личном кабинете https://online.atol.ru/lk/ui/#/xml.
Обмен данными через Web Сервисы IIS через XDTO . Ничего серьезного, 1С JSON тоже может обрабатывать. Пусть не пугают слова SOAP, XDTO
Многие обратили внимание на неожиданно большое количество условно-бесплатных приложений в маркетплейсе Б24 и преогромное количество вакансий с содержанием "интеграция с 1С и внешними системами"
Есть много готовых удобных инструментов для интеграции, требующие дополнительных ресурсов. Удобные, в два-три клика. Сегодня расскажу про "30 строк кода" или новую тему для обучения в "школах программирования за месяц" "Вложи 20тр, получи 420тр" . Спасибо Равшану Намазову и его партнеру Юлию Кирюше , а то бы мне и в голову не пришла идея опубликовать статью и писать код ( API_bitrix24_1C )
Обмен данными через Web Сервисы ? Теперь это сделать можно легко и быстро. (1С web-service, которую может настроить выпускник ВУЗа) Со стороны Bitrix24 - не надо писать апплеты с валидацией, не надо заморачиваться с токенизацией и форматом данных и подробной документацией, тестированием. Есть FastAPI и fastBitrix24. Весь код представлен на https://github.com/validtugrikov/API_bitrix24_1C
Для организации обмена данными между 1С и Bitrix24 с использованием PHP, FastAPI и 1С, можно следовать следующей схеме:
Схема обмена данными
PHP код в Bitrix24: Отправляет запрос с помощью curl к FastAPI приложению.
FastAPI приложение: Обрабатывает запрос от Bitrix24, формирует данные в формате XDTO и отправляет запрос к 1С с использованием requests.post.
1С: Получает и обрабатывает данные, отправленные с FastAPI приложения.
Шаги реализации
PHP код в Bitrix24
В вашем бизнес-процессе Bitrix24, используйте curl для отправки данных на FastAPI приложение. Пример кода на PHP:
Создайте приложение на FastAPI, которое будет принимать запросы от Bitrix24 и отправлять их в 1С. Пример кода на Python с использованием FastAPI и requests:
Создайте обработчик в 1С, который будет принимать запросы и обрабатывать данные в формате XDTO. Пример кода на 1С
Процедура ОбработатьЗапрос(Запрос)
HTTPЗапрос = Новый HTTPЗапрос(Запрос);
ТелоЗапроса = HTTPЗапрос.ПолучитьТелоКакСтроку();
Данные = СтрНайти(ТелоЗапроса);
// Пример обработки данных
Имя = Данные["name"];
ЭлектроннаяПочта = Данные["email"];
// Обработка данных (сохранение в базе и т.д.)
HTTPОтвет = Новый HTTPОтвет(200);
HTTPОтвет.УстановитьТело(Новый HTTPСообщение(Новый Строка(Формат("Данные успешно получены: %1", Имя))));
Запрос.ОтправитьОтвет(HTTPОтвет);
КонецПроцедуры
Пример схемы взаимодействия
Bitrix24 (PHP):
Отправка данных на FastAPI приложение.
curl запрос с данными в формате JSON.
FastAPI (Python):
Прием данных от Bitrix24.
Формирование данных в формате XDTO.
Отправка данных в 1С с использованием requests.post.
1С (1C):
Прием данных от FastAPI.
Обработка и сохранение данных.
Пример XDTO данных
Формат XDTO данных может быть любым, но для примера это может быть JSON:
Таким образом, схема обмена данными между 1С и Bitrix24 с использованием PHP, FastAPI и 1С будет состоять из четко определенных шагов по передаче данных между системами, обеспечивая гибкость и масштабируемость интеграции.
По умолчанию агенты на кроне запускаются раз в минуту.
Для запуска раз в секунду используется скрипт-прослойка.
# Содержимое command-every-second.sh
#!/bin/bash
command=$@
# Пробелы и косые в команде заменяются на нижние подчеркивания.
no_spaces=`echo $command | sed -e 's/\s/_/g' -e 's|/|_|g'`
# Имя файла для блокировки на время выполнения основной команды.
lockfile=/tmp/$no_spaces.lock
# Раз в секунду пытаемся поставить блокировку на команду и выполнить.
for i in {1..60}
do
/usr/bin/flock -n $lockfile $command
/bin/sleep 1
done
rm $lockfile
# Пример команды для крона.
crontab -e
* * * * * nice -n 1 ionice -c2 -n4 /var/www/www-root/data/command-every-second.sh /opt/php81/bin/php -f /var/www/www-root/data/www/example.ru/bitrix/php_interface/cron_events.php >/dev/null 2>&1
Утилиты nice и ionice устанавливаем отдельно под рутом, если не установлены. Утилиты используются для запуска агентов на кроне с более низким приоритетом, чем другие процессы на сервере.
Устанавливаем консольную утилиту для конвертации картинок в webp Оригинал: https://www.digitalocean.com/community/tutorials/how-to-create-and-serve-webp-images-to-speed-up-your-website В оригинале есть как настроить для Ubuntu и Rewrite для Apache через .htaccess Для случаев, когда используется оригинальное имя картинки, требуется изменение в формировании webp_path. Например, в одну директорию заливают photo.jpeg и photo.png разного содержания, на выходе получается photo.webp для png, а картики в jpeg как будто и не было. Скрипты и настройки ниже делались для проекта с уникальными названиями картинок.
Сборка redis.so для ispmanager 5 Для php 8.1, для других версий меняется путь /opt/php74/, /opt/php82/ и т.д. Релизы в репозиториях igbinary и phpredis подбираются под версию php.
wget https://github.com/igbinary/igbinary/archive/refs/tags/3.2.14.zip -O igbinary.zip
unzip -o ./igbinary.zip
cd igbinary-3.2.14/
/opt/php81/bin/phpize
./configure --with-php-config=/opt/php81/bin/php-config
make && make install
#Обязательное расширение
echo 'extension=igbinary.so' > /opt/php81/etc/php.d/igbinary.ini
wget https://github.com/phpredis/phpredis/archive/refs/tags/5.3.7.zip -O phpredis.zip
unzip -o ./phpredis.zip
cd phpredis-5.3.7/
/opt/php81/bin/phpize
./configure --with-php-config=/opt/php81/bin/php-config --enable-redis-igbinary
make && make install
echo 'extension=redis.so' > /opt/php81/etc/php.d/redis.ini
#Рестарт сервера php, в данном случае apache
systemctl restart httpd
В php_info() проверить, что у redis появился доступный метод сериализации
Добрый день! Подскажите, пожалуйста, кто-то сталкивался с проблемой, когда при внесении изменений в элемент ИБ слетают стили? Конкретно при сохранении или применении правок разделяется тег <style> и его уже невозможно поправить: Доступ: контент-менеджер
Примерная команда для создания символической ссылки local на другую папку, в вашем случае может быть другой путь.
# путь может отличаться на сервере
# не запускать из под root, лучше под своим пользователем.
# !! сайт битрикса добавил в путь пробел.
#ln -s ../. ./www/local local
Мы делали общую папку local, раздельные папки local. Пришли к решению:
- при добавлении нового сайта на разных доменах всегда делать общую папку local, вместе с bitrix и upload - с разными папками local админка работает по-разному, в зависимости от домена под которым зашли - разные $_SERVER["DOCUMENT_ROOT"] и разные local, - делать общую папку /local, чтобы в админке были списки шаблонов сайта, и Битрикс ничего не ломал при сохранении настроек сайта, чтобы срабатывали все обработчики событий в админке и подключались все модули.
Фактически, при добавлении второго сайта приходится дорабатывать первый сайт, чтобы он поддерживал многосайтовость. Это можно включать в оценку работ по дополнительному сайту.
- обработчики будут вызываться на всех сайтах. Надо делать проверки внутри обработчиков для каких сайтов обработчики. Например, Обработчики для авторизации по телефону должны иметь настройки для каких сайтов. - обработчики можно указывать для одного из сайтов в /local/php_interface/s1/init.php, где s1 - id сайта , но в админке этот обработчик из /s1/init/php не вызовется - свои модули дорабатывать, чтобы поддерживали многосайтовость, если мешают работать одному из сайтов. - доработка модуля из маркетплейса, если не наш, - поменять версию с 1.1.0 на 1001.1.0, чтобы не обновлялся. Поменять название и описание, что модуль изменён и что в нём изменено. В будущем самостоятельно следить за модулем и его обновлениями, - шаблоны и классы, если они относятся только к одному сайту назвать с именем сайта в папке local. - шаблоны компонентов или сайтов с одинаковым именем переименовывать. Избегать имён шаблонов компонентов .default в шаблоне сайта .default - обработчики связанные с почтовыми шаблонами должны понимать для какого сайта обрабатывается письмо
Общая папка local избавляет от кучи проблем. Правда, создаются новые проблемы. Непонятно, к какому из двух сайтов относится общий код - желательно комментировать или переименовать. Но это лучше, чем неправильно работающая админка.
Здравствуйте, подскажите пожалуйста. Решил познакомиться с 1cbitrix и хочу научиться создавать свой шаблон с 0 для 1cbitrix. какие курсы и книги и другие источники информации посмоветуете?