<?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='\
С почином! 🙂
Только в IE ничего не видно. Разметку бы подправить.
(1) Спасибо. Еще пока правлю, я в FF5 работаю.
(2) А зря. Публиковаться лучше в IE. Ошибок будет меньше и переделывать не придется.
Комиксы — это то, что надо.
Выложил еще два файла — разделил рабочие файлы (файл «Отдельно базы») и саму статью (файл «Отдельно статья в PDF»), чтобы уменьшить размер скачиваемого файла, т.к. статья в PDF просто дублирует публикацию.
(2) Учту на будущее.
Прекрасная статья!
Как раз сейчас мучаюсь с изучением настройки WEB-сервисов.
Вот только у меня при попытки получить список сотрудников ошибочка выдается.
{Обработка.СотрудникиЧерезWS.Форма.Форма(17)}: Ошибка при вызове конструктора (WSОпределения): При создании описания сервиса произошла ошибка.
Определения = Новый WSОпределения(«http://localhost/ws/Сотрудники.1cws?wsdl»);
по причине:
При создании описания сервиса произошла ошибка.
по причине:
Ошибка при выполнении файловой операции ‘http://localhost/ws/Сотрудники.1cws?wsdl’
по причине:
Ошибка работы с Интернет: внутренняя ошибка сервера (500). <html><head><title>Server Application Error</title></head>
<body><h1>Server Application Error</h1>The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.</body></html>
Куда смотреть и что поправить? ❓
(6) Скорее всего дело в настройках безопасности к каталогу базы
Нужно дать разрешение на запись на каталог с файловой БД (см. Рис):
И еще, можно обернуть код получения ответа в попытку
Ну типа так:
Показать
Уважаемый Збянтэжаны Саўка,.
Права на BIN в 1С проверил — даны.
Права на каталог базы проверил — даны.
Воспользовался попыткой.
Выдает сообщене что «нет связи».
Просто какая-то конкретная засада.
КАТЕГОРИЧЕСКИ ОТКАЗЫВАЕТСЯ РАБОТАТЬ.
Просто бъешся в стену и никакого результата……
Это был вариант где в БД нет пользователей.
Могу добавить вариант с существующими пользователями в БД, поскольку есть отличия, если он интересует кого-нибудь?
Потому как мне в лом писать что-то иное кроме кода.
(8) Была ли найдена причина?
Ошибка сервера 500 она такая неопределенная, что без анализа доп. данных дать какой-то совет невозможно.
Эту ошику устранили, но толку от этого мало.
По рекомендаци некоторых товарищей перешел на 8.2. Конвертировал базы/
Теперь другая. Она правда была и в 8.1
{Обработка.СотрудникиЧерезWS.Форма.Форма(20)}: Ошибка при вызове конструктора (WSОпределения)
Определения = Новый WSОпределения(«http://localhost/ws/Сотрудники.1cws»);
по причине:
При создании описания сервиса произошла ошибка.
по причине:
Файл не обнаружен ‘http://localhost/ws/Сотрудники.1cws’
по причине:
Ошибка работы с Интернет: ресурс не найден (404). <!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 3.2 Final//EN»>
<html dir=ltr>
<head>
<style>
a:link {font:8pt/11pt verdana; color:FF0000}
a:visited {font:8pt/11pt verdana; color:#4e4e4e}
</style>
<META NAME=»ROBOTS» CONTENT=»NOINDEX»>
<title>The page cannot be found</title>
<META HTTP-EQUIV=»Content-Type» Content=»text-html; charset=Windows-1252″>
</head>
<script>
http://www.DocURL.com/bar.htm
function Homepage(){
<!—
// in real bits, urls get returned to our script like this:
// res://shdocvw.dll/http_404.htm#
//For testing use DocURL = «res://shdocvw.dll/http_404.htm#https://www.microsoft.com/bar.htm »
DocURL = document.URL;
//this is where the http or https will be, as found by searching for :// but skipping the res://
protocolIndex=DocURL.indexOf(«://»,4);
//this finds the ending slash for the domain server
serverIndex=DocURL.indexOf(«/»,protocolIndex + 3);
//for the href, we need a valid URL to the domain. We search for the # symbol to find the begining
//of the true URL, and add 1 to
по причине:
Ошибка работы с Интернет: ресурс не найден (404)
(10) Ты в осле откройhttp://localhost/ws/Сотрудники.1cws добейся вывода wsdl (похож на xml) и что-то мне подсказывает что надо открывать:
Автор. Плюсую безусловно!!! Особенно за SOAP UI, отличный инструмент, не однократно спасал при поиске глюков 1Ц-вебсервисов.
ЗЫ: ИМХО не палился бы с ссылками на варезники.
(12) Спасибо за подсказку! Но, увы, скринов не осталось, а по-новой делать лень — мороки много 🙂
А впрочем, там всего-то два экрана последних, счас заменим, шоб из глаз долой
(10) Обрати внимание на пост (11)
В ослике вводим адрес, жмем на ссылку и получаем содержимое в xml (хм, а как здесь в комментариях чередовать текст с изображением?):
Збянтэжаны Саўка,,
огромное человеческое мерси!!!
Эта часть получилась. Все дело было в кириллическом названии WS определения ‘http://localhost/ws/Сотрудники.1cws?wsdl’. Нужно было латиницей, как и публикацию.
Теперь пытаюсь уже пройти по остально части, т.е. загрузить номенлатуру.
http://www.1c.ru/demos/products }:ДанныеНоменклатуры:Получить()
http://www.1c.ru/demos/products }:ДанныеНоменклатуры:Получить()
Тут опять засада..
ОбщийМодуль.ДанныеНоменклатуры(66)}: Ошибка при вызове метода контекста (Получить): Ошибка вызова операции сервиса: {
Возврат Прокси.Получить();
по причине:
Ошибка вызова операции сервиса: {
по причине:
Ошибка HTTP: <html>
<head><title>404 Not Found</title></head>
<body>
<h1>404 Not Found</h1>
/ws/products.1cws was not found on this server.
<p /><hr />
<small>
Resin-3.0.14 (built Tue, 05 Jul 2005 11:03:36 PDT)
</small>
</body></html>
(404).
Хотя , если посмотреть наhttp://localhost/ws/products.1cws?wsdl , то все нормально отражается
(16) Да латиницу, похоже, никто кроме 1С не любит 🙂
SoapUI отказывается с ней работать. Я поздно заметил это, когда уже выложил свой архив, т.к. в SoapUI тренировался на файле от Трактор в латинице: sotrudniki.1cws и только потом изменил имя на кириллическое, каюсь, что не проверил.
А на счет загрузки номенклатуры, так я в этой части ничего не менял. Кажется, что адрес не тот.
(15) Предоставь содержаниеhttp://localhost/ws/products.1cws?wsdl
Для тех, кто работает в 8.2 маленькое уточнение.
Файлы .1cws больше не используются. Для подключения веб-сервисов необходимо пользоваться ссылкой вида:
http://<название хоста и каталога>/ws/<название веб-сервиса>/?wsdl
В применение к описанному случаю будет:http://localhost/ws/Сотрудники/?wsdl
З.Ы. RTFM, хотя я и сам попал на эти грабли.
(15) SoapUI 4 не работает с кириллическими адресами. Пользуй SoapUI 3.
Плюс, в общем-то…я окромя soapUI пользуюсь Fiddler — прокси-дебаггер, у которого куча extension-ов… В упоминание о нем тоже можно добавить.
Спасибо большое автору за прекрасную статью, но в версии 8.2 все немного изменилось наверное, так как повторить пример невозможно.
(21) ntvg,
Спасибо.
Да в 8.2 многое изменилось.
Немного о 8.2 сказано в (18).
А так конечно нужно или дополнять эту статью, или же писать новую для случая 8.2.
(22) уважаемый, а не подскажете где это вы так скриншоты красиво обрезаете ? 🙂
(23) UPSoft, Snagit’ом
Спасибо за статью.
Так мало информации по web-сервисам для 1С на просторах интернета.
Спасибо за статью. Для 8-2 методом тыка нашел
Вместо
Определения = Новый WSОпределения(«http://localhost/ws/Сотрудники.1cws?wsdl»);
нужно задать
Определения = Новый WSОпределения(«http://localhost/POSTAVSHIKWS/ws/Сотрудники/?wsdl»);
где POSTAVSHIKWS это «Имя» из окна меню «Администрирование — Публикация на веб сервере».
У меня в 8-2 в папке InetPub/wwwroot/ws файл «default.vrd» содержит следующий текст
<?xml version=»1.0″ encoding=»UTF-8″?>
<point xmlns=»http://v8.1c.ru/8.2/virtual-resource-system»
xmlns:xs=»http://www.w3.org/2001/XMLSchema»
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
base=»/POSTAVSHIKWS»
ib=»File="D:ProgBases_1C8_2web_serv_testПоставщикWS";»
enable=»false»>
<ws>
<point name=»ДанныеОтгрузки»
alias=»shipment.1cws»/>
<point name=»ДанныеНоменклатуры»
alias=»products.1cws»/>
<point name=»Сотрудники»
alias=»Сотрудники.1cws»/>
</ws>
</point>
Для отладки в 8-2
Согласно документации
Отладка Web-сервиса
Для указания Web-сервису необходимости запуска в отладочном режиме (только для файлового варианта информационной базы) используются настройки, размещенные в файле default.vrd, который должен располагаться в каталоге виртуального приложения. В этом файле необходимо указать элемент debug, отсутствие которого означает невозможность отладки Web-сервиса.
Пример элемента «debug» из файла «default.vrd»:
Копировать в буфер обмена
<debug enable=»true» url=»tcp://localhost»/>
Подробнее о файле default.vrd можно посмотреть в книге «1С:Предприятие 8.2. Руководство администратора».
Если для элемента debug указан атрибут url, то к моменту обращения к Web-сервису, по указанному URL должен быть доступен Конфигуратор. В противном случае исполнение Web-сервиса будет приостановлено и система будет ожидать доступность Конфигуратора. При этом для продолжения работы в Конфигураторе следует подключить необходимый предмет отладки.
Для необходимости отладки Web-сервиса в клиент-серверном варианте информационной базы следует включить режим отладки на сервере с помощью ключа командной строки debug. Подробнее о ключах командной строки запуска сервера «1С:Предприятия» можно посмотреть в книге «1С:Предприятие 8.2. Клиент-серверный вариант. Руководство администратора».
После того как файл default.vrd принимает следующий вид, отладка в файловой базе 8-2 работает.
<?xml version=»1.0″ encoding=»UTF-8″?>
<point xmlns=»http://v8.1c.ru/8.2/virtual-resource-system»
xmlns:xs=»http://www.w3.org/2001/XMLSchema»
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
base=»/POSTAVSHIKWS»
ib=»File="D:ProgBases_1C8_2web_serv_testПоставщикWS";»
enable=»false»>
<debug enable=»true» url=»tcp://localhost»/>
<ws>
<point name=»ДанныеОтгрузки»
alias=»shipment.1cws»/>
<point name=»ДанныеНоменклатуры»
alias=»products.1cws»/>
<point name=»Сотрудники»
alias=»Сотрудники.1cws»/>
</ws>
</point>
Спасибо !!!. Очень нужная информация, помогла в нужный момент.
(32) voroncahk, трымайцеhttp://rusfolder.com/33533543
(33) спасибо большое!!! Очень помогла Ваша публикация!!!
(9)>Могу добавить вариант с существующими пользователями в БД, поскольку есть отличия, если он интересует кого-нибудь?
меня интересует, спасибо
и да!!спасибо большое!!! Очень помогла Ваша публикация!!!
Классные картинки. А можно только для 1С 8.2 сделать. Чтобы не смущать неопытных.
http://sikuda.ru/?p=393
Буду на вас ссылаться.
(37) сорри, но я уже давно ушел от этой темы, и из 1С тоже, помаленьку, ухожу
Добрый день, очень был бы блогодарен если дали на ссылку на эту базу, несколка дней не могу сделат веб сервер. плиз буду очень блогодарен.
(39)берите по ссылке в (33)
Спасибо скачал, толька у меня через авторизацию ползователем надо было сделат. без ползователя все хорошо отрабатывает, а с пользователем никак
С 8.2 похоже не нужно никакие файлики копировать, как минимум для отладки Веб-сервисов.
Нужно просто прописать строку
в файле default.vrd в папке, в которой выполнялась регистрация веб-сервисов.
(42) PolAlex2, а в какое место файла нужно прописать эту строку? Перепробовал по-разному — всегда выдаёт ошибку.
У меня перед разделом
<ws>
Показать
А как понять «выдает ошибку»? в какой момент? Он может просто игнорировать, но ошибок не должно быть…
Здравствуйте. Только опробую эту технологию (пока в тестовом режиме). сделала 2 базы 1с, из одной опубликовали веб-сервис, получили работающее описание, его видно в браузере. во второй зарегистрировала ссылку, во внешней обработке эту ссылку использую. но при запуске этой простой обработки вываливается ошибка: сервис не найден. что может быть причиной? ВнешняяОбработка.ТестоваяСервис.МодульОбъекта(3)}: Ошибка при вызове метода контекста (СоздатьWSПрокси)
http://nameserver/test/ws/WebTest?wsdl }:WebTest
Сервис = WSСсылки.WSСсылка1.СоздатьWSПрокси(«http://nameserver/test/ws/WebTest?wsdl»,»WebTest»,»WebTestSoap»);
по причине:
Сервис не найден. {
имя сервера изменено на nameserver. текст самой процедуры простой : Процедура КнопкаВыполнитьНажатие(Кнопка)
ВходнойПарам = «&& записан сервисом «;
Сервис = WSСсылки.WSСсылка1.СоздатьWSПрокси(«http://nameserver/test/ws/WebTest?wsdl»,»WebTest»,»WebTestSoap»);
ОтветСервиса = Сервис.WebTest(ВходнойПарам);
КонецПроцедуры
Непонятно, как составлять SOAP-запросы из веб-клиента к веб-серверу 1С. Осталось полностью непонятным использование SoapUI — после прочтения данной статьи. Вроде бы что-то написано, вроде бы приведены скриншоты — а в целом вся статья абсолютно непонятна. Автор, не умеете Вы статьи писать.
Помогите, пожалуйста, не могу разобраться!
http://schemas.xmlsoap.org/wsdl/ }definitions’. — ошибка загрзуки wsdl
Публикую веб-сервис, вместе с базой публикую. База открывается в браузере. А WSОпределение не создается — ошибка сервера 500. SoapUI пишет
WSDLException (at /html): faultCode=INVALID_WSDL: Expected element ‘{
(47) Ukubaeva, нашла — структура веб-сервиса не полностью соответствовала его содержанию
Опечатка в содержимом файла, необходимо иметь 2 файла с разными наименованиями и одним содержимым
Перезапустить web-сервер Apach или IIS, если всё выше сказанное правильно сделали, то взлетит отладка.