Работа с системными перечислениями на платформах 1С 8.0-8.5, включая смартфоны

27.11.25

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

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

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

 

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

 

 

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

Обход ограничений на системные перечисления в зависимости от способов можно разделить на 2 категории: 

  1. Обход ветвления на сервере или обычных формах. Самый простой способ.
  2. Обход ветвления на клиенте. Требует дополнительного кода и хранения значений.

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

ОБХОД ОГРАНИЧЕНИЙ НА СЕРВЕРЕ ИЛИ ОБЫЧНЫЕ ФОРМЫ

По итогу разбора полетов (учитывая многострадальный 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).

Таким образом, обход на сервере сложностей не представляет.

ОБХОД ОГРАНИЧЕНИЯ ПО СИСТЕМНЫМ ПЕРЕЧИСЛЕНИЯМ НА КЛИЕНТЕ В УФ

Для управляемых форм имеются 2 способа: 

  1. Выполнить/Вычислить. Пример кода аналогичен ситуации на сервере.
  2. Переопределение значений через переменные формы.

В этом разделе рассмотрен будет именно 2-й способ. Пример реализации этого способа для работы с диалогом выбора файлов.

&НаКлиенте

перем ВыборФайлаОткрытие, ВыборФайлаСохранение; //Переменные кэша

&НаКлиенте

Процедура ПриОткрытии(Отказ)

               //Вставить содержимое обработчика  
               // Определяем связанный тип или же исповедуем по версии 
               Попытка
                     Стр=Тип("ДиалогВыбораФайла");
               Исключение     
                     Стр = Неопределено;
               КонецПопытки;

               //Ставим заглушку на обращение к перечислениям
               Если Стр = Неопределено Тогда
                    РежимДиалогаВыбораФайла = Неопределено;
               КонецЕсли;
               //
               Если РежимДиалогаВыбораФайла = Неопределено Тогда  
                   // Установка произвольного нужного значения, когда нет типа!!!
                   ВыборФайлаОткрытие = Неопределено;
                   ВыборФайлаСохранение = Неопределено;                           
               иначе                            
                   //Кэшируем системные перечисления
                   ВыборФайлаОткрытие = РежимДиалогаВыбораФайла.Открытие; 
                   ВыборФайлаСохранение = РежимДиалогаВыбораФайла.Сохранение;
               КонецЕсли;

КонецПроцедуры

Теперь приведу пример обработки комнды:

&НаКлиенте
Процедура Тест(Команда)
   Если ВыборФайлаОткрытие = НЕОПРЕДЕЛЕНО Тогда
        Сообщить("Не поддерживается - нужен другой способ реализации диалога");
   иначе
        // Все ок - открываем файл  
        МассивАргументов = новый Массив;
        МассивАргументов.Добавить(ВыборФайлаОткрытие);
        Диалог = новый("ДиалогВыбораФайла",МассивАргументов);
        // В реальных системах использовать метод Показать() или другой асинхронный метод
        Если Диалог.Выбрать()=Ложь Тогда
             Сообщить("Не выбран файл");
        КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Изюминка в следующем: на клиенте есть возможность сохранять многие значения в переменные и они не очищаются при серверных вызовах. Более того, благодаря этому можно сохранить значения, которые нельзя передать на сервер, как в этом примере кода.

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    23889    TitanLuchs    106    

142

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

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

03.02.2025    13268    bayselonarrend    127    

67

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

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

14.01.2025    24228    dsdred    77    

140

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

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

23.06.2024    22669    bayselonarrend    22    

172

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

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

13.03.2024    12607    dsdred    22    

85

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 Бесплатно (free)

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

24.01.2024    45416    YA_418728146    35    

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

Мне это нужно было для случаев:
- На платформах ПК и смартфонов (мобильные платформы), если есть возможность настроить выборку - обойти через группировки.
- Если такого типа нет - тогда организовать простую выборку без учета группировок.
Пришлось экспериментировать для такого решения, поскольку на скрине видите сами значения по умолчанию.
Прикрепленные файлы:
11. Dima1205 140 27.11.25 16:59 Сейчас в теме
(4) Привел итоговый верный пример - руки сразу не дошли до этого...
6. qwinter 684 07.03.25 23:09 Сейчас в теме
Называть багом нежелание автора читать описание изменений платформы это мощно)))
7. Dima1205 140 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 56 09.03.25 10:07 Сейчас в теме
А разве инструкции препроцессора Клиент и Сервер только для компьютерных платформ?
Если нужно отдельно выделить мобильные платформы, то нужно использовать конкретные значения:
МобильныйКлиент, МобильныйАвтономныйСервер, МобильноеПриложениеКлиент, МобильноеПриложениеСервер.
Прикрепленные файлы:
9. Dima1205 140 09.03.25 13:25 Сейчас в теме
(8) Про препроцессор я в курсе, но как это поможет - если на мобильной платформе 8.3.6 доступны группировки, а на некоторых мобильных платформах 8.3.5 не доступны? У них будет одинаковый препроцессор...
10. Dima1205 140 14.05.25 22:30 Сейчас в теме
(8) #Если МобильноеПриложениеСервер ИЛИ МобильныйАвтономныйСервер Тогда - дополнил препроцессор в статье.
12. Dima1205 140 28.11.25 12:32 Сейчас в теме
В статью добавил заглушки для работы с системными перечислениями на клиенте без оператора Выполнить, когда перечисления не являются серверными.
Для отправки сообщения требуется регистрация/авторизация