Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Импорт прайс-листа поставщиков в модуль "Интернет-Магазин"

12.08.2015, 22:47
Шив Игорь

Зарегистрирован:
2011-08-06
Сообщений: 14

Добрый день!

Обладаю сборкой NetCat Extra версия 5.5.0. Больше интересен модуль Интернет-магазин.
У меня есть много поставщиков, от которых приходит рассылка прайс-листа в форматах: XLS, XLSX, могут быть еще и в архиве...
! Если есть возможность ответьте пож. на данные вопросы(справку, форум, просматривал - конкретики не нашел).

1) Можно ли хоть один из этих прайс-листов XLS/XLSX выгрузить в ручном режиме в модуль интернет-магазин, используя штатные средства модуля или сборки, понимает ли данные форматы модуль? Если не штатными, то какими(посоветуйте пож. для простоты и удобства)?
2) Если Да, то как это сделать на автомате? Условно: пришел на почту прайс, модуль его подцепил(загрузилась номенклатура, цены...).
3) Если Нет, то правильно ли я понимаю, что прайс-лист нужно и никак иначе "сторонней утилитой"(какой?) преобразовывать в формат CSV, а уже далее загружать через инструмент модуля "Экспорт/Импорт CSV" и на автомате штатными средствами нереально?
P.S. Про 1С пока не говорим, все перечисленные действия нужно делать минуя 1С.
25.08.2015, 22:38
fduch
Корпорация монстров

Зарегистрирован:
2011-03-16
Сообщений: 24

Использую библиотеку excel_reader 2

Код:
$url = $_FILES["file"]["name"];
$url_tmp = $_FILES["file"]["tmp_name"];
echo "<b>Название загруженного файла:</b>".$url."<br>";
$file_exp = explode(".", $_FILES["file"]["name"]);
if (!in_array(array_pop($file_exp), array("xls","XLS","xlsx","XLSX"))) die("Неправильный формат файла. ($file_exp[1])<br>"); // Допустимы файлы только с расширением csv
$handle = fopen($url_tmp, "rt") or die ("Не удается открыть файл<br>"); // Файл csv необходимо положить в папку tmp
if (!file_exists($url_tmp)): print "Файл $url_tmp не существует!<br>"; endif;
if (is_file($url_tmp)): print "В файл $url_tmp можно писать!<br>"; else: print "Файл $url_tmp нельзя писать!<br>"; endif;


require_once ("excel_lib/excel_reader2.php");
$data = new Spreadsheet_Excel_Reader($url_tmp);

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++)
{

$Article=$data->sheets[0]['cells'][$i][2];
$Descript=$data->sheets[0]['cells'][$i][4];
$Unit=$data->sheets[0]['cells'][$i][6];
}


Делай то, чего другие не делают.
26.08.2015, 15:43
Шив Игорь

Зарегистрирован:
2011-08-06
Сообщений: 14

спасибо, проанализирую
29.08.2015, 20:35
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

1. Нет, штатной функции импорта товаров из файлов в NetCat нет, потому что товарные компоненты в каждом проекте уникальны. Это связано не с ущербностью CMS, как может сначала показаться, а наоборот, с неограниченными возможностями при использовании NetCat. улыбка
2. Автоматического импорта нет. Нужно писать свой собственный скрипт.
3. Да нет, CSV не обязателен, можно и в экселевском формате закачивать прайсы. Как тут уже посоветовали - excel reader вполне нормально с этой задачей справляется. Только скрипт импорта свой написать и все.
Для этого, разумеется, нужно, чтобы поставщики присылали свои прайсы в одинаковом формате, иначе придется под каждого поставщика писать свой скрипт загрузки.
Штатная функция "Экспорт/Импорт CSV" для решения вашей задачи не подходит. Это больше для разовой загрузки чего-либо.

В идеале бы, конечно, уговорить поставщиков, чтобы высылали свои прайсы в неком XML-файле (например, 1С-овского стандарта CommerceML), но это, наверное, не реально. Если бы это удалось, то можно было бы загружать товары поставщиков, подсовывая неткату от каждого поставщика соответствующие xml-файлики с выгрузкой из 1С, но минуя 1С, как вы и хотели. Такой режим работы система поддерживает.
29.08.2015, 22:17
Игорь
Игорь Мишарин
Игорь

Зарегистрирован:
2011-11-20
Сообщений: 479

Столкнулся с почти такой же проблемой: нужно было перенести более 30 тыс. товаров с самописной CMS на Netcat. Вариант дамп базы не подходил. На просторах интернета "нарыл" макрос, коорый xlsx (xls) отлично конвертирует в csv.
Вот он с кратким описанием сразу:
Код:
Sub csvDelim()
' Для создания csv-файла заданного формата
' Макрос добавлен 2011-02-08
' Создает csv-файл из эксельного.
' Просит указать диапазон заголовков. Необходимо указывать именно заголовки!
' Определяет диапазон строк по первому столбцу
' Спрашивает маску файла
' Можно задать разделитель и ограничитель полей
Dim i As Long, j As Long
Dim PathForFile As String
Dim NameForSave As String
Dim tempstr As String
Dim Rn As Range
Dim Delim1 As String
Dim Delim2 As String
Dim Val
On Error Resume Next
PathForFile = "C:\Готово\"
MsgBox "На вашем локальном диске будет создана папка ""Готово""", vbOKOnly, "Создание папки"
MkDir PathForFile
If Err.Number <> 75 And Err.Number <> 0 Then GoTo Ext
Err.Clear
On Error GoTo Ext
NameForSave = InputBox("Введите маску файла", "Ввод", ActiveWorkbook.Name)
Delim1 = CStr(InputBox("Введите разделитель полей", "Ввод", ";"))
Delim2 = CStr(InputBox("Введите ограничитель полей", "Ввод", """"))
Randomize
NameForSave = NameForSave & "_" & CStr(Date)
Set Rn = Application.InputBox("Выделите, пожалуйста, все ЗАГОЛОВКИ нужных столбцов.", , , , , , , 8)
i = 1
While Len(Rn.Cells(1).Offset(i).Value) > 0
i = i + 1
Wend
If i = 1 Then Exit Sub
Val = Rn.Offset(1).Resize(i).Value
On Error Resume Next
Kill PathForFile & "\" & NameForSave & ".csv"
Err.Clear
On Error GoTo Ext
Open PathForFile & "\" & NameForSave & ".csv" For Output As #1
For i = 1 To UBound(Val, 1) - 1
tempstr = Delim2 & CStr(Val(i, 1)) & Delim2
For j = 2 To UBound(Val, 2)
tempstr = tempstr & Delim1 & Delim2 & CStr(Val(i, j)) & Delim2
Next j
Print #1, tempstr
Next i
Close #1
Exit Sub
Ext:
MsgBox "Извините, ошибка!" & Err.Number & " " & Err.Description, vbOKOnly, "Упс!"
End Sub


Stark
31.08.2015, 15:30
Гость
Гость

Привет. Спасибо за информацию!
198 196 2015-08-31 15:30:46 14254
Описание проекта