Все способы получения системных перечислений на платформах 1С 8.x (включая мобильное приложение) из строки

21.03.25

Разработка - Механизмы платформы 1С

В статье рассматривается вопрос работы с системными перечислениями на различных платформах версии 1С 8.х. Рассматриваются способы получения значения по умолчанию или конкретного значения системного перечисления. Для мобильных приложений приведены необходимые комментарии.

При программировании собственной консоли запросов, особенно для экранов смартфонов, и поддержки платформы 1С 8.0 столкнулся со следующими неприятными особенностями старых мобильных платформ:

Этот баг был выявлен на версии платформы: 

 Для системных перечислений нет классического метода Менеджер.ИмяПеречисления.Значение как для обычных перечислений - там сразу идет ИмяПеречисления.Значение
Мне это понадобилось для организации ветвления в консоли:

  1. На платформах ПК и смартфонов (мобильные платформы), если есть возможность настроить выборку - обойти через группировки.
  2. Если нет возможности настроить группировки, тогда организовать простую выборку без учета группировок.

Поэтому встал вопрос: как получить значение системного перечисления из строки? Для системных перечислений нет описания того, как определить наличие этого перечисления на нужной версии платформы в документации. Справедливости ради, для версии 8.3.4 и старше появилась возможность получения значения системного перечисления через функцию ПредопределенноеЗначение - что отмечено в документации. 

Однако, это не единственный способ получения системных перечислений.

ПРИМЕЧАНИЕ: Статья написана в справочных целях как памятка, и также для того, чтобы закрыть этот не слишком приятный момент в документации. 

По итогу разбора полетов (учитывая многострадальный IOS), получилась следующая таблица основных способов вызова системных перечислений:

Способ Достоинства Недостатки

1. Использование внутреннего формата 1С (функции времен 1с 7.7).

Универсально для всех компьютерных платформ Не поддерживается в мобильном приложении
2. Получение значения при помощи конструкции ОписаниеТипов.  Работает везде, включая мобильное приложение. Допускает возврат только значения по умолчанию.
3. Использование оператора Вычислить или Выполнить Работает как на компьютерных платформах, так и на мобильных приложениях. IOS не поддерживает операторы Вычислить или Выполнить
4. Использование функции  ПредопределенноеЗначение Работает везде, включая мобильное приложение на платформе 8.3. Требует платформы 1с 8.3.4 и выше. (для несистемных перечислений - появилась в 1с 8.2.9). Нельзя использовать для системных перечислений на клиенте.

Примеры исходного кода первых двух способов:

//Для первого способа:
ЗначениеИзСтрокиВнутр(Значение)); 
//Для второго способа: 
//ОбходРезультатаЗапроса - генерация прямой для древней 1С платформы (мобильная - в первых версиях не был определен).
Попытка
 Массив = новый Массив;
 Массив.Добавить(Тип("ОбходРезультатаЗапроса"));
 ОписаниеТипов1 = новый ОписаниеТипов(Массив);
 Значение =  ОписаниеТипов1.ПривестиЗначение(Неопределено); 
исключение
  Значение = Неопределено;
КонецПопытки;
Сообщить(Значение);

Последние 2 способа удобно объединить в следующую конструкцию:

 //Вызов осуществляется на стороне Сервера для Управляемых форм.  
 Попытка		
		#Если Клиент ИЛИ Сервер ИЛИ ВнешнееСоединение Тогда		
			Значение_тест = Вычислить(НаименованиеПараметра); //Для компьютерных платформ!!!			
		#иначе
			Значение_тест = ПредопределенноеЗначение(НаименованиеПараметра); // Для мобильного телефона
		#КонецЕсли   			
	Исключение
		Значение_тест = Неопределено;
	КонецПопытки;

Пример результата вызова подхода 4 на экране смартфона (8.3.5.96):

Проверить код - обертка над кнопкой Выполнить (android).

Заключение: Некоторые системные перечисления можно получить при помощи сериализации или функции XMLСтрока, однако приведенные методы позволяют это сделать и с несериализуемыми типами данных.

Дополнение от 21.03.2025

Поскольку функция ПредопределенноеЗначение обращается к Серверу- использовать её для вычисления предопределенных значений на клиенте не возможно!!!

мобильная платформа Системные перечисления 1с 8.0 1с 8.1 1с 8.2 1с 8.3

См. также

Механизмы платформы 1С Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    6635    bayselonarrend    126    

60

Механизмы платформы 1С Программист Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    8704    dsdred    60    

108

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    12501    bayselonarrend    21    

164

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    8226    dsdred    18    

82

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    29401    YA_418728146    33    

73
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AlexeyChernyev 6 07.03.25 06:31 Сейчас в теме
Интересно. Только поправь пожалуйста опечатку.
Прикрепленные файлы:
2. SerVer1C 882 07.03.25 08:44 Сейчас в теме
3. user1206119 103 07.03.25 09:10 Сейчас в теме
4. SlavaKron 07.03.25 09:39 Сейчас в теме
Вы решаете ошибку при инициализации модуля? А если просто добавить такую конструкцию перед использованием сомнительного перечисления:
Если Ложь Тогда
ОбходРезультатаЗапроса = Неопределено;
КонецЕсли;
5. user1206119 103 07.03.25 10:38 Сейчас в теме
(4) Нет - это когда нужно вызвать именно системное перечисление. Для них нет классического метода Менеджер.ИмяПеречисления.Значение как для обычных перечислений - там сразу идет ИмяПеречисления.Значение. И здесь представлены решения, которые удалось экспериментально определить.

Мне это нужно было для случаев:
- На платформах ПК и смартфонов (мобильные платформы), если есть возможность настроить выборку - обойти через группировки.
- Если такого типа нет - тогда организовать простую выборку без учета группировок.
Пришлось экспериментировать для такого решения, поскольку на скрине видите сами значения по умолчанию.
Прикрепленные файлы:
6. qwinter 684 07.03.25 23:09 Сейчас в теме
Называть багом нежелание автора читать описание изменений платформы это мощно)))
7. user1206119 103 08.03.25 02:47 Сейчас в теме
(6) Конкретно здесь - да, это баг этой версии:
Скрин с нормальной версии 8.3.5 (8.3.5.1570) во вложении - там эти типы на мобильной платформе есть. Про более новые тоже молчу.
Если такое было бы в 8.3.4 (там вообще объекта Запрос нет в коде мобильной платформы), а в 8.3.5 на всех платформах - я бы про слово баг не писал.
Я здесь привел просто обзор всех способов получения системных перечислений с целью систематизировать процесс с учетом использования смартфонов. Если бы на IOS нормальный сделали Выполнить и Вычислить, то и статью можно было бы не писать.
А про недостаток документации - это то, что такие вещи не описаны в явном виде. Например,если в MSDN мне надо искать сведения про нужные свойства js - то для событий там описано как для старых версий IE, для Edge. Описываются все методы вызова.
А в 1С такого увы...
Пример этого УВЫ - в скрине с сравнением описаний функции НачатьПомещениеФайла на 2-х версиях платформы 8.3.
Прикрепленные файлы:
8. comptr 36 09.03.25 10:07 Сейчас в теме
А разве инструкции препроцессора Клиент и Сервер только для компьютерных платформ?
Если нужно отдельно выделить мобильные платформы, то нужно использовать конкретные значения:
МобильныйКлиент, МобильныйАвтономныйСервер, МобильноеПриложениеКлиент, МобильноеПриложениеСервер.
Прикрепленные файлы:
9. user1206119 103 09.03.25 13:25 Сейчас в теме
(8) Про препроцессор я в курсе, но как это поможет - если на мобильной платформе 8.3.6 доступны группировки, а на некоторых мобильных платформах 8.3.5 не доступны? У них будет одинаковый препроцессор...
Оставьте свое сообщение