|   |   | 
| 
 | Экранирование кода в зависимости от совместимости конфигурации | ☑ | ||
|---|---|---|---|---|
| 0
    
        aspirator23 21.12.15✎ 10:07 | 
        В новых платформах есть новые методы языка.
 Например СтрНайти(), вместо старой Найти(). Есть ли способ экранировать "новый" код, "ходить" по разным веткам кода, в программах, которые хотя и запускаются на новых платформе( 8.3), но стоит режим совместимости с 8.2(получаем ошибку компиляции)? Инструкции препроцессору более общие, не позволяют разделить совместимость. Простой выход - не использовать новые методы. | |||
| 1
    
        Мимохожий Однако 21.12.15✎ 10:11 | 
        Сам себе и ответил.     | |||
| 2
    
        aspirator23 21.12.15✎ 10:12 | 
        Собственно аналогичная проблема - запуск универсальных обработок на разных платформах.     | |||
| 3
    
        Мимохожий Однако 21.12.15✎ 10:13 | 
        У каждой конфигурации есть имя и свойства. Можно ориентироваться на это.     | |||
| 4
    
        aspirator23 21.12.15✎ 10:15 | 
        (3) Это так. Но как, зная это, экранировать код?     | |||
| 5
    
        vasbur 21.12.15✎ 10:21 | 
        (0) "Выполнить", других способов не знаю     | |||
| 6
    
        aspirator23 21.12.15✎ 10:23 | 
        (5) Спасибо. Применять конечно можно с оглядкой, но хоть какое - то решение.     | |||
| 7
    
        Лефмихалыч 21.12.15✎ 10:23 | 
        (0) Вот это в какой-нибудь ОбщегоНазначения засунь
 Функция ЭтоВосемьТриСемь() Экспорт Результат = Истина; Попытка СтрНайти("123", "1"); Исключение Результат = Ложь; КонецПопытки; Возврат Результат; КонецФункции | |||
| 8
    
        Лефмихалыч 21.12.15✎ 10:25 | 
        а, замес в том, чтобы оно еще и компилировалось. Тогда только выполнить, но уж лучше пусть компилятор при сохранении ругается, чем Выполнить()...     | |||
| 9
    
        aspirator23 21.12.15✎ 10:25 | 
        В общем не пробовал, но в обработке ПопыткаИсключение не спасает: падает с ошибкой компиляции     | |||
| 10
    
        Fragster гуру 21.12.15✎ 10:27 | 
        (7)
 ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject) РежимСовместимости (CompatibilityMode) Использование: Только чтение. Описание: Тип: РежимСовместимости. Показывает, установлен ли режим совместимости конфигурации с платформой версии 8.1 или 8.2.13, или 8.2.16. Доступность: Сервер, толстый клиент, внешнее соединение. -------------------------------------------------------------------------------- | |||
| 11
    
        Fragster гуру 21.12.15✎ 10:27 | 
        РежимСовместимости (CompatibilityMode)
 Значения Версия8_1 (Version8_1) Версия8_2_13 (Version8_2_13) Версия8_2_16 (Version8_2_16) Версия8_3_1 (Version8_3_1) Версия8_3_2 (Version8_3_2) Версия8_3_3 (Version8_3_3) Версия8_3_4 (Version8_3_4) Версия8_3_5 (Version8_3_5) НеИспользовать (DontUse) Описание: Некоторые усовершенствования, внесенные в текущую версию, могут вызвать конфликт с существующими конфигурациями, разработанными на более ранних версиях платформы. Использование данного перечисления позволяет отключить эти усовершенствования и использовать ранее разработанные конфигурации без внесения каких-либо исправлений. Доступность: Сервер, толстый клиент, внешнее соединение. См. также: ОбъектМетаданныхКонфигурация, свойство РежимСовместимости ПеречислимыеСвойстваОбъектовМетаданных, свойство РежимСовместимости -------------------------------------------------------------------------------- Методическая информация | |||
| 12
    
        Лефмихалыч 21.12.15✎ 10:28 | 
        (11) да не в этом дело     | |||
| 13
    
        aspirator23 21.12.15✎ 10:28 | 
        (11) Тут проблема в другом. Совместимость и версию платформы мы имеем. Как зная их экранировать код?     | |||
| 14
    
        mikecool 21.12.15✎ 10:30 | 
        код - в макеты, в зависимости от версии брать нужный макет и как то Выполнить 
 :) | |||
| 15
    
        ЧеловекДуши 21.12.15✎ 10:30 | 
        (0) Можно, но только в разных модулях В разных формах... 
 Т.е. писать так, что бы все выполнялось в различных модулях, в зависимости от версии :) | |||
| 16
    
        vde69 21.12.15✎ 10:31 | 
        (13) 
 если Версия(Версия8_2_13) тогда делаемпоПравиламВерсия8_2_13 () Иначеесли Версия(Версия8_3_3) тогда делаемпоПравиламВерсия8_3_3 () конецесли | |||
| 17
    
        Fragster гуру 21.12.15✎ 10:32 | 
        (13) не использовать новые возможности. или поставить в системных требованиях минимальную версию платформы, как делает фирма 1с. 
 Один раз, когда писал обработку для БП 2.0 и 3.0 одновременно - использовал выполнить. | |||
| 18
    
        aspirator23 21.12.15✎ 10:32 | 
        (14) да макет тоже решение. Правда все через Выполнить     | |||
| 19
    
        aspirator23 21.12.15✎ 10:33 | 
        (16) Скорее всего будет тоже ошибка компиляции.     | |||
| 20
    
        aspirator23 21.12.15✎ 10:34 | 
        (15) Формы, модули скорее всего не спасут. Они тоже не будут компилироваться.     | |||
| 21
    
        vde69 21.12.15✎ 10:41 | 
        (19) точно не будет если сделаешь несколько общих модулей типа МодульВерсия8_2_13
 внутрь модулей засунешь функция НайтиСтроку() и вызовы будешь использовать так если Версия(Версия8_2_13) тогда МенеджерМодуля = делаемпоПравиламВерсия8_2_13 конецесли МенеджерМодуля.НайтиСтроку() | |||
| 22
    
        cw014 21.12.15✎ 10:42 | 
        Обратной совместимости никто не гарантировал     | |||
| 23
    
        vde69 21.12.15✎ 10:42 | 
        если Версия(Версия8_2_13) тогда
 МенеджерМодуля = МодульВерсия8_2_13 конецесли МенеджерМодуля.НайтиСтроку() | |||
| 24
    
        aspirator23 21.12.15✎ 10:44 | 
        (23) Если общие модули компилируются при первом обращении к ним то пожалуй сработает. Попробую.     | |||
| 25
    
        sash-ml 21.12.15✎ 10:45 | 
        +(7) а если так
 Функция ЭтоВосемьТриСемь() Экспорт Результат = Истина; Попытка Выполнить("СтрНайти(""123"", ""1"")"); Исключение Результат = Ложь; КонецПопытки; Возврат Результат; КонецФункции | |||
| 26
    
        aspirator23 21.12.15✎ 10:46 | 
        (25) Попытки не работают. Лефмихалыч уже предлагал.     | |||
| 27
    
        vde69 21.12.15✎ 10:48 | 
        (24) это точно работает, я так делал когда пытался реализовать модульные обновления     | |||
| 28
    
        ЧеловекДуши 21.12.15✎ 10:49 | 
        (20) Формы компилируются только при создании.
 Модули, тоже так же делают :) | |||
| 29
    
        aspirator23 21.12.15✎ 10:49 | 
        (25) Это вариант Выполнить(). Он работает. Интересный вариант в (23)     | |||
| 30
    
        aspirator23 21.12.15✎ 10:50 | 
        (28) (27) спасибо. Попробую. Тему закрываю - решение найдено.     | |||
| 31
    
        ЧеловекДуши 21.12.15✎ 10:50 | 
        (29) Все дело в скорости. :)     | |||
| 32
    
        aspirator23 21.12.15✎ 10:51 | 
        (31) Это, да. :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |