Помощь Экспорт/импорт комбинаций товаров, Prestashop 1.6

CибирскийШaмaн

Создатель
Регистрация
12 Фев 2016
Сообщения
19
Реакции
11
Возникла потребность перенести магазин на новый двиг. С Престы 1.6.06 на 1.6.18. Из-за большого количества модификаций внутри прошлого движка, решено перенести всю номенклатуру на чистый двиг. Там уже новый современный шаблон, свежие модули и т.д. Товары и покупатели успешно перенесены - путем экспорта/импорта данных из соответствующих таблиц. С той разницей, что старые таблицы были на MyISAM, а новые на InnoDB.

Также успешно перенесены категории товаров и атрибуты - все цвета (у меня одежда), размеры.

Однако, возникла проблема с импортом комбинаций.

Комбинации в моём случае - необходимость. Товары учитываются по количеству товаров определённых комбинаций, а кроме того, у каждой комбинации задан свой уникальный штрих-код EAN13, по которому продавцы на офлайн-точке оформляют покупки в офлайн-режиме (да, у меня престашоп используется для учёта товаров :) ).

Я пробовал переносить непосредственно данные из таблиц: ps_product_attribute, ps_product_attribute_combination, ps_product_attribute_image, ps_product_attribute_shop, ps_stock_available.

В результате получается полная лажа: цены товаров выводятся во фронтенде как 0 (вместо Итоговой цены в таблице товаров в админке три прочерка --- и это никак не меняется, базовые цены нормальные). Также перестают выводиться товары на страницах категорий (блок многоуровневой навигации). С количествами всё верно: все штрих-коды, всё ок, но толку от этого нет. Ибо купить ничего нельзя. Эпик фэйл.

Сдаваться - не вариант, и я попытался использовать стандартное средство импорта комбинаций через Импорт CSV. Но тут тоже не получается. У меня две версии: либо в престе не предусмотрен импорт комбинаций с несколькими количествами, либо я что-то делаю не так в плане синтаксиса.

Прошу специалистов подсказать, в чём моя ошибка.

Сперва я сделал такой запрос к БД, чтобы в результате получить CSV-файл в формате образца для импорта комбинаций:

Скрытое содержимое доступно для зарегистрированных пользователей!



Вот так выглядит образец CSV для импорта категорий (две первые строки в качестве примера:(

Код:
Product ID*;Attribute (Name:Type:Position)*;Value (Value:Position)*;Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;Image position;Image URL;Delete existing images (0 = No, 1 = Yes);ID / Name of shop;Advanced Stock Managment;Depends on stock;Warehouse
1;Color:color:0, Disk space:select:1;Blue:0, 16GB:1;RF-Nano-Blue-16GB;RP-Nano-Blue-16GB;0000080446392;116052426077;100;40;0;10;1;0;0;2014-01-01;1;http://youdomain.com/img.jpg;1;0;0;0;

В моём запросе отсутствует информация по складам, но мне это и не требуется, так как я не использую управление складами.

Вот результат выполнения моего запроса и его вывода в CSV:

Код:
Product ID;Attribute (Name:Type:Position);Value (Value:Position);Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;
"8";"Цвет:color:0,Размер:radio:1";"Молочный:0,Белый:0,Чёрный:0, 4:1, 2:1, 3:1, 5:1, 6:1";"";"";"";"";"0.000000";"0.000000";"0.000000";"0";"1";"0.00";"0";"0000-00-00";

Думаю, кавычки не страшны? Без них всё импортируется. НО!

В данном варианте нет количеств по комбинациям. Нет и EAN-кодов. То есть, толку от этого файла нет никакого, в нём нет необходимой информации. Тогда я модифицировал запрос к БД, добавив перечисление через запятую количеств и штрих-кодов комбинаций по аналогии с Атрибутами и Значениями:

Скрытое содержимое доступно для зарегистрированных пользователей!


В результате получается файл с таким контентом:

Код:
Product ID;Attribute (Name:Type:Position);Value (Value:Position);Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;
"8";"Цвет:color:0,Размер:radio:1";"Молочный:0,Белый:0,Чёрный:0,4:1,2:1,3:1,5:1,6:1";"";"";",2000576220015";"";"0.000000";"0.000000";"0.000000";"0";"1";"0.00";"0";"0000-00-00";

Для комбинации, где не указан штрих-код, получается пустое место, после которого идёт запятая: ",2000576220015"

С количествами вообще непонятно, почему-то они у меня не перечисляются, хотя сделал всё по аналогии.

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

В чём моя ошибка? Или ошибки, если их несколько? Буду очень признателен за подсказки и замечания.
 
Возникла потребность перенести магазин на новый двиг. С Престы 1.6.06 на 1.6.18. Из-за большого количества модификаций внутри прошлого движка, решено перенести всю номенклатуру на чистый двиг. Там уже новый современный шаблон, свежие модули и т.д. Товары и покупатели успешно перенесены - путем экспорта/импорта данных из соответствующих таблиц. С той разницей, что старые таблицы были на MyISAM, а новые на InnoDB.

Также успешно перенесены категории товаров и атрибуты - все цвета (у меня одежда), размеры.

Однако, возникла проблема с импортом комбинаций.

Комбинации в моём случае - необходимость. Товары учитываются по количеству товаров определённых комбинаций, а кроме того, у каждой комбинации задан свой уникальный штрих-код EAN13, по которому продавцы на офлайн-точке оформляют покупки в офлайн-режиме (да, у меня престашоп используется для учёта товаров :) ).

Я пробовал переносить непосредственно данные из таблиц: ps_product_attribute, ps_product_attribute_combination, ps_product_attribute_image, ps_product_attribute_shop, ps_stock_available.

В результате получается полная лажа: цены товаров выводятся во фронтенде как 0 (вместо Итоговой цены в таблице товаров в админке три прочерка --- и это никак не меняется, базовые цены нормальные). Также перестают выводиться товары на страницах категорий (блок многоуровневой навигации). С количествами всё верно: все штрих-коды, всё ок, но толку от этого нет. Ибо купить ничего нельзя. Эпик фэйл.

Сдаваться - не вариант, и я попытался использовать стандартное средство импорта комбинаций через Импорт CSV. Но тут тоже не получается. У меня две версии: либо в престе не предусмотрен импорт комбинаций с несколькими количествами, либо я что-то делаю не так в плане синтаксиса.

Прошу специалистов подсказать, в чём моя ошибка.

Сперва я сделал такой запрос к БД, чтобы в результате получить CSV-файл в формате образца для импорта комбинаций:




Вот так выглядит образец CSV для импорта категорий (две первые строки в качестве примера:(

Код:
Product ID*;Attribute (Name:Type:Position)*;Value (Value:Position)*;Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;Image position;Image URL;Delete existing images (0 = No, 1 = Yes);ID / Name of shop;Advanced Stock Managment;Depends on stock;Warehouse
1;Color:color:0, Disk space:select:1;Blue:0, 16GB:1;RF-Nano-Blue-16GB;RP-Nano-Blue-16GB;0000080446392;116052426077;100;40;0;10;1;0;0;2014-01-01;1;http://youdomain.com/img.jpg;1;0;0;0;

В моём запросе отсутствует информация по складам, но мне это и не требуется, так как я не использую управление складами.

Вот результат выполнения моего запроса и его вывода в CSV:

Код:
Product ID;Attribute (Name:Type:Position);Value (Value:Position);Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;
"8";"Цвет:color:0,Размер:radio:1";"Молочный:0,Белый:0,Чёрный:0, 4:1, 2:1, 3:1, 5:1, 6:1";"";"";"";"";"0.000000";"0.000000";"0.000000";"0";"1";"0.00";"0";"0000-00-00";

Думаю, кавычки не страшны? Без них всё импортируется. НО!

В данном варианте нет количеств по комбинациям. Нет и EAN-кодов. То есть, толку от этого файла нет никакого, в нём нет необходимой информации. Тогда я модифицировал запрос к БД, добавив перечисление через запятую количеств и штрих-кодов комбинаций по аналогии с Атрибутами и Значениями:



В результате получается файл с таким контентом:

Код:
Product ID;Attribute (Name:Type:Position);Value (Value:Position);Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;
"8";"Цвет:color:0,Размер:radio:1";"Молочный:0,Белый:0,Чёрный:0,4:1,2:1,3:1,5:1,6:1";"";"";",2000576220015";"";"0.000000";"0.000000";"0.000000";"0";"1";"0.00";"0";"0000-00-00";

Для комбинации, где не указан штрих-код, получается пустое место, после которого идёт запятая: ",2000576220015"

С количествами вообще непонятно, почему-то они у меня не перечисляются, хотя сделал всё по аналогии.

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

В чём моя ошибка? Или ошибки, если их несколько? Буду очень признателен за подсказки и замечания.
А не легче просто нужные таблицы из базы в базу перенести?
 
Возникла потребность перенести магазин на новый двиг. С Престы 1.6.06 на 1.6.18. Из-за большого количества модификаций внутри прошлого движка, решено перенести всю.....

В чём моя ошибка? Или ошибки, если их несколько? Буду очень признателен за подсказки и замечания.

Крайне рекомендую поискать в гугле MYSQL DIFF или DATABASE DIFF - я выбрал например MySQL Comparison Bundle, сравните вашу БД от "боевого" сайта с БД нового, "чистого". Очень помогает сэкономить время при миграции!
 
А не легче просто нужные таблицы из базы в базу перенести?

Так вот же, я писал:

Я пробовал переносить непосредственно данные из таблиц: ps_product_attribute, ps_product_attribute_combination, ps_product_attribute_image, ps_product_attribute_shop, ps_stock_available.

В результате получается полная лажа: цены товаров выводятся во фронтенде как 0 (вместо Итоговой цены в таблице товаров в админке три прочерка --- и это никак не меняется, базовые цены нормальные). Также перестают выводиться товары на страницах категорий (блок многоуровневой навигации). С количествами всё верно: все штрих-коды, всё ок, но толку от этого нет. Ибо купить ничего нельзя. Эпик фэйл.

Не работает это..


Крайне рекомендую поискать в гугле MYSQL DIFF или DATABASE DIFF - я выбрал например MySQL Comparison Bundle, сравните вашу БД от "боевого" сайта с БД нового, "чистого". Очень помогает сэкономить время при миграции!

Спасибо, попробую :)

И всё-таки интересно, возможен ли импорт комбинаций стандартным функционалом престы из CSV... Не зря же я этот многоэтажный запрос городил
 
И всё-таки интересно, возможен ли импорт комбинаций стандартным функционалом престы из CSV... Не зря же я этот многоэтажный запрос городил

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

DaoKakao, а не осталось ли для сравнения образца запроса к БД? Буду очень признателен.
И на какие именно данные следует обратить внимание, может какие-то особенности синтаксиса или что-то подобное? Может, с высоты вашего опыта видно косяки моего CSV? Заранее благодарю.
Код:
Product ID;Attribute (Name:Type:Position);Value (Value:Position);Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;
"8";"Цвет:color:0,Размер:radio:1";"Молочный:0,Белый:0,Чёрный:0,4:1,2:1,3:1,5:1,6:1";"";"";",2000576220015";"";"0.000000";"0.000000";"0.000000";"0";"1";"0.00";"0";"0000-00-00";

Если не работает, значит не все данные перенес или сама таблица не соответствует новой версии престы. Нужно посмотреть как в дефолтной престе стоят поля, + в зависимости от версии пхп переносить нумерацию.

sergiykhd, с полями всё ок, структура таблиц одинакова. Движки разные, но это вряд ли может как-то мешать. В частности, клиенты, товары и атрибуты товаров экспортировались корректно. Категории тоже. Только с комбинациями не задалось... Я не понял про нумерацию в зависимости от версии php. Старая версия престы у меня на 5.4, новая на 7.1. Какие различия могут быть в нумерации, объясните, пожалуйста.
 
DaoKakao, а не осталось ли для сравнения образца запроса к БД? Буду очень признателен.
И на какие именно данные следует обратить внимание, может какие-то особенности синтаксиса или что-то подобное? Может, с высоты вашего опыта видно косяки моего CSV? Заранее благодарю.
Код:
Product ID;Attribute (Name:Type:Position);Value (Value:Position);Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;
"8";"Цвет:color:0,Размер:radio:1";"Молочный:0,Белый:0,Чёрный:0,4:1,2:1,3:1,5:1,6:1";"";"";",2000576220015";"";"0.000000";"0.000000";"0.000000";"0";"1";"0.00";"0";"0000-00-00";

sergiykhd, с полями всё ок, структура таблиц одинакова. Движки разные, но это вряд ли может как-то мешать. В частности, клиенты, товары и атрибуты товаров экспортировались корректно. Категории тоже. Только с комбинациями не задалось... Я не понял про нумерацию в зависимости от версии php. Старая версия престы у меня на 5.4, новая на 7.1. Какие различия могут быть в нумерации, объясните, пожалуйста.

Я правил csv в LibreOffice, потом его штатно импортил. LO мне показался погибче в настройках, хотя это на любителя.
Запрос к БД - да стандартный, который генерится при дампе БД:
Код:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

DROP TABLE IF EXISTS `ps_attribute`;
CREATE TABLE IF NOT EXISTS `ps_attribute` (
  `id_attribute` int(11) NOT NULL AUTO_INCREMENT,
  `id_attribute_group` int(11) NOT NULL,
  `color` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `position` int(11) NOT NULL,
  PRIMARY KEY (`id_attribute`),
  KEY `attribute_group` (`id_attribute_group`)
) ENGINE=InnoDB AUTO_INCREMENT=416 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

/* ВОТ ЭТУ СТРОКУ НИЖЕ Я ДОБАВЛЯЮ ЕСЛИ НЕ ХОЧУ ДРОПАТЬ/СОЗДАВАТЬ ТАБЛИЦУ, КАК В ВЫРАЖЕНИИ ВЫШЕ  */
/*******  DELETE FROM ps_attribute *****/

/*!40000 ALTER TABLE `ps_attribute` DISABLE KEYS */;
INSERT INTO `ps_attribute` (`id_attribute`, `id_attribute_group`, `color`, `position`) VALUES
    (9, 1, '', 0);
... остальной текст пропущен

Единственно на что имеет смысл обратить внимание - при ручном наборе данных в CSV бывает легко ошибиться, когда копипастишь много похожих атрибутов.
Например, в вашем примере в поле EAN13 кажется лишняя запятая перед номером. Еще мне кажется, что в вашем примере какая-то фигня с полями Attribute (Name:Type:рosition) и Value (Value:рosition) - насколько я понимаю, на каждое значение (Value) атрибута должна быть отдельная запись, а вы все значения в одно поле одной записи норовите запихнуть.
По нумерации - при переносе/импорте данных я обычно всегда выбираю галку, чтобы нумерация бралась из CSV, ибо в моём случае id товаров идут не подряд, с пропусками, как и id комбинаций, а так как в БД престы товары, характеристики и комбинации связаны по их соответствующим id, то нарушение этой нумерации всё развалит.
 
DaoKakao, а не осталось ли для сравнения образца запроса к БД? Буду очень признателен.
И на какие именно данные следует обратить внимание, может какие-то особенности синтаксиса или что-то подобное? Может, с высоты вашего опыта видно косяки моего CSV? Заранее благодарю.
Код:
Product ID;Attribute (Name:Type:Position);Value (Value:Position);Supplier reference;Reference;EAN13;UPC;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Combination available date;
"8";"Цвет:color:0,Размер:radio:1";"Молочный:0,Белый:0,Чёрный:0,4:1,2:1,3:1,5:1,6:1";"";"";",2000576220015";"";"0.000000";"0.000000";"0.000000";"0";"1";"0.00";"0";"0000-00-00";



sergiykhd, с полями всё ок, структура таблиц одинакова. Движки разные, но это вряд ли может как-то мешать. В частности, клиенты, товары и атрибуты товаров экспортировались корректно. Категории тоже. Только с комбинациями не задалось... Я не понял про нумерацию в зависимости от версии php. Старая версия престы у меня на 5.4, новая на 7.1. Какие различия могут быть в нумерации, объясните, пожалуйста.
структура базы данных может меняться

в ранних версиях пхп нумерация шла под шапкой таблицы:

ENGINE=InnoDB AUTO_INCREMENT=2181 DEFAULT CHARSET=utf8;

в новых версиях, нумерация пишется внизу
MODIFY `id_configuration` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2181;

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

в ранних версиях пхп нумерация шла под шапкой таблицы:
в новых версиях, нумерация пишется внизу
Может, вы всё-таки имели ввиду не РНР, а MySQL?
 
Назад
Сверху