Preconditions
- Magento v2.19
- PHP 7 / MySQL 5.6
Steps to reproduce
- Go to Reports > Products > Ordered
- Choose Range and Show By: Year
- Hit Export to: CSV (or XML)
Expected result
- A CSV (or XML) with data similar to what is shown on the web version of the report should be downloaded
Actual result
- A CSV (or XML) file with column headers only and no data. I see the following in my exception.log:
[2017-09-22 01:09:45] main.CRITICAL: Magento\Framework\Exception\LocalizedException: The element 'adminhtml.report.grid.columnSet' already has a child with alias 'ordered_qty' in .../public_html/vendor/magento/framework/Data/Structure.php:611
Stack trace:
#0 /vendor/magento/framework/Data/Structure.php(319): Magento\Framework\Data\Structure->_insertChild('adminhtml.repor...', 'adminhtml.repor...', NULL, 'ordered_qty')
#1 /vendor/magento/framework/View/Layout/ScheduledStructure/Helper.php(196): Magento\Framework\Data\Structure->setAsChild('adminhtml.repor...', 'adminhtml.repor...', 'ordered_qty')
#2 /vendor/magento/framework/View/Layout/GeneratorPool.php(115): Magento\Framework\View\Layout\ScheduledStructure\Helper->scheduleElement(Object(Magento\Framework\View\Layout\ScheduledStructure), Object(Magento\Framework\View\Layout\Data\Structure), 'adminhtml.repor...')
#3 /vendor/magento/module-backend/Model/View/Layout/GeneratorPool.php(56): Magento\Framework\View\Layout\GeneratorPool->buildStructure(Object(Magento\Framework\View\Layout\ScheduledStructure), Object(Magento\Framework\View\Layout\Data\Structure))
#4 /vendor/magento/framework/View/Layout/GeneratorPool.php(84): Magento\Backend\Model\View\Layout\GeneratorPool->buildStructure(Object(Magento\Framework\View\Layout\ScheduledStructure), Object(Magento\Framework\View\Layout\Data\Structure))
#5 /vendor/magento/framework/View/Layout.php(327): Magento\Framework\View\Layout\GeneratorPool->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#6 /vendor/magento/framework/View/Layout/Builder.php(129): Magento\Framework\View\Layout->generateElements()
#7 /vendor/magento/framework/View/Page/Builder.php(55): Magento\Framework\View\Layout\Builder->generateLayoutBlocks()
#8 /vendor/magento/framework/View/Layout/Builder.php(65): Magento\Framework\View\Page\Builder->generateLayoutBlocks()
#9 /vendor/magento/framework/View/Page/Config.php(197): Magento\Framework\View\Layout\Builder->build()
#10 /vendor/magento/framework/View/Page/Config.php(207): Magento\Framework\View\Page\Config->build()
#11 /vendor/magento/framework/App/View.php(170): Magento\Framework\View\Page\Config->publicBuild()
#12 /vendor/magento/framework/App/View.php(114): Magento\Framework\App\View->loadLayoutUpdates()
#13 /vendor/magento/module-reports/Controller/Adminhtml/Report/Product/ExportSoldCsv.php(29): Magento\Framework\App\View->loadLayout()
#14 /vendor/magento/framework/App/Action/Action.php(102): Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv->execute()
#15 /vendor/magento/module-backend/App/AbstractAction.php(226): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#16 /vendor/magento/framework/Interception/Interceptor.php(74): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
#17 /vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor->___callParent('dispatch', Array)
#18 /vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Reports...', 'dispatch', Object(Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor), Array, 'adminAuthentica...')
#19 /vendor/magento/module-backend/App/Action/Plugin/Authentication.php(143): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#20 /vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#21 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Reports...', 'dispatch', Object(Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor), Array, 'adminMassaction...')
#22 /vendor/magento/module-backend/App/Action/Plugin/MassactionKey.php(33): Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#23 /vendor/magento/framework/Interception/Interceptor.php(142): Magento\Backend\App\Action\Plugin\MassactionKey->aroundDispatch(Object(Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#24 /var/generation/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldCsv/Interceptor.php(26): Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor->___callPlugins('dispatch', Array, Array)
#25 /vendor/magento/framework/App/FrontController.php(55): Magento\Reports\Controller\Adminhtml\Report\Product\ExportSoldCsv\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#26 /vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#27 /vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#28 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'install')
#29 /vendor/magento/framework/Module/Plugin/DbStatusValidator.php(69): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#30 /vendor/magento/framework/Interception/Interceptor.php(142): Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#31 /var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#32 /vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#33 /vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#34 /index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#35 {main} [] []
I’ve noticed that CSV report contains only headers when there were no orders on the first day of the range for the report. Thanks, pull request #12909 by @bordeo solved this problem for me (Magento 2.1.10).
Reopening based on additional reports.
I experienced the same issue and i propose a fix with this pull request https://github.com/magento/magento2/pull/12909