Обмен 1С c клиентом на C# используя веб-сервисы 1С

Для моего предыдущего проекта было необходимо использование веб-сервисов 1С, мы строили систему автоматизации склада, и терминалы сбора данных напрямую подключаются к 1С, сами клиенты разработаны на .NET. Получилась очень интересная структура. Полученную информацию о настройках 1С в режиме работы веб-сервиса а так же написание простенькой конфигурации и клиента на C# в виде totorial лабораторной работы, которую затем успешно презентовал в институте.

Лабораторная работа получила немного замысловатое название (ну что поделаешь, факультет запрещает инженерные исследования, только научные…):

Организация обмена информацией между клиент-серверным разноплатформенным решением, используя Web-Сервисы в примере источника, разработанного на платформе 1С: Предприятие 8.2 и клиента на платформе .NET 4.0 языке C#

Всем, кто заинтересовался, прошу под кат.

Цель работы

Освоить технологию построения веб-сервисов, формирование WSDL описания веб-сервиса. Изучить принципы сериализации объектов в XML схемы для возможности передачи через Web-Сервисы.

Оборудование и программное обеспечение

  1. Microsoft Windows 7 x64
  2. Платформа 1С: Предприятие 8.2
  3. Internet Information Server
  4. Visual Studio 10 Ultimate

Теоретическое введение

Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является мультиплатформенной и на данный момент ее использование весьма актуально.

Примерами таких веб-сервисов можно назвать:

  1. http://www.cbr.ru/scripts/Root.asp?Prtid=DWS веб-сервис Центробанка, для получения ежедневных данных.
  2. http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml веб-сервис Яндекса проверки правописания.
  3. 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\wwwroot\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. Какой разрядности веб-расширение 1С?
  2. В чем 1С хранит структуру пакетов для сериализации данных?
  3. Как получить структуру описания веб-сервиса?
  4. Как подключить веб сервис к проекту, разрабатываемому в Visual Studio?
  5. Зачем нужно создавать менеджер обращений у клиента и что он из себя представляет?

Приложение 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())             {                 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("*****************************************************\n");                 }             }             Console.ReadKey();         }     } } 

ссылка на оригинал статьи http://habrahabr.ru/post/136684/

Серия плакатов об ученых и их открытиях

Newton, Kapil Bhagat

Индийский дизайнер Капил Бхагат из Мумбая в своем блоге разместил серию плакатов об ученых и их открытиях. Плакаты наглядно иллюстрируют достижения ученных с помощью их фамилий. Таким образом Капил предложил отпраздновать День наук в Индии.

Все постеры под катом.

Newton, Kapil Bhagat

Galileo, Kapil Bhagat

Einstein, Kapil Bhagat

Copernicus, Kapil Bhagat

Darwin, Kapil Bhagat

Edison, Kapil Bhagat

Archimedes, Kapil Bhagat

Pythogoras, Kapil Bhagat

Tesla, Kapil Bhagat

Rontgen, Kapil Bhagat

ссылка на оригинал статьи http://habrahabr.ru/post/172159/

Какие страны отправляют сообщения друг другу и почему?

Карта сообщений Yahoo!

Американские ученые пришли к выводу, что люди из стран с одинаковыми культурными ценностями переписываются намного чаще.

Команда исследователей из Стэнфордского университета опубликовала отчет, в котором проанализировала более 10 миллионов отправленных сообщений Yahoo! Mail и пришла к выводу, что переписка происходит гораздо чаще между странами с определенными экономическими и культурными особенностями.

Исследователи проанализировали культуры с помощью «Критериев Хофстеда», набора атрибутов разработанных в 1980 году и приняли во внимание такие факторы, как ВВП, объем торговли, язык, власть, религия и другие.

Карта сообщений Yahoo!

Карта сообщений была разделена на несколько условных цивилизаций: Западная, Латиноамериканская, Православная (включая страны бывшего Советского Союза), Китайская (Китай, Корея и Вьетнам), Мусульманская, Африканская, Будийская и Индийская. Эта классификация была предложена еще Сэмюэлем Хартингтоном (Samuel Hartington) в 1992 году в конце Холодной войны. Другими словами, мы отправляем сообщения тем, с кем тесно связаны культурными ценностями, таким образом формируя карту цивилизаций.

Карта сообщений Yahoo!

Исследования проводились следующим образом: сначала пользователи вошли и указали свое местоположение, а затем ученные посчитали количество связей между странами мира и произвели отбор данных по факторами, указанным выше.

Весьма вероятно, что данных Yahoo! для таких исследований может быть не достаточно. Кроме того, посмотрев свой ящик, я пришел к противоположному выводу.

ссылка на оригинал статьи http://habrahabr.ru/post/172157/

Как начать работать на Ealnce.com. Краткие рекомендации системному администратору и не только

Зарегистрируйтесь по этой ссылке payoneer получите бонус $25 при первом поступлении денег.
http://tracking.payoneer.com/SHEx

В общем-то на Хабре достаточно постов о фрилансе вообще, и о Elance.com в частности — пост ниже является попыткой поделиться опытом.
Информации много не бывает — посему позвольте начать.

Если вы впервые слышите про Elance — настоятельно рекомендую прочитать два поста ниже, serjio очень хорошие советы даёт по поводу регистрации, наполнения портфолио, бидов и прочего, что необходимо знать:


Итак, вы зарегистрировались. Не торопитесь сразу бежать ставить биды — 99% что на вас не обратят внимания.
Потратьте время и настройте профиль:

  • добавтье фотографию
  • верифицируйте свой телефон
  • заполните профиль
  • закажите карту Payoneer (если ещё нет)
  • почитайте статью Creating a Great Elance Profile и пополните профиль.

Затем нужно пройти тесты. Тестов представлено изрядное количество, выбирайте на свой вкус. Чем больше — тем лучше.
При прохождении тестов старайтесь попасть хотя бы в 20% лучших — за это дают плашку, и потенциальные клиенты видят, что вы разбираетесь в этой теме.
Вообще, на первом этапе ваш профиль играет очень большую роль — особенно тесты, и поля Overview и Service Description. Также я заполнил поле Employment.
Вот например, что видят потенциальные клиенты в поле Skills у меня:

image

Неплохо? И я так думаю.
На всё, что описано выше у меня ушло 2 полных дня.

Теперь можно начинать искать клиентов и делать биды. Идём в меню вверху Find Work > Search Jobs, и слева в меню настраиваем фильтр:

image

Для бесплатного аккаунта Elance даёт 15 «coins» — то есть вы можете поставить бид на 15 проектов. Этого мало, но для того, чтобы найти первого клиента — хватит. Ищите работу, которую сможете 100% выполнить и делайте бид.
Пара советов:

  • читайте описание проекта полностью и внимательно;
  • составляйте текст бида таким образом, чтобы было понятно, что вы понимаете проблему и знаете как её решать. Простое предложение типа «I have enough experience to do this» — не работает;
  • говорите клиенту, что именно вы собираетесь делать, чтобы выполнить проект
  • если выполнение проекта предусматривает любой отказ в обсуживании — это стоит упомянуть, с примерной оценкой времени;
  • задавайте клиенту дополнительные вопросы, если что-то в описании проекта вам неясно;
  • подписывайтесь.

Пример хорошего бида:

Hi Robert,

I have all the experience needed to accomplish all the tasks you outlined.
I have a wide experience with cluster environments, NFS and permission issues, I also have experience installing and setting up HipHop PHP — so I think I’m the person you’re looking for.
I think these could be completed in less then 15 hours — it will take up to 12 working hours for me to do everything.
Please let me know if you’re interested in my proposal, looking forward to work with you on this project!

Thanks.

John Smith

Поначалу биды стоит оставлять только на «свежие» проекты, открытые недавно — идеально найти клиента, которому нужен фрилансер срочно и первому предложить свои услуги — шансы получить проект увеличаться.
Сосредоточьтесь поначалу на мелких проектах — перенос сайта, настройка бекапов, починка почты. Чем больше проектов выполните — тем быстрее наполнится ваш профиль, и тем выше вы будете в поисковой выдаче — в будущем это позволит не искать проекты самому, клиенты будут вас сами приглашать сделать бид. Это изрядно экономит время — у меня в начале примерно 6 часов уходило просто на поиски/ожидание подходящего проекта.
Получив проект — выполните его, получите деньги и отзыв от клиента, оставьте свой отзыв, купите профессиональный аккаунт и продолжайте работу.
В течение двух месяцев вполне возможно добиться вот таких результатов:

image

Для дополнительной информации рекомендую также ознакомиться со статьями ниже:

Надеюсь, советы выше помогут вам. Если возникли вопросы — милости прошу в комментарии, либо личку.
______________________

Текст подготовлен в Хабра Редакторе от © SoftCoder.ru

ссылка на оригинал статьи http://habrahabr.ru/post/172155/

Как можно найти удаленную работу в западных IT-компаниях?

Коллеги, всем привет!

Кто-нибудь знает сайты, где можно искать удаленную работу в IT-компаниях в Штатах или в Европе? Желательно именно менеджерскую работу, а не программистскую

Спасибо!

ссылка на оригинал статьи http://habrahabr.ru/post/172153/