Ранее, долгое время, существовал инструмент для получения оглавления обновлений и сведений об их расположении. Это было описано и показано на примерах, реализовано в множестве интересных разработок, всяких обновляторов да интеграторов. Разумеется, не считая механизмов парсинга самих страниц сайтов 1С. На ИС такого предостаточно.
Но в конфигурациях с использованием современной БСП применён другой механизм, http-сервис, описания для которого мне найти не удалось нигде. Буквально в одном месте в скрипте было упомянуто.
Покопавшись в типовой механике, выявил кое-что про этот сервис.
1. Обновление, как сущность, значительно жёстче привязано к конкретной ИБ, а не к конфигурации вообще. Потому, что в механизмах фигурирует UID базы и UID обновления (VersionUin). Вероятно, это связано с контролем легальности получения обновлений, подпиской и т.д. Отсюда следует, что утрата UID обновления - это проблема, т.к. не позволит получить следующее за ним.
2. Полная история (оглавление) версий обновлений недоступна. Можно скачать лишь актуальное, самое свежее, обновление, и сведения о нём, но нельзя получить данные о старом годичной давности. Вероятно, это вопрос оптимизации (старое нужно десяткам, а свежий релиз - миллионам систем, стучащимся на сервер).
3. Обновление конфигурации и скачивание-установка-применение патчей явно разделены, и для патчей сделан свой метод сервиса. О патчах подробнее, например, тут.
Большинство непосредственно работающего функционала реализовано в общем модуле ПолучениеОбновленийПрограммы.
Обращение к серверу
Сервер: update-api.1c.ru (или update-api.1c.eu)
Порт: 443
Прокси: не требуется
Авторизация: логин и пароль можно оставлять пустыми
Таймаут: 30 (обычно этого хватает)
Для ЗащищенноеСоединениеOpenSSL указывается "СертификатыУдостоверяющихЦентровОС"
В заголовках запросов для методов желательно в явном виде указывать Content-Type, равный "application/json".
Для проверки работоспособности можно применять метод "ping" (адрес вызова /update-platform/programs/update/ping), пример можно посмотреть в ИнтернетПоддержкаПользователей.ПроверитьURLДоступен.
Для методов используется набор дополнительных параметров "additionalParameters", описывающий конкретную ИБ и её конфигурацию. Получить его можно функцией ИнтернетПоддержкаПользователей.ДополнительныеПараметрыВызоваОперацииСервиса(), и уточнить разрядность системы (ключ "platform64Supported") функцией ПолучениеОбновленийПрограммыКлиентСервер.Это64РазрядноеПриложение().
Пример дополнительных параметров:
key | value |
"ConfigLanguage" | "ru" |
"Vendor" | "Фирма "1С"" |
"ClientPlatformType" | "Windows_x86_64" (в старых БСП отсутствует!) |
"ConfigName" | "ЗарплатаИУправлениеПерсоналом" |
"ClientOSVersion" | "Microsoft Windows 10 version 10.0 (Build 14393)" |
"ConfigMainLanguage" | "ru" |
"LibraryVersion" | "2.3.3.34" |
"PlatformVersion" | "8.3.16.1224" |
"ConfigVersion" | "3.1.10.78" |
"IBID" | "ea55f9bc-e011-43e4-a249-d42408ab0ef1" |
"CurLocalizationCode" | "ru_RU" |
"SystemLanguage" | "ru" |
"ClientTimeOffsetGMT" | "10800" |
"countryId" | "" |
"IBIsSeparated" | "false" |
"IBUserName" | "Администратор" |
"DomainZone" | "ru" |
"platform64Supported" | "true" |
Данные передаются и получаются в json, преобразуются из/в коллекции 1С штатными глобальными ЗаписатьJSON/ПрочитатьJSON. При этом важно, что входные параметры должны быть представлены структурой, а не соответствием, т.к. видимо, в объявлении модели данных сервиса указан строгий порядок следования ключей в теле запроса, а соответствие порядок ключей при сериализации теряет. А вот выходные параметры следует десериализовывать в соответствие.
Возможны ситуации, например, неверные входные параметры, при которых ошибки выдано не будет, метод вернёт код состояния 200, но все возвращаемые данные окажутся пусты. Вероятно, это связано с малой проработанностью системы диагностики ошибок при работе с сервисом.
Метод "info"
Метод POST. Полный адрес для http-запроса: update-platform/programs/update/info
Назначение: Получение сведений о текущем актуальном обновлении для ИБ.
Параметры:
programName // строка, служебное имя: Accounting, HRM, регистр букв не важен. В коде упоминается значение "Unknown", и передача такого параметра приводит к правильному, но пустому ответу (возможно, нужно было для тестирования)
versionNumber // строка, в формате "4 точки"
platformVersion // строка, в формате "4 точки"
programNewName // строка, обычно пуста
redactionNumber // строка, обычно пуста
updateType // строка, допустимые значения: NewConfigurationAndOrPlatform (рабочее обновление), или NewPlatform (только платформа), или NewProgramOrRedaction (переход на другую программу/редакцию)
additionalParameters // массив структур вида key (строка), value (строка), см.выше
Возвращаемые данные:
platformUpdateResponse // обычно пуст
errorName // строка, служебное имя ошибки (например, "ConnectError"), при ряде ошибок пуста
errorMessage // строка, подробное описание ошибки, может быть непуста при пустой errorName
configurationUpdateResponse // если всё верно, содержит результатное соответствие, см.ниже
additionalParameters // насколько я понял, пуст, возможно, зарезервирован на будущее
Сведения об обновлении содержит configurationUpdateResponse, имеющий следующие ключи (для примера, с содержанием)
Для случая updateType, равного "NewConfigurationAndOrPlatform"
"updateInfoUrl" | "https://dl03.1c.ru/content//AutoUpdatesFiles/HRM/3_1_15_96/82/News1cv8.htm" |
"configurationVersion" | "3.1.15.96" (самая актуальная версия на момент вызова) |
"howToUpdateInfoUrl" | |
"platformVersion" | "8.3.14.1976" (минимально необходимый релиз платформы) |
"size" | 861 419 004 (понять, что это за размер, мне не удалось) |
"upgradeSequence" | Массив строковых ID обновлений, с которых возможен переход на текущее |
"programVersionUin" | "b260aef3-4e79-47da-9042-275b9cae3122" (ID обновления) |
Из updateInfoUrl можно получить гипертекстовое описание изменений по сравнению с предыдущим релизом. Это надёжнее, чем, например, обращение по адресу https://its.1c.ru/db/content/updinfo/src/<Имя>/<НомерВерсии>/index.htm (где "Имя", например, "hrm30", а "НомерВерсии" 3.1.15.96).
Из howToUpdateInfoUrl можно получить гипертекстовое описание порядка обновления. Впрочем, они обычно редко меняются и всем давно известны.
Метод вызывается, например, в функции ПолучениеОбновленийПрограммы.ИнформацияОДоступномОбновленииСлужебная
Метод "update"
Метод POST. Полный адрес для http-запроса: update-platform/programs/update/
Назначение: Получение сведений о файлах обновления и связанных данных, пригодных для скачивания и применения.
Параметры:
programVersionUin // строка, VersionUin нужного обновления
upgradeSequence // массив строковых VersionUin, с которых возможен переход на нужное; если пуст или внутренне противоречит заявленным совместимостям обновлений, то метод не сработает
platformDistributionUin // строка, обычно пуста
login // строка, учётная запись пользователя ИТС
password // строка, пароль учётной записи ИТС
additionalParameters // массив структур вида key (строка), value (строка), см.выше
Возвращаемые данные:
platformDistributionUrl // обычно пуст
errorName // строка, служебное имя ошибки, при ряде ошибок пуста
errorMessage // строка, подробное описание ошибки, может быть непуста при пустой errorName
configurationUpdateDataList // если всё верно, содержит результатный массив соответствий, см.ниже
additionalParameters // обычно пуст
Сведения о файлах содержит configurationUpdateDataList, каждый элемент массива - соответствие, данные об отдельном файле обновления, последним идёт запись о текущем (актуальном) обновлении. Соответствие имеет следующие ключи (для примера, с содержанием)
"executeUpdateProcess" | Ложь |
"templatePath" | "1c\hrm\3_1_10_111" |
"updateFileUrl" | "https://dl03.1c.ru/public/file/tmplts/get/46303814-0a6f-4f64-982f-40d5fd733fe7" |
"updateFileFormat" | "ZIP" |
"updateFileName" | "1cv8.cfu" |
"size" | 69 680 085 (это размер zip-архива обновления) |
"hashSum" | "K8y/Ag384Pq2x5BYYZSwhg==" |
Из updateFileUrl можно получить уникальный путь для скачивания. Время жизни и актуальности этой ссылки не изучал. Может, это временно генерируемый "на лету" путь для отдачи файла, а может, она стабильна долгое время. На всякий случай, лучше такое не хранить, а сразу качать нужные данные.
Из updateFileName и updateFileFormat можно получить общее понимание, что за данные.
Из templatePath можно получить относительный путь, удобный для организации раздельного развёртывания и хранения данных.
Из hashSum можно получить строку для самопроверки правильности скачивания и раскрытия zip-архива, т.к. это Base64Строка от хеша MD5 от файла cf/cfu (который updateFileName), а не хеш архива.
Метод вызывается, например, в функции ПолучениеОбновленийПрограммы.ПолучитьОписаниеФайловОбновленияКонфигурацииИПлатформы
Скачивание файла по этим данным желательно выполнять с другим http-соединением, нежели для предыдущих методов, и сведения берутся из предоставленной адресной строки. Для приведённого выше примера это будет:
Сервер: dl03.1c.ru
Порт: 443
Прокси: не требуется
Авторизация: логин и пароль пользователя ИТС
Таймаут: 43 200
Полный адрес для http-запроса: public/file/tmplts/get/46303814-0a6f-4f64-982f-40d5fd733fe7
Выполняется обычный GET-запрос вида хттпСоединение.Получить(хттпЗапрос, ПутьИмяСкачанногоФайла) и, если всё успешно, в означенном месте появится файл 1Сv8.zip
Это обычный архив, раскрываемый с помощью ЧтениеZipФайла, причём РежимВосстановленияПутейФайловZIP рекомендуется "Восстанавливать". В составе архива находится обычный пакет файлов - UpdInfo.txt, 1cv8upd.htm, 1cv8.mft, иногда описание версий библиотек, а также "Новое в версии" и собственно файл обновления сfu либо полноценный cf.
Метод "getInfo"
Метод POST. Полный адрес для http-запроса: update-api.1c.ru/update-platform/patches/getInfo
Назначение: Получение сведений об исправлениях (патчах).
Параметры:
programVersionList // массив структур или соответствий, в каждом из которых 2 ключа: "programName" (строка), например, "HRM", и "versionNumber" (строка), например, "3.1.15.96". Типовая механика заполняет несколькими версиями (текущей, актуальной планируемой), но достаточно внести хотя бы текущую версию основной конфигурации. Номер версии можно взять, например, из доп.параметров, из ключа "ConfigVersion".
installedPatchesList // массив строк, идентификаторов исправлений, уже установленных в системе. Может быть получен функцией ПолучениеОбновленийПрограммы.ИдентификаторыУстановленныхИсправлений(), где, кстати, сказано, что в отличие от идентификаторов обновлений, идентификаторы исправлений не являются коммерческой тайной вендора.
additionalParameters // массив структур вида key (строка), value (строка), см.выше
Возвращаемые данные:
errorName // строка, служебное имя ошибки, при ряде ошибок пуста
errorMessage // строка, подробное описание ошибки, может быть непуста при пустой errorName
patchUpdateList // если всё верно, содержит результатный массив соответствий, см.ниже
Сведения о файлах содержит patchUpdateList, каждый элемент массива - соответствие, данные об отдельном исправлении. Соответствие имеет следующие ключи (для примера, с содержанием)
"applyToVersion" | Массив соответствий, определяет, к каким конфигурациям каких версий исправление применимо |
"size" | 6 097 |
"ueid" | "6b259f86-b42e-4358-8c5e-b556571eebb4" |
"name" | "EF_30174583" (имя расширения/исправления/файла) |
"description" |
"В форме П-6 за 9 месяцев не проверяется условие "строки с 700 по 800 заполняются |
"modificatedMetadata" | "ОбщийМодуль.ИнтерпретаторКонтрольныхСоотношенийРосстата.ПроверитьУсловиеНаПериод" |
"buildDate" | 1 603 304 005 000 (нигде не используется, возможно, будет задействовано позже) |
"status" | "publish" |
Из applyToVersion можно получить, для каких конфигураций каких релизов может быть применено исправление. Каждое соответствие содержит ключи "programName" (в нотации, аналогичной входному параметру "programVersionList") и "versionNumber" (один или несколько номеров версий в формате "4 точки", и если несколько, то разделены запятой).
Из ueid можно получить, по какому пути следует обращаться для скачивания файла исправления. В самом простом случае, ссылка на скачивание будет иметь вид <ИмяСервера>/public/sso/patches/download?keys=<Идентификатор>, например, "https://dl03.1c.ru/public/sso/patches/download?keys=3e1984b1-28da-4bef-9d75-97513be91fd6"
Из name можно получить, каково имя исправления на сайте, файла в архиве и расширения этого исправления в конфигурации. Следует иметь в виду, что по ссылке находится zip-архив вида patches_<Код>, причём этот "Код" не коррелирует с ИД патча (например, patches_281020201714). В нём вложенный zip-архив, уже с ID патча, например, 90ae5713-81a0-4c3b-b472-3a83d5441eae.zip. В свою очередь, в этом вложенном архиве находятся собственно файл манифеста и файл расширения (например, EF_30174583.cfe).
Из status можно получить, каков текущий статус исправления. Значение "publish" (доступно) или "revocation" (отозвано). Отозванные исправления недоступны для скачивания в интерфейсе https://releases.1c.ru/patches, однако могут быть прочитаны и потому следует учитывать этот ключ при каждом обращении.
Файл манифеста Manifest.xml содержит сведения, в целом дублирующие основной набор, а именно:
<Name>EF_30174583</Name>
<Description>В форме П-6 за 9 месяцев не проверяется условие "строки с 700 по 800 заполняются
только в отчёте за «январь-июнь»"</Description>
<UUID>90ae5713-81a0-4c3b-b472-3a83d5441eae</UUID> - это ИД патча
<ModifiedMetadata>ОбщийМодуль.ИнтерпретаторКонтрольныхСоотношенийРосстата.ПроверитьУсловиеНаПериод</ModifiedMetadata>
и несколько тегов, описывающих применимость, вида
<AppliedFor>
<ConfigurationName>УправлениеНебольшойФирмой</ConfigurationName> - т.е. тут уже нотация не служебное "Accounting", а "БухгалтерияПредприятия"
<Versions>1.6.22.75</Versions> - если несколько, будут через запятую
</AppliedFor>
Метод вызывается, например, в функции ПолучениеОбновленийПрограммы.ИнформацияОДоступныхИсправленияхКонфигураций
Скачивание файла по этим данным желательно выполнять с другим http-соединением, нежели для предыдущих методов. Логин и пароль для соединения не требуются, таймаут достаточно 30.
Метод "getFiles"
Метод POST. Полный адрес для http-запроса: https://update-api.1c.ru/update-platform/patches/getFiles
Назначение: Получение сведений о файлах исправлений, пригодных для скачивания и применения.
Параметры:
patchUinList (массив строковых гуидов, чьи данные о файлах требуется получить к скачиванию)
login // строка, учётная запись пользователя ИТС
password // строка, пароль учётной записи ИТС
additionalParameters // массив структур вида key (строка), value (строка), см.выше (и кстати, необходимость таких параметров в таком методе означает, что работа с исправлениями также привязана к конкретной ИБ, для которой скачиваем, т.к. требуется передача, например, параметра IBID).
Возвращаемые данные:
errorName // строка, служебное имя ошибки, при ряде ошибок пуста
errorMessage // строка, подробное описание ошибки, может быть непуста при пустой errorName
patchDistributionDataList // если всё верно, содержит результатный массив соответствий, см.ниже
Сведения о файлах содержит patchDistributionDataList , каждый элемент массива - соответствие, данные об отдельном файле исправления, т.е. cfe-расширении. Соответствие имеет следующие ключи (для примера, с содержанием)
"size" | 21 977 |
"patchUeid" | "aee7a554-09a6-4837-98ec-b96507613f79" |
"patchFileUrl" | "https://dl03.1c.ru/public/patches/download/aee7a554-09a6-4837-98ec-b96507613f79" |
"patchFileName" | "aee7a554-09a6-4837-98ec-b96507613f79.zip" |
"hashSum" | "fDFpyPaJYZ4GHJcaDCXIgQ==" |
Метод вызывается, например, в функции ПолучениеОбновленийПрограммы.ОписаниеФайловИсправлений
P.S. Имя конфигурации в служебной нотации, т.е. "HRM", можно получить с помощью ИнтернетПоддержкаПользователей.СлужебнаяИмяПрограммы()
Пока на этом всё. Если в меня кинут ссылкой, где этот рест-сервис нормально описан, или если кто дополнит эту весьма краткую статейку, буду премного благодарен. Ну а если баян, то готов к тухлым помидорам.
Всё изложенное скорее всего актуально на релизах платформы 8.3.14 и выше.
UPD: Дописал про исправления.