Комментарии 2
Раздел «что не работает» — лучшее, что есть в статье. Теперь по вашему челленджу, и боюсь, приз никто не заберёт: в языке запросов 1С DML нет, поэтому текста, который пройдёт ПроверитьReadOnly и изменит данные, не существует в принципе. Вы сами это написали абзацем выше. Ловить надо не то.
На чтении опасность не в записи, а в стоимости. Запрос ничего не меняет, но соединением регистров без отборов кладёт сервер, а на MS SQL без READ_COMMITTED_SNAPSHOT длинная выборка и сама встаёт за пишущими, и держит их. Модель к этому предрасположена ровно по той причине, которую вы называете достоинством: выборку вы не режете, чтобы она собирала один большой пакет. Я бы поставил на серверную сторону потолок возвращаемых строк и таймаут по времени — это закрывает то, от чего стоп-лист слов не защищает вообще.
Про dry_run стоит написать в README прямым текстом: откат возвращает данные, но блокировки живут до конца транзакции. Скрипт, который «ничего не меняет», на боевой базе держит X-блокировки на всём, что тронул, ровно столько, сколько выполняется. У нас был недавно разбор, где запрос ускорился в 390 раз, и медленным он не был вообще — он стоял в очереди за такой же «безобидной» транзакцией. И журнал регистрации откатом не отменяется: следы в ЖР останутся.
И последнее, про «четыре независимые вещи». Серверный стоп-лист на ЗапуститьПриложение и КомандаСистемы независимой защитой не является: имя метода собирается склейкой строки внутри вложенного Выполнить, и список слов этого не видит. Держит всё УстановитьБезопасныйРежим — он же закрывает файлы и интернет. Список слов полезен как ранний внятный отлуп модели, но в счёт защитных слоёв я бы его не брал: он создаёт ощущение запаса, которого нет.
Спасибо за замечания, много что применимо, с учетом конкретных реалий.

Как я пустил LLM в базу 1С и не открыл ни одного порта