Начальный импорт: RunBsl — пакетное выполнение .bsl.
Внешняя обработка-обёртка для ENTERPRISE /Execute с передачей пути к BSL в /C. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
# Единые правила редактора для репозиториев выгрузки 1С.
|
||||||
|
# Согласовано с tools/git_1c/.gitattributes (LF в репозитории).
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.{bsl,os}]
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
[*.xml]
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
[VERSION]
|
||||||
|
insert_final_newline = true
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Единые правила для репозиториев выгрузки 1С (Configurator / EDT).
|
||||||
|
# Канонический формат в git: UTF-8, LF. См. tools/git_1c/README.md
|
||||||
|
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Текстовые файлы выгрузки 1С
|
||||||
|
*.bsl text eol=lf
|
||||||
|
*.os text eol=lf
|
||||||
|
*.xml text eol=lf
|
||||||
|
*.txt text eol=lf
|
||||||
|
*.md text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
|
*.ini text eol=lf
|
||||||
|
*.conf text eol=lf
|
||||||
|
VERSION text eol=lf
|
||||||
|
|
||||||
|
# Бинарные артефакты 1С
|
||||||
|
*.cf binary
|
||||||
|
*.cfe binary
|
||||||
|
*.epf binary
|
||||||
|
*.erf binary
|
||||||
|
*.ef binary
|
||||||
|
*.bin binary
|
||||||
|
*.cf.binary binary
|
||||||
|
*.mxl binary
|
||||||
|
|
||||||
|
# Справка и графика
|
||||||
|
*.html binary
|
||||||
|
*.htm binary
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.ico binary
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
# Сборка
|
||||||
|
*.epf
|
||||||
|
*.erf
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# 1C / OS
|
||||||
|
Thumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# RunBsl — обёртка для пакетного выполнения `.bsl`
|
||||||
|
|
||||||
|
Внешняя обработка `RunBsl.epf` запускается через `ENTERPRISE /Execute`; путь к линейному BSL передаётся в `/C` (или через маркер `.run_bsl_path.txt`).
|
||||||
|
|
||||||
|
## Сборка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
scripts/build_run_bsl.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Исходники: `RunBsl.xml`, каталог `RunBsl/`. Лог сборки: `build_RunBsl.log`.
|
||||||
|
|
||||||
|
**Пересобирать после изменений** в `RunBsl/Ext/ObjectModule.bsl` или `RunBsl/Forms/`.
|
||||||
|
|
||||||
|
## Запуск
|
||||||
|
|
||||||
|
```bash
|
||||||
|
scripts/run_bsl.sh <файл.bsl> <build_epf.conf> [файл_лога]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Поведение
|
||||||
|
|
||||||
|
1. Клиент читает `.bsl` с локального диска (`ПараметрЗапуска` / маркер).
|
||||||
|
2. Сервер выполняет текст через `Выполнить()`.
|
||||||
|
3. Вывод и ошибки — в лог `/Out` (без модальных окон клиента).
|
||||||
|
4. Сеанс завершается автоматически.
|
||||||
|
|
||||||
|
Подробнее: документация в репозитории [crm3-migration](https://git.p7net.ru/rhana/crm3-migration.git) — `docs/meta/Скрипты_1С_пакетный_режим.md`.
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
|
||||||
|
<ExternalDataProcessor uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
|
||||||
|
<xr:ObjectId>b2c3d4e5-f6a7-8901-bcde-f12345678901</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:GeneratedType name="ExternalDataProcessorObject.RunBsl" category="Object">
|
||||||
|
<xr:TypeId>c3d4e5f6-a7b8-9012-cdef-123456789012</xr:TypeId>
|
||||||
|
<xr:ValueId>d4e5f6a7-b8c9-0123-def0-234567890123</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>RunBsl</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Run BSL</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment>Выполнение линейного BSL-файла в пакетном режиме (/Execute + /C)</Comment>
|
||||||
|
<DefaultForm>ExternalDataProcessor.RunBsl.Form.Форма</DefaultForm>
|
||||||
|
<AuxiliaryForm/>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Form>Форма</Form>
|
||||||
|
</ChildObjects>
|
||||||
|
</ExternalDataProcessor>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
|
||||||
|
// Обёртка: текст BSL передаётся с клиента, выполнение — на сервере ИБ.
|
||||||
|
|
||||||
|
Процедура ВыполнитьТекстBSL(ТекстКода, ПутьКФайлу = "") Экспорт
|
||||||
|
|
||||||
|
Если ПустаяСтрока(СокрЛП(ТекстКода)) Тогда
|
||||||
|
Суффикс = ?(ЗначениеЗаполнено(ПутьКФайлу), ": " + ПутьКФайлу, "");
|
||||||
|
ВызватьИсключение "BSL-файл пуст" + Суффикс;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
Выполнить(ТекстКода);
|
||||||
|
Исключение
|
||||||
|
ТекстОшибки = "ОШИБКА выполнения BSL"
|
||||||
|
+ ?(ЗначениеЗаполнено(ПутьКФайлу), " (" + ПутьКФайлу + ")", "")
|
||||||
|
+ ": " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||||
|
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция НормализоватьПутьЗапуска(ПутьКФайлу) Экспорт
|
||||||
|
|
||||||
|
Результат = СокрЛП(ПутьКФайлу);
|
||||||
|
|
||||||
|
Если СтрДлина(Результат) >= 2 И Лев(Результат, 1) = """" И Прав(Результат, 1) = """" Тогда
|
||||||
|
Результат = Сред(Результат, 2, СтрДлина(Результат) - 2);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПутьФайлаЗапускаПоУмолчанию() Экспорт
|
||||||
|
Возврат "/Users/kma/projects/crm3-26/data_transfer/crm3-26/.run_bsl_path.txt";
|
||||||
|
КонецФункции
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
|
||||||
|
<Form uuid="e5f6a7b8-c9d0-1234-ef01-345678901234">
|
||||||
|
<Properties>
|
||||||
|
<Name>Форма</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Run BSL</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<FormType>Managed</FormType>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<UsePurposes>
|
||||||
|
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||||
|
</UsePurposes>
|
||||||
|
<ExtendedPresentation/>
|
||||||
|
</Properties>
|
||||||
|
</Form>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
|
||||||
|
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
|
||||||
|
<Events>
|
||||||
|
<Event name="OnOpen">ПриОткрытии</Event>
|
||||||
|
</Events>
|
||||||
|
<Attributes>
|
||||||
|
<Attribute name="Объект" id="1">
|
||||||
|
<Type>
|
||||||
|
<v8:Type>cfg:ExternalDataProcessorObject.RunBsl</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<MainAttribute>true</MainAttribute>
|
||||||
|
</Attribute>
|
||||||
|
</Attributes>
|
||||||
|
</Form>
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Процедура ПриОткрытии(Отказ)
|
||||||
|
|
||||||
|
Попытка
|
||||||
|
// /C из командной строки; файл читается на клиенте (локальный путь Mac/Windows).
|
||||||
|
ПутьКФайлу = НормализоватьПутьКлиент(ПараметрЗапуска);
|
||||||
|
|
||||||
|
Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда
|
||||||
|
ПутьКФайлу = ПрочитатьПутьМаркераКлиент();
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекстКода = ПрочитатьФайлКлиент(ПутьКФайлу);
|
||||||
|
ВыполнитьТекстBSLНаСервере(ТекстКода, ПутьКФайлу);
|
||||||
|
Исключение
|
||||||
|
// В пакетном режиме — в лог /Out, без модального окна клиента.
|
||||||
|
Сообщить("ОШИБКА: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||||
|
КонецПопытки;
|
||||||
|
|
||||||
|
Закрыть();
|
||||||
|
ЗавершитьРаботуСистемы(Ложь);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Функция НормализоватьПутьКлиент(ПутьКФайлу)
|
||||||
|
|
||||||
|
Результат = СокрЛП(ПутьКФайлу);
|
||||||
|
|
||||||
|
Если СтрДлина(Результат) >= 2 И Лев(Результат, 1) = """" И Прав(Результат, 1) = """" Тогда
|
||||||
|
Результат = Сред(Результат, 2, СтрДлина(Результат) - 2);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Функция ПрочитатьПутьМаркераКлиент()
|
||||||
|
|
||||||
|
ПутьМаркера = ПутьМаркераЗапускаКлиент();
|
||||||
|
Файл = Новый Файл(ПутьМаркера);
|
||||||
|
|
||||||
|
Если НЕ Файл.Существует() Тогда
|
||||||
|
Возврат "";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||||||
|
ТекстовыйДокумент.Прочитать(ПутьМаркера, КодировкаТекста.UTF8);
|
||||||
|
|
||||||
|
Возврат НормализоватьПутьКлиент(ТекстовыйДокумент.ПолучитьТекст());
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Функция ПутьМаркераЗапускаКлиент()
|
||||||
|
Возврат "/Users/kma/projects/crm3-26/data_transfer/crm3-26/.run_bsl_path.txt";
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаКлиенте
|
||||||
|
Функция ПрочитатьФайлКлиент(ПутьКФайлу)
|
||||||
|
|
||||||
|
Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда
|
||||||
|
ВызватьИсключение "Не задан путь к BSL-файлу (/C или .run_bsl_path.txt)";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Файл = Новый Файл(ПутьКФайлу);
|
||||||
|
Если НЕ Файл.Существует() Тогда
|
||||||
|
ВызватьИсключение "BSL-файл не найден (клиент): " + ПутьКФайлу;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||||||
|
ТекстовыйДокумент.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
|
||||||
|
|
||||||
|
Возврат ТекстовыйДокумент.ПолучитьТекст();
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
&НаСервере
|
||||||
|
Процедура ВыполнитьТекстBSLНаСервере(Знач ТекстКода, Знач ПутьКФайлу)
|
||||||
|
|
||||||
|
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
|
||||||
|
ОбъектОбработки.ВыполнитьТекстBSL(ТекстКода, ПутьКФайлу);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
Reference in New Issue
Block a user