Обновление сильно устаревших редакций «1С:Управление торговлей 10.3» (например, с версии 10.3.50.1 на 10.3.70.2) часто сопровождается техническими сложностями. Одной из наиболее распространенных проблем является ошибка компиляции: «Процедура или функция с указанным именем не определена (СтрНачинаетсяС)». Рассмотрим подробно, почему это происходит, как настроить среду разработки и какую последовательность обновлений выбрать, чтобы минимизировать затраты времени.
Давайте проанализируем ситуацию. Функция СтрНачинаетсяС является встроенным методом платформы «1С:Предприятие», который был добавлен в версии 8.3.6. Основная сложность заключается в том, что конфигурация «Управление торговлей 10.3» исторически разрабатывалась под платформу 8.2 и долгое время сохраняла режим совместимости «Версия 8.2.13».
Если в свойствах вашей конфигурации установлен режим совместимости ниже 8.3.6, платформа игнорирует наличие этой функции в ядре, даже если вы используете современную версию платформы (например, 8.3.18 или 8.3.22). В последних релизах УТ 10.3 (начиная с 10.3.60+) разработчики начали активно внедрять модули для работы с маркировкой (ИС МП, Честный знак, ГИСМ), где используется современный синтаксис. При попытке выполнить обновление через объединение конфигураций (файл .cf), код обновляется, а системные настройки режима совместимости иногда остаются прежними, что и приводит к ошибке при попытке запуска или компиляции.
Если ваша база подключена к хранилищу конфигурации, просто изменить свойство в окне свойств конфигурации не получится. Проанализируем системное сообщение: «Для изменения режима совместимости требуется Захват В Хранилище: Подсистема.ГоИС...». Это происходит потому, что режим совместимости влияет на всю структуру метаданных, включая все подсистемы.
Разберем по шагам, как правильно изменить режим совместимости в условиях работы с хранилищем:
ГоИС, ИСМП и другие, которые упоминались в ошибке.Режим совместимости в значение «Не использовать» или как минимум «Версия 8.3.6». Для стабильной работы современных механизмов маркировки рекомендуется устанавливать режим «Версия 8.3.12» или выше.После этих действий ошибка СтрНачинаетсяС исчезнет, так как платформа разрешит использование современных строковых функций.
Если по каким-то причинам (например, из-за несовместимости старого торгового оборудования) вы не можете повысить режим совместимости выше 8.2.13, вам придется адаптировать код типового обновления вручную. Рассмотрим пример, как можно заменить проблемную функцию на универсальный код, понятный старым версиям платформы.
Вместо использования СтрНачинаетсяС, проанализируем ситуацию и применим функцию Найти или Лев:
// Было (вызывает ошибку в режиме 8.2.13):
Если СтрНачинаетсяС(ВРегИмяТаблицы, ВРег("РегистрСведений")) Тогда
// Логика обработки
КонецЕсли;
// Стало (универсальный вариант):
Если Найти(ВРегИмяТаблицы, ВРег("РегистрСведений")) = 1 Тогда
// Логика обработки
КонецЕсли;
Такая замена полностью эквивалентна по результату, но не требует изменения глобальных настроек конфигурации. Однако помните, что при следующем обновлении вам снова придется вносить эти правки в типовой код.
Посмотрим на список релизов, которые предложил «калькулятор обновлений». Установка 11-19 промежуточных обновлений через файлы .cfu — это очень трудоемкий процесс, который может занять целый рабочий день. Разберем, как можно ускорить этот процесс.
Для перехода с 10.3.50 на 10.3.70 не обязательно заходить на каждую «ступеньку». В 1С существуют так называемые «узловые релизы». Мы можем пропустить значительную часть промежуточных версий, если будем использовать полные файлы конфигурации (.cf).
Рассмотрим примерную сокращенную цепочку переходов, проверенную практикой:
Важное правило: при использовании «прыжков» через релизы, после каждого объединения с .cf файлом обязательно запускайте базу в режиме «1С:Предприятие». Необходимо дождаться завершения всех обработок обновления данных (заполнение новых регистров, конвертация идентификаторов маркировки). Если этого не сделать и продолжить накатывать .cf файлы один за другим, вы рискуете получить «битую» базу с незаполненными ключевыми данными, что приведет к критическим ошибкам в учете.
Проанализируем финальный алгоритм безопасного обновления:
.cf нужного узлового релиза.Режим совместимости. Если он не обновился автоматически до нужного уровня, измените его вручную через рекурсивный захват в хранилище, как мы разобрали выше.Используя этот системный подход, вы сможете успешно перевести конфигурацию на актуальный релиз, избежав ошибок компиляции и сохранив целостность данных.