Содержание
Современные условия, с широким распространением мобильных устройств и доступного интернета предъявляет новые требования к информационным системам даже небольших фирм. Если еще несколько лет назад удаленный доступ был уделом крупных организаций, то сегодня возможность доступа к информации из любого места воспринимается как нечто само собой разумеющееся. Сегодня мы расскажем, как быстро и без лишних затрат организовать веб-доступ к базам 1С:Предприятия работающих в файловом режиме.
Традиционная схема работы с 1С:Предприятием в файловом режиме подразумевает общий доступ к файлам информационной базы посредством протокола SMB (сети Microsoft). При этом один из компьютеров выступает в качестве файлового сервера, а другие работают с размещенной в общем доступе информационной базой.
Однако данная схема имеет ряд существенных недостатков. На скорость работы существенное влияние оказывает как пропускная способность сети, так и вычислительные мощности клиентских компьютеров. Более подробно этот вопрос мы разбирали в нашем материале Почему тормозит 1С. Файловый режим. Особенно это проявляется после перехода на конфигурации на основе управляемого приложения, которые гораздо более требовательны к ресурсам, нежели конфигурации предыдущего поколения.
Также остро стоит вопрос с удаленным доступом, если для удаленных компьютеров еще можно организовать удаленный доступ посредством RDP, что, кстати, не всегда доступно для небольших фирм, не имеющих выделенного сервера, то с мобильными устройствами все довольно печально.
Вместе с тем управляемое приложение предоставляет новые возможности, такие как веб-доступ к информационной базе, в том числе работающей в файловом режиме. Это позволяет качественным образом изменить работу с информационной системой практически без дополнительных затрат.
На компьютере с информационной базой поднимается дополнительная роль веб-сервера, на котором происходит публикация информационной базы. После чего с ней можно продолжать работать как в файловом режиме, так и в режиме веб-сервера.
При этом не обязательно использование для работы браузера, получать доступ к базе через веб-сервер может также и платформа в режиме тонкого клиента. Эта возможность позволяет организовать доступ не только для удаленных и мобильных клиентов, но и улучшить работу на недостаточно производительных машинах в офисе, так как все основные вычисления будут выполняться на стороне сервера и передаваемый по сети трафик будет сведен к минимуму, как и нагрузка на компьютер клиента.
Ну и, конечно, появляются практически неограниченные возможности удаленного доступа к базе: из любого места, с любого устройства, был бы браузер.
Ниже мы рассмотрим возможные конфигурации для организации веб-доступа к небольшим базам, работающим в файловом режиме на базе клиентских операционных систем.
На настоящий момент поддерживаются два основных веб-сервера Apache и IIS, также на машине с веб-сервером должна быть обязательно установлена платформа и модули расширения веб-сервера. Их всегда можно установить дополнительно, просто запустив еще раз программу установки платформы:
Windows и IIS
Internet Information Services (IIS) по непонятным причинам не пользуется популярностью у администраторов и 1С-ников. А зря, игнорировать штатное решение в пользу некоторого стороннего ПО, пусть даже и неплохого, выглядит по крайней мере странно.
Для установки IIS на клиентской ОС, в нашем случае Windows 7 x64, перейдите в Панель управления — Программы и компоненты — Включение и отключение компонентов Windows.
В открывшемся окне выберите Службы IIS, затем, развернув список, перейдите в Службы интернета — Компоненты разработки приложений и установите флажок напротив Расширения ISAPI, остальные параметры можно оставить по умолчанию.
После установки IIS перейдем к его настройке, для этого откройте Панель управления — Администрирование — Диспетчер служб IIS.
В дереве слева выбираем Пулы приложений, щелкаем правой кнопкой мыши на DefaultAppPool — Дополнительные параметры и разрешаем 32-разрядные приложения, установив соответствующую опцию в True.
Теперь выставим необходимые права для групп IUSR и IIS_IUSRS. На папку с информационной базой выдаем права Изменение и Чтение и выполнение:
На папку bin платформы — Чтение и выполнение:
Затем запускаем 1С:Предприятие от имени администратора и загружаем нужную информационную базу в режим конфигуратора.
В меню Администрирование выбираем Публикация на веб-сервере. 1С:Предприятие автоматически определит веб-сервер (IIS) и предложит разместить веб-приложение в корне веб-сервера в каталоге с именем папки информационной базы, которое также будет являться именем публикации, при необходимости можете изменить эти параметры.
После чего нажимаем Опубликоватьи утвердительно отвечаем на предложение перезапустить веб-сервер.
Готово! Для доступа к базе можем использовать адрес вида http://имя(адрес)_хоста/имя_публикации, в нашем случае http://192.168.3.109/Acc30, запускаем браузер и проверяем работу.
Также можно настроить базу для работы с ней посредством платформы, для этого в диалоге добавления новой информационной базы указываете размещение на веб-сервере:
Следующим шагом вводите адрес подключения:
После запуска информационной базы можете убедиться, что работает она именно в режиме веб-сервера, а не файловом:
Windows и Apache 2.2
Если вы по каким-либо причинам не хотите использовать IIS, можно настроить работу 1С с другим популярным веб-сервером Apache. К сожалению разработчики Apache перестали публиковать бинарные сборки для Windows, предлагая обратиться к своим партнерам, поэтому перейдем на сайт Apache Haus и скачаем сборку 2.2.х архитектуры x86, даже если у вас 64-разрядная операционная система.
Внимание! Для получения сборки Apache следует пользоваться только надежными источниками, которые указаны на сайте проекта. От этого зависит безопасность вашего веб-сервера и ваших данных!
Также вам потребуется установить Распространяемый пакет Microsoft Visual C++ 2008, который нужен для нормальной работы сборки Apache.
Затем распакуем скачанный архив Apache в произвольную директорию, например, C:Apache22, из всего множества папок нас интересуют папки bin и htdocs, в первой расположены исполняемые файлы веб-сервера, во второй следует располагать веб-содержимое.
Откроем командную строку с правами администратора и перейдем в директорию bin веб-сервера:
cd C:Apache22bin
Теперь установим Apache как службу:
httpd -k install
На предупреждения не обращаем внимания, для целей использования с 1С подойдет конфигурация Apache по умолчанию.
Так как служба работает от имени системной учетной записи выставлять права на папки с базой и платформой не надо.
Затем точно также запускаем 1С от имени администратора в режиме конфигуратора и переходим к публикации на веб-сервере. В отличии от IIS, в данном случае платформа сама не может указать путь и создать папку, поэтому делаем это вручную. Папка должна быть создана внутри каталога htdocs и ее имя должно совпадать с именем публикации:
В нашем случае это C:Apache22htdocsAcc30, кстати, создать нужный каталог можно прямо в диалоге выбора папки. После чего публикуем информационную базу.
Следующий момент, 1С не умеет перезапускать данную сборку Apache, поэтому сделаем это вручную через оснастку Службы:
После перезапуска веб-сервера опубликованная база станет доступна по тому же самому, как и в случае с IIS, адресу, точно также ничем не будет отличаться и работа с ней.
Web-сервис в 1С 8.3 и 8.2 — объект метаданных, позволяющий интегрировать платформу 1С с другими информационными системами при помощи сервис-ориентированной архитектуры (SOA).
1С умеет как публиковать свои веб-сервисы, так и использовать веб-сервисы других информационных систем с помощью WS-ссылок.
Для публикации своих веб-сервисов необходимы: рабочий веб-сервер (IIS или Apache) и созданные в метаданных веб-сервисы. Пример обращения к веб-сервису 1С и множество другой полезной информации можно увидеть в данной статье.
Пример создания и настройки web-сервиса в 1С
Рассмотрим создание и настройку на примере веб-сервиса, позволяющего производить двухсторонний обмен между базами 1С 8 по средству SOAP.
Для начала обратим внимание на вкладку Прочее:
Получите 267 видеоуроков по 1С бесплатно:
- Бесплатный видео самоучитель по 1С Бухгалтерии 8.3;
- Самоучитель по новой версии 1С ЗУП 3.1;
- В поле URI пространства имен описывается расположение идентификатора ресурса.
- Пакеты XDTO — описание типов, с которыми сможет работать будущий веб-сервис.
- Имя файла публикации — название файла *.1CWS, который будет размещен на веб-сервере
Структура веб-сервиса 1С
Рассмотрим структуру веб-сервиса:
DataExchange — сам web-сервис. UnloadData, LoadData — операции, по сути, описание функций, которые можно вызывать по протоколу SOAP. ExchangePlanName, NodeCode и т.д. — передаваемые веб-сервису значения.
Модуль веб-сервиса
В модуле закладывается самое интересное — описание функций будущего веб-сервиса. В нашем случае мы описываем функционал, позволяющий получать и отправлять данные, используя стандартные механизмы обмена 1С. Т.к. обмен идёт между одной платформой — 1С, то они не требуют сериализации данных.
Проверка работы http сервиса 1С на веб-сервере
Сделать это очень просто — после публикации достаточно вбить адрес веб-сервера 1С в браузер в таком формате:
http://<имя сервера>/ws/<ИмяФайлаВебСервиса>.1cws?wsdl
Если Вы увидите что-то вроде этого, Вы на правильном пути, и веб-сервис опубликован на сервере верно.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Оцените статью, пожалуйста!
- Tutorial
Для одного проекта было необходимо использование веб-сервисов 1С, мы строили систему автоматизации склада, и терминалы сбора данных напрямую подключаются к 1С, сами клиенты разработаны на .NET. Получилась очень интересная структура. Полученную информацию о настройках 1С в режиме работы веб-сервиса а так же написание простенькой конфигурации и клиента на C# в виде tutorial лабораторной работы, которую затем успешно презентовал в институте. Лабораторная работа получила немного замысловатое название:Организация обмена информацией между клиент-серверным разноплатформенным решением, используя Web-Сервисы в примере источника, разработанного на платформе 1С: Предприятие 8.2 и клиента на платформе .NET 4.0 языке C# Всем, кто заинтересовался, прошу под кат.
Цель работы
Освоить технологию построения веб-сервисов, формирование WSDL описания веб-сервиса. Изучить принципы сериализации объектов в XML схемы для возможности передачи через Web-Сервисы.
Оборудование и программное обеспечение
- Microsoft Windows 7 x64
- Платформа 1С: Предприятие 8.2
- Internet Information Server
- Visual Studio 10 Ultimate
Теоретическое введение
Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является мультиплатформенной и на данный момент ее использование весьма актуально. Примерами веб-сервисов, использующих WSDL описание, можно назвать:
- 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С: Предприятие необходимо установить Web-Расширение. Рис. 1. Выбранные компоненты в момент установки 1С В меню «Панель управленияВсе элементы панели управленияПрограммы и компоненты» Необходимо выполнить установку дополнительных компонентов Windows «Включение или отключение компонентов Windows» где указать компоненты IIS. Кроме выбранных по умолчанию компонентов, надо добавить еще компоненты, связанные с технологией ISAPI, именно благодаря этой технологии расширение веб-сервера 1С имеет возможность связаться с веб-сервером IIS, и тип аутентификации «по URL», чтобы допускать к веб-сервису используя аутентификацию пользователей базы данных 1С. После установки рекомендуется перезапустить операционную систему. Рис. 2. Выбранные компоненты в момент установки IIS В меню «Панель управленияВсе элементы панели управленияАдминистрирование» запустить консоль «Диспетчер служб IIS», где открыть элемент «Пулы приложений» открыть пул «DefaultAppPool» в контекстном меню выбрать «Дополнительные параметры…» где элемент «Разрешены 32-рязрядные приложения» надо установить «True». Это необходимо для работы Web-Расширения 1С, т.к. оно является 32-битным приложением. Это удобно для отладки (т.к. при публикации из конфигуратора будет по умолчанию подставляться «DefaultAppPool»), для продуктива я рекомендую создавать отдельные пулы для каждого сервиса без управляемой среды. В той же консоли «Диспетчер служб IIS», выбрать элемент «Default Web Site», выбрать действие «Проверка подлинности» где необходимо включить вариант: «Анонимная проверка подлинности». Теперь возможна публикация 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)», при этом необходимо указать, что минимальное количество «», а максимальное количество «-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:inetpubwwwrootCompany». После этого 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С?
- В чем 1С хранит структуру пакетов для сериализации данных?
- Как получить структуру описания веб-сервиса?
- Как подключить веб сервис к проекту, разрабатываемому в Visual Studio?
- Зачем нужно создавать менеджер обращений у клиента и что он из себя представляет?
Приложение 1: код функции GetClientOrders на языке 1С
Функция GetClientOrders() МассивЗаказовПокупателейТип = ФабрикаXDTO.Тип("http://company.com/1C/ClientOrder", "ArrayOfClientOrders"); ЗаказПокупателяТип = ФабрикаXDTO.Тип("http://company.com/1C/ClientOrder", "ClientOrder"); ЗаказПокупателяСтрокаТип = ФабрикаXDTO.Тип("http://company.com/1C/ClientOrder", "ClientOrderRow"); НоменклатураТип = ФабрикаXDTO.Тип("http://company.com/1C/Nomenclature", "Nomenclature"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |ЗаказПокупателя.Ссылка, |ЗаказПокупателя.Номер, |ЗаказПокупателя.Дата |ИЗ |Документ.ЗаказПокупателя КАК ЗаказПокупателя"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Количество() = 0 Тогда Возврат Null; КонецЕсли; МассивЗаказовПокупателей = ФабрикаXDTO.Создать(МассивЗаказовПокупателейТип); Пока Выборка.Следующий() Цикл ЗаказПокупателя = ФабрикаXDTO.Создать(ЗаказПокупателяТип); ЗаказПокупателя.Number = Выборка.Номер; ЗаказПокупателя.Date = Выборка.Дата; Для каждого Строка Из Выборка.Ссылка.Товары Цикл // В промышленных условиях не вздумайте так писать! ЗаказПокупателяСтрока = ФабрикаXDTO.Создать(ЗаказПокупателяСтрокаТип); Номенклатура = ФабрикаXDTO.Создать(НоменклатураТип); Номенклатура.Code = Строка.Номенклатура.Код; Номенклатура.Name = Строка.Номенклатура.Наименование; ЗаказПокупателяСтрока.Nomenclature = Номенклатура; ЗаказПокупателяСтрока.Count = Строка.Количество; ЗаказПокупателя.Products.Добавить(ЗаказПокупателяСтрока); КонецЦикла; МассивЗаказовПокупателей.ClientOrder.Добавить(ЗаказПокупателя); КонецЦикла; Возврат МассивЗаказовПокупателей; КонецФункции
Приложение 2: код программы на C# осуществляющий обращение к веб-сервису
using System; using _1CWebServiceClientConsole.CompanyService; namespace _1CWebServiceClientConsole { class Program { static void Main(string[] args) { using (Service service = new Service()) { service.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; service.Credentials = new System.Net.NetworkCredential("LOGIN", "PASS"); var arrayOfClientOrders = service.GetClientOrders(); if (arrayOfClientOrders == null) Console.WriteLine("Не найдена"); foreach (var clientOrder in arrayOfClientOrders) { Console.WriteLine("Заказ покупателя №" + clientOrder.Number + " от " + clientOrder.Date); Console.WriteLine("-----"); foreach (var clientOrderRow in clientOrder.Products) { Console.WriteLine(clientOrderRow.Nomenclature.Name + " " + clientOrderRow.Count); } Console.WriteLine("-----"); } } Console.ReadKey(); } } }
Используемые источники:
- https://interface31.ru/tech_it/2015/05/nastraivaem-web-dostup-dlya-1c-v-faylovom-rezhime.html
- https://programmist1s.ru/web-servisyi-v-1s/
- https://habr.com/post/136684/