<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Честно вот только в одном могу поругать, нафига в картинки поставил заставку с пустой формой обработки — ведь смысловой нагрузки, то в этой картинке ноль! А так молодца. 🙂
(1) Bober777, чтобы опубликовать модератор обязал хоть что-нибудь положить в виде скрина.
Ну пример XML-ника надо добавить, тогда тебе же плюсики нужны, а народ на что ведется? Правильно на рекламу. Она как еще говорят двигатель торговли.
Добавил пример xml
а я вот не понял… joomla бесплатный CMS. используется для разработки сайтов… структура сайта во многом зависит от шаблона который натянул, да и от самой структуры сайта… в чем прикол?
минус поставил за то, что я не понимаю назначение разработки… какие заказы? в чем смысл php файла? как он подключается к MySQL, где задавать параметры подключения, как он определяет структуру таблиц и т.п. и т.п.
че тут коментаторы коментируют, за шо плюсы ставят?
посыпаю голову пеплом, не полностью прочел заголовок… минус снял, плюс поставил, интересная для джумалы приблуда.. .не знал о ней ранее
а, виртуал март… тяжелый магазин… сходу в нем не разобрался
(8) WKBAPKA, Спасибо за честность. Если какие-то проблемки или что-то не совсем понятно пишите постараюсь ответить.
WKBAPKA, Спасибо за честность. Если какие-то проблемки или что-то не совсем понятно пишите постараюсь ответить.
та напостил я фигни… в заголовке лучше было акцентировать внимание на то что это VirtualMart… я пасатрел, джумла… думаю, как…
а магазин ставили, тяжелый зараза.. но если сможете помочь, буду очень благодарен и в долгу не останусь!
На форуме джумлы была подобная разработка, но там идёт обмен в двух направления, из УТ выгружаются товары с ценами, а с сайта загружаются заказы. Правда сейчас не знаю в каком она состоянии, доделали ли, но разработка полезная, однозначно!
(11) pashamix, у меня задачка была что номенклатура, цены и скидки задаются на сайте. Поэтому пришлось писать свое.
хорошо бы было увидеть в описании и ссылочки на другие работы подобной направленности о чем автор и упомянул в начале своей статьи.
интересным моментом стало использование конструкции:
соединение = новый httpсоединение(«***********.ru»);
соединение.Получить(«export.php»,каталогвременныхфайлов()+»temp.html»);
для запуска на выполнение php скрипта на web-сервере .
Может так оно и правильно, но мне кажется, что подключиться к mySQL из 1С и послать несколько запросов было бы куда вернее. А так получается связка такая: 1С — HTTP — PHP — mySQL — XML, а потом еще 1С — FTP.
В моем варианте это просто 1С — mySQL
И самое главное забыл: Так конечно ты молодцом. Интеграция — наше фсе.
Автор молодец… Хорошая штука
(14) это если доступ к mysql есть. через mysql и быстрее будет. но правильные админы не дают доступ к mysql … иногда лишь через ssh.
есть еще связки 1С-http-mysql и 1С-webservice-xml (как в prestashop, в последних версиях), но самое простое и быстрое(в смысле разработки) это так, как сделал автор.
хорошо бы было увидеть в описании и ссылочки на другие работы подобной направленности о чем автор и упомянул в начале своей статьи.
Вот посмотрите, может пригодится.
Я следил за проектом с самого начала. Сейчас вроде работает в двух направлениях и вроде стабильно, не проверял последнюю версию.
+ (18) Кстати вот ссылка на этом сайте на пример с которого всё и стартовало
Раз уж речь зашла о Виртуе… По поводу того что Виртуймарт «тяжелый» — вот интернет магазин с более чем 3500 страниц.
Работает вполне приемлемо по скорости. Причем надо отметить, что кеширование отключено. Просто не стоит использовать в Виртуймарте некоторые его модули, которые неоптимально написаны и реально создают высокую нагрузку на сервер. Это, например, модуль случайных товаров, дерево категорий. Ну и хостинг надо выбирать нормальный не за 2$ в месяц, а за 7-10$ оптимизированный для CMS типа Joomla.
Если говорить о движках ИМ — уже более полугода наблюдаю за проектом , но все как то не хватает времени его полностью освоить и интеграцию с 1С сделать. Рекомендую обратить на него внимание. Очень качественно написанный код и обширный функционал, а главное весьма активная команда разработки — все (ну или почти все) пожелания реализуются разработчиками.
По поводу обмена с ИМ — мое мнение, что более оптимального варианта чем прямой доступ через ODBC к базе на MySQL не придумаеш. Можно строить сколь угодно изощренную логику обмена и весь обмен в виде обработки на 1С. По скорости ODBC — наверное не самый быстрый вариант, но при правильном подходе много обменивать и не нужно (только изменения). Недостаток — надо открывать доступ для определенного IP к MySQL.
А с какой версией Joomla и Virtuemart работает?
(21) Joomla 1.5, Virtuemart точно не помню релиз, кажется 1.6
Направление Virtuemart 2.0 тупиковое — разработчики Виртуя не успевают за разработчиками Joomla 1.6/1.7
Joomla 1.7 мне очень понравилась. Порадовался что при выборе CMS не остановился на Drupal, а выбрал Joomla.
Поэтому «на будущее» выбрал HikaShop. Там есть и бесплатная версия с ограниченным функционалом и за 100 евро бизнес версия с полным функционалом.
Однако «по факту» и Виртуй в целом получается не бесплатный — практически все качественные дополнения к нему от сторонних разработчиков платные.
Сорри за в некотором роде офтопик.
(14) opx, Конечно согласен что напрямую запросы гораздо проще…. но когда сайт на хостинге и закрыто все кроме http://ftp... пришлось извращаться…
(21) timbax, joomla 1.5.15 virtuemart 1.1.9
(13) konfed, обратную загрузку на том же принципе (складсой остаток) выложу на днях
(23) «когда сайт на хостинге и закрыто все кроме ftp»
Ну понятное дело что на хостинге сайт, а как же иначе.
Кто (или что) мешает в админ панели хостинга открыть доступ к MySQL ?
(14) «правильные админы не дают доступ к mysql»
Доступ к MySQL открывается только для заданного списка IP адресов. Угроза безопасности при этом ничтожна. FTP взломать брутфорсом гораздо проще.
Другое дело что может нет доступа к админпанели хостинга… Но что это за хостинг такой несерьезный без админпанели.
(25) при чем здесь ip? существуют хостеры, которые просто и тупо закрывают доступ по портам — есть только http, причем здесь админпанелька?
это вы за всех хостеров отвечаете?
зачем мне про безопасность втираете? я что ли доступ закрываю? другим и втирайте
(24) Зуб даете, что у всех хостеров есть такая возможность? — «Кто (или что) мешает в админ панели хостинга открыть доступ к MySQL ?»
(23)А я позвонил хостинг-провайдеру и сказал, что на другой хостинг пойду — у которых есть такая возможность и они мне сразу ее дали. А так бы 100% ушел.
(25)Админ-панель? Не очень хорошо знаком с ними, но если порт закроют к mySQL — тут уж никакая админ-панель не поможет. Инфа 100% 🙂
(28) Ну, вы молодец, но здесь решение технической задачи с заданными условиями — зачем как Z-z-z, расширять условия, таким способом, который гарантированно результата может не дать и не зависит от технических условий задачи?
(27) При чем тут все в мире хостеры ? 🙂 Просто я выбираю хостера по множеству критериев. Возможность доступа к MySQL — это один из критериев.
В эпоху рыночной экономики потребитель голосует своим кошельком. Ограничение какого то определенного хостера — это не повод для построения архитектуры решения.
Я не собираюсь Вам ничего «втирать». Просто высказал свое мнение касательно Вашего поста. И «зубы» мои попрошу оставить в покое 🙂
Я ни в коей мере не оспариваю примененное автором решение. Кому что больше нравится — выбирать архитектуру решения в зависимости от хостера или выбирать хостера в зависимости от архитектуры решения. Лично мне больше нравится более простая архитектура. Вот т все что я хотел сказать.
Хорошо бы доделать и сделать возможность выбора способа соединения, напрямую к базе проще соединяться.
а в смысле нету доступа к MySQL?
если нету доступа к скулю, нету магазина… есть доступ, есть магазин… шо вы тут за шкандаль развернули?
насколько я понимаю, если я дам ссылку по http на файл php то от туда смогу сделать запрос к MySQL
Автор молодец!!! )))))))))))
Обработка очень помогла.
А каким образом можно загрузить номенклатуру с характеристиками?
А каким образом можно загрузить номенклатуру с характеристиками?
я писал выше что на днях постараюсь выложить обратный обмен.
(34) порты закрыты и все, вот что это значит, открыт только 80 http у внешнего сервака, который является клиентов mysql, а внутри у хостера находится mysql .
(35) да, можно и называется http туннелинг, я это выше указал. Для тех, кто хочет больше
(14) а ваши обработки по php можно посмотреть для примера?
(17) cool.vlad4, ссылки бы не помешали ))
User_E, так как у вас доступ к MySQL — через php или напрямую через админа?
(39)В принципе можно, но мои обработки не по php, о по mySQL. На что именно вы хотите посмотреть?
(41) AlexO, через php… я выложил 2 файла…
ссылочки точно не помешали бы
(42) сам пример передачи данных 1с-mySQL
Вот есть вариант 1С-php-mySQL
интересно взглянуть, как реализовано напрямую, тем более — говорите, что одной обработкой — сразу в mySQL ))
В общем-то стандартное решение выгрузки…. Но все же есть «НО».
Никто не смотрел на сервере как вызов типа «Соединение = Новый FTPСоединение(«»,21,»»,»»,,ложь);» подвешивает его хоть при активном, хоть при пассивном соединении? Такая выгрузка приемлема когда не много заказов падает с сайта (100-200 в день) и период «опроса» 1раз >= 20мин. При загрузке 200-300 заказов/в час таким способом, сервера уходят в «максимальную загрузку» и вот тогда начинаются тормоза на самом сайте! Обработать и создать кучу заказов из «килотонных» XML от 1С тоже требует затрат ресурсов….
При этом возникает еще одна задача: передать на сайт информацию «сформирован или нет» заказ в 1С по каждой позиции…. соответственно либо создаем новый файл XML, либо редактируем этот…. А потом пусть сервер переваривает ответный XML.
(20) Z-z-z, А поделитесь ссылкой на интеграцию hikashop с 1С, а то что-то не нашел (сорри за офтоп)
(48) Я пока что не делал интеграцию hikashop с 1С 🙁
Не приоритетное направление сейчас для меня.
(49) розница.net, да, у hikashop пока с этим туго как я погляжу(даже в направлении 1С-HS, я уже молчу о HS-1C). Видимо придется и дальше юзать VM)
(50) Написал экспорт из 1С в базу HikaShop. Прямой экспорт в БД MySQL. Вот результат
Поломал голову в плане оптимизации количества запросов, т.к. оно напрямую связано с временем экспорта.
Отслеживаю изменения в 1С при помощи плана обмена и храню в 1С в регистре соответствие HikaShop ID и объектов 1С. Это позволяет понимать надо ли добавлять объект в БД или только обновить. Цены тоже сначала сравниваю, потом обновляю отличающиеся. Вобщем достаточно эффективно получилось. Еще осталось разобраться с экспортом дополнительных полей, которые будут использоваться в фильтре.
Обработка я так понял работает в одну сторону с сайта в 1С заказы , а чем грузите из 1С номенклатуру и картинки