<?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='\
1. Так и не понял что из себя представляет промежуточный блок «сервис».
2. Порадовала фраза
, обычно в качестве сервера используется приложение Apache или IIS, а это просто скрипт.
3. Т.е. Вы предлагаете установить сервер в полном варианте, создать вебсайт и использовать набор скриптов для взаимодействия с 1С. В такой конструкции нет пула запросов, поэтому реализация будет практически аналогична картинке с которой подключаются все сервисы напрямую к 1С. В упрощенном же задача просто открыть «stand alone» файл по локальной сети видимо.
4. На самом деле работать с ООП JavaScript совсем не просто в отличии от 1С, а в большинстве фреймворков реализацию необходимо будет допилить. В этом случае рекомендую использовать хотя бы php или perl, что позволит решить вопросы безопасности и реализации заявленного функционала.
промежуточный сервер на node.js
, обычно в качестве сервера используется приложение Apache или IIS, а это просто скрипт.
Node.js — это не совсем скрипт, точнее вообще не скрипт, а платформа, которая может быть и web-сервером в том числе. По мне несколько непривычная после 1С, но весьма популярная в WEB в последнее время.
Согласен с автором в главном — в случае клиентского доступа нужен промежуточный сервис. Методик и средств его построения много, от предложенного Node.js или Wakanda, до BAAS решений типа QuickBlox, Parce. Все определяется задачей.
(1) ivanov660,
1) Представьте, что есть связка «1С:УТ» — «Интернет магазин (на базе Битрикс, например)» — «Браузер клиента». В контексте данной публикации «Интернет магазин» это и есть «Сервис».
2) На этот пункт уже ответил (2) andy_minsk. Более подробно можно посмотреть наофициальном сайте
3) Если использовать инструментарий, который я предложил, то нет необходимости в установке полноценного веб-сервера и создании сайта. Его можно использовать и в локальной сети и в Интернет. И даже если нужно будет отдавать статические данные (те же index.html и magicrpc.js, например), то это можно будет очень просто добавить.
4) Что касается JavaScript, я согласен, с ООП там пока дела не очень хорошо, но с приходом ES6 ситуация должна улучшиться. Но и 1С не поддерживает полноценный ООП — есть только возможность работы с объектами «унаследованными» от предопределенных платформой.
Хорошо, что появляется все больше и больше статье про использование 1С совместно с какими-то современными web-технологиями.
Спасибо, что поделились!
Если будет интересно, вотссылка на 13минутное видео , о том как создавался пример, приведенный в публикации.
(0) Не согласен, что прямой коннект веб-клиента к базе 1С не подходит для массового использования.
На HTTP-сервисах это все прекрасно реализуется. HTTP-соединение как и web-сервис лицензий не требует. А создаваемая нагрузка минимальна даже при полном хостинге контента внутри базы 1С. ИМХО, даже на «очень среднем» сервере вполне смогут комфортно работать сотни пользователей одновременно (если, конечно, в запросах не будет массивных бинарных данных — картинок, файлов и т.д.).
Очень топорный пример тут (с трансфером картинок от мобильных юзеров).
http://demo.bizzsimple.com/te/ — основная база
http://demo.bizzsimple.com/te/hs/mob/all/ — интерфейс для пользователей телефонов и планшетов на Android и iOS. Продажники делают фото чеков прямо с веб-страницы, добавляют комментарии, сумму, а затем отправляют на проверку менеджеру.
http://demo.bizzsimple.com/te/hs/mng/all/ — аналогичный интерфейс для телефонов и планшетов. Руководители продажников проверяет список документов и утверждает или отклоняет их.
Для авторизации везде вводить имя пользователя user, без пароля.
Все шаблоны html и данные при этом хранятся в базе 1С и всегда доступны онлайн.
(6) Aleksey.Bochkov,
А можете поделиться, откуда у такая информация? Все что я в свое время нашел из официальных источников толькоОтветы на типовые вопросы по лицензированию «1С:Предприятия 8»
В данном случае на рабочих местах организации осуществляется доступ к информационной базе «1С:Предприятия 8» с использованием веб-сервисов, причем сами веб-сервисы реализуют всего лишь способ доступа к данным «1С:Предприятия 8» и предметом для отдельного лицензирования не являются. В соответствии с Лицензионным Соглашением «1С:Предприятия 8» каждое рабочее место, с которого тем или иным способом осуществляется доступ к данным информационной базы «1С:Предприятия 8», должно быть обеспечено клиентской лицензией. То есть Организации для работы с программами, использующими веб-сервисы, необходимо приобрести клиентские лицензии на такое количество рабочих мест, которое позволит одновременно осуществлять доступ к информационной базе.
58. Организация с помощью продукта «1С:Предприятие 8. Web-расширение» делает веб-витрину для собственной торговой системы, работающей на «1С:Предприятии 8». Предполагается, что к ней одновременно будут подключаться до ста пользователей. Сколько клиентских лицензий должна приобрести Организация для создания веб-витрины?
Использование программных или аппаратных средств, уменьшающих количество пользователей, которые имеют непосредственный доступ к 1С:Предприятию 8, как это происходит при использовании «Web-расширения», не уменьшает количества требуемых лицензий. Таким образом, для создания веб-витрины Организация обязана приобрести сто клиентских лицензий.
Мне кажется, что проще все же использовать инструменты со свободной лицензией…
(7)
Для работы Web-сервисов не требуется клиентских лицензий. Однако если информационная база, которая предоставляет Web-сервисы, работает в клиент-серверном варианте, необходимо наличие серверной лицензии для работы сервера «1С:Предприятия».
Для HTTP-сервисов также справедливо.
Хотя я как-то не задумывался над юридической стороной вопроса.. может быть это только технически лицензии не требуются (платформа не использует их), а юридически они нужны на каждого пользователя?
Что использовать — дело вкуса и опыта конкретного разработчика, а также особенностей конкретного проекта.
Я лишь хотел поспорить с общим утверждением «для массового сервиса не подходит» :).
(6) Aleksey.Bochkov,
Допустим, пишем проект «Корпоративные туду-листы» (по мотивам Basecamp, например). И для каждой компании, хотим иметь отдельную базу данных (например, из соображений безопасности и еще, если нагрузка и/или размер отдельных БД будет большой, чтобы можно было базы клиентов разносить по разным хостам, заодно и резервное копирование можно было бы делать по каждому клиенту отдельно). С прямым коннектом «без костылей», на сколько я понимаю, это сделать не получится?
(7) похоже, вы правы.
В партнерской конференции немного противоречивая информация, но, вероятнее всего, юридически 1С требует наличия клиентских лицензий по числу одновременных соединений к web и http-сервисам.
(9)
Да, красиво, наверное не получится.
Тут надо, чтобы клиент изначально отправлял запрос на правильный адрес.
Можно конечно и «гибридную» архитектуру сделать: центральный сервер 1С только авторизует пользователей и выдает им html и скрипты с правильными параметрами, а страницы на клиенте через XMLHttpRequest грузят данные с нужного хоста, или отправляют данные куда надо.
Правда тогда не вижу особой разницы с подходом, описанным вами в статье.
(10) Aleksey.Bochkov,
Надеюсь, положение дел с лицензированием в будущем прояснится, пока(и уже долгое время) все очень туманно…
Доброе время суток!
Для меня так и осталось загадкой, что из себя представляет промежуточный блок «сервис». Что должно в нём содержаться? Как он пишется? Или может быть ссылку дадите, где можно про это почитать, буду очень признателен.