Что платформа 1С закрыла в 8.3.22-8.3.27 и где эти замены не работают

13.10.26

Разработка - Разработка внешних компонент

В типовой "Управление торговлей для Казахстана" нашлось 24 места, где код руками делает то, что платформа 8.3.22-8.3.27 умеет сама: регулярки циклом по символам, пауза пустым циклом, архивы через 7z, буфер обмена через скрытое HTML-поле. Проверьте у себя, где исполняется такой код. Замена доступна прямо на месте только у 8 из 24: у 14 мешает тонкий клиент, где регулярок, паузы и КодироватьСтроку нет. Режим совместимости, на который я грешил, новинки не прячет: база в режиме 8.3.17 выполнила регулярку, паузу, архив и WebSocket. Во второй части замер: самописный CRC32 мегабайта 6-7 секунд против миллисекунды штатно, регулярка быстрее посимвольного цикла в 6-13 раз, и почему миллисекунды на итерацию нельзя публиковать как константу платформы.

В мае 2026 года на Инфостарте вышла внешняя компонента WebSocket-клиента за 10 стартмани. Первый комментарий под ней был коротким: поздновато, с 27-й платформы это встроено. На 3 сентября у карточки было одно скачивание.

История частная, жанр узнаваемый. Я решил посчитать, сколько в обычной типовой конфигурации кода, который руками делает то, что платформа уже умеет сама, и можно ли это на самом деле заменить. Версии взяты из синтакс-помощника платформы 8.3.27, всё остальное проверено вызовом кода на тестовых базах 8.3.27.1606.

По дороге я был уверен в одном объяснении, поставил опыт и получил другое. Это объяснение и есть главное в статье.

По одной закрытой дыре на версию

Сначала я выписал, что появилось во встроенном языке с 8.3.22 по 8.3.27 из того, что раньше закрывали компонентой, COM-объектом или своей функцией. Источник - список изменений платформы с releases.1c.ru.

Версия Что появилось Где работает Чем закрывали раньше
8.3.22 ГенераторСлучайныхПаролей.СлучайныйПароль сервер, толстый клиент своя функция на ГенераторСлучайныхЧисел
8.3.23 четыре функции регулярных выражений сервер, толстый клиент VBScript.RegExp, компонента, цикл по символам
8.3.24 СредстваБуфераОбмена только клиенты ClipboardData скрытого поля HTML-документа
8.3.25 ВызватьПаузу сервер, толстый клиент, но не в вызове с клиента пустой цикл по ТекущаяДата, ping на свой адрес
8.3.26 ЧтениеФайлаАрхива: GZIP, RAR, 7-ZIP, XZ, TAR тонкий и толстый клиент, сервер 7z.exe и unrar через ЗапуститьПриложение
8.3.27 WebSocket-клиент, объект конфигурации сервер, толстый клиент внешняя компонента

Каждую строку я вызвал на тестовой базе. Регулярка отличила 12-значный ИИН (казахстанский номер налогоплательщика) от 11 цифр с буквой. ВызватьПаузу(300), аргумент в миллисекундах, в HTTP-сервисе заняла 310 мс. ЧтениеФайлаАрхива я проверил на gzip: файл извлёкся, кириллица в тексте цела, остальные форматы беру из списка изменений. Генератор паролей отдал пароли по 12 символов. WebSocketКлиенты вернул менеджер клиентов. Буфер обмена на сервере не существует, серверная компиляция отвечает "Переменная не определена", как и обещает синтакс-помощник.

Регулярных функций в платформе четыре: СтрНайтиПоРегулярномуВыражению, СтрНайтиВсеПоРегулярномуВыражению, СтрЗаменитьПоРегулярномуВыражению и СтрПодобнаПоРегулярномуВыражению. Пятой, СтрРазделитьПоРегулярномуВыражению, которую легко нафантазировать по аналогии, нет: прогон отвечает "Процедура или функция с указанным именем не определена". И ещё одна поправка к моей памяти: ОбрабатываемаяКартинка есть с 8.3.14, а вовсе не с 8.3.22, так что компоненты для ресайза фото потеряли смысл задолго до этой линейки.

Обратите внимание на графу "Где работает". У регулярок, паузы и генератора паролей нет тонкого клиента. У хеширования, КодироватьСтроку и ТабличныйДокумент.Прочитать тоже. Это графа "Доступность" синтакс-помощника 8.3.27, вызовом в тонком клиенте я её не проверял. Пригодится через раздел.

Что нашлось в типовой конфигурации

Проверял типовую "Управление торговлей для Казахстана" 3.4.4.87: выгрузка в файлы дала 7 157 модулей и 3 534 819 строк кода. Выгрузку прошёл инструментом, про который ниже, а потом открыл глазами каждую находку.

Что нашлось Находок Штатная замена
посимвольный цикл, проверяющий строку по набору символов 13 СтрПодобнаПоРегулярномуВыражению
Excel.Application ради чтения или записи таблицы 7 ТабличныйДокумент.Прочитать и Записать в xlsx
распаковка архива программой 7za.exe 2 ЧтениеФайлаАрхива
буфер обмена через ClipboardData HTML-поля 2 СредстваБуфераОбмена
свои функции ПобитовоеИ и ПобитовоеИли 2 одноимённые функции платформы
пауза пустым циклом по ТекущаяДата 1 обработчик ожидания или ВызватьПаузу
генератор пароля на ГенераторСлучайныхЧисел 1 ГенераторСлучайныхПаролей
ScriptControl с JavaScript внутри 1 ЧтениеJSON, если это был JSON
своя функция URLEncode 1 КодироватьСтроку

Всего 30 находок. После проверки глазами верных 24, ложных 6. В четырёх местах Excel создаётся только затем, чтобы убедиться, что он установлен, или ради автофильтра в уже готовой книге, этого платформа не делает. Одно упоминание 7za.exe оказалось проверкой, что агент резервного копирования на месте. ScriptControl в модуле печати собирает массив COM, JSON там ни при чём. Дальше считаю только 24 верных.

Самое наглядное место - пауза в клиентском модуле подключаемого оборудования:

Процедура Пауза(Секунд) Экспорт
	ВремяЗавершения = ТекущаяДата() + Секунд;
	Пока ТекущаяДата() < ВремяЗавершения Цикл
	КонецЦикла;
КонецПроцедуры

Всё время ожидания цикл работает вхолостую. На клиенте штатный путь - обработчик ожидания, но это не замена одной строки: синхронная пауза превращается в продолжение, и код, который её вызывает, придётся перестроить.

ПодключитьОбработчикОжидания("ПродолжитьПослеПаузы", Секунд, Истина);

Вторая заметная пара - функции ПобитовоеИ и ПобитовоеИли в модуле контактной информации. Они собраны руками на массивах бит и называются так же, как функции платформы из 8.3.11. Как такое компилируется, если в платформе эти имена уже заняты?

Я думал, мешает режим совместимости. Проверил: почти нет

У этой типовой режим совместимости 8.3.10. Первая гипотеза напрашивалась сама: режим прячет от кода все функции новее 8.3.10, и регулярки, пауза, архивы в этой конфигурации просто не видны. Подтверждение нашлось быстро. Внешняя обработка с одной функцией Функция ПобитовоеИ(А, Б) Экспорт на базе без режима совместимости не создаётся:

{ВнешняяОбработка.ProbaSovm.МодульОбъекта(1,9)}: Процедура или функция с указанным именем уже определена (ПобитовоеИ)

А вся типовая с такой же функцией в общем модуле проходит проверку модулей конфигуратором без ошибок. Я уже записал вывод в черновик и даже встроил его в инструмент. На вычитке меня спросили, проверял ли я это на чём-то, кроме побитовых функций. Не проверял.

Прямой опыт поставил на базе с режимом совместимости 8.3.17 на платформе 8.3.27. По гипотезе, всё из 8.3.22-8.3.27 там должно быть невидимым. Результат:

Вызов Появился в В режиме 8.3.17
СтрПодобнаПоРегулярномуВыражению 8.3.23 работает
ВызватьПаузу(200) 8.3.25 204 мс
ГенераторСлучайныхПаролей 8.3.22 пароль из 12 символов
Новый ЧтениеФайлаАрхива 8.3.26 создан
WebSocketКлиенты 8.3.27 менеджер клиентов

Режим совместимости новинки не прячет. Разгадка побитовых функций лежит в списке изменений: в их абзаце прямо написано "В режиме совместимости с версией 8.3.10 поведение не изменилось". У регулярок, паузы, архивов, буфера обмена, генератора паролей и WebSocket такой оговорки нет. Режим прячет ровно то, про что в списке изменений есть эта фраза, и в нашей линейке это только побитовые функции при режиме 8.3.10 и ниже.

Прогона на конфигурации именно с режимом 8.3.10 у меня нет: такой базы под рукой не нашлось, а типовую менять я не стал. Поэтому вывод звучит так: режим 8.3.17 новинки 8.3.22-8.3.27 не прячет, и в списке изменений нет ни одной оговорки, которая спрятала бы их при более низком режиме.

Что мешает на самом деле: тонкий клиент

С исправленной логикой 24 верные находки раскладываются так:

Вывод Находок Какие
замена доступна 8 3 серверных цикла проверки строк, пауза (с переделкой вызывающего кода), распаковка 7z, 2 буфера обмена, генератор пароля
в тонком клиенте замены нет 14 10 циклов в клиент-серверных модулях, 3 места с Excel, URLEncode
мешает режим совместимости 8.3.10 2 свои ПобитовоеИ и ПобитовоеИли

Главная стена - клиентский контекст. Десять посимвольных циклов живут в модулях с суффиксом КлиентСервер, их код исполняется и на тонком клиенте, а регулярок там нет. ТабличныйДокумент.Прочитать тонкому клиенту недоступен, поэтому модули загрузки из Excel держатся за COM. КодироватьСтроку тоже только на сервере, и своя URLEncode в клиентском модуле появилась по понятной причине. В таком коде замена возможна только через серверный вызов, а это уже переделка, а не правка строки.

Для своих доработок вывод получается мягче, чем я ожидал. Режим совместимости поднимать ради регулярок не нужно, они работают и так. Проверить стоит другое: где исполняется код. Если проверка строки или разбор данных живут на сервере, замена на штатную функцию делается сразу. Если на клиенте, её место в серверном вызове.

Шесть версий платформы, три вывода по 24 находкам типовой: 8 заменяются на месте, 14 упираются в тонкий клиент, 2 в режим совместимости

Где кончается BSL: замер

Вторая половина вопроса. Допустим, штатной функции нет. Когда своя реализация на встроенном языке ещё терпима?

Здесь у меня была заготовлена цифра из прошлого замера: 422 мс на миллион умножений и 352 мс на миллион чтений байта, то есть около 2,8 МБ/с при побайтовой обработке. Перед публикацией я перепроверил её тем же способом и получил другое. Пустой цикл на миллион итераций шёл от 1 626 до 2 690 мс, миллион умножений-сложений от 2 650 до 3 676 мс, миллион чтений байта из БуферДвоичныхДанных от 2 611 до 4 818 мс. Выражение из ещё более раннего замера, С = С + Инд * 1.4142, тогда давало 662 мс, сегодня 3 016-3 364 мс.

Главный подозреваемый нашёлся быстро: служба агента сервера на тестовой машине запущена с ключом -debug, а отладка тормозит интерпретатор. Перезапускать службу ради статьи я не стал, так что отладка остаётся подозреваемой. Зато видно другое: на другом сервере то же выражение шло 6,3-6,6 с. Миллисекунды на итерацию зависят от сервера и его настроек сильнее, чем от кода, и публиковать их как константу платформы нельзя. Дальше в статье старой цифры нет.

Остаётся сравнение своего кода со штатной функцией на одной и той же машине. CRC32 я снял четырьмя заходами, регулярку тремя (в каждом заходе цикл и регулярка шли подряд), SHA-256 одним:

Задача Своими руками на BSL Штатно
CRC32 одного мегабайта 6 280-7 421 мс, таблица и побитовые функции около 1 мс (предел таймера), ХешированиеДанных, суммы совпали
проверка "только цифры" для 20 000 строк по 12 символов 1 461-1 785 мс, цикл по КодСимвола 110-306 мс, СтрПодобнаПоРегулярномуВыражению
SHA-256 от 50 МБ не пробовал 307 мс

Самописный CRC32 проигрывает штатному в тысячи раз. Регулярка в каждом заходе обогнала цикл в 6-13 раз (13,3, 5,8 и 11,1 по парам заходов). Честная оговорка: под отладкой разрыв завышен, потому что отладка тормозит цикл на встроенном языке и почти не трогает функцию, которая работает внутри платформы. Насколько он сожмётся без отладки, я не мерил. Но порядок у CRC32 такой, что никакое ускорение цикла его не догонит.

// было: 1,5-1,8 с на 20 000 строк
Для Поз = 1 По СтрДлина(Стр) Цикл
	Код = КодСимвола(Стр, Поз);
	Если Код < 48 Или Код > 57 Тогда
		Возврат Ложь;
	КонецЕсли;
КонецЦикла;
Возврат Истина;

// стало: 0,1-0,3 с; на сервере или в толстом клиенте
Возврат СтрПодобнаПоРегулярномуВыражению(Стр, "[0-9]+");

Две детали к этой замене, обе проверены прогоном. СтрПодобнаПоРегулярномуВыражению сверяет строку целиком: "12а" и "а12" по шаблону [0-9]+ дают Ложь. И шаблон нужен именно [0-9]: \d пропускает арабские цифры, а цикл по кодам 48-57 их не пропускал. На пустой строке цикл возвращает Истина, а регулярка Ложь, так что для пустой строки нужен [0-9]*.

Свой код на BSL против штатной функции: CRC32 в тысячи раз, регулярка в 6-13 раз, условия замера

Граница отсюда такая. Пока работа сводится к вызовам платформы (запрос, хеш, архив, регулярка, JSON), встроенного языка хватает. Когда работа превращается в цикл по байтам или символам большого объёма, первым делом ищите штатную функцию, которая сделает этот цикл за вас. Нет её - выбор между компонентой и сервисом. Практики в обсуждении конструктора внешних компонент сходятся в одном: сервис по HTTP проще писать и отлаживать, а компонента оправдана для оборудования на рабочем месте и для мелочи, ради которой отдельный процесс никто держать не будет.

Чего в платформе по-прежнему нет

Обратная проверка. Новый TCPСоединение, Новый СокетСервер, Новый UDPСоединение и Новый TCPСокет отвечают "Тип не определен": произвольного TCP и UDP нет, слушающего сокета тоже. У ЧтениеPDF по синтакс-помощнику есть проверка подписей и получение вложений, методов для текста страниц нет. И FileSystemObject, ADODB.Stream, MSXML - компоненты Windows, на Linux-сервере их взять неоткуда, хотя замена на встроенный язык для всех трёх есть давно.

Для масштаба я разметил глазами полку "Разработка внешних компонент": 477 карточек. Однозначно закрыты платформой задачи семи из них: компонента регулярных выражений, два WebSocket-клиента, распаковщик RAR, ZIP-архиватор, MD5 и ImageMagick для базовых операций над картинками. Ещё около девяти закрыты частично: пауза, но только на сервере, gzip, но только распаковка, буфер обмена. Остальная полка про оборудование, камеры, форматы и подписи, куда платформа не пришла. Свежих среди закрытых две: ZIP-архиватор 2025 года и WebSocket-клиент из вступления.

Ревизор костылей: как я считал

Чтобы не искать такие места поиском по тексту, я собрал обработку "Ревизор костылей: что в вашем коде платформа уже умеет сама". Она выгружает конфигурацию конфигуратором сама или берёт готовую выгрузку, проверяет код расширений и, по желанию, внешних обработок из справочника, и открывает отчёт.

  • Код разбирается лексером, который отличает код от комментария и строки. Поэтому VBScript.RegExp в закомментированном примере и "Msxml2.DOMDocument" в тексте сообщения об ошибке находками не становятся, а COM-объект засчитывается только как аргумент Новый COMОбъект(...).
  • Модуль без признаков костыля лексером не разбирается. Из 7 157 модулей типовой разбор понадобился 137, проверка всей конфигурации заняла 223 секунды на сервере с включённой отладкой, плюс 249 секунд выгрузки конфигуратором.
  • По каждой находке отчёт пишет, доступна ли замена на месте: мешает тонкий клиент, нет на сервере, нужна платформа новее или, только для побитовых функций, мешает режим совместимости. Контекст строки берётся из директивы процедуры, а для общих модулей из их свойств в выгрузке.

В каталоге 20 правил. У каждой замены в отчёте указаны версия, где она работает, пример "было-стало" и чем она проверена: прогоном или синтакс-помощником. Правила двух уровней: "Заменить", где признак однозначный, и "На проверку", где правило судит косвенно. На типовой все 4 находки уровня "Заменить" верные, у "На проверку" верных 20 из 26. Версия на обычных формах лежит в той же карточке вторым файлом.

Мне интересно, где проходит ваша граница. Я считаю, что проверку строк и разбор данных в собственных доработках пора уносить на сервер и переводить на регулярки, даже если ради этого приходится добавить серверный вызов. Есть ли у вас код, где цикл по символам на клиенте оправдан чем-то, кроме привычки?

Обработка из этой статьи: Ревизор костылей: что в вашем коде платформа уже умеет сама.

Другие наши инструменты:

Вступайте в нашу телеграмм-группу Инфостарт

регулярные выражения 1С СтрНайтиПоРегулярномуВыражению ВызватьПаузу ЧтениеФайлаАрхива СредстваБуфераОбмена ГенераторСлучайныхПаролей WebSocket 1С режим совместимости внешние компоненты 1С 8.3.27 ХешированиеДанных COMОбъект Linux

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    13226    104    0    

78

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    83158    431    171    

361

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    285468    1606    423    

1219

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    16668    63    62    

73

Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    44111    122    54    

135

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    76708    147    41    

154

Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.

18300 руб.

11.09.2026    3656    5    0    

10

Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    28690    103    46    

107
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ninel_S 214 13.10.26 16:29 Сейчас в теме
Коллега, после таких цифр понятно, что соревноваться с бинарной реализацией платформы бессмысленно - она всегда впереди.
Поставила "плюсик", спасибо, мне нравится читать Ваши публикации.
2. nedomolkov.ivan 485 14.10.26 12:36 Сейчас в теме
( 1 ) Спасибо, Нинель! Да, свой цикл на встроенном языке против метода платформы почти всегда проигрывает. Но в статье есть и обратные случаи, где замена не работает, так что слепо менять всё подряд тоже не стоит.
Для отправки сообщения требуется регистрация/авторизация