Приветствую Вас ГостьПятница, 03.05.2024, 20:19

Каталог статей

В категории материалов: 16
Показано материалов: 11-16
Страницы: « 1 2


Если надо в внешней обработке или отчете получить данные через веб, то это можно сделать следующим образом:

    Пользователь = "Пользователь";
    Пароль = "пароль";
    АдресВебСервиса = "http://v-srv-web1c.voloblgaz.local/<Имя сервиса>/ws/ObmenSpravochnikami.1cws?wsdl";

    ОпределениеВС = Новый WSОпределения(АдресВебСервиса, Пользователь, Пароль);

    Сервис = Новый WSПрокси(ОпределениеВС,ОпределениеВС.Сервисы[0].URIПространстваИмен, ОпределениеВС.Сервисы[0].Имя,ОпределениеВС.Сервисы[0].ТочкиПодключения[0].Имя);

    Сервис.Пользователь = Пользователь;
    Сервис.Пароль = Пароль;

    // Если у операции веб-сервиса входные данные простого типа, то просто передаем значение в качестве параметра

    ЛицевойСчетВДГО = "111";

    ФайлыАбонентаДанные = Сервис.ПолучитьПрисоединенныеФайлыАбонента(ЛицевойСчетВДГО);

   // Если тип входных данных определен в пакете XDTO, то надо предварительно описать типы

Взаимодействие с другими базами, приложениями и источниками данных | Просмотров: 533 | Добавил: leshic | Дата: 07.02.2020 | Комментарии (0)

Для записи файла можно использовать несколько объектов:

  1. Текст = Новый ЗаписьТекста(). Работает как на сервере, так и на клиенте
  2. Новый ТекстовыйДокумент(). Позволяет получать и сохранять текст в файле, работать со строками, открывать текст в текстовом редакторе 1С:Предприятия.  Можно использовать макеты и выводить в текстовый документ информацию формирую области.

Для чтения можно использовать 

  1. Текст = Новый ЧтениеТекста()
  2. Новый ТекстовыйДокумент().

Если веб-сервер настроен на отдельном сервере, то для перенастройки веб-сервера надо указать новый сервер в файле default.vrd в каталоге базы веб-сервера.

       ib="Srvr=&quot;<адрес сервера>&quot;;Ref=&quot;<имя базы>&quot;;"

В частности, если используем IIS, то это каталог c:\inetpub\wwwroot\<имя базы>\default.vrd.

Более цивилизованный способ в настройках информационной базе на сервере, на котором поднят веб, меняем строку подключения, потом входим конфигуратором с правами администратора и заново опубликовываем. 

После этого надо перезапустить IIS. Для этого можно воспользоваться командой iisreset.exe с правами администратора


СтрокаРезультат = ВнешняяБД.ValueToStringInternal(Запрос.Выполнить().Выгрузить());
ТабВнешняя = ЗначениеИзСтрокиВнутр(СтрокаРезультат);


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

Открываем ветку Web-сервисы, существующий веб-сервис, нажимаем "Добавить / Операция".

Указываем

  • Имя 
  • Тип возвращаемого значения. Если тип имеет нестандартный тип, то его предварительно необходимо определить в XDTO-пакете
  • Имя процедуры (нажимаем на лупу и переходим в модуль сервиса)

Если результат должен формироваться по входным параметрам, то создаем параметры для операции. Направление передачи = "Входной".

Для созданного свойства надо обязательно указать права доступа. Правая кнопка мыши, Дополнительно и выдаем для нужной роли права  на "Использование".

Тип значения может быть элементарным или определенным отдельно (но все равно должен состоять из элементарных типов). Про типы можно посмотреть здесь: https://its.1c.ru/db/metod8dev#content:1793:hdoc

Допустим нам надо вернуть таблицу значений. Самый простой вариант определить 2 типа: Тип1 - строка таблицы (определяем столбцы таблицы), Тип2 - массив строк таблицы.

Находим нужный XDTO-пакет (пакет XDTO указан в свойстве "Пакеты XDTO"  сервиса, точнее там указано URI пространства имен. просматриваем все XDTO-пакеты, и ищем нужны по значению этого реквизита).

Добавляем тип объекта для строки таблицы.

Далее создаем тип объекта для таблицы, добавляем свойство СтрикиТаблицы и указываем для него тип созданные ранее для строки таблицы

Так как нам нужна таблица, то в свойствах строки ставим реквизит "Максимальное количество" = -1. Это говорит о том, что максимальное количество значений не ограничено. По умолчанию этот реквизит равен 1, что означает, что он может быть только 1. Поставим реквизит "Возможно пустое" = Истина, так как есть возможность, что наша функция вернет пустой набор строк.

Теперь открываем функцию модуля сервиса.

Текст функции примерно такой:

Функция РаботыИМатериалы(ДатаНачала, ДатаОкончания) // 2 параметра соответствуют входным параметрам нашей операции
    
    ВыходныеДанныеТипТаблица = ФабрикаXDTO.Тип("http://localhost/rng_vdgo", "ТаблицаРеализация");    //создаем тип для таблицы
    ВыходныеДанные = ФабрикаXDTO.Создать(ВыходныеДанныеТипТаблица); // создаем саму таблицу
    
    ВыходныеДанныеТипСтрокаТаблицы = ФабрикаXDTO.Тип("http://localhost/rng_vdgo", "СтрокаРеализация"); //Создаем тип для строки
    
    ТЗРаботыИМатериалы = ВОГ_ВебСервисы.СформироватьТаблицуРаботИМатериалов(ДатаНачала, ДатаОкончания); // получаем таблицу значений для выгрузки
    
    Для каждого СтрокаТЗ из ТЗРаботыИМатериалы Цикл
        
        ВыходныеДанныеСтрокаТаблицы = ФабрикаXDTO.Создать(ВыходныеДанныеТипСтрокаТаблицы); //создаем строку таблицы

        //заполняем строку

        ВыходныеДанныеСтрокаТаблицы.ДатаРеализации = СтрокаТЗ.Период;
        ВыходныеДанныеСтрокаТаблицы.ГУИДПодразделение = Строка(СтрокаТЗ.ПодразделениеСсылка.УникальныйИдентификатор());        
        ВыходныеДанныеСтрокаТаблицы.КодПодразделения = СтрокаТЗ.ПодразделениеКод;
        ВыходныеДанныеСтрокаТаблицы.Подразделение = СтрокаТЗ.ПодразделениеПолноеНаименование;                
        ВыходныеДанныеСтрокаТаблицы.ГУИДНоменклатура = Строка(СтрокаТЗ.НоменклатураСсылка.УникальныйИдентификатор());
        ВыходныеДанныеСтрокаТаблицы.Номенклатура = СтрокаТЗ.НоменклатураНаименование;
        ВыходныеДанныеСтрокаТаблицы.Количество = СтрокаТЗ.Количество;
        ВыходныеДанныеСтрокаТаблицы.Сумма = СтрокаТЗ.Сумма;
        ВыходныеДанныеСтрокаТаблицы.ЭтоМатериал = СтрокаТЗ.ЭтоМатериал;

        ВыходныеДанные.СтрокиТаблицы.Добавить(ВыходныеДанныеСтрокаТаблицы); //добавлеям строку в таблицу (как строка массива)
        
    КонецЦикла;
    
    Возврат ВыходныеДанные; //Обязательно возвращаем значение

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

Для получения данных через веб-сервис по созданной нами операции текст процедуры может быть примерно таким:

Процедура ПолучитьТаблицуРаботИМатериаловНаСервере()
    Сервис = WSСсылки.НашаСсылка.СоздатьWSПрокси("http://localhost/rng_vdgo", "rng_vdgo",  "rng_vdgoSoap");
    Сервис.Пользователь = "пользователь"; //пользователь зарегистрированный в 1С к которой обращаемся и имеющий права на веб-сервисы и чтение данных, указанных в запросе
    Сервис.Пароль = "пароль";
    //в WSСсылке НашаСсылка должна быть обновлена структура WSDL (типы и свойства на удаленном сервере). Этого можно добиться заново забив строку URL источника у ссылки
    ДанныеТаблицаРеализацияТип = Сервис.ФабрикаXDTO.Тип("http://localhost/rng_vdgo","ТаблицаРеализация");  //создаем тип для таблицы
    ДанныеТаблицаРеализация = Сервис.ФабрикаXDTO.Создать(ДанныеТаблицаРеализацияТип); //создаем саму таблицу
    
    ТаблицаРеализации = Сервис.ПолучитьТаблицуФактРаботыИМатериалы(ДатаНачала, ДатаОкончания); //получаем данные

    Для каждого СтрокаРеализации из ТаблицаРеализации.СтрокиТаблицы Цикл //обходим таблицу

                     ...

    КонецЦикла;

КонецПроцедуры

URL задается строкой. Примерный вариант: http://сервер/имя публикации (обычно совпадает с именем базы)/ws/<имя сервиса>.1cws?wsdl

 



1-10 11-16
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [40]
Администрирование [34]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0