{"error":"ERROR_CORE","error_description":"TASKS_ERROR_EXCEPTION_#256; 5f1034a72fbac4.87134003: Param #1 (itemId) for method ctaskelapseditem::update() expected to be of type \u0022integer\u0022, but given something else.; 256\/TE\/WRONG_ARGUMENTS\u003Cbr\u003E"}
Что случилось: При экспорте диалогов открытых линий в эксель выдаёт вот такое исключение
Причина
Вся причина в очень интересном подходе подключения кастомных обработчиков ajax запросов.
Ошибка вызвана отсутствием имени модуля в переменной module класса обработчика /bitrix/components/bitrix/imopenlines.statistics.detail/ajax.php, открываем файл: Переменная есть, так почему вылазит ошибка? Кто более внимательный, заметит, что в трассировке нет вообще класса ImOpenLinesStatisticsDetailAjaxController, но есть его предок Main\Controller\Export, так почему же обработку производит предок?
А потому что вот как в ядре подключаются классы обработки ajax: /bitrix/www/bitrix/modules/main/lib/engine/router.php:222
Такое решение по выявлению подключенных классов описано в комментариях к функции get_declared_classes() на php.net. И он бы работал не используя разработчики Битрикс автозагрузку классов spl_autoload_register(). В этом случае php подключает класс только после его использования, вот и получается, что в файле /bitrix/components/bitrix/imopenlines.statistics.detail/ajax.php порядок подключения классов такой:
[506] => CComponentEngine [507] => ImOpenLinesStatisticsDetailAjaxController - находится в файле /bitrix/components/bitrix/imopenlines.statistics.detail/ajax.php [508] => Bitrix\Main\Controller\Export - является предком ImOpenLinesStatisticsDetailAjaxController, и к нему обращаются первый раз [509] => Bitrix\Main\Engine\Controller - является предком Bitrix\Main\Controller\Export, и к нему обращаются первый раз
Далее в переборе этого списка проверяется Bitrix\Main\Controller\Export, который является наследником Bitrix\Main\Engine\Controller, и возвращается в качестве кастомного обработчика вместо класса ImOpenLinesStatisticsDetailAjaxController.
Вот такой вот примитивный баг, как он прошел тестировщиков я не представляю.
Решение Самое банальное решение, пока не выйдет обновление, сделать вызов Bitrix\Main\Controller\Export, где-нибудь в init.php,например:
class kostyliforever extends \Bitrix\Main\Controller\Export{}
Чат виджет подключенный на сайт выдает ошибку К сожалению, загрузить онлайн-чат не удалось :(Пожалуйста, воспользуйтесь другими каналами связи или попробуйте открыть чат позже
в консоле браузера такое LiveChatWidget.error: ERROR_CORE (Проверка сохраненной авторизации не пройдена.) t @ script.js?r=1593511923-27:260
В БУС нужно сделать персональный доступ покупателя к файлам или странице с файлами без возможности просмотра другими покупателями.
Идея такая:
Покупатель заходит в ЛК и переходит на страницу Мои документы. Там выложены договоры, акты, счета, которые туда поместил администратор/менеджер. Покупатель может открыть эти документы, скачать. В идеале, может сам помещать свои документы, но с ограничением по размерам и формату. Помещать документы в "папку покупателя" могут лишь пользователи определённой группы. Без такого доступа каждый может видеть лишь свои документы в своей ЛК или на специальной странице.
По реализации: 1. Есть такая возможность в принципе на уровне ядра? Или это нужно разрабатывать с 0? 2. Вижу 2 варианта реализации: 1) доступ к файлам на диске, 2) хранение файлов в базе в специальной таблице/цах и динамическая генерация доступа с выгрузкой документа из базы
Что нужно: А. Для начала определить, есть ли примеры реализации в БУС, есть ли потенциальная возможность в БУС реализовать это на уровне ядра, объем и трудоёмкость работ по внедрению такого решения Б. Найти/выбрать разработчика для такого решения.
Обращаюсь к сообществу, чтобы не изобретать велосипед. Вдруг кто-то подобное делал?
В Техподдержку обращался. У них предложений нет, кроме как "всё сами" и обращайтесь на форум.
Не так давно начали использовать открытые линии, и пришлось столкнуться с некоторыми неудобствами.
Инструкция WhatsApp Начали использование с подключения вотсап, и первое с чем столкнулся, с бесполезной инструкцией по настройке этого канала связи. Я был вынужден искать ответы на многие вопросы вне этой инструкции:
Нигде не написано, что требуется создать бизнес аккаунт в Facebook
Бизнес аккаунт требуется верифицировать, об этом соответственно тоже, хотя там есть подводный камень в виде за дизейбленой кнопки.
О том что необходимо предоставить права для твилио на управление вотсап в созданном бизнес аккаунте.
В общем нет описания что есть Тивилио, а это лишь провайдер, у которого до сих пор интеграция с вотсап в бетта версии, и есть много недочётов к интерфейсу администратора, например нет возможности создавать шаблоны сообщений с изображениями или видео, а только текст. Хотя это уже возможно в вотсап.
Нет предупреждения, что через вотсап не получится делать рассылки (этот функционал допиливать пришлось, использовал возможность подключения смс провайдера по rest, если кому интересно могу скинуть в подробностях как это сделать и какие там трудности ))) )
Ну и самое главное, стоило сделать сноску в начале инструкции, что при прямых руках вы можете с российским номером использовать оригинальный апи вотсап, со всеми его возможностями. Об этом узнаёшь как только открываешь доки по интеграции с вотсап на фейсбуке, но ты это делаешь уже когда нужно готовое решение здесь и сейчас, и нет времени на написание модуля.
В общем инструкция возможно просто давно не актуализировалась, хотя дата стоит 08 июня 2020.
im.bitrix.info Тут кстати отвечу и на вопрос о том, почему я не пишу в техподдержку Bitrix. Потребовалось 6 рабочих дней, что бы дождаться ответа от техподдержки что такое im.bitrix.info. И техподдержка не смогла объяснить что такое im.bitrix.info, и зачем он нужен, например коробке (ответ поражает информативностью): Вопрос задал больше из интереса какой будет ответ, так как о функциях сервиса можно догадаться:
Для удобства обновления апи каналов, если что-то изменится в апи одного из каналов не потребуется выпускать обновление
Для упрощения подключения каналов использующих OAuth пользователями, не требуется создавать приложение в аккаунте сервиса
Для распределения нагрузки потока сообщений в облачные порталы
....
И вроде бы всё хорошо, если бы из-за этого сервиса не возникала задержка в получении сообщений с каналов, особенно было ощутимо в первый день (совпадение?) в середине дня сообщения приходили на портал с задержкой в 40 минут, и в доступности нашего портала не было проблемы, это подтверждало изменение веб-хука для входящих сообщений в сервисе твилио, направляешь напрямую на портал, сообщения доходят без задержки секунда в секунду. Ответ поддержки был из разряда "перезагрузите компьютер":
На следующий день вроде всё нормализовалось, но задержка осталась от 5 секунд, она присутствовала на всех каналах связи кроме виджета на сайт, что логично, ведь виджет работает напрямую с сервером. И обнаружилась другая проблема, некоторые сообщения не доходят до открытых линий. Уже рассчитывать на поддержку не стал полез в ядро, благо сделали возможность писать лог коннектора открытых линий, он помог найти причину:
Скрипт получения сообщения останавливался из-за выбрасываемого исключения =(! Выяснять причину почему файл терялся я не стал, полез сразу по пути где было получено исключение, и немного покопав вышел на базовый класс коннекторов, причиной всему было скачивание аватарки писавшего клиента, по каким-то причинам она не всегда скачивалась. Но это бы не беда, но никто не позаботился отлавливать это исключение, что бы доставка сообщения не прерывалась!
И это ещё не всё, эта ошибка привела меня к тому, что создаёт часть задержки в доставке сообщений. Аватарка скачивалась при каждом входящем сообщении! По крайней мере для VK точно. Всё дело в том, что для сравнения данных используется MD5 хэш массива данных о пользователе полученных из коннектора, кто лажал было не понятно. Решение было топорным, отключить в коде вообще обработку изображения из каналов, это уменьшило задержку в доставке сообщений, и исключило ошибку, когда сообщение не доходило.
Итого почему мне не нравится использование im.bitrix.info:
нестабильность, да я не уверен в стабильности сервисов Битрикс, даже этот портал для разработчиков периодически падает. Ну и никто не исключает что между моим порталом и сервисом на магистрали будет авария, и я лишусь открытых линий полностью, хотя сервера каналов будут в полне доступны.
централизованность, упал сервис, недоступны все каналы кроме виджета.
зависимость от других порталов, которые используют этот сервис, например мои сообщения могу просто встать в очередь, из за того что сервер не успевает их обработать.
задержка доставки сообщений, при работе сервиса в штатном режиме.
конфиденциальность, что происходит с сообщениями не известно.
Всё это можно описать одним словом - зависимость, это дополнительное звено в доставке сообщений, которое находится вне моей ответственности, я не могу повлиять на решение проблем с этим сервисом, только писать в поддержку и ждать, ждать, ждать
ПС Данные по ошибке возникающей со скачиванием аватара передал в поддержку 4 июня, и пока не получал комментарием, только вопрос "можно ли закрыть чат?"
Турецкие сериалы на любой вкус только для вас Естественно, каждый человек желает смотреть только качественные и интересные турецкие фильмы и сериалы. К сожалению, на этот момент в мире существует минимальное количество хороших интернет ресурсов, где можно было бы посмотреть отличный турецкий сериал без регистрации и совершенно бесплатно. Множество людей привыкли смотреть многосерийные турецкие фильмы только с экранов своих ТВ, но эти времена прошли, и прямо сейчас вы сможете насладиться просмотром отличных работ на любой вкус. С радостью приглашаем всех фанатов турецких сериалов на интернет-ресурс turkserial.online, которых можно с легкостью назвать сериаломанами, ведь по всему миру существует множество людей, обожающих смотреть многосерийные турецкие фильмы. ИзумрудныйФеникс (2020) смотреть онлайн турецкий сериал на русском языке можно с легкостью и большим удовольствием на turkserial.online, где вы сможете насладиться огромной подборкой новых и качественных фильмов и сериалов турецкого производства.
Добрый день! Столкнулся с необходимостью реализовать REST API в Батрикс - управление сайтом, есть какие то полезные материалы по работе с рестом в бусе? Документация как я понял только для битр 24, гугл выдавал только какие то костыли самописные, хотелось бы понимать какой подход правильно применять при реализации REST API в БУС.
Хотел обратить внимание на одну новую особенность пользовательских полей и работы с ними через ORM. Конкретно если создать множественное поле типа Строка, и вы полнить запрос с фильтром по нему:
$q = new \Bitrix\Main\Entity\Query(FAQArticleTable::getEntity());
$q->setSelect(['ID', 'UF_NAME'])
->setFilter(['UF_THEME' => ['MAIN'],]);
то мы получим такой запрос:
SEL ECT
`f_aq_article`.`ID` AS `ID`,
`f_aq_article`.`UF_NAME` AS `UF_NAME`
FR OM `b_faq` `f_aq_article`
WHERE (UPPER(`f_aq_article`.`UF_THEME`) like upper('MAIN'))
который не принесёт результата, так как данные в поле таблицы хранятся с использованием serialize:
Такой запрос стал формироваться в последнем обновлении, которое я установил 04.06.2020 До этого формировался запрос с использованием отдельной таблицы для значений множественного поля:
SELECT `f_aq_article`.`ID` AS `ID`,
`f_aq_article`.`UF_NAME` AS `UF_NAME`
FR OM `b_faq` `f_aq_article`
WH ERE `f_aq_article`.`ID` IN (SELECT
`f_aq_article_tmp880275262`.`ID` AS `ID`
FR OM `b_faq` `f_aq_article_tmp880275262`
LEFT JOIN `b_faq_uf_theme` `f_aq_article_f_aq_article_utm_uf_theme_object_tmp880275262` ON `f_aq_article_f_aq_article_utm_uf_theme_object_tmp880275262`.`ID` = `f_aq_article_tmp880275262`.`ID`
WH ERE (UPPER(`f_aq_article_f_aq_article_utm_uf_theme_object_tmp880275262`.`VALUE`) like upper('MAIN')))
Согласен запрос не ахти, и работает медленно, но об этом ниже.
Решение
Первое что приходит в голову, добавить в фильтр маску:
$q = new \Bitrix\Main\Entity\Query(FAQArticleTable::getEntity());
$q->setSelect(['ID', 'UF_NAME'])
->setFilter(['UF_THEME' => ['%MAIN%'],]);
и это работает, но есть две проблемы:
Менять это во всех местах использования множественных строк.
Но главная проблема - это получение не верных результатов, этот запрос отберёт все строки таблицы, в которых поле содержит заданную маску.
И это очень всё портит, раньше запрос работал без использования маски и отбирал только соответствующие значения. В итоге получается, что решением этой проблемы остаётся вынос значений в отдельный hlblock, и создания связи с ним, то есть то, что раньше делалось на уровне ядра. И это решение тянет за собой реализацию в интерфейсе заполнения множественных значений значений и запись этих значений в этот отдельный hlblock, а в элемент с которым он связан идентификаторов.
ПС А использование hlblock тоже проблематично, если у вас в нем несколько десятков тысяч строк, то открытие формы элемента у которого есть поле связанное с этим hlblockом вызовет долгий рендеринг страницы, а на слабом компьютере выскочит:
Начиная с момента введения известным удостоверяющим центром "Lets'Encrypt" лимитов на количество получаемых сертификатов, у всех клиентов, имеющих на одном сервере с Битрикс окружением более 5 сайтов, начались постоянные проблемы с получением новых сертификатов при добавлении к окружению нового сайта. Беглый анализ логов dehydrated показал следующую картину - при добавлении сертификата к каждому новому домену пере выпускаются сертификаты ВСЕХ доменов окружения, полученные в LE, даже те которые получены 5 минут назад и прекрасно работают. Далее ладно бы скрипт dehydrated если для какого-то домена нельзя получить сертификат - писал в лог ошибку и переходил к следующему домену. Если вывалилась ошибка лимита - процесс ПОЛНОСТЬЮ прерывается и не запускается даже для тех доменов, у которых лимит не исчерпан. Данный вопрос был задан пользователем https://dev.1c-bitrix.ru/community/webdev/user/73692/ в теме форума https://dev.1c-bitrix.ru/community/forums/messages/forum32/topic130346/message651822/#message651822 Ответ администрации не заставил себя ждать и был - "мы ничего не значем, так работает dehydrated, ждите дня когда лимит спадет". Феерично, не правда ли! То есть нужно тебе перенести больше 20 сайтов с сервера на сервер - ТЫ БУДЕШЬ ПЕРЕНОСИТЬ ИХ МЕСЯЦАМИ, СТРАДАТЬ, и молиться на LE чтобы лимит не закончился в неподходящий момент. При этом не забывая платить за 2 сервера и отмазываясь перед клиентом почему простая операция заняла такой дикий срок!
Как я решал данную проблему:из папки /home/bitrix/dehydrated/domains переносим куда-нибудь в другое место текстовые файлы всех доменов, которые уже получили сертификаты. Далее перезапускаем через меню окружения получение сертификата для нужного сайта. dehydrated отрабатывает только для нужного домена. После получения сертификата таким способом текстовики перенесенных из папки доменов нужно вернуть, чтобы обновление сертификатов проходило штатно. Надеюсь разработчики окружения все-таки посмотрят в сторону клиентов, и доработают логику получения сертификатов. Там не такие большие изменения нужны чтобы решить данную проблему.
Столкнулся с тем, что при изменении параметров веб-формы, форма на странице сама не обновлялась. Я посмотрел код компонента form.result.new и обнаружил, что используется тегированный управляемый кэш, как описано тут:https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2978&LESSON_PATH=3913.4565.4780.2978 Кэш успешно принудительно сбрасывается функцией типа $CACHE_MANAGER->ClearByTag('form_'.$ID_формы) Однако при сохранении параметров формы эта функция для сброса кэша почему-то не вызывается. В списке событий найти событие на изменение данных самой веб-формы найти не смог: https://dev.1c-bitrix.ru/api_help/form/events/index.php Ограничился выставлением небольшого времени кэширования компонента. Написал в Битрикс, завели тикет на доработку.
Веб-форму можно привязать к одному или нескольким сайтам. В фильтрах функции CForm::GetList можно указать, привязанные к каким сайтам выбирать формы. Но результат, возвращаемый этой функцией не содержит информации о привязке найденных форм к сайтам. Если Вам нужно узнать, к каким сайтам привязана форма, можно воспользоваться функцией CForm::GetSiteArray(ID_формы) (См. https://bxapi.ru/src/?module_id=form&name=CForm::GetSiteArray) Решение подсказано службой поддержки Битрикс.
Добрый день. Подскажите, пожалуйста, как изменить иконку, которая отображается при поиске сайта с телефона, скриншот прикладываю. Заранее извиняюсь, если подобный вопрос уже был, я не нашла информацию!
Владельцы сайтов и коллеги-битриксоиды! Хочу представить свой новый модуль "Подбор бесплатных изображений". Эту штука может очень пригодится тем, кто ежедневно наполняет сайт контентом. Модуль позволяет выбирать и загружать картинки на сайт, не покидая админку битрикса и не загружая файлы на компьютер. В качестве источника изображений модуль использует сайт pixabay.com, который распространяет бесплатные для коммерческого использования картинки (полный текст лицензии здесь). Все что нужно сделать - это зарегистрироваться на сайте, скопировать из личного кабинета ключ доступа к api и указать его в настройках модуля. Модуль работает как с детальными картинками и картинками анонса, так и со свойствами типа "Файл", в т.ч. множественными (в интерфейсе окна выбора изображений можно выбрать сразу несколько).
Пробный период работы модуля - 7 дней, функциональность при этом не ограничена.
PHP Fatal error: ob_end_clean(): Cannot use output buffering in output buffering display handlers in /home/bitrix/ext_www/_____________/bitrix/modules/main/classes/general/main.php on line 3113
UPD ошибка оказалась в:
использовании функций буферизации ob_* в шаблоне компонента breadcrumb
в init.php подключался файл, где использовался $cache->StartDataCache, который использует буферизацию (ob_start и ob_end_clean).
в событии OnEndBufferContent нельзя использовать конструкции вида ob_start(), вызывающую ошибку при этом: ob_start(): Cannot use output buffering in output buffering display handlers (0) - а следовательно в обработчике событий OnEndBufferContent не допускается использовать старый d0 класс CPHPCache, который вызывает ob_start() у себя под капотом.
Решение - использовать класс d7 \Bitrix\Main\Data\Cache с вызовом \Bitrix\Main\Data\Cache::noOutput() перед запуском \Bitrix\Main\Data\Cache::startDataCache() ну или использовать хак-магию доступа к приватному члену класса CPHPCache