oscript-library / v8runner

Управление запуском 1С из командной строки
92 stars 55 forks source link

Обработка списка файлов -listFile для /LoadConfigFromFiles #134

Closed infina15 closed 1 year ago

infina15 commented 3 years ago

Функция удаляет строки модулей форм из списка файлов, оставляя только файлы .xml форм. Платформа выдает ошибку "Неизвестный объект метаданных Document.<ИмяДокумента>.Form.ФормаДокумента.Ext", если передать строку "\Ext\Form\Module.bsl". Такие строки следует заменять на ".xml", команда /LoadConfigFromFiles вместе с .xml файлом сама затянет модуль формы.

infina15 commented 3 years ago

А Экспорт точно нужен?

да пусть был бы, вдруг кто захочет отдельно воспользоваться

infina15 commented 3 years ago

А зачем процедура? Нормально же с функцией было, не? Просто создание времянки там же оставить внутри, а не сюда выносить. Или я недопонимаю логики?

Вот так же было?

ПутьКСпискуФайловЗагрузки_Обработанный = ОбработатьСписокФайловЗагрузки(ПутьКСпискуФайловЗагрузки)

пусть бы так и оставалось, красиво же.

Я подумал, что раз временные файлы надо очистить после процедуры, то и создавать надо перед процедурой, а не в ней. Иначе как-то странно получается, вроде при вызове думать о создании файлов не надо, а после надо подумать об удалении. Tempfiles не удаляет же ничего автоматом. Или я не туда смотрел?

EvilBeaver commented 3 years ago

Я подумал, что раз временные файлы надо очистить после процедуры, то и создавать надо перед процедурой, а не в ней. Иначе как-то странно получается, вроде при вызове думать о создании файлов не надо, а после надо подумать об удалении.

Ну тоже справедливо, с другой стороны. ВременныеФайлы действительно ничего не удаляет, но это я доработаю сами временные файлы, давно хочу, вот как раз и повод будет.

EvilBeaver commented 3 years ago

А вот кстати еще вопрос: а зачем в файле некорректные строки? Может сам файл формировать нормально?

infina15 commented 3 years ago

Ну тоже справедливо, с другой стороны. ВременныеФайлы действительно ничего не удаляет, но это я доработаю сами временные файлы, давно хочу, вот как раз и повод будет.

Ок, тогда сделаю завтра удаление файлов после функции. Надо только будет запомнить, что после допила tempfiles надо будет убрать это удаление

infina15 commented 3 years ago

А вот кстати еще вопрос: а зачем в файле некорректные строки? Может сам файл формировать нормально?

В конторе с этим же и столкнулся. Ситуация следующая:

  1. Разработчик редактирует модуль формы, вызывает gitsync.
  2. Gitsync делает честный коммит, в котором будет один файл с модулем формы (Module.bsl)
  3. Если попытаться автоматизировать деплой, то /LoadConfigFromFiles не пронесёт список из одного такого файла, будет ошибка «не найден объект». Да и даже если все файлы конфигурации перечислить в списке, все равно будет ошибка, нельзя вставлять модуль в список файлов. Только xml формы.
EvilBeaver commented 3 years ago

Ну в таком сценарии вообще вопрос к деплою, а не к процедуре загрузки. Кажется, что в таком сценарии никакой обработки файлов вообще не должно быть в методе ЗагрузитьКонфигурациюИзФайлов. Экспортный метод обработки файла пускай этим занимается и управляется со стороны клиента, который знает, что файл у него битый, не по стандарту.

Ведь что получается. метод ЗагрузитьКонфигурациюИзФайлов ждет файл, который точно пролезет в конфигуратор. Это смысл процедуры. Туда нельзя помещать "войну и мир", JPG с корпоративов, и строки *.bsl. А коли так, то никакой логики фильтрации метод выполнять не должен и должен принимать файл как есть.

infina15 commented 3 years ago

Ну в таком сценарии вообще вопрос к деплою, а не к процедуре загрузки. Кажется, что в таком сценарии никакой обработки файлов вообще не должно быть в методе ЗагрузитьКонфигурациюИзФайлов. Экспортный метод обработки файла пускай этим занимается и управляется со стороны клиента, который знает, что файл у него битый, не по стандарту.

Ведь что получается. метод ЗагрузитьКонфигурациюИзФайлов ждет файл, который точно пролезет в конфигуратор. Это смысл процедуры. Туда нельзя помещать "войну и мир", JPG с корпоративов, и строки *.bsl. А коли так, то никакой логики фильтрации метод выполнять не должен и должен принимать файл как есть.

В том-то и дело, что если выгрузить файлы конфигурации, составить из них список и загрузить эти файлы через /LoadConfigFromFiles, то гарантированно будет ошибка, если есть хотя бы один модуль формы. Поэтому вне зависимости от того откуда вызывается функция /LoadConfigFromFiles, надо править ей входящий список.

infina15 commented 3 years ago

@EvilBeaver так что, переделывать на функцию или закрываем ПР?

EvilBeaver commented 3 years ago

Я бы оставил на месте функцию переделки файла, как раз пригодился Экспорт. А внутри безусловное преобразование бы убрал.

EvilBeaver commented 1 year ago

@infina15 тут как-то замерзло... Может растопим? На чем дело остановилось?

infina15 commented 1 year ago

@EvilBeaver я все же в своем пайплайне накрутил еще несколько костылей, чтобы оно работало хоть как-то.

Например если мы пытаемся изменить одну единственную форму (в -listFiles укажем только эту форму), но в папке с файлами будет вся конфигурация, платформа может ругаться на несовпадение идентификаторов других объектов, которые не относятся к текущему деплою (не указаны в -listFiles). Для решения такой проблемы я оставляю в папке с файлами конфигурации только те объекты, которые идут в текущий деплой. Таким образом у платформы нет возможности видеть эти кривые идентификаторы. Хоть она на них и не должна была смотреть. Черный ящик...

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

Посему закрываю PR.