Бесплатно на Инфостарте
Ревизор костылей: где ваш код делает руками то, что платформа 1С уже умеет сама
Обработка проходит код конфигурации, расширений и внешних обработок и находит места, где регулярное выражение, паузу, хеш, распаковку архива или чтение Excel делают самописным кодом, COM-объектом или компонентой. По каждой находке отчёт говорит, можно ли заменить прямо на месте или мешает тонкий клиент.
Обработка бесплатная. Внешняя обработка на управляемых формах, только читает: базу не меняет и ничего в неё не пишет. Проверена на платформе 8.3.27, конфигурация любая, БСП не нужна. В веб-клиенте не проверялась.
Платформа в 8.3.22-8.3.27 получила регулярные выражения, ВызватьПаузу, ЧтениеФайлаАрхива для RAR и 7z, СредстваБуфераОбмена, генератор паролей и WebSocket-клиент. Код конфигураций при этом живёт по-старому, и поиском по тексту такие места не найти: VBScript.RegExp встречается в закомментированном примере, имя COM-объекта в тексте сообщения об ошибке, а цикл по символам выглядит как любой другой цикл.
Ревизор разбирает модули лексером, который отличает код от комментария и строкового литерала, и засчитывает COM-объект только как аргумент Новый COMОбъект. Модули без признаков костыля лексер не трогает: в типовой УТ для Казахстана разбор понадобился 137 модулям из 7 157.
Главное в отчёте не сама находка, а вывод по ней. Регулярок, паузы, хеширования, КодироватьСтроку и чтения xlsx нет в тонком клиенте, буфера обмена нет на сервере. Отчёт берёт место исполнения строки из директивы процедуры и свойств общего модуля и пишет, доступна ли замена здесь же. Режим совместимости учитывается только там, где он на деле прячет функцию: у побитовых функций при режиме 8.3.10 и ниже. Новинки 8.3.22-8.3.27 он не прячет, это проверено исполнением в базе с режимом 8.3.17.
Что в отчёте
20 правил
Регулярки через COM и посимвольные циклы, пауза пустым циклом или ping, 7z и rar программой, буфер обмена через HTML-поле, свой хеш, Base64, URLEncode, побитовые функции и генератор паролей, HTTP, XML, файлы, GUID, картинки, кодировки, Excel и JavaScript через COM, компоненты под закрытые платформой задачи.
Вывод по каждой находке
Замена доступна на месте, в тонком клиенте замены нет, нужна платформа новее или, только для побитовых функций, мешает режим совместимости.
Было и стало у каждой замены
Версия платформы, где замена появилась, где она работает по синтакс-помощнику 8.3.27, пример кода до и после и чем замена проверена: прогоном или синтакс-помощником.
Два уровня правил
"Заменить" для однозначных признаков и "На проверку" там, где правило судит косвенно: цикл по символам бывает и честной логикой, а Excel создают и ради проверки, что он установлен.
Три источника кода
Конфигурация, расширения и внешние обработки из справочника. Выгрузку делает сам пакетным конфигуратором или берёт готовую папку выгрузки.
Что показали две типовые
Управление торговлей для Казахстана 3.4.4.87 (режим совместимости 8.3.10) и Бухгалтерия предприятия 3.0.204.22 (платформа 8.3.27.2325, режим 8.3.27). Находки УТ разобраны вручную все до одной, находки БП приведены как их выдал отчёт.
| Показатель | Значение | Как надо | Вердикт | Что это значит |
|---|---|---|---|---|
| УТ КЗ: модулей и строк | 7 157 модулей, 3,5 млн строк | - | инфо | лексером разобрано 137 модулей; проверка 223 с на сервере с отладкой плюс 249 с выгрузки |
| УТ КЗ: находок | 30, верных 24 | - | норма | у правил "Заменить" верны 4 из 4, у "На проверку" 20 из 26 |
| УТ КЗ: замена на месте | 8 из 24 | - | внимание | 14 упираются в тонкий клиент (10 циклов в модулях КлиентСервер, 3 Excel, URLEncode), 2 в режим 8.3.10 (побитовые) |
| БП 3.0: модулей и строк | 20 167 модулей, 17,4 млн строк | - | инфо | лексером разобрано 804; выгрузка около 55 минут, проверка 65 |
| БП 3.0: находок | 105, замена на месте у 46 | - | внимание | посимвольных циклов 71, из них на месте 19; буфер обмена 8 из 8, свой Base64 7 из 7 |
| БП 3.0: свои побитовые функции | 6, на месте все 6 | - | норма | режим 8.3.27: та же находка, что в УТ упиралась в режим 8.3.10, здесь уходит одной правкой |
| Самопроверка на контрольном модуле | 23 из 23, лишних 0 | все ловушки | норма | модуль с ловушками: COM в комментарии и в тексте сообщения, команды формы с похожими именами |
Разбор результата
Типовые держат такой код не по недосмотру: БСП обязана работать в тонком клиенте и в старых режимах совместимости. Отчёт полезнее всего на своих доработках, расширениях и внешних обработках, где режим и место исполнения выбираете вы. Справочник по всем двадцати заменам с примерами и подвохами (шаблон [0-9] вместо \d, пустая строка, пауза в серверном вызове с клиента) разобран в статье блога.
Как проверить свою конфигурацию
- 01
Открыть обработку
В тонком или толстом клиенте Windows. Отметить, что проверять: конфигурацию, расширения, внешние обработки из справочника.
- 02
Дать код
Ввести пароль пользователя для конфигуратора или оставить пустым, тогда конфигуратор спросит сам. Если выгрузка в файлы уже есть, указать её папку, конфигуратор не запустится.
- 03
Нажать "Проверить код"
Обработка выгрузит модули в пакетном режиме, проверит их и откроет отчёт табличным документом: сводка по правилам, потом находки с модулем, строкой, процедурой и выводом.
- 04
Разобрать находки
"Замена доступна" меняется на месте по примеру из отчёта. "Тонкий клиент" требует серверного вызова, и тут решать по месту: иногда старый цикл честно лучше лишнего круга до сервера.
Не получается самим? Напишите, разберёмся
У вас бюджет и идея - платформа для трейдинга, учётная система под свою нишу, сервис, которого ещё ни у кого нет. Мы разбираем задачу, готовим ТЗ со сметой и собираем команду под стек, а не подгоняем идею под то, что уже умеем.
- Стоимость
- 450 000 - 600 000 ₸разбор идеи и ТЗ со сметой, без налогов; сама разработка - по смете отдельным договором после ТЗ
Разборы по теме
Рядом по теме
Чем заменить самописный код в 1С 8.3.27
Справочник по 20 заменам: где работает каждая, рецепты было-стало и что показали УТ и БП.
Готовность к переходу на 1С 8.5
Обратный вопрос: что в конфигурации изменится или сломается при смене платформы.
Анализатор кода 1С
Запросы в цикле, опасные вызовы и хардкод во внешних обработках и печатных формах.
Бенчмарк: код 1С против внешней компоненты
Когда штатной функции нет: где компонента на C++ выигрывает, а где тормозит.
Частые вопросы
Чем это отличается от поиска по тексту выгрузки?
Лексер отличает код от комментария и строки, поэтому имя COM-объекта в тексте ошибки или закомментированный пример находкой не станут. И у каждой находки есть вывод: доступна ли замена там, где исполняется строка. Поиск по тексту этого не скажет.
Типовая выдала десятки находок. Надо всё переписывать?
Нет. Типовые держат такой код ради тонкого клиента и старых режимов совместимости, и при обновлении правки в типовой всё равно уедут. Смотреть стоит находки в своих доработках, расширениях и внешних обработках.
Почему регулярка помечена как недоступная, ведь платформа 8.3.27?
Строка исполняется в тонком клиенте или в модуле, общем для клиента и сервера. Регулярных выражений, ВызватьПаузу, хеширования и КодироватьСтроку в тонком клиенте нет. Замена возможна только через серверный вызов.
Режим совместимости у нас 8.3.10. Новые функции нам недоступны?
Доступны. В базе с режимом 8.3.17 на платформе 8.3.27 регулярка, пауза, генератор паролей, ЧтениеФайлаАрхива и WebSocketКлиенты отработали. Режим прячет только то, у чего в списке изменений есть оговорка про него, в этой линейке это побитовые функции при режиме 8.3.10 и ниже.
Обработка что-нибудь исправляет в коде?
Нет, только находит и объясняет. Пример замены "было-стало" лежит в отчёте рядом с каждым правилом, правку делает разработчик.
Сколько идёт проверка?
На УТ для Казахстана, 7 157 модулей, проверка заняла 223 секунды плюс 249 секунд выгрузки конфигуратором. На Бухгалтерии предприятия 3.0, 20 167 модулей, около 55 минут выгрузки и 65 минут проверки. С готовой выгрузкой конфигуратор не запускается вовсе.
Бесплатный экспресс-аудит вашей 1С
За 1-2 дня посмотрим вашу базу, найдём, где теряется производительность, и скажем, что с этим делать. Без обязательств.
Обсудим задачу
Быстрее всего в WhatsApp: напишите пару строк о задаче, ответим в течение рабочего дня.