<?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='\
😀 Речь шла про Apache, а то количество ссылок достойных людей
, которые потратили свое время писавши их, могут эту стаью только дополнить.
(1) gilev, я все кончно понимаю, но это уже не первый раз, когда вы пытаетесь упрекнуть людей, пытающихся поделиться СВОИМ опытом в том, что Вы (несомненно умный человек) написали эти статьи вперед. Есть понятия как «конкуренция» и «альтернатива», будьте добры давать людям высказывать и рассказывать про свой опыт, а не тыкать их носом в свои статьи. Можно было бы поступить корректней и просто указать ссылки на свои статьи как альтернативу или дополнение, высказать обоснованное замечание, это больше соответсвует действиям умного человека, чем то как действуете Вы. С уважением, Chif13
За Apache — однозначный плюс. Да и вообще, статья полезная.
(1) тоже кстати не понял, где там по ссылка есть подобная инфа?
слова «хранилище конфигурации» встречаются это правда.
ссылки на другие ресурсы есть (может там инфа?).
но статьи на инфостарте про настройку апача не нашел.
так что думаю что в (3) очень правильную мысль выразили.
Под linux, кто нибуть делал?
Привет
у меня почему то некорректно отражается текст, который надо писать в httpd.conf
а текст для repository.1ccr вообще не видно…
❓
Господа, а есть ли у кого инфа по сабжу, но для OS Linux?
Уважаемый автор, некорректно описаный код для вставки в apache (прикрепите свой апач-конфиг, тот кусок который относится к описанному выше) + не видно в статье что писать в файле repository.1ccr !
Zealot — Стасибо за замечание поправилв статье.
да и в п.1 косяки неплохо бы исправить.
E:/Storage-1C/»> — почему только одна кавычка?
Имя Вашей Конфигурации — в какой момент указывается ? Где?
E:/Storage-1C/ — путь к самой базе? или к каталогу web публикации?
repository.1ccr — где данный файл надо создать?
Сыро написано, не понятно!
Ответьте на мои вопросы.
В момент подключения пишет вот что
Неклассифицированная ошибка работы с хранилищем конфигурации.
по причине:
HTTP: Internal server error
Ошибка при работе с ресурсом
Все сделал как написано получаю ошибку:
Неклассифицированная ошибка работы с хранилищем конфигурации.
по причине:
HTTP: Forbidden
Ошибка при работе с ресурсом
В логах apacha:
— — [24/Oct/2011:05:46:46 +0400] «POST /storage/repository.1ccr HTTP/1.1» 403 225
может кто подскажет в чем дело ?
Здесь однозначно имеем дело с ошибкой в настройке апача.
Нужно посмотреть error.log на предмет записи типа client denied by server configuration: D:/hran/repository.1ccr
Обычно такое бывает если пытаешься обратиться к директории которая отличается от корневой для апача
В моем случае для апача версии 2.2 рабочий конфиг приведен ниже
LoadModule _1cws_module «C:/Program Files (x86)/1cv82/8.2.14.519/bin/wsap22.dll»
AddHandler 1cws-process .1ccr
#1c publication
Alias /storage «D:/hran»
<Directory «D:/hran»>
AllowOverride All
DirectorySlash off
SetHandler 1cws-process
Order allow,deny
Allow from all
</Directory>
Это работает только в том случае если не переопределялись другие параметры в конфиге.
Ура все заработало помог последний комментарий !!!!!
Спасибо за полезную статью.
Я бы еще обратила внимание на то, что апач критичен к регистру. И если в настройках апача ввели алиас на Storage с большой буквы, то и подключаться надо так же.
(19) Ksu, Не совсем так.
Не Apache чувствителен к регистру, а операционная система или чувствительна к регистру, или нет. То есть, если мы настраиваем Apache на любом Unix-е — регистр очень важно соблюдать. А на Windows — неважно.
Вы всерьез думаете что девушка настраивает апач и хранилище на юникс-лайк системе?
Если это так, то снимаю шляпу.
А по теме могу сказать что на юниксах в отличие от виндовсов ещё и слеши в написаниях путей к папкам в разные стороны указываются.
Сюда же относятся и маки. Они же тоже на BSD подобной системе построены. Вдруг девушка апач на маковском сервере ставит.
Блин.
А у меня по http не работает
по tcp работает, а http — нет
client denied by server configuration: E:/Repository/repos.1ccr
чего ему надо?
в конфе прописал
AllowOverride All
DirectorySlash off
SetHandler 1cws-process
Order allow,deny
Allow from all
права на файл, папки есть
чего ему не хватает?
пришлось прописать:
<directory />
AllowOwerride All
Order allow,deny
Allow from all
<directory>
Сервер локальный и без доступа из вне
я так понимаю, если его открывать наружу — то это жуткая дыра, верно?
А без этого не заработало хранилище по http
Вот тут
<Location «C:/Www/Web/NCC/1c/»>
DirectorySlash Off
SetHandler 1cws-process
Allow from all
</Location>
заменил
<Location> на <Directory>
(15)
(«pavel» — имя вашего компа, или IP-адрес вашего компа):
<?xml version=»1.0″ encoding=»UTF-8″?>
<repository connectString=»tcp://pavel»/>
Внимаение!!! Касается тех, у кого сервер 1С (и соответственно сервер хранилища) работают на нестандартном порту (отличном от 1540).
Например, если вы используете порт 1640 и сервер хранилища у вас запускается на порту 1642, то в файле repository.1ccr нужно обязательно указать этот порт:
<repository connectString=»tcp://pavel:1642«/>
Я долго танцевал в попытках заставить работать сервер через веб, но пока не добавил порт, нифига не получалось.
При подключении через http в локальной сети и также через из изтернета возникает ошибка:
1C:Enterprise 8 application error:
Ошибка выполнения запроса Ошибка при выполнении запроса GET к ресурсу :
by reason:
server_addr=tcp://srv-srads1 descr=10054(0x00002746): Удаленный хост принудительно разорвал существующее подключение. line=1584 file=srcDataExchangeTcpClientImpl.cpp
Заметил, что при подключении к хранилищу перезагружается служба которая отвечает за веб хранилище:
Служба 1C:Enterprise 8.3 Configuration Repository Server была неожиданно завершена. Это произошло 37 раз(а). Следующее корректирующее действие будет предпринято через 10000 мсек: Перезапуск службы.
Может кто то сталкивался?
Релиз 1с 8.3.9.2170, Apache 2.2.4, Windows Server 2008 R2
При установке на Apache 2.4 возникает ошибка:
«Неклассифицированная ошибка работы с хранилищем конфигурации.
по причине:
Forbidden
You don’t have permission to access /storage/storage.1ccr
on this server.»
В логах апача пишется следующее:
….AH01630: client denied by server configuration: E:/Repositary/
Решение:
В конфигурационный файл виртуального хоста в секцию <Directory /> необходимо добавить строку:
Require all granted
Кто-нибудь настраивал доступ к разным версиям сервера хранилища?
Поясню вопрос:
1. Есть 2 сервера хранилища — под разные версии платформы. (вертятся на 1542 и 1642 портах)
2. Есть 2 файла .1ccr, в каждом из которых прописан доступ к каждому серверу
Нужно только увязать каждый .1ccr файл с wsap2x.dll соответствующих версий.
На iis такая конфигурация настраивается довольно просто с помощью webconfig, в котором создается handler для каждого .1ccr файла с привязкой к wsisapi.dll нужной версии.
Как можно настроить httpd подобным образом?
Очень полезная тема. Практически каждое сообщение чем-то помогло.
Но у меня вылезла ошибка, которая здесь еще не описывалась:
После того как я указал правильные настройки Апача, появился доступ к хранилищу, хранилище ругнулось на разные версии платформы,
вылезло такое простое:
Ошибка соединения с хранилищем конфигурации по адресу:
http://*.*.*.144/storage/storage-se.1ccr/trade
и все.
Ни в ЖР 1С, ни в логах апача ничего понятного нет.
У апача в логе access такая строка:
*.*.0.106 — — [04/Oct/2018:13:11:27 +0300] «POST /storage/storage-se.1ccr HTTP/1.1» 200 691
Возможно где-то нет прав на запись в файл. Служба сервера хранилища стартует под USR1CV8, у него полные права на папку с хранилищем.
Как лечить?
P.S. и такая же точно ошибка при подключении с локальной машины через tcp
Добавлю еще: в Безопасности папки добавляю — Все — Полный доступ — тоже самое.
Предыдущие 2 поста решил (у службы 1с был неправильный путь к папке хранилища, а она работала и молчала), теперь другая напасть.
По tcp с локальной машины соединяется, по http не хочет цепляться ни из сети, ни с локальной машины.
Ошибка XML-протокола при работе с удаленным хранилищем конфигурации.
по причине:
Ошибка преобразования данных XML
по http хранилище заработало так (для Apache 2.2):
# storage publication
AddHandler 1cws-process .1ccr
Alias /storage «E:/storage/»
<Directory «E:/storage/»>
AllowOverride All
Options None
Order allow,deny
Allow from all
DirectorySlash Off
SetHandler 1cws-process
</Directory>
для Apache 2.4 могут быть другие настройки параметров.
(15) для apache 2.4 рабочий вариант такой
LoadModule _1cws_module «C:/Program Files/1cv8/8.3.13.1644/bin/wsap24.dll»
AddHandler 1cws-process .1ccr
#1c publication
Alias /storage «C:/www/REPOSITORY/»
<Directory «C:/www/REPOSITORY/»>
AllowOverride All
DirectorySlash off
Options None
Require all granted
SetHandler 1cws-process
</Directory>
Показать
(35) только в строке
нужно