Имя: Пароль:
1C
1С v8
8.3 Список общий инф.баз на интернет-сервисе
0 Deon
 
04.10.12
13:22
В 8.3 можно добавить ссылку на интернет-сервис со списком общих информационных баз. В каком виде сервис должен возвращать этот список?
1 shuhard
 
04.10.12
13:28
(0) здесь смотрел ?
http://its.1c.ru/db/v83doc#content:30:1
2 Deon
 
04.10.12
13:29
(1) У меня доступу туды нет
3 rs_trade
 
04.10.12
13:30
(1) только неудачники сначала читают документацию. успешные 1с-неги сначала создают ветку на мисте.
4 shuhard
 
04.10.12
13:30
(2) быстро копируй, пока модераторы не удалили =)
6.1. Получение списка общих информационных баз

При удаленной работе (например, через веб-сервер) возникает необходимость получения списка общих информационных баз. В этом случае параметр CommonInfoBases конфигурационного файла 1cestart.cfg не позволяет получить этот список. Для получения этого списка можно воспользоваться возможностью публикации списка общих информационных баз через Интернет-сервис. При этом доступно получение списка как через HTTP-запросы и через Web-сервисы.
6.1.1. Получение через Web-сервис

Для получения списка общих информационных баз через Web-сервис необходимо опубликовать специальный Web-сервис, который будет возвращать этот список. Рассмотрим работу этого Web-сервиса более подробно.
6.1.1.1 Описание функционирования

Интерактивная программа запуска (1cv8s) может получить список общих баз, как из локальной сети, так и через Интернет. Получение списка баз через Интернет выполняется только в случае интерактивного запуска и если указан адрес для получения списка общих информационных баз (параметр InternetService или WebCommonInfoBases файла 1cestart.cfg).

Первым шагом осуществляется вызов метода WebCommonInfoBases.CheckInfoBases(). Если для этого компьютера и для этого пользователя интерактивная программа запуска вызывается впервые, то в качестве параметров ClientID и InfoBaseCheckCode передается значение 00000000-0000-0000-0000-000000000000. Если вызов не первый, то в качестве параметров передаются код клиента и значение хеш-функции текущего списка общих информационных баз. Метод Web-сервиса должен определить, нужно обновлять список общих информационных баз для данного клиента или нет. Если такая необходимость есть – то выходной параметр InfoBasesChanged должен получить значение Истина. Хеш-функция, используемая для проверки неизменности списка общих информационных баз, не регламентируется и может быть любой (например, объект встроенного языка ХешФункция). Необходимо понимать, что интерактивная программа запуска не занимается расчетом значения хеш-функции, а просто хранит значение, которое было передано при предыдущем вызове Web-сервиса.

Если вызов метода WebCommonInfoBases.CheckInfoBases() указал на необходимость обновления списка, интерактивная программа запуска вызывает метод Web-сервиса WebCommonInfoBases.GetInfoBases(). Данный метод должен вернуть три значения:

? Код клиента (если он не задан);

? Список общих информационных баз в формате v8i (см. здесь);

? Значение хеш-функции для переданного списка общих информационных баз. Это значение будет передано в метод WebCommonInfoBases.CheckInfoBases() при следующей проверке необходимости обновления списка общих информационных баз.

Если список общих информационных баз получается впервые, то код клиента (параметр ClientID) будет равно значению 00000000-0000-0000-0000-000000000000.
6.1.1.2 Описание Web-сервиса

Имя Web-сервиса: WebCommonInfoBases. Тайм-аут на выполнение любого метода Web-сервиса составляет 3 секунды.

Методы Web-сервиса перечислены ниже.

CheckInfoBases

Описание:

Данный метод используется интерактивной программой запуска (1cv8s) для определения необходимости получения списка общих информационных баз.

Параметры:

ClientID входной

Тип: Строка. Содержит идентификатор клиента, для которого проверяется актуальность списка общих информационных баз.

InfoBaseCheckCode входной

Тип: Строка. Значение хеш-функции списка общих информационных баз для указанного идентификатора клиента.

InfoBasesChanged выходной

Тип: Булево. Признак того, что список общих информационных баз необходимо получить повторно.

Возвращаемое значение:

Тип произвольный, значение игнорируется.

GetInfoBases

Описание:

Параметры:

ClientID входной/выходной

Тип: Строка. Содержит идентификатор клиента, для которого выполняется получение списка общих информационных баз. Если идентификатор клиента не задан (равен значению 00000000-0000-0000-0000-000000000000), то метод должен назначить идентификатор клиента и вернуть его в этом параметре.

InfoBaseCheckCode входной/выходной

Тип: Строка. Значение хеш-функции списка общих информационных баз, который возвращается данным методом в параметре InfoBases.

InfoBases входной/выходной

Тип: Строка. Список общих информационных баз в формате v8i (см. здесь).

Возвращаемое значение:

Тип произвольный, значение игнорируется.
6.1.1.3 Пример реализации

Рассмотрим пример Web-сервиса для получения списка общих информационных баз.

Примечание. Пример, приведенный в данном разделе, не является законченным. Он предназначен для демонстрации работы механизма.

В качестве Web-сервиса используется простая конфигурация, которая содержит один справочник и один Web-сервис.

Справочник имеет следующие характеристики:

? Имя СписокОбщихБаз.

? Тип кода Строка.

? Реквизиты:

? Имя Хеш, тип Строка(32), переменной длины.

? Имя ПутьКФайлуСписка, тип Строка, неограниченной длины.

? Остальные параметры заданы по умолчанию.

Данный справочник будет хранить список идентификаторов клиентов (стандартный реквизит Код), пути к списку общих информационных баз (реквизит ПутьКФайлуСписка) и значение хеш-функции (реквизит Хеш), рассчитанной при последнем получении списка для данного клиента.

Также в конфигурации должен быть создан Web-сервис WebCommonInfoBases, для которого должны быть определены операции:

? CheckInfoBases, свойство Тип возвращаемого значения установлено в значение string, флажок Возможно пустое значение установлен. Остальные свойства установлены в значения по умолчанию. Параметры метода и их типы см. здесь.

? GetInfoBases, свойство Тип возвращаемого значения установлено в значение string, флажок Возможно пустое значение установлен. Остальные свойства установлены в значения по умолчанию. Параметры метода и их типы см. здесь.

Текст операций Web-сервиса:

Функция CheckInfoBases(ClientID, InfoBaseCheckCode, InfoBaseChanged)
Если ClientID = "00000000-0000-0000-0000-000000000000"
   И InfoBaseCheckCode = "00000000-0000-0000-0000-000000000000" Тогда
   // это первое обращение клиента
   InfoBaseChanged = Истина;
   Возврат "";
 КонецЕсли;
 Клиент = Справочники.СписокОбщихБаз.НайтиПоКоду(ClientID);
 Если Клиент.Пустая() Тогда
   // нет такого клиента
   InfoBaseChanged = Ложь;
 Иначе
   // проверим: тот файл, который сейчас на стороне Web-сервиса
   // отличается от того файла, который на стороне клиента?
   Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
   Хеш.ДобавитьФайл(Клиент.ПутьКФайлуСписка);
   Хеш = СтрЗаменить(Хеш.ХешСумма, " ", "");
InfoBaseChanged = ?(InfoBaseCheckCode = Хеш, Ложь, Истина);
КонецЕсли;
Возврат "";
КонецФункции
Функция GetInfoBases(ClientID, InfoBaseCheckCode, InfoBases)
Если ClientID = "00000000-0000-0000-0000-000000000000" Тогда
   // необходимо завести нового клиента
   Объект = Справочники.СписокОбщихБаз.СоздатьЭлемент();
   Объект.УстановитьНовыйКод();
   // сформируем имя клиента
   Объект.Наименование = "Клиент " + Строка(Объект.Код);
   Объект.ПутьКФайлуСписка = "C:\CommonIBs\cib"+Строка(Объект.Код)+".v8i";
   // запишем пустой файл списка, потом его можно наполнить
   Текст = Новый ТекстовыйДокумент;
   Текст.Записать(Объект.ПутьКФайлуСписка, КодировкаТекста.UTF8);
   // рассчитаем хеш-функцию
   Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
   Хеш.ДобавитьФайл(Объект.ПутьКФайлуСписка);
   Объект.Записать();
   // сформируем возвращаемые значения Web-сервиса
   InfoBaseCheckCode = СтрЗаменить(Хеш.ХешСумма, " ", "");;
   InfoBases = Текст.ПолучитьТекст();
   ClientID = Объект.Код;
 Иначе
   // здесь получим данные для существующего кода клиента
   Клиент = Справочники.СписокОбщихБаз.НайтиПоКоду(ClientID);
   Если Клиент.Пустая() Тогда
     // нет такого клиента
     InfoBaseCheckCode = "";
     InfoBases = "";
   Иначе
     // рассчитаем хеш-функцию для возвращаемого файла списка
     Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
     Хеш.ДобавитьФайл(Клиент.ПутьКФайлуСписка);
     // прочитаем список общих баз
     Текст = Новый ТекстовыйДокумент;
     Текст.Прочитать(Клиент.ПутьКФайлуСписка);
     // сформируем возвращаемые значения Web-сервиса
     InfoBaseCheckCode = СтрЗаменить(Хеш.ХешСумма, " ", "");
     InfoBases = Текст.ПолучитьТекст();
   КонецЕсли;
 КонецЕсли;
 Возврат "";
КонецФункции

После создания конфигурации следует опубликовать Web-сервис на веб-сервере (см. здесь). Затем необходимо запомнить адрес опубликованного Web-сервиса. Предположим, что Web-сервис опубликован по адресу http://localhost/listservice.

В форме настройки окна запуска (см. здесь) необходимо добавить Интернет-сервис с указанным выше адресом, с указанием суффикса ws: http://localhost/listservice/ws. Теперь при следующем запуске в информационной базе Web-сервиса будет создана запись в справочнике СписокОбщихБаз, а в каталоге C:\CommonIBs (должен существовать) будет расположен пустой файл cib000000001.v8i. Если в этот файл внести информацию об информационной базе, то при следующем запуске интерактивной программы запуска, созданная информационная база будет отображена в списке (в группе с именем Группа cib000000001).

Пример файла:

[cib000000001]
Connect=File="<Путь к информационной базе>";
Folder=Группа cib000000001
[Группа cib000000001]
5 rs_trade
 
04.10.12
13:31
(2) как можно жить без ИТС?
6 Deon
 
04.10.12
13:33
(5) Миста заменяет мне ИТС )
А если серьезно, то контора новая, доступа ещё просто не дали
7 Deon
 
04.10.12
13:35
(4) Оказывается всё не сильно просто, как казалось. Спасибо )
8 shuhard
 
04.10.12
13:43
(7) чё так сразу сдался ?
9 Deon
 
04.10.12
13:44
(8) Нет, почему же. Сделаю, штука-то полезная. Но не так быстро, как казалось )
10 Deon
 
04.10.12
13:47
(8) Интересно, а уже готовых конфигураций управления инф.базами как в (4) ещё не написано?
11 shuhard
 
04.10.12
13:50
(10) видел очень похожее на инфостарте, в суть не вникал
12 Deon
 
04.10.12
13:54
(11) Спасибо, поищу