При попытке установить новую версию конфигурации, например, типовую УНФ 8 3.0.4, мы можем столкнуться с ситуацией, когда она требует более новую версию технологической платформы 1С:Предприятие (например, 8.3.21), в то время как наша текущая платформа (например, 8.3.20) не может быть обновлена по каким-либо причинам. Эта проблема является достаточно распространенной, и в данной статье мы рассмотрим различные подходы к ее решению, включая программные методы обхода ограничений и альтернативные стратегии. Важно понимать, что обход таких ограничений не является рекомендованным фирмой "1С" способом работы и может повлечь за собой определенные риски, о которых мы также подробно поговорим.
Прежде чем погрузиться в детали, давайте выясним, почему вообще возникают требования к версии платформы. Конфигурации 1С разрабатываются с учетом возможностей конкретных версий технологической платформы. Каждая новая версия платформы "1С:Предприятие 8" вносит изменения, расширяет функционал, исправляет ошибки и уязвимости, а также может использовать новые механизмы работы с данными или интерфейсом. Разработчики конфигураций адаптируют свой код под эти изменения, что делает старые версии платформы несовместимыми с новыми версиями конфигураций. Конфигурация просто не сможет использовать необходимый функционал или даже не запустится.
Например, в платформе 8.3.21 были расширены возможности работы с PDF-документами (просмотр, печать, проверка цифровой подписи), реализован объект ДокументPDF, а также добавлены новые возможности для работы с диаграммой Ганта и HTTP-запросами. Если конфигурация УНФ 8 3.0.4 использует эти новые возможности, то для ее корректной работы требуется платформа 8.3.21 или выше.
Фирма "1С" обычно рекомендует использовать актуальные версии платформы для обеспечения стабильной работы, безопасности и использования всех возможностей конфигурации. Обход ограничений версии платформы, как правило, не является поддерживаемым способом работы и может привести к серьезным проблемам. Давайте подробнее рассмотрим риски и последствия такого подхода:
С учетом этих рисков, мы настоятельно рекомендуем использовать обходные пути только на тестовых базах и как временное решение. Для рабочих систем всегда предпочтительно обновлять платформу до рекомендованной версии.
Платформа "1С:Предприятие" имеет механизм "режима совместимости", который позволяет запускать конфигурации, разработанные в более младших версиях, на новой платформе без внесения изменений в конфигурацию и реструктуризации данных. Это свойство указывается в конфигураторе (в свойствах корневого элемента конфигурации) и определяет, с какой версией платформы конфигурация должна быть совместима. Установка режима "Не использовать" означает, что конфигурация будет использовать все возможности текущей установленной платформы. Однако, в нашем случае проблема заключается не в режиме совместимости самой конфигурации, а в явной проверке версии платформы, которая не дает конфигурации запуститься или даже загрузиться. Неосмотрительное изменение режима совместимости может привести к неработоспособности конфигурации или потере данных.
Если обновление платформы не является возможным вариантом, мы можем попытаться "обмануть" систему проверки версии, используя расширения конфигурации. Этот подход позволяет вносить изменения в логику работы стандартных модулей без снятия конфигурации с поддержки, что является менее рискованным, чем прямые изменения в основной конфигурации. Расширения используют механизм "перехвата" вызова процедур и функций (директива &Вместо), позволяя подменить стандартную логику своей. Для этой задачи можно использовать методику переноса доработок в расширения для возврата конфигурации на стандартную поддержку.
Давайте рассмотрим несколько примеров таких модификаций, которые были предложены на форуме и показали свою эффективность.
Одной из ключевых проверок является функция, которая возвращает список допустимых версий платформы. Мы можем перехватить ее и изменить возвращаемое значение, чтобы включить нашу текущую версию платформы.
Пример 1: Изменение функции МинимальнаяВерсияПлатформыДляИспользования в общем модуле СтандартныеПодсистемыСервер (на примере Бухгалтерии 3.0.190.22, требующей 8.3.27.1688, но работающей на 8.3.27.1644):
// В расширении, в новом общем модуле или модуле расширения с директивой &Вместо
&Вместо("МинимальнаяВерсияПлатформыДляИспользования")
Функция Доработка_МинимальнаяВерсияПлатформыДляИспользования
Версии = Новый СписокЗначений;
Версии.Добавить("8.3.24", "8.3.24.1548; 8.3.25.1286; 8.3.26.1498; 8.3.27.1244");
Версии.Добавить("8.3.25", "8.3.25.1286; 8.3.26.1498; 8.3.27.1244");
Версии.Добавить("8.3.26", "8.3.26.1498; 8.3.27.1244");
//моё+ вместо 8.3.27.1688 устанавливаю 8.3.27.1644
Версии.Добавить("8.3.27", "8.3.27.1644"); // Здесь указываем текущую версию платформы
//моё-
Возврат Версии;
КонецФункции
В этом примере мы явно указываем, что для версии 8.3.27 допустима сборка 8.3.27.1644, даже если конфигурация изначально требовала более новую сборку 8.3.27.1688.
Пример 2: Модификация функции МинимальнаяВерсияПлатформы в общем модуле ОбщегоНазначения:
// В расширении
Общий модуль ОбщегоНазначения
&Вместо("МинимальнаяВерсияПлатформы")
Функция ВП_МинимальнаяВерсияПлатформы
СистемнаяИнформация = Новый СистемнаяИнформация;
Возврат СистемнаяИнформация.ВерсияПриложения; // Возвращаем текущую версию платформы
КонецФункции
Здесь мы делаем так, чтобы минимально допустимая версия платформы всегда совпадала с текущей установленной версией, эффективно отключая проверку на минимальный порог.
Некоторые функции конфигурации могут активно проверять версию платформы для определения доступности специфического функционала. Например, работа с PDF-документами, которая была расширена в платформе 8.3.21.
Пример: Модификация функции ДоступнаРаботаСоСтраницамиPDFДокумента в модуле РаботаСФайламиБЭД:
// В расширении
&Вместо("ДоступнаРаботаСоСтраницамиPDFДокумента")
Функция Доработка_ДоступнаРаботаСоСтраницамиPDFДокумента
СистемнаяИнформация = Новый СистемнаяИнформация;
ВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения;
//моё+ вместо 8.3.27.1688 устанавливаю 8.3.27.1644
Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.27.1644") >= 0; // Сравниваем с нашей текущей версией
//моё-
КонецФункции
В этом случае мы говорим системе, что функционал доступен, если текущая версия платформы (в нашем примере 8.3.27.1644) соответствует или выше указанной в коде, игнорируя более высокие требования типовой конфигурации.
Даже если мы обойдем основные проверки, система может продолжать выдавать предупреждения о нерекомендуемой версии платформы, что может мешать работе пользователей. Мы можем подавить эти сообщения.
Пример 1: Модификация процедуры ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы в модуле СтандартныеПодсистемыКлиент:
// В расширении
&Вместо("ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы")
Процедура Доработка_ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы(Результат, Параметры)
//моё+ добавлено
Параметры.Отказ = Ложь; // Принудительно разрешаем продолжение
//моё-
Если Результат <> "Продолжить" Тогда
Параметры.Отказ = Истина;
Иначе
Параметры.ПолученныеПараметрыКлиента.Вставить("ПоказатьНерекомендуемуюВерсиюПлатформы");
КонецЕсли;
ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения);
КонецПроцедуры
В этом случае мы устанавливаем Параметры.Отказ = Ложь (или Параметры.Отказ = Истина;, чтобы просто закрыть окно без действия), чтобы предотвратить блокировку работы пользователя и принудительно разрешить продолжение работы, несмотря на предупреждение.
Пример 2: Другой вариант подавления сообщения:
// В расширении
&Вместо("ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы")
Процедура _ПослеЗакрытияФормыНерекомендуемойВерсииПлатформы(Результат, Параметры)
//Доработки
Параметры.Отказ = Истина; // Этот вариант просто отключает показ и блокировку
//КонецДоработок
Если Результат <> "Продолжить" Тогда
Параметры.Отказ = Истина;
Иначе
Параметры.ПолученныеПараметрыКлиента.Вставить("ПоказатьНерекомендуемуюВерсиюПлатформы");
КонецЕсли;
ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения);
КонецПроцедуры
В этом примере установка Параметры.Отказ = Истина; в начале процедуры блокирует дальнейшую обработку сообщения и предотвращает его появление.
Наиболее агрессивный, но иногда необходимый способ — это полностью отключить логику проверки версии платформы при старте системы.
Пример 1: Модификация функции ПараметрыПроверкиВерсииПлатформыПриЗапуске в модуле ПолучениеОбновленийПрограммыВызовСервера:
// В расширении
&Вместо("ПараметрыПроверкиВерсииПлатформыПриЗапуске")
Функция Доработка_ПараметрыПроверкиВерсииПлатформыПриЗапуске
//все типовые строки кода в данной функции удаляем и заменяем на следующие
Результат = Новый Структура;
Результат.Вставить("Продолжить" , Ложь);
Результат.Вставить("ЭтоАдминистраторСистемы", Ложь);
Результат.Продолжить = Истина; // Принудительно разрешаем продолжение
Возврат Результат;
КонецФункции
Мы полностью перехватываем функцию, которая определяет параметры проверки, и всегда возвращаем структуру, указывающую, что можно продолжать работу, независимо от версии платформы. Это может быть очень эффективно, если проблема возникает на самом раннем этапе запуска.
Пример 2: Аналогичный, более лаконичный вариант:
// В расширении
&Вместо("ПараметрыПроверкиВерсииПлатформыПриЗапуске")
Функция Расширение1_ПараметрыПроверкиВерсииПлатформыПриЗапуске
Результат = Новый Структура;
Результат.Вставить("Продолжить" , Ложь);
Результат.Вставить("ЭтоАдминистраторСистемы", Ложь);
Результат.Продолжить = Истина;
Возврат Результат;
КонецФункции
В некоторых случаях, можно попытаться уменьшить требования к версии платформы непосредственно в параметрах базовой функциональности.
Пример: Модификация процедуры ПриОпределенииОбщихПараметровБазовойФункциональности:
// В расширении
&Вместо("ПриОпределенииОбщихПараметровБазовойФункциональности")
Процедура Расш1_ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры)
ОбщиеПараметры.РекомендуемыйОбъемОперативнойПамяти = 3;
ОбщиеПараметры.МинимальнаяВерсияПлатформы = "8.3.24.1467; 8.3.25.1286"; // Указываем текущую или более старую версию
ОбщиеПараметры.РекомендуемаяВерсияПлатформы = "8.3.24.1548; 8.3.25.1286"; // Указываем текущую или более старую версию
КонецПроцедуры
Здесь мы явно задаем параметры МинимальнаяВерсияПлатформы и РекомендуемаяВерсияПлатформы, чтобы они соответствовали нашей текущей платформе или были ниже, чем требует конфигурация. Это может помочь на этапах, когда конфигурация пытается определить свои требования к среде.
ИнформацияОВерсияхПлатформыЕще один способ "обмануть" систему при запросе информации о требуемых версиях платформы:
// В расширении
Общий модуль ПолучениеОбновленийПрограммы
&Вместо("ИнформацияОВерсияхПлатформы")
Функция ВП_ИнформацияОВерсияхПлатформы
Результат = Новый Структура;
Результат.Вставить("МинимальнаяВерсияПлатформы" , "");
Результат.Вставить("РекомендуемаяВерсияПлатформы", "");
СистемнаяИнформация = Новый СистемнаяИнформация;
Результат.МинимальнаяВерсияПлатформы =СистемнаяИнформация.ВерсияПриложения; // Возвращаем текущую
Результат.РекомендуемаяВерсияПлатформы =СистемнаяИнформация.ВерсияПриложения; // Возвращаем текущую
Возврат Результат;
КонецФункции
Этот код заставляет систему "думать", что текущая версия платформы является как минимальной, так и рекомендуемой, эффективно игнорируя реальные требования конфигурации.
Помимо программного обхода ограничений, существуют и другие, менее рискованные, но не всегда применимые варианты:
Установка требуемой версии платформы 1С параллельно: Платформа "1С:Предприятие 8.3" позволяет устанавливать несколько версий платформы на одном компьютере. Это наиболее надежный и рекомендуемый способ. Вы можете установить платформу 8.3.21 (или выше) рядом с вашей текущей 8.3.20. При запуске информационной базы через 1С:Предприятие или Конфигуратор, мы можем явно указать, какую версию платформы использовать для конкретной базы данных. Это может быть полезно для тестирования или для работы с разными базами, требующими разных версий платформы. Однако для экономии места старые версии рекомендуется удалять вручную, если они больше не нужны.
Использование более старого релиза конфигурации: Если у вас нет возможности обновить платформу, а программные методы обхода кажутся слишком рискованными, мы можем рассмотреть вариант использования более старой версии УНФ, которая гарантированно работает на вашей текущей платформе 8.3.20. Этот подход, хотя и не дает всех преимуществ новой версии конфигурации, является наиболее безопасным с точки зрения стабильности.
Для минимизации подобных проблем в будущем, рекомендуем придерживаться следующих практик:
В этой статье мы подробно рассмотрели проблему обхода ограничений по версии платформы 1С:Предприятие при работе с новыми версиями конфигураций, таких как УНФ 8. Мы выяснили, что оптимальным и наиболее безопасным решением всегда является обновление технологической платформы до требуемой версии. Однако, если по каким-либо причинам это невозможно, мы изучили несколько программных методов с использованием расширений, которые позволяют временно обойти эти проверки. Мы также обсудили альтернативные стратегии, такие как использование более старой версии конфигурации или параллельная установка нескольких версий платформы. При необходимости можно использовать инструмент для анализа конфигураций и расширений на наличие ошибок.
Критически важно помнить о значительных рисках, связанных с обходом стандартных механизмов проверки версии платформы. Эти риски включают нестабильную работу, потерю данных, ошибки в учете и отсутствие официальной поддержки. Поэтому, если мы вынуждены прибегать к таким решениям, необходимо действовать с максимальной осторожностью, проводить все эксперименты исключительно на тестовых базах и рассматривать их как временные меры до момента, когда станет возможным обновление платформы до рекомендованной версии.