Перейти к содержимому


Фото
* * * * * 3 голосов

Экспорт заказов в Excel

экспорт заказов экспорт в excel заказы

  • Чтобы отвечать, сперва войдите на форум
52 ответов в теме

#1 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 30.03.2016 - 01:25

1. добавляем в api/Orders.php в ф-ю get_orders ПОСЛЕ
$id_filter = '';

код

$date_from = '';
$date_to = '';
$order_by = '';

2. добавить в api/Orders.php в ф-ю get_orders фильтры (примерно 60я строка)

/***************************/
if($filter['order_by']==1)
	$order_by  = $this->db->placehold('ORDER BY id ASC');
else
	$order_by  = $this->db->placehold('ORDER BY id DESC');

if(isset($filter['date_from']))
	$date_from = $this->db->placehold('AND DATE(o.date) >= ?', $filter['date_from']);
if(isset($filter['date_to']))
	$date_to = $this->db->placehold('AND DATE(o.date) <= ?', $filter['date_to']);		
/***************************/

3. заменяем в api/Orders.php в ф-и get_orders следующий участок кода (примерно строка 88)

$id_filter $status_filter $user_filter $keyword_filter $label_filter $modified_since_filter GROUP BY o.id ORDER BY status, id DESC $sql_limit", "%Y-%m-%d");

на код

$id_filter $date_from $date_to $status_filter $user_filter $keyword_filter $label_filter $modified_since_filter GROUP BY o.id $order_by $sql_limit", "%Y-%m-%d");
4. в simpla/IndexAdmin.php ПОСЛЕ
'OrdersAdmin'         => 'orders',

добавляем

'ExportXLAdmin'	      => 'orders',

5. в simpla/design/html/orders.tpl ПОСЛЕ

<a class="add" href="{url module=OrderAdmin}">Добавить заказ</a>

добавляем ссылку на экспорт

<a href="{url module=ExportXLAdmin}" style="float: right; margin-right: 44px;" title="Выгрузить все заказы"><img src="./design/images/export_excel.png"></a>

6. закидываем из архива в /simpla все из папки simpla

 

 

Скрины:

https://yadi.sk/i/GU8lrd2RqaWyb

https://yadi.sk/i/8yap0FhjqaWzG

https://yadi.sk/i/rYot5oU1qaWzp

https://yadi.sk/i/EcAAuKm6qaX3x


Изменено: mishanya, 31.03.2016 - 22:00


#2 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 30.03.2016 - 10:16

Разработка весьма симпатичная. Спасибо!

 

Некоторые замечания:

1. Если при попытке экспорта не найдено ни одного заказа согласно фильтру, то сбрасываются все значения полей формы  к значениям по умолчанию - это неудобно.

2. В  колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.

3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования...



#3 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 30.03.2016 - 15:16

 3. Непонятно, зачем использован формат XLS - разработка усложнена, а никаких преимуществ формата XLS в итоге не видно. Разве что планируются дальнейшие усовершенствования...

 

не вижу усложнений. только ваши домыслы.

 

1. Если при попытке экспорта не найдено ни одного заказа согласно фильтру, то сбрасываются все значения полей формы  к значениям по умолчанию - это неудобно.

2. В  колонке ПОКУПКИ показываются сведений только об одном товаре вместо полного списка.

по п2 уже исправил, вечером перегружу архив. по п1 возможно и так.



#4 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 30.03.2016 - 16:31

3. Ваше решение требует загрузки на сервер 3M скриптов PHPExcel.  Это мощнейший инструмент для работы с форматом XLS из PHP. Из него ВЫ используете практически почти что одну функцию setCellValueByColumnAndRow.  А ради чего? В стандарте Simpla при импорте  используется fputcsv - просто-препросто.

Впрочем,  это все дело вкуса. Как по мне  - так неоправданное усложнение.



#5 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 31.03.2016 - 00:20

UPD. выводит все покупки и сохраняет поля когда не найдены заказы, добавлен авторазмер ячеек.


Изменено: mishanya, 31.03.2016 - 00:21


#6 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 31.03.2016 - 09:38

1. Не исправлено.

Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено.



#7 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 31.03.2016 - 12:17

1. Не исправлено.

Пытаюсь экспортировать не все заказы, а только Выполненные. Экспорт не прошел, так как заказов не найдено. А после сообщения об ошибке в поле Статус заказов значение Выполненные оказалось сброшено.

 

если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить.



#8 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 31.03.2016 - 13:26

если бы вы прочитали правильно мое предыдущее сообщение, то увидели бы, что ПОЛЯ сохраняются а не фильтр. фильтр по-прежнему сбрасывается. для меня так удобнее. если нет ничего по даному фильру почему бы его не сбросить. если кому-то будет нужно отдельно, передачу статуса заказа можно добавить.

 

1. Если Вам так удобнее, дело ваше. Но обычно при передаче формы на сервер все значения этой формы сохраняются независимо от того, относятся ли поля формы к полям таблицы, к фильтрации записей таблицы или еще чему другому. Делается не случайно, если чуть поразмыслить, легко понять, почему это удобно. Если надо сбросить значения полей, для этого ставят специальную кнопку - это можно увидеть и на форуме в различных разработках фильтров по свойствам.

 

4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку.



#9 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 31.03.2016 - 14:58

 4. Если вдруг один из заказов, подлежащих экспорту, окажется без покупок, то файл сгененированный файл XLS будет совсем неправильным, а при открытии в Excel даст ошибку.

 

у меня все хорошо генерирует и в пустых закзах https://yadi.sk/i/OzaEGaYnqcxRc


Изменено: mishanya, 31.03.2016 - 15:03


#10 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 31.03.2016 - 16:29

4. Должно, зависит от настройки показа ошибок.

У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:

Warning:  Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106

И само содержимое файла - в виде HTML.



#11 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 31.03.2016 - 21:59

4. Должно, зависит от настройки показа ошибок.

У меня прямо в тексте сгенерированного XLS-файла в начале есть строка:

Warning:  Invalid argument supplied for foreach() in simpla\ExportXLAdmin.php on line 106

И само содержимое файла - в виде HTML.

 

да, исправил 



#12 simplashop

simplashop
  • Пользователь
  • 81 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x

Опубликовано 06.04.2016 - 11:57

PHPExcel - адский ад для ограниченного сервера. жрет уж сильно много памяти, соответственно время выполнения тоже страдает



#13 baarseek

baarseek
  • Пользователь
  • 41 сообщений

Опубликовано 09.04.2016 - 19:29

А для чего вот этот фрагмент в ExportXLAdmin.php:

if($status<4)
$filter['status'] = $status;

Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. 



#14 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 09.04.2016 - 19:34

А для чего вот этот фрагмент в ExportXLAdmin.php:

if($status<4)
$filter['status'] = $status;

Он запрещает выгружать заказы со статусом больше 4, но кроме базовых "все заказы, новый, принят, выполнен, удален", обычно существуют и дополнительные статусы. 

 

обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать.



#15 baarseek

baarseek
  • Пользователь
  • 41 сообщений

Опубликовано 09.04.2016 - 19:38

обычно существуют где? это дополнение делалось для чистой симпла. если есть дополнительные статусы нужно еще и добавлять их в селект в форме. всеровно без этого не будет работать.

Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе. Про форму - это очевидно, даже для меня, так что я и писать не стал.


Изменено: baarseek, 09.04.2016 - 19:39


#16 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 09.04.2016 - 19:40

Не нападайте на меня, я просто пытаюсь разобраться. "Обычно существуют" в любом магазине на Симпле, адаптированном для реальной работы. У себя я все подогнал под рабочий макет, правда есть сложности с "все заказы" и "выполненные" - но это, скорее всего, какие-то косяки со статусами у меня в базе.

 

я не нападаю, спрашиваю), можете убрать условие, но нужно добавить будет в tpl файл ваши статусы. сложности в чем с всеми заказами и выполненными?



#17 baarseek

baarseek
  • Пользователь
  • 41 сообщений

Опубликовано 09.04.2016 - 19:50

я не нападаю, спрашиваю), можете убрать условие, но нужно добавить будет в tpl файл ваши статусы. сложности в чем с всеми заказами и выполненными?

Прошу прощения, что-то я очень мнительный сегодня ;) Да, я уже так и сделал.

Однако, проблема, похоже, в том, что их очень много. При попытке экспорта сыплются варнинги:

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay [SELECT o.id, o.delivery_id, o.delivery_price, o.separate_delivery, o.payment_method_id, o.paid, o.payment_date, o.closed, o.discount, o.coupon_code, o.coupon_discount, o.date, o.user_id, o.name, o.address, o.phone, o.email, o.comment, o.status, o.url, o.total_price, o.note, o.track FROM s_orders AS o LEFT JOIN s_orders_labels AS ol ON o.id=ol.order_id WHERE 1 AND o.status = 5 GROUP BY o.id ORDER BY id DESC LIMIT 0, 8774 ] in htdocs/api/Database.php on line 105

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay in htdocs/api/Database.php on line 150

Warning: Invalid argument supplied for foreach() in htdocs/api/Orders.php on line 105


#18 mishanya

mishanya
  • Фрилансер
  • 2 556 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 09.04.2016 - 19:54

Прошу прощения, что-то я очень мнительный сегодня ;) Да, я уже так и сделал.

Однако, проблема, похоже, в том, что их очень много. При попытке экспорта сыплются варнинги:

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay [SELECT o.id, o.delivery_id, o.delivery_price, o.separate_delivery, o.payment_method_id, o.paid, o.payment_date, o.closed, o.discount, o.coupon_code, o.coupon_discount, o.date, o.user_id, o.name, o.address, o.phone, o.email, o.comment, o.status, o.url, o.total_price, o.note, o.track FROM s_orders AS o LEFT JOIN s_orders_labels AS ol ON o.id=ol.order_id WHERE 1 AND o.status = 5 GROUP BY o.id ORDER BY id DESC LIMIT 0, 8774 ] in htdocs/api/Database.php on line 105

Warning: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay in htdocs/api/Database.php on line 150

Warning: Invalid argument supplied for foreach() in htdocs/api/Orders.php on line 105

 

на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся



#19 baarseek

baarseek
  • Пользователь
  • 41 сообщений

Опубликовано 09.04.2016 - 20:03

Да, это должно решить проблему.

Спасибо за экспорт, в остальном все отлично, осталось только допилить под себя вывод.



#20 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 09.04.2016 - 20:36

на сл. неделе обновлю решение, по принципу как работает експорт товаров, там они в несколько проходов пишутся

 

Было бы очень интересно посмотреть.

У меня как-то возникал подобный вопрос, и я с ним справиться не сумел. PHPExcel, кажется, не умеет создавать файл частями и должен сформировать все данные в оперативной памяти. И тут возникает вопрос достаточности ресурсов сервера.

А вот если отказаться от PHPExcel  и создавать файл в .csv, то проблемы отпадают...







Также с меткой «экспорт заказов, экспорт в excel, заказы»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых