Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions docs/product/команды/30-epf.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,12 @@ vrunner epf convert --src ./build/xml ./build/edt

## compile

Собирает внешние обработки (`.epf`/`.erf`) из XML-исходников. Поддерживает обработку целого каталога с рекурсивным поиском.
Собирает внешние обработки (`.epf`) и внешние отчёты (`.erf`) из XML-исходников.
Поддерживает обработку целого каталога с рекурсивным поиском.

Тип объекта определяется по корневому тегу XML, он же задаёт расширение результата:
`ExternalDataProcessor` → `.epf`, `ExternalReport` → `.erf`. В одном дереве исходников
обработки и отчёты могут лежать вперемешку — каждый объект соберётся со своим расширением.

```bash
vrunner epf compile [опции] [SRC]
Expand All @@ -82,14 +87,14 @@ vrunner epf compile [опции] [SRC]

| Аргумент | Описание |
|----------|----------|
| `SRC` | Каталог с XML-исходниками обработок (по умолчанию - текущий каталог) |
| `SRC` | Каталог с XML-исходниками обработок и отчётов (по умолчанию - текущий каталог) |

### Опции

| Опция | Переменная окружения | Описание |
|-------|---------------------|----------|
| `--R`, `--recursive` | - | Рекурсивный поиск обработок в подкаталогах |
| `--out` | - | Каталог для сохранения собранных обработок |
| `--R`, `--recursive` | - | Рекурсивный поиск обработок и отчётов в подкаталогах |
| `--out` | - | Каталог для сохранения собранных обработок и отчётов |
| `--ibconnection` | `VRUNNER_IBCONNECTION` | Строка подключения к ИБ. Если не указана - автоматически создаётся временная ИБ |
| `--db-user` | `VRUNNER_DBUSER` | Пользователь информационной базы |
| `--db-pwd` | `VRUNNER_DBPWD` | Пароль пользователя ИБ |
Expand All @@ -111,8 +116,8 @@ vrunner epf compile [опции] [SRC]

::: tip Исходники 1С:EDT
Если `SRC` — проект внешних объектов 1С:EDT (`--src-format edt` или автоопределение),
`compile` сначала выгружает его в XML через `1cedtcli` (`export`), затем собирает `.epf`
из полученных XML. Требуется установленная 1С:EDT.
`compile` сначала выгружает его в XML через `1cedtcli` (`export`), затем собирает
`.epf`/`.erf` из полученных XML. Требуется установленная 1С:EDT.
:::

### Примеры
Expand All @@ -137,7 +142,8 @@ vrunner epf compile \

## decompile

Разбирает файл обработки `.epf`/`.erf` (или каталог с файлами) в XML-исходники.
Разбирает файл внешней обработки `.epf` или внешнего отчёта `.erf` (либо каталог с такими
файлами) в XML-исходники. При обходе каталога подхватываются оба расширения.

```bash
vrunner epf decompile [опции] <SRC>
Expand All @@ -147,13 +153,13 @@ vrunner epf decompile [опции] <SRC>

| Аргумент | Описание |
|----------|----------|
| `SRC` | Путь к EPF-файлу или каталогу с EPF-файлами (**обязательный**) |
| `SRC` | Путь к EPF/ERF-файлу или каталогу с ними (**обязательный**) |

### Опции

| Опция | Переменная окружения | Описание |
|-------|---------------------|----------|
| `--R`, `--recursive` | - | Рекурсивный поиск EPF-файлов (для каталога) |
| `--R`, `--recursive` | - | Рекурсивный поиск EPF/ERF-файлов (для каталога) |
| `--out` | - | Каталог для сохранения разобранных исходников |
| `--ibconnection` | `VRUNNER_IBCONNECTION` | Строка подключения к ИБ. Если не указана - автоматически создаётся временная ИБ |
| `--db-user` | `VRUNNER_DBUSER` | Пользователь информационной базы |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
&НаборОпций("НаборОпцийСУБД")
Перем ОпцииСУБД;

&Аргумент(Имя = "SRC", Описание = "Каталог с исходниками обработки (по умолчанию - текущий)")
&Аргумент(Имя = "SRC", Описание = "Каталог с исходниками обработки или отчёта (по умолчанию - текущий)")
&ТСтрока
Перем КаталогИсходников;

&Опция(Имя = "R recursive", Описание = "Рекурсивный поиск обработок")
&Опция(Имя = "R recursive", Описание = "Рекурсивный поиск обработок и отчётов")
&Флаговый
Перем Рекурсивно;

&Опция(Имя = "out", Описание = "Каталог для сохранения собранных обработок")
&Опция(Имя = "out", Описание = "Каталог для сохранения собранных обработок и отчётов")
&ТСтрока
Перем КаталогВыгрузки;

Expand All @@ -42,7 +42,8 @@
&НаборОпций("НаборОпцийНастроек")
Перем ОпцииНастроек; // BSLLS:UnusedLocalVariable-off

&ПодкомандаПриложения(Имя = "compile", Родитель = "КомандаEpf", Описание = "Собрать внешние обработки из исходников")
&ПодкомандаПриложения(Имя = "compile", Родитель = "КомандаEpf",
Описание = "Собрать внешние обработки и отчёты из исходников")
&ДоступноВMCP
&MCPДлительная
Процедура ПриСозданииОбъекта()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@
&НаборОпций("НаборОпцийСУБД")
Перем ОпцииСУБД;

&Аргумент(Имя = "SRC", Описание = "Путь к файлу обработки (.epf) или каталогу с обработками")
&Аргумент(Имя = "SRC", Описание = "Путь к файлу обработки или отчёта (.epf/.erf) или каталогу с ними")
&ТСтрока
&Обязательный
Перем Источник;

&Опция(Имя = "R recursive", Описание = "Рекурсивный поиск EPF-файлов (для каталога)")
&Опция(Имя = "R recursive", Описание = "Рекурсивный поиск EPF/ERF-файлов (для каталога)")
&Флаговый
Перем Рекурсивно;

Expand All @@ -40,7 +40,8 @@
&НаборОпций("НаборОпцийНастроек")
Перем ОпцииНастроек; // BSLLS:UnusedLocalVariable-off

&ПодкомандаПриложения(Имя = "decompile", Родитель = "КомандаEpf", Описание = "Разобрать внешние обработки в исходники")
&ПодкомандаПриложения(Имя = "decompile", Родитель = "КомандаEpf",
Описание = "Разобрать внешние обработки и отчёты в исходники")
&ДоступноВMCP
&MCPДлительная
Процедура ПриСозданииОбъекта()
Expand Down
22 changes: 22 additions & 0 deletions src/core/Движки/Классы/ДвижокIbcmd.os
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
Процедура ЗагрузитьКонфигурациюИзФайлов(Знач ПараметрыПодключения, Знач КаталогИсходников,
Знач ПараметрыПлатформы = Неопределено, Знач СписокФайлов = "") Экспорт

КаталогИсходников = АбсолютныйПуть(КаталогИсходников);
Лог.Отладка("Загрузка конфигурации из файлов через ibcmd: %1", КаталогИсходников);
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
УстановитьКонтекстИБ(Менеджер, ПараметрыПодключения);
Expand Down Expand Up @@ -110,6 +111,7 @@
Возврат Результат;
КонецЕсли;

ПутьКФайлуВерсийДляСравнения = АбсолютныйПуть(ПутьКФайлуВерсийДляСравнения);
Лог.Отладка("Инкрементальная загрузка: сравниваем конфигурацию с кешем ConfigDumpInfo через ibcmd: %1",
ПутьКФайлуВерсийДляСравнения);
ПутьКФайлуИзменений = ПолучитьИмяВременногоФайла(".txt");
Expand Down Expand Up @@ -158,6 +160,7 @@
Процедура ЗагрузитьКонфигурациюИзФайла(Знач ПараметрыПодключения, Знач ПутьКФайлуCf,
Знач ПараметрыПлатформы = Неопределено) Экспорт

ПутьКФайлуCf = АбсолютныйПуть(ПутьКФайлуCf);
Лог.Отладка("Загрузка конфигурации из файла через ibcmd: %1", ПутьКФайлуCf);
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
УстановитьКонтекстИБ(Менеджер, ПараметрыПодключения);
Expand All @@ -176,6 +179,7 @@
Процедура ВыгрузитьКонфигурациюВФайл(Знач ПараметрыПодключения, Знач ПутьКФайлуCf,
Знач ПараметрыПлатформы = Неопределено) Экспорт

ПутьКФайлуCf = АбсолютныйПуть(ПутьКФайлуCf);
Лог.Отладка("Выгрузка конфигурации в файл через ibcmd: %1", ПутьКФайлуCf);
ОбеспечитьКаталогДляФайла(ПутьКФайлуCf);
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
Expand Down Expand Up @@ -239,6 +243,7 @@
Процедура ЗагрузитьИнфобазуИзФайла(Знач ПараметрыПодключения, Знач ПутьКФайлуDT, // BSLLS:Typo-off
Знач ПараметрыПлатформы = Неопределено) Экспорт

ПутьКФайлуDT = АбсолютныйПуть(ПутьКФайлуDT);
Лог.Отладка("Загрузка инфобазы из файла DT: %1", ПутьКФайлуDT); // BSLLS:Typo-off
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
УстановитьКонтекстИБ(Менеджер, ПараметрыПодключения);
Expand All @@ -256,6 +261,7 @@
Процедура ВыгрузитьИнфобазуВФайл(Знач ПараметрыПодключения, Знач ПутьКФайлуDT, // BSLLS:Typo-off
Знач ПараметрыПлатформы = Неопределено) Экспорт

ПутьКФайлуDT = АбсолютныйПуть(ПутьКФайлуDT);
Лог.Отладка("Выгрузка инфобазы в файл DT: %1", ПутьКФайлуDT); // BSLLS:Typo-off
ОбеспечитьКаталогДляФайла(ПутьКФайлуDT);
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
Expand Down Expand Up @@ -321,6 +327,7 @@
Процедура ЗагрузитьРасширениеИзФайла(Знач ПараметрыПодключения, Знач ПутьКФайлуCfe,
Знач ИмяРасширения, Знач ПараметрыПлатформы = Неопределено) Экспорт

ПутьКФайлуCfe = АбсолютныйПуть(ПутьКФайлуCfe);
Лог.Отладка("Загрузка расширения через ibcmd: %1 (имя=%2)", ПутьКФайлуCfe, ИмяРасширения);
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
УстановитьКонтекстИБ(Менеджер, ПараметрыПодключения);
Expand All @@ -340,6 +347,7 @@
Процедура ВыгрузитьРасширениеВФайл(Знач ПараметрыПодключения, Знач ПутьКФайлуCfe,
Знач ИмяРасширения, Знач ПараметрыПлатформы = Неопределено) Экспорт

ПутьКФайлуCfe = АбсолютныйПуть(ПутьКФайлуCfe);
Лог.Отладка("Выгрузка расширения через ibcmd: %1 (имя=%2)", ПутьКФайлуCfe, ИмяРасширения);
ОбеспечитьКаталогДляФайла(ПутьКФайлуCfe);
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
Expand All @@ -361,6 +369,7 @@
Процедура ЗагрузитьРасширениеИзФайлов(Знач ПараметрыПодключения, Знач КаталогИсходников,
Знач ИмяРасширения, Знач ПараметрыПлатформы = Неопределено, Знач СписокФайлов = "") Экспорт

КаталогИсходников = АбсолютныйПуть(КаталогИсходников);
Лог.Отладка("Загрузка расширения из файлов через ibcmd: %1 (имя=%2)", КаталогИсходников, ИмяРасширения);
Менеджер = СоздатьМенеджер(ПараметрыПлатформы);
УстановитьКонтекстИБ(Менеджер, ПараметрыПодключения);
Expand Down Expand Up @@ -669,6 +678,19 @@

КонецПроцедуры

// Привести путь к абсолютному перед передачей в ibcmd.
//
// ibcmd некорректно разбирает относительные пути с префиксом "./" или ".\": корневой каталог
// он открывает, а вложенные файлы ищет уже относительно другого каталога и падает с
// "Операция невозможна: файл <путь> отсутствует либо поврежден" - причём на разных файлах
// от запуска к запуску. Абсолютный путь снимает неоднозначность.
//
// Параметры:
// Путь - Строка - путь к файлу или каталогу (может быть относительным)
//
// Возвращаемое значение:
// Строка - абсолютный путь; пустая строка, если путь не задан
//
Функция АбсолютныйПуть(Знач Путь)
Файл = Новый Файл(Путь);
Возврат Файл.ПолноеИмя;
Expand Down
Loading
Loading