выгружать из Битрикс в Excel данные по реализации и себестоимости товаров для расчета заработной платы. Видимо, через вебхуки... Может кто-то может помочь или подсказать или дать ссылки как это сделать?
не обязательно веб хуки. как этим функционалом планируют пользоваться? его будут руками качать, или автоматически другая система будет запрашивать?
https://github.com/PHPOffice/PhpSpreadsheet для генерации эксельки.
Спасибо, что отписались. Предполагал, что в Excel данные будут попадать через запрос power query и вебхук автоматически
Большое спасибо посмотрю!
не нахожу каких-то секретных сложных моментов. нужен пхп файл, который будет получать от битрикса нужные данные, генерить по ним эксель библиотекой по ссылке выше, и отдавать на скачивание ( https://habr.com/ru/articles/151795/ ). оформить файл можно по-разному - просто файл, который будет содержать и получение данных по апи, и генерацию эксель, или контроллер (компонента/модуля). тут уже от предпочтений зависит. страшное слово "веб хук" особой магии не несет
$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet(); // Наполняем $spreadsheet данными по методам из доки PhpSpreadsheet // В конце делаем так. header('Content-Type: ' . $contentType); header( sprintf( 'Content-Disposition: attachment;filename="%s.%s"', $filename, mb_strtolower($writerType) ) ); header('Cache-Control: max-age=0'); $GLOBALS['APPLICATION']->RestartBuffer(); $writer = PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, $writerType); $writer->save('php://output'); die(); // Будет скачиваться файл с экселькой.
А насколько большой объём данных и как долго будет генерироваться пакет данных для выгрузки в Excel? Рассматривался ли в таком случае некий кеш для предварительного сбора данных (например, дополнительная таблица или хайлоад-инфоблок) отдельным php-скриптом с определенным интервалом. А потом одним запросом другим php-скрипом вся информация из кеша идёт в Excel.
Основная нагрузка будет при создании самого эксель файла
тут затрагивается вопрос реальных денег. не думаю что тут уместно какое-то кеширование, предварительная генерация файла. условно - 10 минут могут быть вопросом выполнения плана, получения премии, прохождения испытательного срока. думаю тут лучше заморочиться над скоростью работы скрипта и временем ожидания ответа, чем кеш
А что будет быстрее работать - выборка по куче таблиц с кучей джойнов или один-два запроса из кеш-таблицы?
Если нет формул, может csv-файл быстрее сделать?
Csv будет в тыщу раз быстрее)
запрос к кеш таблице будет быстрее. но все равно вряд ли сравнимо со временем обработки данных запроса и генерации файла
На мой взгляд, плюс использования кеш-таблицы (хайлоад инфоблок) в том, что, если надо, можно написать и отладить прямой sql-запрос. Можно построить свои индексы для ускорения и при этом ядро и структуры таблиц Битрикса на затрагиваются вообще.
Объем до 10К записей
Есть вероятность, что скрипт подвиснет. Если такое случится, то надо брать стандартный пример экспорта (или импорта) csv (Эксель) с перегрузкой скрипта. Потом были еще какие-то моменты с тем, что снадртный битриксовский инструмент формировал файл Эксель с сложностями прочтения на всех офисных программах, какие сейчас точно не помню.
Я всех тонкостей не помню, было давненько. Но стандартный импорт в Эксель, который стоит в поставке, зависал где-то на 1 или 2 тысячах записях, которые нужно было экспортировать. Если такое будет у тебя, то нужно будет изгаляться
Выглядит как проблемы с утечкой памяти. Как вариант - использовать свежую версию php и проверить, меняется ли число обработанных записей при увеличении выделяемой памяти для php в настройках php.ini.
Похоже на лишние символы в ячейках - двойные или одинарные кавычки, спецсимволы в записях в БД. Ловится долго и муторно - экспортом части записей, пока не найдется группа записей, которая создаёт проблему.
Пусть посмотрит, может быть, у него пройдет на 10к записей.
Обсуждают сегодня