Почему в 1С:Предприятие не работают функции СтрРазделить и СтрНайти и выводится ошибка «Неопознанный оператор»?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке в платформе 1С:Предприятие 8.3 разработчики иногда сталкиваются с парадоксальной ситуацией: в Синтаксис-помощнике описаны встроенные строковые функции, такие как СтрРазделить, СтрНайти, СтрСоединить или СтрШаблон, однако при синтаксическом контроле и проверке модуля система выдает ошибку о неопознанном операторе. В этой статье мы подробно разберем причину этого расхождения и рассмотрим пути решения проблемы.

Причина возникновения ошибки синтаксиса

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

Функции работы со строками СтрНайти, СтрРазделить, СтрСоединить, СтрШаблон, СтрНачинаетсяС, СтрЗаканчиваетсяНа и СтрСравнить были введены в платформу начиная с версии 8.3.6. Если в конфигурации установлен режим совместимости с версией 8.3.5 или ниже (включая все релизы 8.2 и 8.1), компилятор полностью отключает данные функции для обеспечения обратной совместимости.

Способ 1. Изменение режима совместимости конфигурации

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

  1. Откроем конфигуратор и перейдем в дерево конфигурации.
  2. Нажмем правой кнопкой мыши на корень конфигурации и выберем пункт Свойства.
  3. Найдем в палитре свойств параметр Режим совместимости.
  4. Изменим значение с устаревшей версии (например, Версия 8.2.16) на значение Не использовать или на версию Версия 8.3.6 и выше.
  5. Сохраним изменения и обновим конфигурацию базы данных.

Важное замечание: Перевод конфигурации в режим Не использовать или повышение версии режима совместимости требует обязательного предварительного тестирования. При этом могут измениться механизмы управляемых форм, поведение некоторых конструкций языка запросов и оптимизатора СУБД, а также прекратить работу методы, объявленные устаревшими.

Особенности работы в расширениях и внешних обработках

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

Расширения конфигурации: У каждого расширения есть собственное свойство Режим совместимости. Если в основной конфигурации режим совместимости отключен, но в самом расширении задан режим ниже 8.3.6, вызов функций СтрРазделить и СтрНайти внутри модулей расширения вызовет ошибку синтаксиса.

Внешние обработки и отчеты: Внешние файлы выполняются в контексте той конфигурации, в которой они открыты, и подчиняются правилам её режима совместимости.

Способ 2. Обходные решения без изменения режима совместимости

Если режим совместимости конфигурации принудительно зафиксирован регламентом и его нельзя менять, рассмотрим альтернативные методы обработки строк.

1. Реализация на базовых функция платформы: Для поиска и обработки строк можно использовать стандартные функции, доступные во всех версиях платформы: Найти, Сред, Лев, Прав, СтрДлина, СтрЗаменить.

2. Использование функций Библиотеки Стандартных Подсистем (БСП): В конфигурациях, созданных на базе БСП, вместо встроенной функции СтрРазделить применяется функция общего модуля СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок().

Посмотрим на пример разбиения строки на массив с помощью метода БСП:


ИсходнаяСтрока = "Яблоко,Груша,Апельсин";
Разделитель = ",";
МассивРезультат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсходнаяСтрока, Разделитель);

Таким образом, проверка свойства Режим совместимости позволяет быстро устранить неопознанные операторы встроенных строковых функций или выбрать корректный альтернативный метод разработки.

← На главную