Files
mk 3deb9120b6 Начальный импорт: RunBsl — пакетное выполнение .bsl.
Внешняя обработка-обёртка для ENTERPRISE /Execute с передачей пути к BSL в /C.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 14:22:15 +03:00

86 lines
3.7 KiB
Plaintext

&НаКлиенте
Процедура ПриОткрытии(Отказ)
Попытка
// /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(ТекстКода, ПутьКФайлу);
КонецПроцедуры