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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *