Имя: Пароль:
1C
 
Экранирование кода в зависимости от совместимости конфигурации
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) Это, да. :)
Закон Брукера: Даже маленькая практика стоит большой теории.