Примеры пользования web сервисов 1С из браузера




Принцип обмена данными из 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'=>'Начало загрузки'));

////очищаем таблицу
$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='\

99 Comments

  1. cs25

    Интересная статья. И примеры тоже. Плюс.

    Reply
  2. coder1cv8

    Спасибо! Очень интересно почитать…

    Reply
  3. polygrafin

    Еще не смотрел, но походу, весчь интересная

    Reply
  4. Evgen_5

    Очень интересная и полезная статья

    Reply
  5. GSoft

    хорошая статья

    но вот бы еще ее аналог для 7ки почитать (да раритет, но надо))))

    Reply
  6. luidgy

    Спасибо за статью

    Reply
  7. Sergey K

    +

    примеры не смотрел

    но jqGrid — очень понравилась 🙂

    Reply
  8. Asmody

    а зачем в архиве и .doc и .odt с одинаковым содержанием?

    Reply
  9. Трактор

    а зачем в архиве и .doc и .odt с одинаковым содержанием?

    Оригинал в odt. А doc для того чтобы могли прочесть и счастливые владельцы мс офиса.

    .

    GSoft, для 7-ки есть пример интернет-магазина на этом сайте. 7-ка не заточена для непосредственной работы с web, нужны сторонние приблуды.

    Reply
  10. tango

    «Опубликуем html файл на нашем web сервере под именем, например, preved.htm. »

    букофка l важна?

    Reply
  11. Трактор

    «Опубликуем html файл на нашем web сервере под именем, например, preved.htm. » букофка l важна?

    Нет. Главное чтобы ты к этой странице обращался браузером по тому имени под каким опубликована страница.

    Reply
  12. vgv8
    Reply
  13. Трактор

    Я вижу только заготовок страницы с описанием ошибки, но самого описания ошибки нет.

    Прокрути дальше и покажи что написано после тега <body>

    Ты установил модуль web сервисов в IIS?

    C:Program Files1cv81inwsinst.exe -IIS

    Reply
  14. RomDron

    А продолжение будет??? Как с авторизацией быть?

    Reply
  15. Трактор

    >> А продолжение будет??? Как с авторизацией быть?

    А надо? Какие-то наработки ещё есть, но они не представляют собой качественного изменения. Только развитие изложенной идеи.

    Среди обнаруженных ограничений нашёл что средствами javascript в 1С не получится по-человечески ни затолкать ни получить файл. Поэтому если требуется добавлять/читать файлы, то лучше использовать серверный язык, например PHP.

    С авторизацией немного разобрался.

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

    Для файловой базы на NTFS авторизацию средствами 1С запустить не удалось, зато хорошо работает доменная авторизация.

    Если к 1С обращаться серверным языком, то можно всегда это делать под одним пользователем с доменной авторизацией. Это не слишком безопасно, но работоспособно.

    2. В клиент-серверной версии проблем с авторизацией нет. Прекрасно катит авторизация средствами 1С.

    Reply
  16. Трактор

    Кстати, слабодокументированная возможность — анонимный доступ к базе. Для этого в опубликованном файле *.1cws надо указать имя и пароль

    Вот пример файла primer.1cws

    <?xml version=»1.0″ encoding=»UTF-8″?>

    <service namespace=»http://primer.ru» name=»РаботаСКлиентами» connectString=»Srvr="192.168.0.8";Ref="uttest";Usr="traktor";Pwd="123456";»/>

    Если теги покоцаются, то я не виноват.

    Reply
  17. tango

    (15) «средствами javascript в 1С не получится по-человечески ни затолкать ни получить файл»

    Извините, в чем проблема?

    речь идет об обмене файлами между IIS и 1С

    или между клиентом и сервером?

    Reply
  18. Трактор

    >> Извините, в чем проблема?

    Речь идёт об отношениях между клиентом (браузером) и сервером (Apache, IIS).

    1. При передаче файла клиенту 1C отдаёт XML файл в котором файл закодирован в base64. Браузер получает этот файл, закодированный в base64 и ничего с ним сделать не может. javascript не может записать файл на диск. Отобразить файл как картинку может только если размер файла меньше 4-х кБ.

    2. При передаче файла на сервер наступаем на те же грабли, только с другого края. javascript не может прочитать файл клиента. Это ограничение безопасности. Если бы удалось обойти это ограничение, то проблем бы не было. На javascript.ru мне посоветовали отправлять файл на сервер, там PHP’ом кодировать в base64 и возвращать клиенту. Нафига это надо? Чем так легче РНР’ом сразу писать файл в web сервис 1С.

    .

    tango, если ты знаешь как обойти эти ограничения — подскажи. Моя благодарность не будет иметь границ в пределах разумного 🙂

    Reply
  19. tango

    в порт-фолио две задачи по веб-доступу, обе без «сервисов», чисто СОМ-объект,

    в модуле внешнего соединения формирую текст для asp-response, при этом файл на сервере

    указывается просто как <A href=»file»>

    а получаю из формы обыкновенным POSTом

    единственное, на что наткнулся — и то — не грабли — просто не в лоб решается — удаление файла на сервере, 1ска во внешнем соединении этого не может

    Reply
  20. tango

    в модуле внешнего вся эта радость выглядит примерно так:

    Код
    // customers
    Функция getCustList() Экспорт
    СписокКонтрагентов = "";
    Попытка
    спр = Справочники.Контрагенты.Выбрать(Константы.КонтрагентыWWW.Получить());
    СписокКонтрагентов = СписокКонтрагентов + "
    |<table cellspacing=1 cellpadding=1 border=1 ID=Table>";
    Пока спр.Следующий() Цикл
       Если SelCust.НайтиПоЗначению(спр.Ссылка)=Неопределено тогда
          Check =Ложь;
       Иначе
          Check = Истина;
       КонецЕсли;
       value = спр.Код;
    СписокКонтрагентов = СписокКонтрагентов + "<tr><td><INPUT id=Check type=checkbox name=Check
    |value="+value+" "+?(Check,"checked","")+">
    |</td><td>"+спр.Наименование+"</td></tr>";   
    КонецЦикла;
    СписокКонтрагентов = СписокКонтрагентов + "</table>";
    Исключение
    Константы.Лог.Установить(Константы.Лог.Получить()+Символы.ПС+ОписаниеОшибки());      
    КонецПопытки;
    Возврат СписокКонтрагентов;
    КонецФункции
    

    Показать полностью

    Reply
  21. tango

    to support, фигня какая-то со слешами

    Reply
  22. Трактор

    Пользовать com объекты тоже хорошее решение. Правда только для windows+IIS.

    Файлы на сервере надо будет удалять ASP’ом после отдачи их их клиенту или после завершения сессии. Но тут я не силён.

    Reply
  23. tango

    фишка еще в том, что ком есть и для 77

    удалять у меня по ходу не надо, админ удалит, ежели чё, потому и не заморачивался

    но, похоже, решение на яваскрипте встроено:

    Код
     var fso, f;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    f = fso.CreateTextFile("c:\\testfile.txt", true);
    f.WriteLine("This is a test.");
    f.Close();
    f = fso.GetFile("c:\\testfile.txt");
    f.Delete();

    Показать полностью

    Reply
  24. Трактор

    ActiveXObject это не javascript. Это огромная дыра в безопасности IE. Твой код работает только в IE.

    Если предполагается использовать только ИЕ, то да, твоё решение прокатит.

    .

    >> фишка еще в том, что ком есть и для 77

    Базару нет. Для 77 предложенный тобой способ единственный. Иначе вживую к базе не достучаться. Для 8-ки он тоже хорош, серьёзных минусов назвать не возьмусь.

    Но я бы отдал построение страниц web серверу, а из 1С отдавал только данные. Как говорится каждому своё.

    Reply
  25. TbSasha

    Подскажите пожалуйста почему у меня не получается подключиться. В apache я все прописал вроде как надо. Пытаюсь подключиться и когда в браузере набираю http://localhost/ws/preved.1cws выводит {http://www.sample-package.org}:ЗдоровенькиБулы и когда нажимаю на это то выходит:

    soap:Client Ошибка вызова операции сервиса: {http://www.sample-package.org}:ЗдоровенькиБулы:getWSDL() по причине: {WebСервис.ЗдоровенькиБулы(3,9)}: Неопознанный оператор по причине: {WebСервис.ЗдоровенькиБулы(3,9)}: Неопознанный оператор Ошибка вызова операции сервиса: {http://www.sample-package.org}:ЗдоровенькиБулы:getWSDL() по причине: {WebСервис.ЗдоровенькиБулы(3,9)}: Неопознанный оператор по причине: {WebСервис.ЗдоровенькиБулы(3,9)}: Неопознанный оператор

    В чем может быть проблема?

    Reply
  26. seermak

    я искал в гугле по строке «inurl:»asmx?wsdl»» сервисы и их юзал

    Reply
  27. Трактор

    25 Модуль web сервиса ЗдоровенькиБулы выглядит так:

    Функция ПриветХлопцы()

    Возврат «Здоровеньки булы, друзи!»

    КонецФункции



    Такая ошибка может выдаваться если

    1. ты ничего не написал после слова Возврат.

    Или

    2. В свойствах метода ПриветХлопцы не указал тип возвращаемого значения string (http://www.w3.org/2001/XMLSchema)

    Reply
  28. tango

    (24) «ActiveXObject это не javascript. Это огромная дыра в безопасности IE. Твой код работает только в IE.»

    в IIS, да? до IE этот код, в общем-то не доходит, ранэтсервер, так сказать… 🙂

    Reply
  29. Трактор

    В 27 и это была попытка выделить текст курсивом. Не получилось 🙁 Не обращайте на них внимания.

    28 tango, или ты или я не в теме. Я всегда считал что яваскрипт не исполняется на сервере. Это клиентский язык. Неужели я ошибаюсь?

    Reply
  30. zsergey

    Подскажите, пожалуйста, какие настройки нужно произвести, чтобы заработало под IIS?

    Сейчас при нажатии на кнопку выскакивает сообщение:

    «Запрос завершился неудачно. Ответ сервера:

    <?xml version=»1.0″ encoding=»UTF-8″?>

    <service namespace=»http:/sample-package.org» name=»ЗдоровенькиБулы» connectString=»File=»C:Work1cWSDemo»;»/>.»

    C:Work1cWSDemo — путь по которому расположены файлы конфигурации.

    Reply
  31. Трактор

    Такой ответ говорит о том что IIS не видит компоненты 1С, обеспечивающей работу web сервисов.

    Посмотри на файл *.1cws браузером. Обращение к нему может выглядеть так http://localhost/preved.1cws

    Сервер должен выдавать ссылку в этом роде:

    {http:/sample-package.org}:ЗдоровенькиБулы

    Под этим текстом должна быть WS ссылка на получение описания сервиса.

    http://localhost/preved.1cws?wsdl

    Если ты увидишь что-то вроде {http:/sample-package.org}:ЗдоровенькиБулы, то это значит что модуль web сервисов в IIS установлен верно. До получения такой ссылки базу 1С трогать не стоит, IIS к ней ещё не обращается.

    Reply
  32. bme

    Подскажите, пожалуйста, как можно вызвать операцию из строки браузера?

    Например: http://localhost/preved.1cws/ПриветХлопцы

    Окружение: Apache 2.2, 1C 8.1.13, Win 2003

    Reply
  33. bme

    Разобрался, есть хороший инструмент для отладки web сервисов — SoapUI

    Reply
  34. Loshko_WR

    Скачал, установил по инструкции.

    При входе на http://localhost/wwwroot/www1csrv/preved.htm пишет:

    Запрос завершился неудачно. Ответ сервера:<?xml version»1.0″ encoding=»UTF-8″?><service namespace=»htto://www.sample-package.org» name=»ЗдоровенькиБулы» connectString=»File="\SteBase1c8EnterpriseTE&;;»>

    Если открываю файл preved.htm из папки или из IIS то сначала открывается страница с кнопкой, после нажатия на нее выходит та же ошибка.

    WinXP Pro, 1С:Предприятие 8.1 (8.1.12.101), УПП редакция 1.2 (1.2.19.1)

    WEB расширение 1.1 на этом-же ПК и с этой же базой работает

    Че делать-то??? СПАСИБО заранее.

    Reply
  35. Loshko_WR

    Сделал как в 31 ссылка http://localhost/preved.1cws?wsdl теперь ссылка есть.

    Но при нажатии кнопки пишет ошибка доступа к файлу \SteBase1c8EnterpriseTE1Сv8.cdn, а уменя его (1Сv8.cdn) в базе 1С по сетевому пути нет.

    Reply
  36. Трактор

    (35) Это значит что ты пользуешь файловую 1Сину и в базе есть пользователи. Как бороть я уже писал. Либо снеси всех пользователей либо переведи базу в клиент-серверный вариант либо переложи на диск на с FAT32.

    Reply
  37. Loshko_WR

    По выложенному примеру сделал вывод списка платежек.

    Но не знаю как передать параметры в вызов процедуры, чтобы можно было задать период выборки и, например, подразделение.

    И еще как тут на форуме свои разработки выкладывать, а то мож кому пригодится.

    Reply
  38. Трактор

    Отписался на странице разработки http://infostart.ru/projects/3748/

    Reply
  39. 1dz

    Здоровеньки Булы!

    помогите заставить работать этот сервис, плиз

    установил, пример 1 работает:

    http://localhost/preved.1cws выдает:

    http://www.sample-package.org}:ЗдоровенькиБулы

    http://localhost/preved.1cws?wsdl выдает описание веб сервиса.

    пример 2:

    http://localhost/sotrudniki.1cws выдает:

    {http://www.sample-package.org}:Сотрудники

    http://localhost/sotrudniki.1cws?wsdl выдает:

    — <ht ml>

    — <head>

    <title>A server error occurred.</title>

    </head>

    <h1>Неизвестная ошибка. server_addr=tcp://SERV1C:1562 descr=Ошибка сетевого доступа к серверу (Windows Sockets — 10054(0x00002746). An existing connection was forcibly closed by the remote host. ) line=1031 file=.srcDataExchangeTcpClientImpl.cpp по причине: server_addr=tcp://SERV1C:1562 descr=Ошибка сетевого доступа к серверу (Windows Sockets — 10054(0x00002746). An existing connection was forcibly closed by the remote host. ) line=1031 file=.srcDataExchangeTcpClientImpl.cpp</h1>

    <hr />

    An error occurred processing this request.

    </html>

    включен технологический журнал в дамп падает rphost

    запускаем отладчик, вызываем ошибку, анализируем дамп:

    In rphost__PID__952__Date__04_21_2009__Time_08_47_22PM__71__Sec­ond_Chance_Exception_C0000005.dmp the assembly instruction at backend!SCOM_Main+d180 in C:1cv81inackend.dll from 1C has caused an access violation exception (0xC0000005) when trying to read from memory location 0x00000000 on thread 5

    Почему так? Жду помощи….

    БД на MSSQL 2005 sp2, 1С 8.1.13.41, www -серверы были испробованы Apache2.2 и IIS6.

    Может сразу в техподдержку?

    Reply
  40. Трактор

    Я ничего толкового про эту ошибку сказать не могу.

    Рекомендую обратиться к Славе Гилёву.

    У него описаны способы лечения. http://www.gilev.ru/1c/81/error54/

    Reply
  41. Трактор

    1С при обращении просит логи технологического журнала и дампы аварийного завершения. Если решишься обращаться в 1С, то укажи в logcfg.xml каталог для дампов:

    <dump location=»C:Program Files1cv81dumps» create=»1″ type=»3″/>

    В технологический журнал пиши всё. Потом всё что получишь высылай в 1С может помогут.

    Reply
  42. 1dz

    http://www.gilev.ru/1c/81/error54/ видел, делал как написано, переустанавливал 1с и MSSQL на другом железе, дампы 1с есть, только читать их неизвестно чем. Напишу Гилеву

    Reply
  43. zorkKiy

    Подскажите, пытаюсь получить список сотрудников, получаю следующее:

    ____________________________

    Запрос завершился неудачно. Ответ сервера: <soap:Envelope xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/»>

    <soap:Header/>

    <soap:Body>

    <soap:Fault>

    <faultcode>soap:Client</faultcode>

    <faultstring>Неверный аргумент. </faultstring>

    <detail>Неверный аргумент. </detail>

    </soap:Fault>

    </soap:Body>

    </soap:Envelope>

    ________________________

    Web-сервис подключен — дебагер вываливается на брейкпоинте в модуле внешнего соединения (1С), а в модуль Web-сервиса не попадает. Я так понимаю ошибка происходит до вызова модуля Web-соединения. Причем с Web-сервисом «ЗдоровенькиБулы» все хорошо — отрабатывает как надо. Похоже входящий параметр как-то не так обрабатывается при разборе SOAP пакета..

    Reply
  44. Трактор

    (43) Значит дело действительно во входном аргументе (параметре). Посмотри текст запроса, который идёт в 1С. У тебя, скорей всего, нет тега СтрокаПоиска.

    Добавь хоть пустой тег <m:СтрокаПоиска> </m:СтрокаПоиска>

    1С при получении запроса сначала проверяет его на соответствие WSDL. А в WSDL прописан обязательный входной параметр СтрокаПоиска. Только после этого управление передаётся твоему коду в модуле web сервиса.

    Reply
  45. zorkKiy

    <?xml version=»1.0″ encoding=»UTF-8″?> <soap:Envelope xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/»> <soap:Header/> <soap:Body> <m:ПолучитьСписокСотрудников xmlns:m=»http://www.sample-package.org»> <m:СтрокаПоиска xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»>кар</m:СтрокаПоиска> </m:ПолучитьСписокСотрудников> </soap:Body> </soap:Envelope>

    _________________________

    Вот то, что уходит в 1С..

    Reply
  46. Трактор

    (45) Только что проверил. Поднял заново сервис. Работает. Вот текст запроса.

    <soapenv:Envelope xmlns:soapenv=»http://schemas.xmlsoap.org/soap/envelope/» xmlns:sam=»http://www.sample-package.org»>

    <soapenv:Header/>

    <soapenv:Body>

    <sam:ПолучитьСписокСотрудников>

    <sam:СтрокаПоиска>вич</sam:СтрокаПоиска>

    </sam:ПолучитьСписокСотрудников>

    </soapenv:Body>

    </soapenv:Envelope>

    Попробуй http://83.237.194.40:180/ws/sotrudniki.1cws?wsdl

    Reply
  47. Трактор

    имя пользователя inet без пароля

    Reply
  48. Трактор

    Ссылка на nj как ответ выглядит в soapUI http://narod.ru/disk/start/08.dl2d-narod.yandex.ru/8852596000/h71768fb50b58efda553ab9be096ae219/%D0%94%D0%B5­%D0%BC%D0%BE%20ws.JPG

    Reply
  49. Arabo_xv

    Наличие базы в файловом режиме на разделе NTFS не создаёт проблемм с авторизацией. Там 3 уровня авторизации.

    1 — Веб сервер

    2 — Права доступа на файлы (в том числе и для файлов базы) для пользователя под которым запускается веб сервис.

    3 — Авторизация в информационной базе.

    В 99% случаях вы упираетесь в 2 пункт. Решение этой проблеммы простая настройка права доступа к вайлам.

    Reply
  50. fantasy2

    1с 8.1 файловая так работает?

    Reply
  51. fantasy2

    http://localhost/preved.htm

    после загрузки этой страницы

    видим кнопку «Поприветствовать web сервис»

    при нажатии

    или ошибка на весь экран

    Запрос завершился неудачно Отвер сервера

    <DOC TIPE HTMLPUBLIC DTD HTML 3.2 FINAL>

    или кнопка меняет надпись на «ждем ответа» и все.

    Reply
  52. Трактор

    (51) Ответ сервера похож на заголовок ошибки. Скорей всего причина в том что не подключён модуль wsap22.so (wsapch2.so, wsap22.dll, wsapch2.dll, wsisapi.dll) к web серверу. Проверь что возвращает http://localhost/preved.1cws

    Если к фирефоксу подключишь firebug, то сможешь видеть запросы, ушедшие на сервер и полученные браузером. Они должны быть похожи на запросы, приведёные в статье.

    Почитай обсуждение. Тут много писалось. Повторять не хочется.

    Reply
  53. ValentinV

    Здорово!

    А в качестве сервера SOAP что-то другое, кроме 1с, использовать?

    Reply
  54. ValentinV

    Очень хорошо с методической точки зрения написано.

    Я такого стиля очень давно не видал.

    Огромное спасибо.

    Reply
  55. megatrend

    Путь к документации в doc-файле теперь должен быть такой : file:///c:/Program%20Files/1cv81/AddDoc/RU/V8AddDoc81.htm#_Toc176167634

    Reply
  56. mc2

    Может кто подскажет, почему не работает с 8.2?

    Если указываю относительный путь в Open, то запрос не отсылается, если полный — статус ответа 0. Пытался такой же скрипт на 1С смоделировать — там возвращается ошибка 500. Что не так делаю?

    Reply
  57. Трактор

    8.2 ещё не пробовал. Что браузер говорит при открытии http://localhost/preved.1cws ?

    Reply
  58. marsohod

    +

    Мне тоже нравится SciTE … 🙂

    Reply
  59. pk_xD

    кто нить подключал веб сервисы в асп, почему то когда вызываю метод сервиса пишет: There is an error in XML document (7, 4).

    Reply
  60. Трактор

    (59) Сграбь снифером (сетевым монитором) ответ web сервиса и дай его сюда. Не видя xml документа трудно сказать что не так в четвёртом символе седьмой строки.

    Reply
  61. pk_xD

    омг… кажеться понял в чем ошибка, тип возвращаемого значения ф-ии был не тот…

    теперь проблеема как в асп описать тип возвращаемого значения… ))

    Reply
  62. assan

    под IIS всё работало , поставил Apache, IIS убрал

    вызовы …..xxxx.1cws и …..xxxx.1cws?wsdl возврвщают одно и тоже — содержимое файла xxxx.1cws

    и, видимо поэтому, 1с не могу импортировать wsdl , получить ws ссылку.

    Reply
  63. Трактор

    (62) Модуль 1С не подгружен в апач. Ты точно добавил в httpd.conf такую строку ?

    LoadModule _1cws_module «C:Program Files1cv81inwsap22.dll»

    Reply
  64. assan

    LoadModule _1cws_module «C:Program Files1cv81inwsap22.dll»

    добавил, с правами вроде нормально. Похоже, что модуль не подгружается, или ещё

    ProcessMonitor пишет

    Operation: QueryOpen

    Result: SUCCESS

    Path: C:Program Files1cv81inwsap22.dll

    Reply
  65. Трактор

    (64) Странно. С таким не сталкивался.

    Версия модуля 1С совпадает с версией апача? Если апач 2.0, то надо писАть так LoadModule _1cws_module «C:Program Files1cv81inwsapch2.dll»

    Reply
  66. assan

    версии соответствуют.

    есть версия apache , которая проверена и работает? (а апач 2.2.15 скачивал с ихнего сайта, последняя версия, мож глючит)

    и папка conf в которой есть изменения ?

    скинь на мыло, может я чё в конфиге не то делаю.

    Reply
  67. Трактор

    (66) lyay собака яндэкс точка ру пришли httpd.conf

    Reply
  68. assan

    поставил ISS — работает.

    останавливаю ISS, устанавливаю apache, (при установке пишу localhost)

    в httpd вставляю

    LoadModule _1cws_module «c:/Program Files/1cv81/bin/wsap22.dll»

    в папку htdocs помещаю файл ***.1cws

    обращаюсь http://localhosc/***.1cws и http://localhosc/***.1cws?wsdl

    результат одинаковый.

    останавливаю apache, запускаю IIS (http://localhost/ws/***.1cws?wsdl) — работает……

    наверно я что-то не так настраиваю….

    Reply
  69. Трактор

    (66) раскопал у себя httpd.conf от 8.1

    Оказывается я уже начал забывать как она публикуется. Файлы ws надо класть в папку, указанную в алиасе. Вот полная цитата публикации:

    LoadModule _1cws_module «C:Program Files1cv81inwsap22.dll»
    
    Alias /ws «C:Program FilesApache Software FoundationApache2.2htdocsws»
    
    <Location /ws >
    DirectorySlash Off
    SetHandler 1cws-process
    Allow from all
    </Location>
    

    Показать

    Reply
  70. assan

    ТРАКТОРУ — УРА!!!!!!

    для IIS рекомендую инструкцию Настройка IIS

    Reply
  71. wonrims85

    Запускаю сервис, требует аутентификацию. Если ввести пароль и имя пользователя из 1с, то возвращает Ошибка соединения с информационной базой. Что за черт, уже всю голову сломал, в инструкции ничего про это нет. У меня apache 2.2?

    Reply
  72. Трактор

    (71) почитай обсуждение. Этот вопрос задавался многажды. У пользователя под которым работает апач нет прав на файл базы 1С.

    Reply
  73. wonrims85

    (72) Дело не в этом, когда я удаляю всех пользователей из конфигуратора, то все работает, если добавить хотя бы одного, то при запуске веб-сервиса требует аутентификацию, причем пароль из 1с не подходит, у пользователя стоят полные права

    Reply
  74. Трактор

    (73) Перейди на клиент-серверную версию. Это точно поможет.

    Reply
  75. assan

    ппробуй поставить IIS (70)

    Reply
  76. DSirius

    Очень полезная и нужная статья.

    А как реализовать загрузку в 1с измененных данныйх. На пример, изменили фамилию на сайте и эти изменения отразились в базе. Очень нужно реализовать именно такое взаимодействие и причем онлайн. На платформе 8.2

    Reply
  77. DimaP

    в 8.2 вообще файлы .1cws не публикуются 🙁

    Как надо настраивать IIS для этого случая и каким образом делать обращение к веб-сервису?

    Пока что экспериментирую на «Здоровеньки булы».

    У меня задача такая: по переданному коду 1с должна возвратить таблицу с данными.

    Reply
  78. Трактор

    (77)Что-то перестали приходить уведомления. В 8.2 обычно публикуются файлы default.vrd

    Reply
  79. vitalya24

    полезная весчь эти веб сервисы, реализовал при их помощи связь с тсд)))

    Reply
  80. 1cvirus

    Супер — наконец-то я хоть немного понял.

    Reply
  81. tartalia

    Мне удалось реализовать подключение для разработки таких WEB-интерфесов, почему-то 1С это не очень широко рассказывает.

    Reply
  82. kxl

    Примеры помогли в свое время

    Reply
  83. mehalyna

    Спасибо, пригодилось.

    Reply
  84. Gasdrubal

    Не работает под IIS? подскажите как нстроить? в чем различия? Может быть я пути неверно прописываю?

    Reply
  85. Трактор

    (84) Пошаговая инструкция настройки web-сервисов для 1Сv8.1 и IIS 7.5/7.0 http://infostart.ru/public/75205/

    Настройка веб-клиента 1С:Предприятие 8.2 под Windows 7 x64 и IIS http://infostart.ru/public/71480/

    Reply
  86. Трактор

    (86) Всё верно написал. Так всё и есть. Или править настройки безопасности браузера, как это делает 1С, или работать php. Примеры даны на яваскрипте только для лучшего понимания внутренностей обмена меж браузером и веб сервером.

    tango тебя тут врядли услышит.

    Reply
  87. ntvg

    Спасибо! Очень интересная статья

    Reply
  88. Oleg51

    при публикации веб-сервиса в папке с веб доступом появляется *.vrd, а не *.1cws

    ошибка 405 после отправки данных на сервак, соответственно ответа нет.

    Reply
  89. Трактор

    (90) Всё верно в 1С 8.2 публикуется именно default.vrd, а обращаться надо по адресу ИмяСервиса.1cws

    Reply
  90. mc1c80

    Не могу пока скачать файлы , но очень хочется.

    Очень был бы рад, если бы кто-то выложил на другом сайте эту статью.

    Reply
  91. gorneev

    Это точно, пример очень нужный

    Reply
  92. Трактор

    (92) (93) Раз уж тяжко заработать рейтинг, то вот статья. Я её пригрузил неким текстом, который нужно прочесть, если скачали файл с народа.

    http://narod.ru/disk/31303617001/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F%20w­eb%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B%201%D0%A1%20­%D0%B8%D0%B7%20%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0­%B0%20%D1%81%20%D0%BE%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5%D0­%BB%D1%8C%D0%BD%D1%8B%D0%BC%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D1­%80%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%82%D0%B5­%D0%BA%D1%81%D1%82%D0%BE%D0%BC.r.html

    Reply
  93. zastep

    Интересно, надо попробовать [+]

    Reply
  94. Kaperang

    Объединил свою тестовую конфигурацию с конфигурацией из примера.

    Платформа 8.2.13.219

    Опубликовал на IIS под именем «AlfaTest82» в папку «C:InetpubwwwrootAlfaTest82» с установленной галкой «Использовать аутентификацию операционной системы на веб-сервере».

    В папке «C:InetpubwwwrootAlfaTest82» при публикации был создан файл 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=»/AlfaTest82″
    ib=»Srvr="Srv1C:1641";Ref="AlfaTest82";»>
    <ws>
    <point name=»ЗдоровенькиБулы»
    alias=»preved.1cws»/>
    <point name=»Сотрудники»
    alias=»sotrudniki.1cws»/>
    </ws>
    </point>

    Показать

    Ввожу в браузере «http://localhost/AlfaTest82/preved.1cws»

    Получаю сообщение: «Файл не обнаружен ‘v8res://mngsrv/preved.1cws’ «

    Reply
  95. Трактор

    (96) Такой ошибки я не встречал, но путь приведён внутри 1С. Значит опубликовано верно. Похоже что криво объединил.

    Reply
  96. Kaperang

    (97) Создал пустую базу (платформа 8.2, клиент-серверный вариант, MS SQL 2005).

    Загрузил в нее конфигурацию из примера, опубликовал

    Ввожу в браузере:»http://srv1c/IISTest/preved.1cws»

    Получаю ту же ошибку: «Файл не обнаружен ‘v8res://mngsrv/preved.1cws’ «

    Reply
  97. abtat

    Спасибо за всю информацию, Трактор. В создании сервисов в демонстрационных конфигурациях ПоставщикWSDemo — ПолучательWSDemo я разобрался и свои ошибки нашел. Ваши демонстрационные сервисы и свой сервис по анализу серийных номеров приборов исправно работают как при вызове из другого 1С, так и при вызове из браузеров IE и Opera. Перенес пакеты ХДТО и сервисы в файловую копию рабочей системы и не могу справиться с аутентификацией. Сделал специального пользователя «UserWS» с паролем «аа» и дал ему роли пользователя, администратора и полные права.

    Для вызова из другой 1С ввел его имя и пароль в конструктор «Новый WSОпределения(…)» вызывающей 1С, как указано в хелпе, и получаю ответ:

    {Обработка.ПроверкаVEGAНомера.Форма.Форма.Форма(14)}: Ошибка при вызове конструктора (WSОпределения)

    Определения = Новый WSОпределения(«http://localhost/WebServicesDemo/ws/TestVegaSN.1cws? wsdl»,»UserWS»,»aa»);

    по причине:

    Аутентификация пользователя не выполнена.

    Для вызова из браузера добавил имя тестового пользователя и пароль в строку ib по образцу Вашего текста файла default.vrd из сообщения №105. Несмотря на это, у меня требуется пароль. Запрос приложил. Пытался вводить на нем как тестового пользователя с паролем, так и свое имя со своим паролем, а у меня все права и на компьютере, и в 1С, и в сети — все равно получаю ответ «Аутентификация пользователя не выполнена».

    Все экземпляры 1С и браузеры расположены на одной машине, поэтому сетевых проблем быть не должно. Что делать?

    Reply
  98. Трактор

    (197) С файловой базой вечно проблемы. Проверь наличие прав на каталог 1С у пользователя, под которым работает веб сервер. Если права есть, то попробуй переложить базу на сетевой диск или на диск с fat32. Должно помочь.

    Reply
  99. Manticor

    (199) никак не могу разобраться, воссоздавая Ваш пример по шагам)

    1с 8.2, публикую веб сервис- скрин прилагаю) вы пишите, что файлик preved.1cws должен находиться в одной папке, но при стандартной публикации — его почему то там нет. И выезает ошибка на первом шаге Вашего руководства:

    {«#exception»:»{http://v8.1c.ru/8.1/data/core}Exception»,»exception»:{«clsid»:»9db1fa37-b455-4f3f-b8dd-7de0ea7d6da3″,»descr»:»Файл не обнаружен ‘v8res://mngsrv/tr_preved.htm'»,»data»:»77u/ew0KezlkYjFmYTM3LWI0NTUtNGYzZi1iOGRkLTdkZTBlYTdkNmRhMyw­i0KTQ
    sNC50Lsg0L3QtSDQvtCx0L3QsNGA0YPQttC10L0gJ3Y4cmVzOi8­vbW5nc3J2L3Ry
    X3ByZXZlZC5odG0nIn0sMSwNCnsidjhyZXM6Ly9tbmd­zcnYvdHJfcHJldmVkLmh0
    bSIsMH0NCn0=»}}

    Что нужно поменять?

    Reply

Leave a Comment

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