Skip to content

v1.18.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Aug 18:57

Главное в этой версии

Общая форма читается. Раньше запрос структуры общей формы заканчивался ошибкой, и причин было сразу две. HTTP-сервис 1С общие формы не отдаёт вовсе: расширение ищет объект по карте видов, а в ней перечислены только прикладные объекты, справочники, документы, регистры и подобные им, поэтому на общую форму приходил ответ 404 с текстом «Object not found». Чтение из выгрузки тоже не срабатывало, потому что вид «общая форма» ему не был известен. Обе половины отказывали, и вызов возвращал ошибку. Теперь при запуске с флагом --dump общая форма читается прямо из файла: укажите вид объекта ОбщаяФорма или CommonForm, а именем объекта имя самой формы. На диске такая форма лежит по пути CommonForms/<Имя>/Ext/Form.xml, без каталога Forms и без каталога, названного по форме, поэтому обычный путь к форме объекта к ней и не подходил.

В таком ответе есть строка, которую стоит узнать заранее: «Запрос к HTTP-сервису 1С завершился ошибкой». Для общей формы она ожидаема и не означает, что ответ неполон. Обращение к сервису происходит всегда, для общей формы оно всегда неуспешно, и строка честно говорит, что всё показанное прочитано из выгрузки.

Ответ перечисляет динамические списки формы. Появился раздел «Динамические списки формы». В нём сказано, сколько списков у формы, и приведена таблица со столбцами «Имя реквизита», «Произвольный запрос» и «Основная таблица». Для общей формы ВыборИсполнителяБизнесПроцесса это выглядит так:

## Динамические списки формы

Списков: 2. Текст запроса в этом разделе не приводится.

| Имя реквизита | Произвольный запрос | Основная таблица |
|---------------|---------------------|------------------|
| `СписокПользователи` | да | `Catalog.Пользователи` |
| `СписокРоли` | да | `Catalog.РолиИсполнителей` |

Столбец «Произвольный запрос» здесь не для красоты. Значение «нет» означает, что запрос строит сама платформа по основной таблице, и текст запроса, если он в файле всё же записан, не выполняется. Такие списки в реальных конфигурациях встречаются, и по одному только перечислению их не отличить от рабочих.

Текст запроса в этот раздел не входит, и это решение, а не недоделка. Запрос динамического списка бывает в сотни строк, а на одной форме таких списков бывает больше десятка, поэтому запрос вытеснил бы из ответа ту структуру, ради которой инструмент и вызывали. Раздел появляется только у формы, которая хотя бы один динамический список объявляет, а у прочитанной формы без списков раздела нет.

Если форму выбрала программа, ответ называет её и то, что осталось в стороне. Когда form_name не задан, а у объекта в выгрузке несколько форм, читается первая по порядку. Так было и раньше, но молча. Теперь ответ называет прочитанную форму, перечисляет остальные формы объекта, до десяти имён и счётчик оставшихся, и предупреждает, что их состав и динамические списки в ответ не попали. Без этой строки отсутствие раздела со списками читалось бы как утверждение «у объекта списков нет», хотя речь идёт об одной форме, которую выбрали за вас.

Что ещё исправлено

Отказ «Object not found» у формы теперь объясняет, в чём дело. Ответ 404 от расширения сопровождается разбором: проверить написание имени, проверить вид объекта и знать, что общие формы этот адрес не отдаёт вовсе, а читаются они из выгрузки. Отдельно сказано, что общая форма при этом видна в дереве метаданных, и это не противоречие: перечисляет её один обработчик, а читает другой.

Причина, по которой выгрузка не дала форму, теперь стоит в самом ответе. Раньше на все случаи была одна фраза с советом проверить путь --dump и полноту выгрузки. Для части случаев этот совет уводил в сторону. Теперь ответ несёт код причины и текст под неё: не тот вид объекта, форм объекта в выгрузке нет, файл формы не является обычным файлом, прочитать не удалось, имя объекта отклонено до обращения к файлам, файл формы слишком велик. У каждой причины свой совет, и для слишком большого файла прямо сказано, что права и полнота выгрузки тут ни при чём.

Один нечитаемый каталог формы больше не стирает остальные формы объекта. Если у одной из форм каталог Ext недоступен, эта форма пропускается, а прочитанные формы того же объекта остаются в ответе. Прежде такой каталог был неотличим от формы, у которой файла просто нет, и объект с единственной нечитаемой формой возвращался как объект без форм.

Отказ чтения формы из выгрузки больше не несёт абсолютный путь. Он называет причину, но не называет файл и каталог, на которых чтение споткнулось.

Изменение поведения, на которое стоит обратить внимание

В ответе get_form_structure появился новый раздел. Он стоит после элементов, команд и обработчиков, и появляется только у формы с динамическими списками. Всё, что было в ответе раньше, стоит на прежних местах и в прежнем виде. Если ваш разбор ответа перечисляет разделы или считает их, его нужно поправить.

Файл формы больше 16 МиБ теперь не читается ни целиком, ни частично. Половина файла Form.xml разбирается в форму, которая выглядит целой, и ответ по ней был бы хуже отказа. У обычной формы такого размера не бывает: так выглядит либо повреждённая выгрузка, либо посторонний файл на месте формы.

Пересборка индекса не нужна. Схема индекса выгрузки в этой версии не менялась, поэтому первый запуск после обновления пройдёт как обычный, а собранный прежней версией индекс переиспользуется.

Расширение 1С

Расширение в этой версии не менялось. Требуется по-прежнему 0.4.7. Если у вас уже стоит 0.4.7, делать ничего не нужно: всё, что изменилось в этом выпуске, находится в самой программе.

Если расширение старее, обновите его той же командой, которой оно устанавливается: установщик сам снимет старую версию и загрузит новую.

mcp-1c --install "C:\путь\к\базе"

Для клиент-серверной базы добавьте --server и строку подключения вида сервер\база, а при необходимости --db-user и --db-password. Перед установкой закройте все сеансы 1С для этой базы, включая Конфигуратор.

Проверить, что обновление доехало:

curl http://сервер/база/hs/mcp-1c/version

Ожидаемый ответ: {"version":"0.4.7"}

Проверка контрольных сумм

К релизу приложен checksums.txt со строкой для каждого файла, включая расширение.

shasum -a 256 -c checksums.txt --ignore-missing

Full Changelog: v1.17.0...v1.18.0

Установка расширения 1С через Конфигуратор

Для пользователей, у которых нет доступа к командной строке на сервере 1С
(например, при аренде 1С через RDP):

  1. Скачайте MCP_HTTPService.cfe (SHA256 в checksums.txt).
  2. В Конфигураторе: Конфигурация -> Расширения конфигурации -> Добавить -> «Добавить из файла» -> выбрать .cfe.
  3. Убедитесь, что стоит флаг «Активно». Нажмите F7 (Обновить конфигурацию базы данных).

Расширение объявляет режим совместимости Version8_3_14
(extension/src/Configuration.xml), поэтому загружается на 1С:Предприятие
8.3.14 и выше.
На базах с включёнными профилями безопасности (8.3.21+) перед загрузкой
может потребоваться снять «Защиту от опасных действий» в свойствах расширения.