Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.
В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "///// echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере). В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1.
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.
Собственно сам скрипт:
<?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'=>'Начало загрузки'));
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
(10) Ошибаешься. 8.2 Не интегрируется с сайтом. Никак. Магазин на 8.2 будет выглядеть очень грустно. Трудности будут не только с интеграцией с сайтом, но и с правами доступа.
Допустим можно извернуться и сделать анонимный доступ в 8.2. Но вдруг пользователь захотел зарегистриться?
(23) Практически при работе web сервисов наличие клиентских лицензий не проверяется. НО! В разъяснениях от 1С говорится что лицензий должно хватать в том числе на всех пользователей, одновременно работающих через web сервисы.
(24) То есть, если я правильно понял вашу мысль, то при работе пользователей сайта через web-сервис без покупки клиентской лицензии для каждого пользователя, лицензионное соглашение все таки будет нарушено, но это никого не парит?
Скорее тут проблема техническая. Один пользователь веб сервиса может вызывать несколько соединений с базой 1С и в тоже время несколько пользователей могут работать через одно соединение. Кухня 1С неведома.
(10) учитывая стоимость клиентских лицензий на доступ удаленного клиента….
А как в Вашей обработке решен этот вопрос? 1000 одновременных клиентов копающихся в вашем магазине сколько лицензий на сервере займут? 1? Или вообще не займут? или все?
Включай конечно. Тема очень интересная и хотелось бы потыкать не тратя время на поднятие своего тестового сервака. Пока поставил БП 2 глянуть как оно в нутрии, но хотелось бы поддержку УНФ. Заранее спасибо.
(58) За работу с базой отвечает Друпал. Этот код напрямую с базой сайта не работает, только через функции Друпала. Поэтому на твой вопрос отвечаю «Да».
Так как шас пишется совершенный модуль практически для любого движка его можно использовать но есть кое какие загвоздки по Drupal вот поэтому и интересуюсь
прикрутил твой модуль к 1с8 Розница, в консоли запрос из ПолучитьСписокГрупп() выдает каталог товара (у меня пока только 1 карточка), на сайте пусто… где поискать проблему?
и почему то в Експлорере и Хроме разные результаты…
Настрой права на модуль. У тебя авторизованный пользователь имеет права на модуль не авторизованный не имеет прав. Поправишь и поведение станет одинаковым.
Изучив существующие предложения по интерет-магазинам пришел к выводу, что следует обратиться к Вам с предложением по «допиливанию» Вашего продукта, есно с оплатой, под мои нужды — в предлагаемом виде не дотягивает до задач. Все подробности — лично. За подход «+»
Загрузка/выгрузка между 1С и сайтом не требуется поскольку пользователи сайта фактически работают в 1С.
меня мучает один вопрос (просто у меня тоже есть публикация в этой теме):
С сайтом работают множество пользователей (клиентов интернет-магазина), определить их количество в принципе возможно, но оно постоянно меняется. Как быть с клиентскими лицензиями?
Есть ли тут нарушение лицензии? 1С пишет в своем лицензионном соглашении, что:
требуемое количество Клиентских лицензий должно соответствовать числу отдельных вводов мультиплексирующих программных или аппаратных средств, с которыми осуществляется прямое взаимодействие.
По этой ссылке
на сайте 1С ответ на вопрос №59 какой то размытый.
Максимальное количество пользователей одновременно работающих в 1С через сайт + число работающих через клиентов 1С не должно превышать количество купленных лицензий.
Есть ли тут нарушение лицензии?
Посчитай максимальное число физических пользователей, находящихся на страницах откуда идут запросы в 1С, прибавь к ним пользователей, работающих непосредственно в 1С. Если это число меньше количества купленных лицензий, то нарушения нет.
Это позиция 1С. Всё остальное лирика и наведение тени на плетень.
(77) Получается, если компания решить сделать сайт-магазин, на который будут заходить тысяча людей, смотреть описание и остатки товаров, добавлять в корзину (получаем запрос к 1С из сторонней программы), то компания должна купить тысячу лицензий? Ерунда какая то, не думаю, что сейчас кто-то это требование выполняет, даже если взять какие то крупные компании. Да и как то это отследить? Один вышел, другой зашел, а может все сразу делают заказ.
Получается, если компания решить сделать сайт-магазин, на который будут заходить тысяча людей, смотреть описание и остатки товаров, добавлять в корзину (получаем запрос к 1С из сторонней программы), то компания должна купить тысячу лицензий?
Да. Если на сайте одновременно 1000 людей смотрят остатки и делают заказы, то надо купить 1000 лицензий + лицензии для твоих сотрудников. ИМХО сайт на котором 1000 человек одновременно делают заказы достаточно богат.
Один вышел, другой зашел, а может все сразу делают заказ.
Значит уже не 1000 одновременных пользователей, а меньше.
Это же сколько должна стоит одна лицензия, чтобы для компании покупка тысячи лицензий была не значительна?:)
1000 лицензий в розничных ценах это грубо говоря 3 миллиона рублей.
(80) Что делают 1000 одновременных пользователей (покупателей) на сайте. Покупают. Целый день на сайте торчать точно никто не будет. Час — максимум. то есть за 8 часов пройдёт 8000 покупателей. Предположим что они сделают 1000 заказов. Заказ редко бывает меньше тысячи рублей. Маржу предполагать не буду, и так предположений дофига. Но при таком обороте три лимона совершенно точно можно найти.
Интернет магазин на 1000 одновременных посетителей это очень большой магазин.
(81) все очень красочно описали:) в действительности так не бывает. Многие заходят на сайт смотрят отзывы, характеристики по товару, и совершают покупку 10 человек в день. Кто будет составлять бизнес план уж точно не станет столько денег тратить на лицензию. Да и вряд ли кто такие условия лицензии от 1С выполняет.
Просто покупают столько лицензий, кто реально работает в оболочке 1С. Вот еще пример: в базе работает один бухгалтер, но так же каждый час из под ника бухгалтера отправляется какой то отчет из 1С директору на почту. Нужно две лицензии покупать? 🙂
Трактор, прошу прощенья дистрибутивы не качал, смотрел обсуждения в комментах. Сейчас изучаю эту область, поскольку в ближайшем будущем на работе предстоит интегрировать УТ11 с самописной cms-кой. В прошлой жизни вполне себе комфортно жил с 1С-Битрикс + УТ11.
Вопрос предельно тупой. Почему бы просто не запилить клон Битрикса на какой-нибудь хорошо распостраненной гнутой cms-ке с большим русским сообществом веб-разарботчиков(Жумла, Вордпресс и иже с ними)? Зачем эти пляски вокруг лицензий 1С для посетителей сайта? В УТ есть реализованный двухсторонний обмен с интернет-магазином на Битриксе, почему бы этот уже готовый обмен не придружить с гнутым интернет магазином?
Почему бы просто не запилить клон Битрикса на какой-нибудь хорошо распостраненной гнутой cms-ке с большим русским сообществом веб-разарботчиков
Дык никто не мешает сделать клона битрикса. Но я пас. Я не веб программист. Фишка этого решения в прямой связи сайта с 1С. Один пользователь оформил заказ, зарезервировал товар и другой тут же видит уменьшение остатка и не может зарезервировать. Поэтому и реже возникают конфликты. Плюс можно делать всякие примочки вроде личного кабинета с получением печатных форм, отчётов и актов с Верки из 1С.
А по поводу лицензий 1С почитай внимательно. Не всё так плохо. В (24) написано вся суть. Остальное лирика.
Заранее извиняюсь за свой тупой вопрос но я не могу разобраться как ваш модуль работает, установил его как конфигурацию и создал на нем чистую базу, а дальше не понятно чего делать. Пожалуйста хелп.
(89) Вот цитата из документации, поставляемой с разработкой
Установка и настройка модуля Drupal Установка модуля на работающий сайт выполняется по правилам Drupal. То есть достаточно распаковать файлы модуля в папку /html/sites/all/modules/lyay
Документация и модуль Друпал находятся в папке шаблонов 1С. У меня это
Стоит сделать еще и для УТ.
(1) Сделал сборку для УТ. Вчера уже поздно было. Обновил картинки.
Думаю, что это круто как трактор 😀
А дизайн как настроить под себя?
(4) Темой Друпала.
а в где живете в случае обращения за помощью?
(6) Живу в Москве. Доступен по почте, скайпу, аське. Есть опыт удалённой работы.
будьте добры,скиньте свои контакты на ulan.2002@bk.ru
(8) Ушло
Возможно я ошибаюсь, но учитывая технологии тонкого клиента в 8.2, есть шанс что спрос на данную настройку перестанет быть
(10) Ошибаешься. 8.2 Не интегрируется с сайтом. Никак. Магазин на 8.2 будет выглядеть очень грустно. Трудности будут не только с интеграцией с сайтом, но и с правами доступа.
Допустим можно извернуться и сделать анонимный доступ в 8.2. Но вдруг пользователь захотел зарегистриться?
Насколько я понимаю, при копуке — код закрытый?
копуке = покупке.
А что мешает настроить хитрый NAT, который будет пробрасывать запросы с фиксированого айпи 192.168.0.5 на мой сервер?
(13) ничто
14+ надо будет подумать об этом. Посоветуюсь с народом.
(13) >> Насколько я понимаю, при копуке — код закрытый?
Код тот же что доступен для скачивания. Покупатель шлёт мне IP адрес сервера, а я в ответ лицензионный ключ.
На днях обновлю. Изменил название и исправил ошибку.
А можна Дистрибутив модуля Торгаш 1.0 RC1 для УТ на b_misha7b@mail.ru
ато не получаэтьсо со скачкой, плз
работающие сайты в сети есть?
(18) Сейчас нет
(0) Под Joomla!+Virtuemart было бы тоже актуально.
Нужно тоже самое под Joomla c Virtuemart для УТ 11 редакции.
(21) Увы, только друпал. В ближайшее время сделаю это решение свободным.
Я вот чего не понимаю, вроде как пользователи сайта работают в базе, разве для них не нужна клиентская лицензия?
(23) Практически при работе web сервисов наличие клиентских лицензий не проверяется. НО! В разъяснениях от 1С говорится что лицензий должно хватать в том числе на всех пользователей, одновременно работающих через web сервисы.
(24) То есть, если я правильно понял вашу мысль, то при работе пользователей сайта через web-сервис без покупки клиентской лицензии для каждого пользователя, лицензионное соглашение все таки будет нарушено, но это никого не парит?
(25) Ну не то чтобы совсем не парит… 🙂
Скорее тут проблема техническая. Один пользователь веб сервиса может вызывать несколько соединений с базой 1С и в тоже время несколько пользователей могут работать через одно соединение. Кухня 1С неведома.
(26) Ни и тогда все хорошо 🙂 . Буду тестить
Ну как на счет того чтобы сделать это решение бесплатным ? 🙂
(28) (27) Сделал свободным. Качайте, дотачивайте под себя.
(10) учитывая стоимость клиентских лицензий на доступ удаленного клиента….
А как в Вашей обработке решен этот вопрос? 1000 одновременных клиентов копающихся в вашем магазине сколько лицензий на сервере займут? 1? Или вообще не займут? или все?
(30)
Ответ дан в сообщениях 24 и 26
Почему-то все файлы с нулевой длиной скачиваются.
Битые архивы или я что-то не так делаю ?
(32) По всей видимости глючит Инфостарт. Перевыложил файл, скачиваю его, а он нулевой длины. Возьми отсюдаhttp://narod.ru/disk/26751612000/tamias_bp20.rar.html
Интересная тема, но не могу скачать. Скачивается 0 байт.
(34) Глючит Инфостарт. Возьми отсюдаhttp://narod.ru/disk/26751612000/tamias_bp20.rar.html
Поддержка не шевелится.
спасибо, получил
А можна ещё раз выложить кудато архивчик?
Поправлено. Все файлы скачиваются.
Добрый день у меня возникло нескоько вопросов
Не могли бы вы мне на них ответить
скиньте пожалуйста свои контакты на sanek1375@mail.ru
Как инсталировать этот модуль?
(41) Скопировать с компьютера пользователя папку C:Documents and SettingsИМЯ_ПОЛЬЗОВАТЕЛЯApplication Data1C1Cv82 mpltslyayTamias1_0_2_БПlyay
На сервер в папку …/sites/all/modules
К разработке поставляется документация. Советую почитать.
Можно контакты на omtspp@mail.ru
Топик создан для вопросов/ответов по коммерческому решению синхронизации 1С и Drupal (или любой другой CMS)
(38) Благодарю вас!!! То что нужно!
Отлично.. Будем пробовать..
Спасибо) Ща заценим.
Спасибо — как раз под задачку!
Спасибо! Попробую, а то задалбался исправлять ошибки веб — приложения «Управление заказами».
А есть ли гдето уже сайт с этим модулем чтобы полазить пощупать?
(50) Демо сайт есть. На моём домашнем компе lyay.ru Кому надо — пишите, включу. Рабочие — не знаю. Не интересовался.
Включай конечно. Тема очень интересная и хотелось бы потыкать не тратя время на поднятие своего тестового сервака. Пока поставил БП 2 глянуть как оно в нутрии, но хотелось бы поддержку УНФ. Заранее спасибо.
(52) пробуйhttp://lyay.ru/
(53)
не открывается 🙁
(54) Дык это ж мой нотебук для разработки. Сегодня забыл включить уходя.
Отлично, как раз искал подобное для Drupal. Спасибо.
Добрый день да хорошая тема… Но у меня вопрос …
Будет ли работать этот код с базой которая работает на MsSql
(58) За работу с базой отвечает Друпал. Этот код напрямую с базой сайта не работает, только через функции Друпала. Поэтому на твой вопрос отвечаю «Да».
Если можно получить ваш контакт я более детально бы задал вопрос если можно скайп
Так как шас пишется совершенный модуль практически для любого движка его можно использовать но есть кое какие загвоздки по Drupal вот поэтому и интересуюсь
Задача очень просто стоит интересная поэтому есть рвение к её решению
А под 7.7 работает? Какова нагрузка? Есть ограничение на количество товаров?
(63) Для 7.7 смотри сюдаhttp://infostart.ru/public/72664/ http://j1c.ru/
Посмотрел как работает и некоторые комментарии.
Плюсы:
Прямой доступ в 1с.
Минусы:
Не так просто прицепить к существующей базе, требуется внесение изменений в конфигурацию.
А так как использую УНФ в которой умудрились разработчики название полей поменять для полной не стыковки с ТД допиливать придется не мало.
Спасибо за проделанную работу.
Отлично.. Будем пробовать..
(67) Если дашь ссылки на подобные, то будет совсем хорошо.
Для какой версии Drupal написан модуль ?
(69) Для версии Друпала 6х
Привет!
прикрутил твой модуль к 1с8 Розница, в консоли запрос из ПолучитьСписокГрупп() выдает каталог товара (у меня пока только 1 карточка), на сайте пусто… где поискать проблему?
+71
и почему то в Експлорере и Хроме разные результаты…
↓