Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является мультиплатформенной и на данный момент ее использование весьма актуально.
Примерами таких веб-сервисов можно назвать:
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS веб-сервис Центробанка, для получения ежедневных данных.
http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml веб-сервис Яндекса проверки правописания.
https://www.flightstats.com/developers/bin/view/Web+Services/WSDL ряд веб сервисов авиастатистики, для мониторинга полетов, сведений о погоде, и.т.п.
WSDL (Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. (спецификация http://www.w3.org/TR/wsdl).
SOAP (Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределенной вычислительной среде. SOAP используется для обмена произвольными сообщениями в формате XML и удалённого вызова процедур (RPC). (спецификация http://www.w3.org/TR/soap/).
XDTO (XML Data Transfer Objects) — механизм объектного моделирования данных, описываемых с помощью схемы XML (подробнее http://v8.1c.ru/overview/xdto.htm).
Большинство примитивных типов сериализованных объектов разработана компание W3 и их описание находится в пространстве имен «http://www.w3.org/2001/XMLSchema».
 
и так: Задание 1: Установка платформы 1С: Предприятие, установка компоненты IIS сервера, связь Web-Расширения 1С с сервером IIS.
При установке платформы 1С: Предприятие необходимо установить Web-Расширение.
Рис. 1. Выбранные компоненты в момент установки 1С
В меню «Панель управленияВсе элементы панели управленияПрограммы и компоненты» Необходимо выполнить установку дополнительных компонентов Windows «Включение или отключение компонентов Windows» где указать все компоненты IIS (за исключением FTP, для текущей работы он не требуется). После установки рекомендуется перезапустить операционную систему.
Рис. 2. Выбранные компоненты в момент установки IIS
В меню «Панель управленияВсе элементы панели управленияАдминистрирование» запустить консоль «Диспетчер служб IIS», где открыть элемент «Пулы приложений» открыть пул «DefaultAppPool» в контекстном меню выбрать «Дополнительные параметры…» где элемент «Разрешены 32-рязрядные приложения» надо установить «True». Это необходимо для работы Web-Расширения 1С, т.к. оно является 32-битным прилодением.
В той же консоли «Диспетчер служб IIS», выбрать элемент «Default Web Site», выбрать действие «Проверка подлинности» где необходимо включить варианты: «Анонимная проверка подлинности», «Обычная проверка подлинности», «Проверка подлинности Windows».
Теперь возможна публикация Web-Сервисов 1С на сервере IIS. Но для того, чтобы было возможно выполнить эту публикацию, необходимо запустить Конфигуратор 1С: Предприятия от имени пользователя «Администратор».
Задание 2: Создание простой конфигурации 1С.
Считаем, что в базе данных есть информация информации обо всех заказах, содержащая количество и тип номенклатуры, который был заказан, в одном заказе может быть список, содержащий номенклатуру и количество, заказ так же имеет свой номер и дату его создания. Информацию обо всех заказах надо передать через Web-Сервис.
Для описания этого необходимо создать объекты базы данных:
Рис. 3. Структура данных в созданной конфигурации 1С
Справочник «Номенклатура», без дополнительных реквизитов. В реквизитах «по умолчанию» содержится информацию о наименовании и коде номенклатуры.
Документ «Заказ покупателя», который будет содержать табличную часть «Товары», каждая строка которой будет иметь информацию о номенклатуры (элемент типа «СправочникСсылка.Номенклатура») и количестве (элемент «Количество» типа «Число» беззнаковое с 15 знаками до запятой и 3 после).
Далее можно запустить 1С в режиме предприятия и создать несколько документов, заполненных созданными нами же номенклатурами и соответствующим количеством.
Задание 3: Создание и публикация Веб-Сервиса 1С.
В группировке «Общие» конфигурации создать новый элемент типа «XDTO-пакеты», первоначально для передачи номенклатуры. Его можно назвать, например «NomenclatureXDTO». URL пространство имен, в соответствии со спецификацией WSDL необходимо назначить в виде URL адреса спецификации данного пакета, например
«company.com/1C/Nomenclature». В этом пакете необходимо создать тип объекта, например «Nomenclature», в котором есть реквизиты «Code» и «Name», с соответствующим типом «string (http://www.w3.org/2001/XMLSchema)».
Теперь надо создать второй XDTO пакет, который будет содержать информацию о заказах покупателей, его можно назвать «ClientOrderXDTO» в пространсте имен «company.com/1C/ClientOrder». В первую очередь необходимо подключить директиву импорта «company.com/1C/Nomenclature», для того, чтобы можно было использовать созданный нами пакет сериализации номенклатуры. Это необходимо для передачи номенклатуры, содержащейся в табличной части документа «Заказы покупателей».
Теперь надо создать тип объекта «ClientOrderRow», содержащий одну строку табличной части. Этот тип будет состоять из совокупности реквизитов «Nomenclature» и «Count», соответственно для номенклатуры необходимо указать тип объекта «Nomenclature (http://company.com/1C/Nomenclature)», а для количества, «double (http://www.w3.org/2001/XMLSchema)».
Тип объекта, содержащий сам заказ можно назвать «ClientOrder» должен содержать номер заказа, дату создания и массив элементов из табличной части заказа. «Number» типа строка, «Date» типа «dateTime (http://www.w3.org/2001/XMLSchema)» и «Products» типа «ClientOrderRow (http://company.com/1C/ClientOrder)», при этом необходимо указать, что минимальное количество «0», а максимальное количество «-1», это говорит о том, что этот объект будет массивом.
Но, поскольку необходимо возвращить список заказов, то необходимо создать тип объекта, содержащий этот массив, потому надо создать еще один элемент, называемый «ArrayOfClientOrders», у которого будет всего один реквизит, называемый «ClientOrder» типа «ClientOrder (http://company.com/1C/ClientOrder)».
Рис 4. Структуры XDTO пакетов в 1С
На этом создание описания передаваемых значений можно считать оконченным. Необходимо описать сам веб сервис и его методы.
В группировке «Общие» конфигурации надо создать объект, Web-Сервиса. Его можно назвать «Service». Во вкладке «Прочее» надо указать пространство имен, которому принадлежит веб-сервис, например «company.com/1C», а так же список XDTO пакетов, содержащий только что созданные пакеты «company.com/1C/Nomenclature, company.com/1C/ClientOrder». Во вкладке «Операции» создать метод «GetClientOrders», который будет возвращать значения «ArrayOfClientOrders (http://company.com/1C/ClientOrder )», при этом установить возможность возвращать пустые значения и нажать на поле с лупой, называемое «Имя метода», тем самым в модуле веб-сервиса будет создана функция, который будет вызвана при обращении к данному методу веб-сервиса.
Для того, чтобы корректно описать функцию, получающую из базы данных и возвращающую список заказов покупателей, необходимо знать внутренний язык 1С, потому код этой функции находится в приложении 1. В пояснении нуждается то, что «ФабрикаXDTO», это некоторый менеджер, который выполняет сериализацию объектов, и этот сериализованный объект необходимо возвратить. При этом происходит выборка всех заказов, содержащихся в базе данных, сериализация полей номера, даты, и строк табличной части, при этом номенклатура, нуждается в дополнительной сериализации, и уже упакованный объект вставляется в общую структуру. Собирается массив упакованных объектов, сериализуется в пакет массива. И отправляется клиенту, как результат вызванной функции.
Для публикации веб-сервиса в меню конфигуратора 1С выбрать «АдминистрированиеПубликация на веб-сервере…», после чего указать название публикации веб-сервиса, например «Company», имя сервиса, например «Service» и адрес «service.1cws», а так же указать путь для публикации, например «C:\inetpub\www\root\Company».
После этого WSDL структура Web-Сервиса будет доступна по адресу «localhost/Company/ws/service.1cws?wsdl»
Задание 4: Создание клиента на C# платформы .NET 4.0.
В Visual Studio создать новое консольное приложение C#.
Далее вызвать контекстное меню над элементом проекта «Reference», и выполнить действие «Add service reference…», в открывшемся меню нажать на кнопку «Advanced…», откроется окно, где необходимо нажать на кнопку «Add Web Reference…».
Откроется меню, в которое необходимо вставить ссылку на WSDL описание веб-сервиса.
Рис. 5. Подключение веб-сервиса к проекту на C#
Для созданного в 1С веб-сервиса эта ссылка будет иметь вид «localhost/Company/ws/service.1cws?wsdl», после корректного получения описания веб-сервиса надо указать название пространства имен .NET, из под которого будет доступно обращение к веб-сервису, например «CompanyService», затем нажать на кнопку «Add Reference…», Visual Studio автоматически сгенерирует классы по этому описанию. В проекте достаточно будет вызывать методы сгенерированного класса, при этом сериализация и вызов будут выполнять платформой .NET.
Далее необходимо написать программу, которая будет обращаться к веб сервису, и выводить пользователю полученные данные. Для этого необходимо знать язык C#, код программы представлен в приложении 2. Из этого кода надо пояснить, то, что создание объекта «Service», есть не что иное, как создание менеджера обращения к сервису. От этого имени будут вызывать методы веб-сервиса.
«_1CWebServiceClientConsole» — это общее пространство имени проекта, оно выбирается при создании. Пространство имени веб-сервиса, полученное из WSDL структуры полностью включено в пространство имени проекта, что позволяет вызывать удаленные методы «как свои».
Построение такой архитектуры является прозрачной для программистов, но при этом необходимо понимать в какие моменты и что проходит сериализацию для последующей передачи. Подобная архитектура клиент-серверных приложений на данный момент самая популярная.
Приложение 1: код функции GetClientOrders на языке 1С
Приложение 2: код программы на C# осуществляющий обращение к веб-сервису
В процедурах выгрузки/загрузки создается ФабрикаXDTO из схемы, которая хранится в макете как файл. Файл настроек схемы надо использовать один и тот же в обработках Загрузки/Выгрузки
Из Фабрики создается объект, его заполняю выгружаемыми данными
Фабрику сохраняю в XML. В процедуре загрузки из читаю фабрику из XML и пробегаю по объектам
Очень удобно!
Файл схемы примерно такой (разукрашка съела скобки, но смысл должен быть понятен ))
Надоели просить меня запостить рабочие модули работы с AD, вот запостил, в качестве бонуса убийца любого процесса в памяти любого компа. p.s. для работы нужны определенные права.
Автор: vde69
Конечно метод дубовенький, расчитан тока на русскую версию, но можно и допеределать.
Не стал писать код определения пишущего сидирома и возможности записи (хотя на отсутствие диска или невозможность записать ОС сама укажет)...
Автор: smaharbA
в 1C v 8 :
список зарегистрированных информационных баз хранится в текстовом файле v8ib.lst (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1Cv8\v8ib.lst
в 1C v 8.1 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv81 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1Cv81\ibases.v8i
Если открыть этот файл в NotePad.exe, то видно, что он имеет структуру, схожую со стандартным INI-файлом :
[База Разработки]
Connect=File="F:\1C\1Cv8\DBRaz";
ID=1cd97bfa-4e57-4a23-9ee1-073a0a28e01c
OrderInList=16384
Folder=/
OrderInTree=16384
[Enterprise]
Connect=File="F:\1C\1Cv8\1cv8.db\Enterprise";
ID=647840fa-65e0-44e8-ad40-12476f178b92
OrderInList=20480
Folder=/
OrderInTree=32768
в 1C v 8.2 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\Application Data\1C\1CEStart\ibases.v8i
Если открыть этот файл в NotePad.exe, то там:
[1C:Документооборот 8 (демо)]
Connect=File="C:\Documents and Settings\E.S.Migachev\Мои документы\1C\DemoDoc8";
ID=b3b46c21-bd2a-481e-b100-e6cbdcba3e3d
OrderInList=16384
Folder=/
OrderInTree=256
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.2
Структура хранения информации по каждой информационной базе :
<Наименование информационной базы>
<ID>
<Connect>
<Folder>
<OrderInList>
<OrderInTree>
Где:
Connect - строка соединения с информационной базой,
ID - внутренний идентификатор информационной базы,
OrderInList - порядок в списке при представлении списком
Folder - наименование ветви в дереве информационных баз,
OrderInTree - порядок в ветви при представлении деревом.
В 1С 8.1 еще добавили External - но он всегда равен 0, для чего он пока не известно.
В 1С 8.2 добавлено:
ClientConnectionSpeed=Normal - скорость соединения
App=Auto - тип соединения - толстый, тонкий клиент.
WA=1
Version=8.2
Вот код получения получения списка баз из файла 1С 8.0 8.1 8.2