TRIPWIRE / КЕЙСЫ / БУСТЕР · 8.3.27
Технический пилот платформы 1С 8.3.27

Сборка под 1С:Платформу 8.3.27: 5 типов BSL-ошибок, которые ловит новый компилятор

При сборке Бустер 1.18 под платформу 1С 8.3.27 компилятор поймал 5 типов синтаксических конструкций, которые более ранние версии пропускали. Тонкий клиент крэшил без выводимой ошибки — пришлось искать через DESIGNER /CheckConfig. Этот кейс — карта ошибок и патчи, которые применили мы. Поможет всем, кто сейчас мигрирует на 8.3.27.

5
типов ошибок BSL
~1 ч
от crash до fix через CheckConfig
0
правок типовой ДО

// 01Контекст

Бустер 1.17 был собран и работал под платформой 1С 8.3.25. На 1.18 мы обновили dev-стенд на 8.3.27. После LoadConfigFromFiles + UpdateDBCfg расширение успешно встало, но тонкий клиент 1cv8c.exe начал падать при запуске с записью .mdmp в %LOCALAPPDATA%\1C\1cv8\dumps\. Дамп без приватных pdb-символов 1С не читается; встроенный «Анализатор дампов» доступен только из интерактивного Конфигуратора.

// 02Задача

Найти и устранить причину крэша, не понимая, какая именно конструкция в наших ~6 000 строк BSL вызвала проблему. Идти через бинарный поиск по модулям было дорого. Нужен был способ диагностики без интерактивного запуска платформы.

// 03Что сделали

Ключевое открытие — команда DESIGNER /CheckConfig -ThinClient -WebClient -Server -Extension Бустер в платформе 8.3.27 выдаёт точную диагностику с exit code 101 и списком ошибок. На 8.3.25 эти же конструкции компилировались без замечаний. Запустили проверку, получили список из 9 нарушений в 5 категориях. Каждую починили, прогнали повторно, добились «Ошибок не обнаружено».

Пять типов ошибок

1. Имя процедуры совпадает со встроенной функцией

Своя функция ПустаяСтрока() без параметров. На 8.3.27 — конфликт со встроенной ПустаяСтрока(Строка).

// — было Функция ПустаяСтрока() Возврат ""; КонецФункции // — стало Функция СоздатьПустуюСтрокуТабДока() Возврат ""; КонецФункции

2. Цепочка свойств после конструктора

Прямое обращение к свойству после Новый Файл(...) на одной строке. 8.3.27 требует разнести.

// — было Имя = Новый Файл(Путь).ИмяБезРасширения; // — стало ФайлОбъект = Новый Файл(Путь); Имя = ФайлОбъект.ИмяБезРасширения;

3. Использование Вычислить() для процедурных вызовов

Вычислить() работает только с выражениями. Для процедурных вызовов нужна Выполнить().

// — было Вычислить("МояПроцедура()"); // — стало Выполнить("МояПроцедура()");

4. Устаревший API ПоказатьВыборИзСписка для тонкого/веб-клиента

Сигнатура ПоказатьВыборИзСписка(Оповещение, Список, Заголовок) удалена в Тонком/Веб-клиенте 8.3.27. Замена — метод списка.

// — было ПоказатьВыборИзСписка(Оповещ, СписокЗначений, "Выберите"); // — стало СписокЗначений.ПоказатьВыборЭлемента(Оповещ, "Выберите");

5. Однобуквенная переменная-резерв в цикле

В Для И = ... переменная И — зарезервированный логический оператор. На 8.3.27 это ошибка компиляции.

// — было Для И = 1 По Список.Количество() Цикл ... КонецЦикла; // — стало Для Инд = 1 По Список.Количество() Цикл ... КонецЦикла;

// 04Бонус: реквизиты объекта в борровом модуле

Дополнительная категория, которую CheckConfig подсветил. В ObjectModule заимствованных объектов (например, Документ.ДействиеЗадачи.МодульОбъекта) обращение к реквизитам объекта в перехватчике &Перед / &После компилятор не видит — «Переменная не определена». Решение — обращаться через индексатор:

// — было &Перед("Записать") Процедура цр_Перед(Отказ, ОбработкаПроведения) Если Ссылка.НомерИтерации > 1 Тогда ... // — стало &Перед("Записать") Процедура цр_Перед(Отказ, ОбработкаПроведения) Если ЭтотОбъект["НомерИтерации"] > 1 Тогда ...

// 05Результат

После применения патчей CheckConfig возвращает «Ошибок не обнаружено», новая Бустер.cfe собирается, тонкий клиент стартует штатно. Главный урок: при миграции на 8.3.27 всегда запускайте CheckConfig с явными ключами -ThinClient -WebClient -Server — он стал намного строже и ловит реальные проблемы, а не «ложные» предупреждения, как раньше.

Стек и инструменты

1С:ПЛАТФОРМА 8.3.27 · DESIGNER · CHECKCONFIG · BSL · CFE

Делаете своё расширение под 1С:ДО?

Бустер — готовое расширение с 28 функциями, уже собранное под 8.3.27 + ДО КОРП 3.0.19. Подписка 15 000 ₽/мес или бессрочная лицензия от 30 000 ₽.

Посмотреть Бустер
// Читать дальше
Все кейсы