Интернет магазин Tamias модуль для 1С и Drupal




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-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='\

87 Comments

  1. Душелов

    Стоит сделать еще и для УТ.

    Reply
  2. Трактор

    (1) Сделал сборку для УТ. Вчера уже поздно было. Обновил картинки.

    Reply
  3. Арчибальд

    Думаю, что это круто как трактор 😀

    Reply
  4. ураниум

    А дизайн как настроить под себя?

    Reply
  5. Трактор

    (4) Темой Друпала.

    Reply
  6. ураниум

    а в где живете в случае обращения за помощью?

    Reply
  7. Трактор

    (6) Живу в Москве. Доступен по почте, скайпу, аське. Есть опыт удалённой работы.

    Reply
  8. ураниум

    будьте добры,скиньте свои контакты на ulan.2002@bk.ru

    Reply
  9. Трактор

    (8) Ушло

    Reply
  10. adrian

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

    Reply
  11. Трактор

    (10) Ошибаешься. 8.2 Не интегрируется с сайтом. Никак. Магазин на 8.2 будет выглядеть очень грустно. Трудности будут не только с интеграцией с сайтом, но и с правами доступа.

    Допустим можно извернуться и сделать анонимный доступ в 8.2. Но вдруг пользователь захотел зарегистриться?

    Reply
  12. vabue

    Насколько я понимаю, при копуке — код закрытый?

    Reply
  13. vabue

    копуке = покупке.

    А что мешает настроить хитрый NAT, который будет пробрасывать запросы с фиксированого айпи 192.168.0.5 на мой сервер?

    Reply
  14. Трактор

    (13) ничто

    Reply
  15. Трактор

    14+ надо будет подумать об этом. Посоветуюсь с народом.

    Reply
  16. Трактор

    (13) >> Насколько я понимаю, при копуке — код закрытый?

    Код тот же что доступен для скачивания. Покупатель шлёт мне IP адрес сервера, а я в ответ лицензионный ключ.

    На днях обновлю. Изменил название и исправил ошибку.

    Reply
  17. Mike_Nijel

    А можна Дистрибутив модуля Торгаш 1.0 RC1 для УТ на b_misha7b@mail.ru

    ато не получаэтьсо со скачкой, плз

    Reply
  18. automatizator

    работающие сайты в сети есть?

    Reply
  19. Трактор

    (18) Сейчас нет

    Reply
  20. venger

    (0) Под Joomla!+Virtuemart было бы тоже актуально.

    Reply
  21. flord

    Нужно тоже самое под Joomla c Virtuemart для УТ 11 редакции.

    Reply
  22. Трактор

    (21) Увы, только друпал. В ближайшее время сделаю это решение свободным.

    Reply
  23. Lemkus

    Я вот чего не понимаю, вроде как пользователи сайта работают в базе, разве для них не нужна клиентская лицензия?

    Reply
  24. Трактор

    (23) Практически при работе web сервисов наличие клиентских лицензий не проверяется. НО! В разъяснениях от 1С говорится что лицензий должно хватать в том числе на всех пользователей, одновременно работающих через web сервисы.

    Reply
  25. Lemkus

    (24) То есть, если я правильно понял вашу мысль, то при работе пользователей сайта через web-сервис без покупки клиентской лицензии для каждого пользователя, лицензионное соглашение все таки будет нарушено, но это никого не парит?

    Reply
  26. Трактор

    (25) Ну не то чтобы совсем не парит… 🙂

    Скорее тут проблема техническая. Один пользователь веб сервиса может вызывать несколько соединений с базой 1С и в тоже время несколько пользователей могут работать через одно соединение. Кухня 1С неведома.

    Reply
  27. Lemkus

    (26) Ни и тогда все хорошо 🙂 . Буду тестить

    Reply
  28. igyo

    Ну как на счет того чтобы сделать это решение бесплатным ? 🙂

    Reply
  29. Трактор

    (28) (27) Сделал свободным. Качайте, дотачивайте под себя.

    Reply
  30. ArtfulCrom

    (10) учитывая стоимость клиентских лицензий на доступ удаленного клиента….

    А как в Вашей обработке решен этот вопрос? 1000 одновременных клиентов копающихся в вашем магазине сколько лицензий на сервере займут? 1? Или вообще не займут? или все?

    Reply
  31. Трактор

    (30)

    1000 одновременных клиентов копающихся в вашем магазине сколько лицензий на сервере займут?

    Ответ дан в сообщениях 24 и 26

    Reply
  32. trendy

    Почему-то все файлы с нулевой длиной скачиваются.

    Битые архивы или я что-то не так делаю ?

    Reply
  33. Трактор

    (32) По всей видимости глючит Инфостарт. Перевыложил файл, скачиваю его, а он нулевой длины. Возьми отсюда http://narod.ru/disk/26751612000/tamias_bp20.rar.html

    Reply
  34. aspirator23

    Интересная тема, но не могу скачать. Скачивается 0 байт.

    Reply
  35. Трактор

    (34) Глючит Инфостарт. Возьми отсюда http://narod.ru/disk/26751612000/tamias_bp20.rar.html

    Поддержка не шевелится.

    Reply
  36. aspirator23

    спасибо, получил

    Reply
  37. 11remix11

    А можна ещё раз выложить кудато архивчик?

    Reply
  38. Трактор

    Поправлено. Все файлы скачиваются.

    Reply
  39. websanek

    Добрый день у меня возникло нескоько вопросов

    Не могли бы вы мне на них ответить

    скиньте пожалуйста свои контакты на sanek1375@mail.ru

    Reply
  40. ecmtal

    Как инсталировать этот модуль?

    Reply
  41. Трактор

    (41) Скопировать с компьютера пользователя папку C:Documents and SettingsИМЯ_ПОЛЬЗОВАТЕЛЯApplication Data1C1Cv82 mpltslyayTamias1_0_2_БПlyay

    На сервер в папку …/sites/all/modules

    К разработке поставляется документация. Советую почитать.

    Reply
  42. venom13

    Можно контакты на omtspp@mail.ru

    Reply
  43. MDinc

    Топик создан для вопросов/ответов по коммерческому решению синхронизации 1С и Drupal (или любой другой CMS)

    Reply
  44. rozer

    (38) Благодарю вас!!! То что нужно!

    Reply
  45. webchess

    Отлично.. Будем пробовать..

    Reply
  46. n949eo

    Спасибо) Ща заценим.

    Reply
  47. Il

    Спасибо — как раз под задачку!

    Reply
  48. dobrynin.i.s

    Спасибо! Попробую, а то задалбался исправлять ошибки веб — приложения «Управление заказами».

    Reply
  49. softest

    А есть ли гдето уже сайт с этим модулем чтобы полазить пощупать?

    Reply
  50. Трактор

    (50) Демо сайт есть. На моём домашнем компе lyay.ru Кому надо — пишите, включу. Рабочие — не знаю. Не интересовался.

    Reply
  51. panam

    Включай конечно. Тема очень интересная и хотелось бы потыкать не тратя время на поднятие своего тестового сервака. Пока поставил БП 2 глянуть как оно в нутрии, но хотелось бы поддержку УНФ. Заранее спасибо.

    Reply
  52. Трактор

    (52) пробуй http://lyay.ru/

    Reply
  53. simpal

    (53)

    не открывается 🙁

    Reply
  54. Трактор

    (54) Дык это ж мой нотебук для разработки. Сегодня забыл включить уходя.

    Reply
  55. fonomo0

    Отлично, как раз искал подобное для Drupal. Спасибо.

    Reply
  56. teranp

    Добрый день да хорошая тема… Но у меня вопрос …

    Будет ли работать этот код с базой которая работает на MsSql

    Reply
  57. Трактор

    (58) За работу с базой отвечает Друпал. Этот код напрямую с базой сайта не работает, только через функции Друпала. Поэтому на твой вопрос отвечаю «Да».

    Reply
  58. teranp

    Если можно получить ваш контакт я более детально бы задал вопрос если можно скайп

    Reply
  59. teranp

    Так как шас пишется совершенный модуль практически для любого движка его можно использовать но есть кое какие загвоздки по Drupal вот поэтому и интересуюсь

    Reply
  60. teranp

    Задача очень просто стоит интересная поэтому есть рвение к её решению

    Reply
  61. livenalux

    А под 7.7 работает? Какова нагрузка? Есть ограничение на количество товаров?

    Reply
  62. Трактор

    (63) Для 7.7 смотри сюда http://infostart.ru/public/72664/ http://j1c.ru/

    Reply
  63. panam

    Посмотрел как работает и некоторые комментарии.

    Плюсы:

    Прямой доступ в 1с.

    Минусы:

    Не так просто прицепить к существующей базе, требуется внесение изменений в конфигурацию.

    А так как использую УНФ в которой умудрились разработчики название полей поменять для полной не стыковки с ТД допиливать придется не мало.

    Спасибо за проделанную работу.

    Reply
  64. JamilRG

    Отлично.. Будем пробовать..

    Reply
  65. Трактор

    (67) Если дашь ссылки на подобные, то будет совсем хорошо.

    Reply
  66. tengryf

    Для какой версии Drupal написан модуль ?

    Reply
  67. Трактор

    (69) Для версии Друпала 6х

    Reply
  68. anton.fly7

    Привет!

    прикрутил твой модуль к 1с8 Розница, в консоли запрос из ПолучитьСписокГрупп() выдает каталог товара (у меня пока только 1 карточка), на сайте пусто… где поискать проблему?

    http://olazko.ru/node/2

    Reply
  69. anton.fly7

    +71

    и почему то в Експлорере и Хроме разные результаты…

    Reply

  • Трактор

    (71)

    у меня пока только 1 карточка), на сайте пусто… где поискать проблему?

    В этом и проблема. Сделай две карточки и всё увидишь.

    (72)

    и почему то в Експлорере и Хроме разные результаты…

    Настрой права на модуль. У тебя авторизованный пользователь имеет права на модуль не авторизованный не имеет прав. Поправишь и поведение станет одинаковым.

    Reply
  • rimbo

    Мн. ув. Тракторист!

    Изучив существующие предложения по интерет-магазинам пришел к выводу, что следует обратиться к Вам с предложением по «допиливанию» Вашего продукта, есно с оплатой, под мои нужды — в предлагаемом виде не дотягивает до задач. Все подробности — лично. За подход «+»

    Reply
  • Трактор

    (74) Отписался в личку.

    Reply
  • moolex

    Привет,

    Автор пишет такие строки:

    Загрузка/выгрузка между 1С и сайтом не требуется поскольку пользователи сайта фактически работают в 1С.

    меня мучает один вопрос (просто у меня тоже есть публикация в этой теме):

    С сайтом работают множество пользователей (клиентов интернет-магазина), определить их количество в принципе возможно, но оно постоянно меняется. Как быть с клиентскими лицензиями?

    Есть ли тут нарушение лицензии? 1С пишет в своем лицензионном соглашении, что:

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

    По этой ссылке

    на сайте 1С ответ на вопрос №59 какой то размытый.

    Может ли кто нибудь прокомментировать ситуацию?

    Reply
  • Трактор

    (76)

    Может ли кто нибудь прокомментировать ситуацию?

    1С ответит так:

    Максимальное количество пользователей одновременно работающих в 1С через сайт + число работающих через клиентов 1С не должно превышать количество купленных лицензий.

    Есть ли тут нарушение лицензии?

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

    Это позиция 1С. Всё остальное лирика и наведение тени на плетень.

    Reply
  • moolex

    (77) Получается, если компания решить сделать сайт-магазин, на который будут заходить тысяча людей, смотреть описание и остатки товаров, добавлять в корзину (получаем запрос к 1С из сторонней программы), то компания должна купить тысячу лицензий? Ерунда какая то, не думаю, что сейчас кто-то это требование выполняет, даже если взять какие то крупные компании. Да и как то это отследить? Один вышел, другой зашел, а может все сразу делают заказ.

    Reply
  • Трактор

    (78) moolex,

    Получается, если компания решить сделать сайт-магазин, на который будут заходить тысяча людей, смотреть описание и остатки товаров, добавлять в корзину (получаем запрос к 1С из сторонней программы), то компания должна купить тысячу лицензий?

    Да. Если на сайте одновременно 1000 людей смотрят остатки и делают заказы, то надо купить 1000 лицензий + лицензии для твоих сотрудников. ИМХО сайт на котором 1000 человек одновременно делают заказы достаточно богат.

    Один вышел, другой зашел, а может все сразу делают заказ.

    Значит уже не 1000 одновременных пользователей, а меньше.

    Reply
  • moolex

    (79) Это же сколько должна стоит одна лицензия, чтобы для компании покупка тысячи лицензий была не значительна?:)

    Reply
  • Трактор
    Это же сколько должна стоит одна лицензия, чтобы для компании покупка тысячи лицензий была не значительна?:)

    1000 лицензий в розничных ценах это грубо говоря 3 миллиона рублей.

    (80) Что делают 1000 одновременных пользователей (покупателей) на сайте. Покупают. Целый день на сайте торчать точно никто не будет. Час — максимум. то есть за 8 часов пройдёт 8000 покупателей. Предположим что они сделают 1000 заказов. Заказ редко бывает меньше тысячи рублей. Маржу предполагать не буду, и так предположений дофига. Но при таком обороте три лимона совершенно точно можно найти.

    Интернет магазин на 1000 одновременных посетителей это очень большой магазин.

    Reply
  • moolex

    (81) все очень красочно описали:) в действительности так не бывает. Многие заходят на сайт смотрят отзывы, характеристики по товару, и совершают покупку 10 человек в день. Кто будет составлять бизнес план уж точно не станет столько денег тратить на лицензию. Да и вряд ли кто такие условия лицензии от 1С выполняет.

    Просто покупают столько лицензий, кто реально работает в оболочке 1С. Вот еще пример: в базе работает один бухгалтер, но так же каждый час из под ника бухгалтера отправляется какой то отчет из 1С директору на почту. Нужно две лицензии покупать? 🙂

    Reply
  • Petr54-ru

    Трактор, прошу прощенья дистрибутивы не качал, смотрел обсуждения в комментах. Сейчас изучаю эту область, поскольку в ближайшем будущем на работе предстоит интегрировать УТ11 с самописной cms-кой. В прошлой жизни вполне себе комфортно жил с 1С-Битрикс + УТ11.

    Вопрос предельно тупой. Почему бы просто не запилить клон Битрикса на какой-нибудь хорошо распостраненной гнутой cms-ке с большим русским сообществом веб-разарботчиков(Жумла, Вордпресс и иже с ними)? Зачем эти пляски вокруг лицензий 1С для посетителей сайта? В УТ есть реализованный двухсторонний обмен с интернет-магазином на Битриксе, почему бы этот уже готовый обмен не придружить с гнутым интернет магазином?

    Reply
  • Трактор

    (83)

    Почему бы просто не запилить клон Битрикса на какой-нибудь хорошо распостраненной гнутой cms-ке с большим русским сообществом веб-разарботчиков

    Дык никто не мешает сделать клона битрикса. Но я пас. Я не веб программист. Фишка этого решения в прямой связи сайта с 1С. Один пользователь оформил заказ, зарезервировал товар и другой тут же видит уменьшение остатка и не может зарезервировать. Поэтому и реже возникают конфликты. Плюс можно делать всякие примочки вроде личного кабинета с получением печатных форм, отчётов и актов с Верки из 1С.

    А по поводу лицензий 1С почитай внимательно. Не всё так плохо. В (24) написано вся суть. Остальное лирика.

    Reply
  • Трактор

    (85) ты хоть маскировал бы как-нибудь рекламу…

    Reply
  • user646190_volume_ussur

    Уважаемый Трактор а можно инструкцию к Вашей разработке на почту volume_ussur@mail.ru

    Reply
  • user646190_volume_ussur

    Заранее извиняюсь за свой тупой вопрос но я не могу разобраться как ваш модуль работает, установил его как конфигурацию и создал на нем чистую базу, а дальше не понятно чего делать. Пожалуйста хелп.

    Reply
  • user646190_volume_ussur

    Друпал я кстати развернул.

    Reply
  • Трактор

    (89) с разработкой поставляется модуль Друпал. Его надо установить в него. Как устанавливать модули Друпал можно почитать на соответствующих сайтах.

    Reply
  • Трактор

    (89) Вот цитата из документации, поставляемой с разработкой

    Установка и настройка модуля Drupal Установка модуля на работающий сайт выполняется по правилам Drupal. То есть достаточно распаковать файлы модуля в папку /html/sites/all/modules/lyay

    Документация и модуль Друпал находятся в папке шаблонов 1С. У меня это

    C:UsersТракторAppDataRoaming1C1cv8 mpltslyayTamias1_­0_2_БП

    Reply
  • Leave a Comment

    Ваш адрес email не будет опубликован. Обязательные поля помечены *