В процессе разработки и обновления конфигураций 1С программисты часто сталкиваются с парадоксальной ситуацией: одна и та же функция (например, СтрСоединить) прекрасно работает в одной информационной базе, но вызывает ошибку компиляции в другой, хотя версия платформы и релиз конфигурации кажутся идентичными. Проанализируем причины возникновения ошибки «Функция не обнаружена <<?>>СтрСоединить» и разберем пошагово методы ее устранения.
Функция СтрСоединить (и парная ей СтрРазделить) была добавлена в платформу 1С:Предприятие, начиная с версии 8.3.6.1977. До этого момента разработчикам приходилось использовать самописные алгоритмы в общих модулях. Если система выдает ошибку, это означает, что в текущем контексте выполнения компилятор не видит данную функцию в составе глобального контекста. Рассмотрим подробнее основные факторы, влияющие на это.
Это самая распространенная причина. Даже если вы используете новейшую платформу (например, 8.3.23), возможности встроенного языка могут быть ограничены настройками самой конфигурации. Режим совместимости — это свойство объекта «Конфигурация», которое заставляет новую платформу имитировать поведение старых версий.
Проанализируем ситуацию на примере УПП (Управление производственным предприятием). В старых релизах УПП режим совместимости часто установлен на «Версия 8.2.13» или «Версия 8.2.16». В этих режимах встроенная функция СтрСоединить физически отсутствует в глобальном контексте платформы.
Разберем, как проверить этот параметр:
Важно: Если в одной базе режим совместимости стоит «Не использовать» или «Версия 8.3.6» и выше, а во второй — «Версия 8.3.5» или ниже, то функция СтрСоединить работать не будет. Чтобы исправить это, необходимо либо повысить режим совместимости (что требует тщательного тестирования всей системы), либо заменить функцию на альтернативный код.
Если режимы совместимости и версии платформы действительно совпадают до последней цифры, следующим шагом мы должны рассмотреть проблему «битого» кэша. 1С активно кэширует структуру метаданных и скомпилированные модули на локальном компьютере пользователя. Иногда при обновлении конфигурации кэш не обновляется корректно, и платформа продолжает «думать», что функции не существует.
Проанализируем шаги по полной очистке кэша:
%AppData%\1C\1cv8\%LocalAppData%\1C\1cv8\eb654a...).
Иногда требуется очистка серверного кэша, если база работает в клиент-серверном варианте. Для этого необходимо перезапустить службу 1C:Enterprise 8.3 Server Agent.
Рассмотрим ситуацию, когда в конфигурации (особенно в старых версиях УПП) разработчики создали собственную функцию с таким же названием. Если в общем модуле с признаком «Глобальный» объявлена функция СтрСоединить, она может перекрывать встроенную функцию платформы в зависимости от приоритетов компиляции.
Выясним наличие дублей с помощью глобального поиска:
Ctrl + Shift + F.Функция СтрСоединить.Если поиск выдаст результат в каком-либо общем модуле, проанализируйте его. В новом релизе конфигурации разработчики могли добавить расширение или новый модуль, который конфликтует со встроенными механизмами платформы. Если самописная функция имеет другие параметры или не экспортирована должным образом, это вызовет ошибку при вызове.
Если ваша задача — обеспечить работу кода на разных версиях платформы или в конфигурациях с низким режимом совместимости, рассмотрим, как реализовать аналог СтрСоединить самостоятельно. Посмотрим на пример кода, который будет работать везде:
Функция Мой_СтрСоединить(МассивИсточник, Разделитель) Экспорт
Результат = "";
Для Каждого Элемент Из МассивИсточник Цикл
Результат = Результат + ?(Результат = "", "", Разделитель) + СокрЛП(Элемент);
КонецЦикла;
Возврат Результат;
КонецФункции
Использование такого подхода гарантирует стабильность кода независимо от того, обновлена ли платформа у клиента и какой режим совместимости установлен в базе.
Бывает так, что на компьютере установлено несколько версий платформы (например, 8.3.5.1248 и 8.3.20.1674). Если в настройках конкретной информационной базы в списке запуска жестко прописана версия 8.3.5, то даже наличие установленной версии 8.3.20 не поможет — база запустится на старом движке, где СтрСоединить еще не существовало.
Проанализируем настройки запуска:
8.3.5), замените его на 8.3 или оставьте пустым для использования последней установленной версии.Подведем итог: Ошибка «Функция не обнаружена» для СтрСоединить почти всегда связана с тем, что среда исполнения ограничена старыми стандартами. Последовательная проверка режима совместимости, очистка кэша и аудит глобального поиска позволяют решить эту проблему в 99% случаев.