При разработке в платформе 1С:Предприятие 8.3 разработчики иногда сталкиваются с парадоксальной ситуацией: в Синтаксис-помощнике описаны встроенные строковые функции, такие как СтрРазделить, СтрНайти, СтрСоединить или СтрШаблон, однако при синтаксическом контроле и проверке модуля система выдает ошибку о неопознанном операторе. В этой статье мы подробно разберем причину этого расхождения и рассмотрим пути решения проблемы.
Выясним, почему Синтаксис-помощник показывает информацию о функциях, а компилятор кода отказывается их воспринимать. Дело в том, что Синтаксис-помощник отображает справочные данные исходя из физически установленной на компьютере версии платформы 1С:Предприятие. В то же время компилятор кода и синтаксический контроль строго ориентируются на свойство корня конфигурации Режим совместимости.
Функции работы со строками СтрНайти, СтрРазделить, СтрСоединить, СтрШаблон, СтрНачинаетсяС, СтрЗаканчиваетсяНа и СтрСравнить были введены в платформу начиная с версии 8.3.6. Если в конфигурации установлен режим совместимости с версией 8.3.5 или ниже (включая все релизы 8.2 и 8.1), компилятор полностью отключает данные функции для обеспечения обратной совместимости.
Рассмотрим основной способ решения проблемы, когда у нас есть возможность редактировать свойства конфигурации.
Версия 8.2.16) на значение Не использовать или на версию Версия 8.3.6 и выше.Важное замечание: Перевод конфигурации в режим Не использовать или повышение версии режима совместимости требует обязательного предварительного тестирования. При этом могут измениться механизмы управляемых форм, поведение некоторых конструкций языка запросов и оптимизатора СУБД, а также прекратить работу методы, объявленные устаревшими.
Проанализируем случаи, когда проблема возникает в дополнительных модулях:
Расширения конфигурации: У каждого расширения есть собственное свойство Режим совместимости. Если в основной конфигурации режим совместимости отключен, но в самом расширении задан режим ниже 8.3.6, вызов функций СтрРазделить и СтрНайти внутри модулей расширения вызовет ошибку синтаксиса.
Внешние обработки и отчеты: Внешние файлы выполняются в контексте той конфигурации, в которой они открыты, и подчиняются правилам её режима совместимости.
Если режим совместимости конфигурации принудительно зафиксирован регламентом и его нельзя менять, рассмотрим альтернативные методы обработки строк.
1. Реализация на базовых функция платформы: Для поиска и обработки строк можно использовать стандартные функции, доступные во всех версиях платформы: Найти, Сред, Лев, Прав, СтрДлина, СтрЗаменить.
2. Использование функций Библиотеки Стандартных Подсистем (БСП): В конфигурациях, созданных на базе БСП, вместо встроенной функции СтрРазделить применяется функция общего модуля СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок().
Посмотрим на пример разбиения строки на массив с помощью метода БСП:
ИсходнаяСтрока = "Яблоко,Груша,Апельсин";
Разделитель = ",";
МассивРезультат = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсходнаяСтрока, Разделитель);
Таким образом, проверка свойства Режим совместимости позволяет быстро устранить неопознанные операторы встроенных строковых функций или выбрать корректный альтернативный метод разработки.