Новое в версии 4.0

Встроенный язык

Аннотации во встроенном языке
  • Для некоторых аннотаций добавлена возможность указывать параметры.
  • Добавлены новые аннотации:
    @Обработчик
    Все переопределяемые методы-обработчики необходимо помечать данной аннотацией в обязательном порядке. Это позволит «1С:Шине» осуществлять проверку корректности названий и сигнатур методов-обработчиков. В случае выявления ошибки будет выведено соответствующее сообщение. Данная функциональность позволит значительно сократить время на поиск ошибки.
    @НастройкаПриложения(Ид, Номер)
    Данной аннотацией следует помечать обработчики первоначальной настройки приложения (подробнее). Они запускаются при первой публикации проекта.
    @ОбновлениеПроекта(Ид, Номер)
    Данной аннотацией следует помечать обработчики обновления данных приложения (подробнее). Они запускаются, если при публикации проекта изменился номер версии, указанный в описании проекта (и если при этом обработчики ранее не вызывались).
    @JsonИгнорироватьСвойство

    Данной аннотацией помечается поле структуры. Является аналогом настройки НастройкиЗаписиОбъектовJson.ИгнорируемыеСвойства.

    @JsonСвойство(Имя, БезОбработки, Псевдонимы)
    Данной аннотацией помечается поле структуры. Позволяет задать свойству настройки, аналогичные следующим:

    Параметр Имя

    • НастройкиЗаписиОбъектовJson.ИспользуемыеИменаСвойств

    Параметр БезОбработки

    • НастройкиЗаписиОбъектовJson.ЗаписьСвойствБезОбработки

    Параметр Псевдонимы

    • НастройкиЧтенияОбъектовJson.ПсевдонимыСвойств
    @JsonОбъект(ПропускатьПустыеЗначения, РежимЗаписиТипа, ИгнорироватьНеизвестные)
    Данной аннотацией помечается структура. Позволяет задать объекту настройки, аналогичные следующим:

    Параметр ПропускатьПустыеЗначения

    • НастройкиЗаписиОбъектовJson.ПропускатьНеопределено
    • НастройкиЗаписиОбъектовJson.ПропускатьПустыеКоллекции

    Параметр ПропускатьПустыеЗначения

    • НастройкиЧтенияОбъектовJson.ИнициализироватьОтсутствующиеПоля
    • НастройкиЧтенияОбъектовJson.ИнициализироватьПустыеКоллекции

    Параметр РежимЗаписиТипа

    • НастройкиЗаписиОбъектовJson.РежимЗаписиТипа

    Параметр ИгнорироватьНеизвестные

    • НастройкиЧтенияОбъектовJson.ИгнорироватьНеизвестныеСвойства
Обработчики во встроенном языке
Удален предопределенный обработчик ПриОбновлении() элемента проекта Проект. Теперь можно самостоятельно задавать в модуле проекта необходимое количество методов-обработчиков, выполняющих первоначальную настройку и обновление данных приложения. Такие методы следует отмечать аннотациями @НастройкаПриложения и @ОбновлениеПроекта соответственно (подробнее).
  • Было:
    метод ПриОбновлении(ПредыдущаяВерсия: Версия?)
        если ПредыдущаяВерсия == Неопределено // Первое применение
            // Заполнение демо-данными
            если Сотрудники.ПолучитьСсылку(ЗаполнениеДемоДанными.ИдСотрудника1).ЗагрузитьОбъект() == Неопределено
                Валюты.СоздатьБазовуюВалюту()
                КурсыВалютСервер.ЗапланироватьЗагрузкуКурсовВалют()
                ЗаполнениеДемоДанными.Заполнить()
            ;
        иначе если ПредыдущаяВерсия < Версия{2.0}
            ЗаполнениеДемоДанными.ЗаполнитьНаправленияПриОбновленииНа20()
        ;
    
        ПересчитатьКлючиИРазрешенияДоступа()
    ;
  • Стало:
    @НастройкаПриложения(Ид="ЗаполнениеДемоДанными", Номер=1)
    метод ПервоначальноеЗаполнениеДанными()
        если Сотрудники.ПолучитьСсылку(ЗаполнениеДемоДанными.ИдСотрудника1).ЗагрузитьОбъект() == Неопределено
            Валюты.СоздатьБазовуюВалюту()
            КурсыВалютСервер.ЗапланироватьЗагрузкуКурсовВалют()
            ЗаполнениеДемоДанными.Заполнить()
        ;
        ПересчитатьКлючиИРазрешенияДоступа()
    ;
    
    @ОбновлениеПроекта(Ид="ОбновлениеДанных", Номер=1)
    метод ИмяМетода(ИсходнаяВерсия : Версия, ЦелеваяВерсия : Версия)
        если ИсходнаяВерсия < Версия{2.0}
            ЗаполнениеДемоДанными.ЗаполнитьНаправленияПриОбновленииНа20()
        ;
        ПересчитатьКлючиИРазрешенияДоступа()
    ;
Обработчики обновления данных приложения будут выполнены при изменении версии проекта только в том случае, если они не выполнялись ранее. «1С:Шина» перед обновлением проверит наличие таких обработчиков, и если они будут найдены, динамическое обновление будет невозможно.
Методы в пользовательских типах
В пользовательских типах (структурах, исключениях, перечислениях) добавлена возможность описывать методы, в том числе статические. В методах можно обращаться к свойствам и методам экземпляра как к контексту объекта (с помощью ключевого слова этот).
Стандартная библиотека
Тип «Url»
  • Добавлены новые методы:
    СДобавлениемПути
    СДобавлениемПути(Путь: Строка|ЧитаемыйМассив<Строка>, РаскодироватьЗначение: Булево = Истина): Url 
    Возвращает копию объекта, в котором присоединен указанный путь.
    ПолучитьСегментыПути
    ПолучитьСегментыПути(): ЧитаемыйМассив<Строка> 
    Возвращает массив сегментов пути в URL.
  • Изменен метод СПутем — добавлена поддержка указания сегментов пути.
    • Было:
      СПутем(Путь: Строка, РаскодироватьЗначение: Булево = Истина): Url
    • Стало:
      СПутем(Путь: Строка|ЧитаемыйМассив<Строка>, РаскодироватьЗначение: Булево = Истина): Url
Новые возможности позволяют:
  • устанавливать путь URL из массива сегментов пути;
  • получать сегменты пути URL в виде списка, для того чтобы совершать с ними дальнейшие манипуляции.
Тип «Момент»
Добавлены методы для получения Unix-времени:
ПолучитьОтметкуВремениUnix
ПолучитьОтметкуВремениUnix(): Число

Возвращает количество секунд, прошедших с 1970-01-01 00:00:00 UTC.

ИзОтметкиВремениUnix
ИзОтметкиВремениUnix(ОтметкаВремениUnix: Число): Момент

Возвращает момент времени, который соответствует заданному количеству секунд, прошедших с 1970-01-01 00:00:00 UTC.

Тип «КлиентHttp»
Изменены методы СоздатьЗапрос, ЗапросConnect, ЗапросDelete, ЗапросGet. ЗапросHead, ЗапросOptions, ЗапросPatch, ЗапросPost, ЗапросPut, ЗапросTrace — для параметра Url добавлен поддерживаемый тип Url.
Тип «ПользователиСервиса»
  • Для типа ПользователиСервиса добавлены новые методы:
    НайтиПоПредставлению
    НайтиПоПредставлению(Представление: Строка, ИдСпискаПользователей: Ууид): ОписаниеПользователя?
    Возвращает описание пользователя сервиса с представлением Представление или Неопределено, если пользователь не найден.
    НайтиПоЛогину
    НайтиПоЛогину(Логин: Строка, ИдСпискаПользователей: Ууид): ОписаниеПользователя?
    Возвращает описание пользователя сервиса с логином Логин или Неопределено, если пользователь не найден.
    НайтиПоТелефону
    НайтиПоТелефону(Телефон: Строка, ИдСпискаПользователей: Ууид): ОписаниеПользователя?
    Возвращает описание пользователя сервиса с номером телефона Телефон или Неопределено, если пользователь не найден.
    НайтиПоЭлектроннойПочте
    НайтиПоЭлектроннойПочте(ЭлектроннаяПочта: Строка, ИдСпискаПользователей: Ууид): ОписаниеПользователя?
    Возвращает описание пользователя сервиса с электронной почтой ЭлектроннаяПочта или Неопределено, если пользователь не найден.
    При создании нового пользователя, может возникнуть необходимость удостовериться, что телефон, почта и логин еще не заняты. Тогда можно воспользоваться данными методами и попытаться найти пользователя с заданными параметрами.
  • Оптимизирована работа метода СпискиПользователей.ПолучитьПользователей() — теперь получение описаний пользователей из списка будет осуществляться значительно быстрее.
Тип «ЖурналСобытий»
  • Удалены методы ЖурналСобытий.Зарегистрировать и ЖурналСобытий.ЗарегистрироватьНачалоОперации. Теперь для регистрации событий необходимо использовать элемент проекта Событие Журнала Событий (подробнее).
  • Изменена сигнатура метода ЖурналСобытий.Найти. Данные изменения позволят более удобно и быстро осуществлять поиск событий.
    • Добавлено пять новых параметров:
      • Якорь,
      • УпорядочиваниеПоДате,
      • ТипыСобытий,
      • ИдОперации,
      • Фильтр.
    • Удалено два параметра:
      • Пропустить,
      • ПрямойПорядок.
    Было:
    ЖурналСобытий.Найти(
            ДатаНачала: Момент? = Неопределено,
            ДатаОкончания: Момент? = Неопределено,
            Пропустить: Число? = Неопределено,
            Ограничить: Число? = Неопределено,
            ПрямойПорядок: Булево? = Неопределено): РезультатПоискаСобытий
    Стало:
    ЖурналСобытий.Найти(
            ДатаНачала: Момент? = Неопределено,
            ДатаОкончания: Момент? = Неопределено,
            Якорь: Ууид? = Неопределено
            Ограничить: Число? = Неопределено,
            УпорядочиваниеПоДате: Порядок = Порядок.ПоУбыванию,
            ТипыСобытий: ЧитаемоеМножество<Строка|Тип>,
            ИдОперации: Ууид? = Неопределено,
            Фильтр: ((Событие) → Булево)?): РезультатПоискаСобытий
Тип «ПроцессОс»
Методы ПолучитьПотокВывода и ПолучитьПотокОшибок типа ПроцессОс теперь не ожидают завершения работы процесса для получения потока вывода и потока ошибок, а также не закрывают выходные потоки сразу после прочтения данных. Это позволяет читать данные частями. Для получения данных всего потока необходимо дождаться завершения процесса с помощью метода ОжидатьЗавершения.
Специализированные методы обобщенных типов
Для обобщенных типов добавлены специализированные методы:
Тип Массив<Т это Сравнимое<Т>>
  • Сортировать(Порядок: Порядок = Порядок.ПоВозрастанию, От: Число = 0, До: Число = умолчание)

Тип ЧитаемаяКоллекция<Т это Сравнимое<Т>>
  • Минимум()

  • Максимум()

  • Соединить(Разделитель: Строка = "")

Тип ЗакрытыйДиапазон<Т это Дата|Время|ДатаВремя|Момент>
  • Длительность()

  • Длина()

Структуры во встроенном языке
  • Структура больше не поддерживает описание конструкторов. Теперь имеется только один конструктор — автоматический. Чтобы добавить аннотацию к автоматическому конструктору, используйте ключевое слово конструктор (подробнее).
  • Добавлен признак обязательности для полей структуры. Поля, которые должны являться обязательными параметрами конструктора, отмечаются ключевым словом обз на этапе объявления структуры (подробнее).

Групповая разработка

  • Расширены настройки групповой разработки. Теперь можно выбрать, использовать ли задачи и ветки при разработке, вести ли работу над задачами в основной ветке проекта или автоматически создавать отдельную ветку для каждой задачи.
  • В панели управления вкладка Версии переименована в Сборки. Данная вкладка теперь содержит список всех существующих сборок проекта. Можно выгружать сборки в файл, добавлять их из выгрузки, а также удалять ненужные сборки.
  • Добавлена возможность выпускать публичные релизы, доступные другими пользователями. Чтобы сформировать релиз, можно использовать существующую сборку проекта или создать новую из ветки релиза. Все выпущенные релизы отображаются в панели управления на вкладке Релизы. Если в релизе обнаружены критические ошибки, его можно отозвать.
  • Добавлена возможность обновлять приложения по указанной ветке. Для этого из ветки будет сформирована новая сборка, на основе которой будет произведено обновление.
  • В панели управления в диалогах включения в основную ветку и переноса в другую ветку добавлен переключатель Запустить обновление приложение, который позволит обновить приложение для целевой ветки после завершения операции слияния.
  • В панели управления на странице проекта в разделе Ветки добавлен столбец Последняя активность.
  • На странице Среды разработки раздела Разработка столбец Последняя активность теперь отображает не дату последнего обновления состояния среды разработки из панели управления, а реальную дату последних изменений рабочей области.
  • В панели управления добавлена возможность назначать метки задачам проекта. Можно создавать новые метки, удалять существующие, а также использовать метки для фильтрации задач.
  • Уведомления с ошибками, которые могут возникать в результате выполнения операций по работе с системой контроля версий Git, теперь переведены на русский язык. Для некоторых ошибок также добавлена подсказка с рекомендациями по разрешению данной ошибки.
  • Теперь в Навигаторе при нажатии на файл правой кнопкой мыши и выборе команды Зафиксировать изменения > Выбрать изменения для коммита вручную в список промежуточных изменений автоматически добавляется файл, по которому производился клик, а также все дочерние файлы в дереве Навигатора.
  • Добавлена локализация индикаторов измененных объектов, отображаемых в Навигаторе проекта, Проводнике и Системе управления версиями при использовании системы контроля версий Git. Кроме того, индикаторы теперь показываются для всех узлов дерева файлов, включая реквизиты справочников и элементы перечислений.
  • Заменены аватары пользователей в панелях групповой разработки на другую иконку, похожую на иконку пользователя в панели управления.
  • Скрыты лишние команды для настройки панелей групповой разработки в среде разработки.
  • В представлении Система управления версиями заголовки панелей Фиксация и Фиксации изменены на Коммит и Коммиты соответственно.
  • В представлении 1C удалена панель Версии.
  • Переименована команда Убрать все промежуточные изменения в Убрать все промежуточные изменения из индекса.
  • При настройке командной разработки добавлена возможность указывать имя пользователя и почту для коммитов. Если имя пользователя и почта не указаны, то будут использованы имя пользователя и почта, указанные в панели управления.
  • При настройке командной разработки после указания настроек подключения к репозиторию добавлена возможность обновить список существующих веток и выбрать нужную ветку из списка.
  • Добавлена проверка наличия в репозитории ветки с указанным именем при создании новой задачи или ветки. Если при начале разработки задачи обнаружится, что репозиторий уже содержит ветку с именем issue/123 (где 123 — номер задачи), то задача будет привязана к этой ветке.
  • Реализована возможность переноса выполненной задачи в другую ветку проекта (подробнее).
  • В группе Задачи представления теперь отображаются коммиты для каждой задачи. Добавлена возможность вызывать команды слияния, перебазирования и отмены изменений в контекстном меню задач.

  • Для внешних репозиториев доработаны действия по созданию, удалению и слиянию веток в панели управления.
  • Улучшена работа с ветками в среде разработки:
    • Добавлена возможность создавать новые ветки в панели Ветки представления Система управления версиями.
    • Доработано меню создания новой ветки, которое открывается при нажатии на имя текущей ветки в панели состояния. Добавлены команды Создать новую ветку и Создать новую ветку от, которые позволяют указать ветку-источник для новой ветки.
    • Добавлена возможность создать новое приложение или использовать текущее при создании новой ветки проекта или переключении на другую ветку, для которой не назначено приложение для разработки.
    • Добавлена возможность переключаться на основную ветку проекта.
    • Реализована возможность удалять существующие ветки в панели Ветки представления Система управления версиями.
  • Убрана необходимость дважды вводить настройки доступа при начале работы с внешним Git-репозиторием.
  • Переработана команда синхронизации изменений:
    • При нажатии на иконку в панели состояния теперь автоматически выполняются команды git pull и git push.
    • Если во время синхронизации произойдет конфликт слияния, «1С:Шина» отобразит диалоговое окно с соответствующим предупреждением. Пользователь может либо отменить синхронизацию, либо исправить конфликты вручную и завершить процесс синхронизации.
    • В выпадающее меню группы Коммит добавлен пункт Синхронизация, содержащий следующие команды:
      • Синхронизация (pull-push),
      • Получить, перебазировать и отправить изменения (rebase-push),
      • Принудительно отправить изменения (force-push).

  • Изменена и доработана доступность действий в проекте относительно прав разработчика проекта.
  • Добавлена возможность проводить проверку задач в среде разработки. Данная опция позволяет передавать выполненные задачи на проверку другому разработчику или тестировщику с целью обнаружения и исправления ошибок, которые остались незамеченными во время выполнения задачи. В рамках данной функциональности были реализованы следующие нововведения:
    • В настройках проекта групповой разработки добавлена новая опция: Использовать проверку задач. Включение данной настройки дает возможность использовать механизм проверки задач в среде разработки. После включения можно задать список проверяющих и указать, необходимо ли подтверждение всех проверяющих для включения задачи в основную ветку.
    • Добавлена возможность открывать задачу на проверку в среде разработки одновременно с разработчиком, который является исполнителем задачи.
    • Добавлена возможность оставлять комментарии, а также отвечать на них при проверке задачи в среде разработки. Можно оставлять комментарии как к изменениям в файлах объектов, модулей и форм, так и к задаче в целом. Если исполнитель проекта и проверяющий одновременно открывают задачу на проверку в среде разработки, они также могут оставлять комментарии, а по нажатию кнопки Обновить — получать комментарии друг друга.
    • Реализована форма отображения информации по проверке задачи в среде разработки. В этой форме отображаются все комментарии, оставленные в процессе проверки задачи. Помимо этого в форме есть возможность поставить задаче статус Проверено или Требует доработки (со стороны проверяющего) либо влить задачу в основную ветку (со стороны разработчика).
    • В панели управления в карточке задачи добавлена возможность просматривать список людей, которые отвечают за проверку задачи, а также добавлено модальное окно выбора проверяющего, которое возникает при отправке задачи на проверку.

Отладка

Изменение архитектуры отладчика
Расширение отладчика больше не требуется для отладки кода в Google Chrome и может быть удалено из браузера. Теперь для отладки приложений можно также использовать и другие популярные браузеры (Microsoft Edge, Mozilla Firefox и Safari).
Работа с точками останова
Добавлена возможность создавать точки останова с условиями и точки журнала (подробнее).

Панель управления

Раздел «Пользователи»
  • Раздел «Настройки» переименован в «Пользователи панели управления» и добавлен в качестве подраздела в раздел «Пользователи».
  • В раздел «Пользователи» добавлен подраздел «Все пользователи». Теперь в нем отображаются все пользователи, кроме пользователей панели управления. Пользователи отображаются одним списком без группировки по спискам пользователей. Информация о том, к какому списку принадлежит пользователь, содержится в колонке «Список пользователей».
  • Списки пользователей теперь располагаются в подразделе «Списки пользователей» раздела «Пользователи».
  • Добавлена возможность сохранять список пользователей в файл и загружать список пользователей из файла.
Раздел «Проекты»
  • На странице проекта добавлена новая вкладка Приложения. На данной вкладке отображаются все приложения, созданные на основе текущего проекта.
  • Изменен формат файла выгрузки проекта с .xprj на .xasm (файл сборки).
Раздел «Разработка»
Теперь в панели управления можно настроить диапазон портов для запуска сред разработки (подробнее). Это позволит избежать конфликта портов с другими приложениями.
Раздел «Объектные хранилища»
Добавлена возможность подключать объектное хранилище к нескольким приложениям одновременно (подробнее).
Пользователи приложения
Поле «Статус»
Если у списка пользователей установлен флажок об автоматическом подключении, то пользователи, входящие в этот список, автоматически отображаются в списке пользователей, подключенных к приложению (Карточка приложения > Пользователи). Однако из-за того, что фактически пользователь подключается к приложению только после аутентификации, отображение пользователя в списке подключенных еще не означает, что пользователь действительно подключился (аутентифицировался). Чтобы была возможность отличать таких пользователей, в списке подключенных к приложению пользователей было добавлено поле Статус. У пользователей, подключенных к приложению, но не прошедших аутентификацию, в поле Статус будет отображаться пометка Ожидание подключения.
Проверка уникальности пользователей в рамках приложения
Добавлена проверка уникальности пользователей разных списков в рамках одного приложения. Теперь при создании пользователя в приложении, при подключении пользователя к приложению, а также при добавлении пользователю учетной записи будет выполняться проверка уникальности его учетных данных для аутентификации среди всех пользователей, подключенных к приложению. При выявлении дубликата будет открыто диалоговое окно с сообщением о том, что происходит дублирование пользователя, и действия отменятся.
Рабочая область
Механизм резервного копирования рабочей области сред разработки теперь сохраняет рабочую область, только если с момента последней загрузки в нее были внесены изменения. Это дает возможность экономить системные ресурсы, а также более точно отслеживать пользовательскую активность.

Прикладная функциональность

Добавлена функция мониторинга изменений в файловой системе
Реализованы следующие типы встроенного языка, с помощью которых можно отслеживать создание, изменение и удаление файлов в заданных каталогах (подробнее):
  • МониторФайловойСистемы — регистрирует события, происходящие в контролируемых каталогах, и возвращает их для обработки.
  • СобытиеФайловойСистемы — содержит информацию о событиях, регистрируемых монитором файловой системы.
  • ВидСобытияФайловойСистемы — определяет вид события (Создание, Удаление, Изменение или ПотеряСобытий).
Реализовано перечисление «Кодировка» для указания кодировки символов
Новый тип Кодировка поддерживает следующие кодировки:
  • Utf8,
  • Utf16,
  • Ascii,
  • Windows1251,
  • Cp866,
  • Koi8r,
  • Cp437,
  • Iso8859_1.
Также реализованы следующие свойства и методы:
  • Для типа Кодировка добавлен метод ПоПсевдониму, возвращающий элемент перечисления Кодировка по заданному псевдониму кодировки:
    ПоПсевдониму(Псевдоним: Строка): Кодировка

    Если указанный псевдоним не соответствует ни одной из поддерживаемых кодировок, выбрасывается ИсключениеНедопустимыйАргумент.

  • Для элементов перечисления Кодировка доступно свойство Псевдоним, которое возвращает строку, содержащую псевдоним кодировки.
Ниже перечислены типы и их методы, в которых кодировка задается с помощью перечисления Кодировка.
  • Тип «ХешированиеДанных»
    • ДобавитьДанные
      ДобавитьДанные(Данные: Строка,
                     Кодировка: Кодировка|Строка): ХешированиеДанных

      Добавляет порцию данных в указанной кодировке для вычисления хеша.

    • Хеш
      Статический Хеш(Данные: Строка,
                      Алгоритм: АлгоритмХеширования,
                      Кодировка: Кодировка|Строка): Байты

      Вычисляет хеш по входным строковым данным в заданной кодировке, используя указанный алгоритм хеширования.

      Статический Хеш(Данные: Строка,
                      Алгоритм: АлгоритмХеширования,
                      Кодировка: Кодировка|Строка,
                      Криптопровайдер: Криптопровайдер|Строка|? = Неопределено
      ): Байты

      Вычисляет хеш по входным строковым данным в заданной кодировке на основании указанного алгоритма, реализуемого заданным криптопровайдером.

  • Тип «ЗаписьДанных»
    • ЗаписатьСимволы
      ЗаписатьСимволы(Строка: Строка,
                      Кодировка: Кодировка|Строка|? = Неопределено)

      Выполняет запись строки в поток, используя указанную кодировку.

    • ЗаписатьСтроку
      ЗаписатьСтроку(Строка: Строка,
                     Кодировка: Кодировка|Строка|? = Неопределено,
                     РазделительСтрок: Строка? = Неопределено)
      Записывает в поток строку в указанной кодировке и заданный разделитель строк.
  • Тип «ЧтениеДанных»
    • ПропуститьДо
      ПропуститьДо(Маркер: Строка|ЧитаемыйМассив<Строка>,
                   Кодировка: Кодировка|Строка|? = Неопределено): Число

      Пропускает при чтении двоичные данные до заданного маркера в указанной кодировке.

    • ПрочитатьДо
      ПрочитатьДо(Маркер: Строка|ЧитаемыйМассив<Строка>,
                  Кодировка: Кодировка|Строка|? = Неопределено): РезультатЧтенияДанных

      Выполняет чтение двоичных данных до заданного маркера в указанной кодировке.

    • ПрочитатьСимволы
      ПрочитатьСимволы(Количество: Число? = Неопределено,
                       Кодировка: Кодировка|Строка|? = Неопределено): Строка

      Выполняет чтение заданного количества символов из потока, используя указанную кодировку.

    • ПрочитатьСтроку
      ПрочитатьСтроку(Кодировка: Кодировка|Строка|? = Неопределено,
                      РазделительСтрок: Строка|ЧитаемыйМассив<Строка>|? = Неопределено): Строка

      Выполняет чтение строки до заданного разделителя, используя указанную кодировку.

  • Тип «ПотокЧтения»
    • ПрочитатьКакСтроку
      ПрочитатьКакСтроку(Кодировка: Кодировка|Строка = Кодировка.Utf8): Строка

      Возвращает содержимое потока в виде строки в указанной кодировке, а затем закрывает поток.

  • Тип «ПотокЗаписи»
    • Записать
      Записать(Текст: Строка,
               Кодировка: Кодировка|Строка = Кодировка.Utf8): ПотокЗаписи

      Записывает в поток текст в указанной кодировке и возвращает текущий поток записи.

  • Тип «СтроковыйПотокЗаписи»
    • ВСтроку
      ВСтроку(Кодировка: Кодировка|Строка): Строка

      Возвращает строку с данными из потока в указанной кодировке.

  • Тип «ЧтениеJson»
    • ЧтениеJson
      ЧтениеJson(Источник: ПотокЧтения,
                 Кодировка: Кодировка|Строка = Кодировка.Utf8)

      Создает объект для чтения JSON из потока с учетом указанной кодировки.

  • Тип «ЗаписьJson»
    • ЗаписьJson
      ЗаписьJson(Поток: ПотокЗаписи,
                 НастройкиЗаписи: НастройкиЗаписиJson,
                 Кодировка: Кодировка|Строка = Кодировка.Utf8)

      Создает объект для потоковой записи данных в формате JSON с указанными настройками и кодировкой.

  • Тип «СериализацияJson»
    • ПрочитатьМассив
      ПрочитатьМассив(Источник: ПотокЧтения|Строка,
                      Кодировка: Кодировка|Строка = Кодировка.Utf8): Массив<Объект?>

      Считывает массив объектов из источника, используя указанную кодировку.

    • ПрочитатьОбъект
      ПрочитатьОбъект(Источник: ПотокЧтения|Строка,
                      Тип: Тип|Коллекция<Тип>,
                      Настройки: НастройкиЧтенияОбъектовJson,
                      Кодировка: Кодировка|Строка = Кодировка.Utf8): Объект?

      Считывает объект JSON из источника в объект указанного типа, используя заданные настройки и кодировку.

    • ПрочитатьСоответствие
      ПрочитатьСоответствие(Источник: ПотокЧтения|Строка,
                            Кодировка: Кодировка|Строка = Кодировка.Utf8
      ): Соответствие<Строка, Объект?>

      Считывает соответствие из источника, используя указанную кодировку.

Перечисление Кодировка также используется в следующих типах:
  • Тип «ФайлZip»
    • В конструктор типа ФайлZip добавлен необязательный параметр КодировкаИменФайлов, который позволяет указать кодировку для путей файлов в архиве. Значение этого параметра используется только при извлечении файлов из архива, а не для добавления новых файлов.

      Было:
      ФайлZip(Архив: Строка,
              Пароль: Строка = "")
      Стало:
      ФайлZip(Архив: Строка,
              Пароль: Строка = "",
              КодировкаИменФайлов: Кодировка|Строка = Кодировка.Utf8)
  • Тип «ЧтениеZip»
    • В конструктор типа ЧтениеZip добавлен необязательный параметр КодировкаИменФайлов, который позволяет указать кодировку для путей файлов в архиве. Значение этого параметра используется при распаковке архива.

      Было:
      ЧтениеZip(Поток: ПотокЧтения,
                Пароль: Строка = "")
      Стало:
      ЧтениеZip(Поток: ПотокЧтения,
                Пароль: Строка = "",
                КодировкаИменФайлов: Кодировка|Строка = Кодировка.Utf8)
  • Тип «Строка»
    • В конструктор типа Строка добавлен необязательный параметр Кодировка, позволяющий задать кодировку при создании строки из массива байтов.

      На клиенте поддерживается только кодировка UTF-8.

      Было:
      Строка(Байты: Байты)
      Стало:
      Строка(Байты: Байты,
             Кодировка: Кодировка|Строка = Кодировка.Utf8)
    • Метод ВБайты теперь позволяет использовать элементы перечисления Кодировка для указания кодировки при конвертации строки в массив байтов.

      На клиенте поддерживается только кодировка UTF-8.

      Было:
      ВБайты(Кодировка: Строка = "UTF-8"): Байты
      Стало:
      ВБайты(Кодировка: Кодировка|Строка = Кодировка.Utf8): Байты
Работа с JSON
  • В объект ЧтениеJson добавлены методы для чтения:
    • коллекций: ПрочитатьСодержимоеКакСоответствие() и ПрочитатьСодержимоеКакМассив();
    • типизированных структур данных: ПрочитатьСодержимое<T>(Настройки: НастройкиЧтенияОбъектовJson): T, который использует обобщенный тип данных, а также объект НастройкиЧтенияОбъектовJson, который ранее был только в СериализацияJson.
  • В объект СериализацияJson добавлен параметр Кодировка (подробнее).
  • Свойство Кодировка объекта НастройкиЧтенияОбъектовJson больше не используется ни для ЧтениеJson, ни для СериализацияJson.
  • Добавлена поддержка типа Версия в методах:
    • ЗаписьJson.Записать()
    • ЧтениеJson.ПрочитатьСодержимое<ТипОбъекта>()
    • СериализацияJson.ЗаписатьОбъект()
    • СериализацияJson.ПрочитатьОбъект()

Подробнее о новых возможностях по работе с JSON

Добавлена возможность получения и изменения настроек самостоятельной регистрации и активации пользователей

Реализованы следующие типы встроенного языка:

Кроме того, внесены изменения для типа СписокПользователей:
  • Добавлен метод СНастройкамиАктивации, возвращающий копию текущего списка пользователей с заданными настройками активации:
    СНастройкамиАктивации(Настройки: НастройкиАктивации): СписокПользователей
  • В сигнатуру метода ССамостоятельнойРегистрацией добавлен необязательный параметр Настройки, который содержит настройки самостоятельной регистрации пользователей.

    Было:

    ССамостоятельнойРегистрацией(Разрешено: Булево): СписокПользователей
    Стало:
    ССамостоятельнойРегистрацией(
      Разрешено: Булево,
      Настройки: НастройкиСамостоятельнойРегистрации
    ): СписокПользователей
  • Добавлены новые свойства:
    • НастройкиСамостоятельнойРегистрации — возвращает настройки самостоятельной регистрации для текущего списка пользователей;
    • НастройкиАктивации — возвращает настройки активации для текущего списка пользователей.
Удаление запланированных заданий
Для типа ЗапланированныеЗадания добавлен метод Удалить(Ключ: Строка), который позволяет удалять запланированные задания. Данный метод удаляет задание с заданным ключом независимо от текущего состояния задания. Если задание выполняется в момент вызова метода, то выполнение прерывается. При попытке удалить системное запланированное задание выбрасывается исключение ИсключениеНедопустимыйАргумент.
Гибкое разграничение прав доступа для SOAP-сервиса

Добавлена возможность настраивать права доступа отдельно для каждой операции SOAP-сервиса.

Гибкое разграничение прав доступа для HTTP-сервиса
Добавлена возможность настраивать права доступа отдельно для каждого URL-шаблона, а также для каждого HTTP-метода URL-шаблона.
Табличный документ
Реализован вывод табличного документа в режиме потока данных, то есть теперь можно формировать табличный документ область за областью.
  • В тип ОбластьТабличногоДокумента добавлены методы:
    • УстановитьИмяПараметра(ИмяПараметра: Строка)

      Показывает, что ячейка параметризована, и устанавливает имя параметра, который используется при выводе области.

    • ПолучитьИмяПараметра(): Строка?

      Если ячейка параметризирована, то возвращает имя параметра, который используется для вывода ячейки, иначе возвращает Неопределено.

  • В типе ОбластьТабличногоДокумента изменилась сигнатура метода:
    • УстановитьТекст(Текст: Строка, Шаблон: Булево = Ложь)

      Устанавливает текст в ячейки области. Если признак шаблона имеет значение Истина, то при выводе ячейки нужно передавать шаблонные параметры. Шаблонные параметры в макете табличного документа выделяются квадратными скобками. Если ячеек больше одной, то в каждую вставляется одинаковый текст.

  • Добавлено перечисление ВидЗаполненияОбластиТабличногоДокумента со значениями Текст, Параметр и Шаблон, которое используется для заполнения области ячеек табличного документа.
  • Добавлен тип ЗаписьТабличногоДокумента, который содержит методы для вывода табличных документов и их областей в режиме потока данных.
Параметры области табличного документа теперь можно заполнять по структуре или запросу.
  • Добавлен новый тип ВыводимаяОбластьТабличногоДокумента, который используется, чтобы установить параметры области, данные рисунков, текст, шрифт и т. д.
  • В тип ОбластьТабличногоДокумента добавлен метод
    • ВВыводимуюОбласть(): ВыводимаяОбластьТабличногоДокумента

      Возвращает выводимую область табличного документа, созданную на основании текущей области. Выводимая область служит логическим объединением ячеек табличного документа. Одна и та же ячейка может входить во множество областей.

Добавлена возможность указать цвет в прикладном API табличного документа, а также изменена работа со шрифтами.
  • Создано пространство имен Стд::Оформление, в которое перенесены типы Цвет и Цвета из Стд::Интерфейс.
  • У типа Цвет удалены конструкторы. Теперь нужно использовать конструкторы дочернего типа АбсолютныйЦвет.
  • Добавлены новые типы:
    • АбсолютныйЦвет для описания абсолютного цвета, наследуется от типа Цвет;
    • ШрифтОбластиТабличногоДокумента для работы со шрифтом в области табличного документа. Имеет свойства Шрифт и Масштаб.
  • Переименованы типы из пространства имен Стд::Интерфейс:
    • Шрифт в СтилевойШрифт,
    • Шрифты в СтилевыеШрифты.
  • Изменения в пространстве имен Стд::ТабличныйДокумент:
    • Тип ОписаниеАбсолютногоШрифтаТабличногоДокумента переименован в АбсолютныйШрифт и перенесен в пространство имен Стд::Оформление.
    • Удалены типы ОписаниеШрифтаТабличногоДокумента и ОписаниеОтносительногоШрифтаТабличногоДокумента.
  • Добавлено новое перечисление УзорТабличногоДокумента — используется для установки узора в областях табличного документа.
  • В тип ТабличныйДокумент добавлена возможность прочитать табличный документ с конвертацией неподдерживаемых шрифтов и цветов. Изменен статический метод:
    • статический Прочитать(Источник: Байты|ПотокЧтения|Строка|Файл,
                            КонвертироватьОформление: Булево = Ложь): ТабличныйДокумент

      Читает табличный документ из источника данных и конвертирует неподдерживаемое оформление, если для аргумента КонвертироватьОформление установлено значение Истина.

    Добавлен статический метод:

    • статический ПолучитьДиапазоныОбластейСНеподдерживаемымОформлением()

      Получает диапазон областей, в которых есть неподдерживаемое оформление.

  • В тип ОбластьТабличногоДокумента добавлены методы для работы с цветами, узорами и шрифтами.
В тип ТабличныйДокумент добавлены новые методы и свойства, расширяющие возможности работы с документами, в частности, для управления размером и ориентацией страницы.

Среда разработки

Общая функциональность
  • Оптимизирована работа некоторых механизмов среды разработки, в результате чего скорость отклика была увеличена.
  • В панели управления добавлена возможность очистить рабочую область среды разработки.
Работа с кодом
  • Контекстная подсказка:
    • В случае, если метод возвращает какой-либо тип, то при выборе ключевого слова возврат из контекстной подсказки автоматически добавляется пробел после ключевого слова. Если метод ничего не возвращает, то при выборе ключевого слова возврат из контекстной подсказки пробел не добавляется.
    • Добавлена контекстная подсказка ключевых слов языка запросов.
    • Добавлена контекстная подсказка полей таблицы после ключевого слова ВЫБРАТЬ.
    • Добавлена контекстная подсказка шаблона ВЫБРАТЬ {поля таблицы} ИЗ {имя таблицы} в языке запросов. «1С:Шина» автоматически заполнит имена полей и название таблицы.
  • Быстрые исправления:
    • Если метод является обработчиком, но у него не указана аннотация @Обработчик, то система сама предложит ее добавить.
    • Система сама предложит удалить сущность, например, параметр или переменную, если она не используется.
    • Если метод, который реализует контракт, имеет некорректную сигнатуру, то система сама предложит автоматическое исправление.
    • В языке запросов добавлена возможность менять местами операнды выражения с бинарным оператором.
  • Форматирование кода:
    • Добавлена возможность форматирования текста запросов в модулях элементов проекта.
  • В механизме автоматического приведения типов учтен новый случай. Теперь у переменной составного типа появилась возможность вызывать метод, который присутствует у всех типов данной переменной. При этом дополнительное преобразование типа не требуется. Например, объявляется переменная Набор типа Массив<Строка> | Множество<Строка>:
    пер Набор: Массив<Строка> | Множество<Строка> = новый Массив<Строка>()
    Затем вызывается метод Добавить(), который определен для каждого из типов переменной Набор:
    • Было:
      (Набор как Массив<Строка>).Добавить("МояСтрока")
    • Стало:
      Набор.Добавить("МояСтрока")
Интерфейс
  • Теперь при длительном отсутствии активности в открытой среде разработки сессия авторизации автоматически завершается, а пользователь повторно перенаправляется на страницу авторизации.
  • Стало удобнее различать открытые проекты — заголовок вкладки браузера, в которой открыта среда разработки, теперь включает в себя название разрабатываемого проекта.
  • В дереве навигатора при удалении элемента теперь всплывает диалоговое окно с просьбой подтвердить удаление.
  • Стало удобнее просматривать изображения в среде разработки. Чтобы открыть картинку, достаточно кликнуть на нее в навигаторе.
  • Для команд работы с приложением, а также для команд групповой разработки добавлены иконки и локализованное описание.
  • Переработан внешний вид среды разработки.
Работа с локализованными строками
  • Добавлена возможность указывать локализованные строки в палитре свойств.
  • При создании элемента проекта Локализованные Строки теперь возникает всплывающее окно с предложением автоматически добавить файлы локализации на других языках.
  • При создании раздела Локализации теперь предлагается выбрать язык из уже доступных вариантов.
  • При добавлении Элемента локализации к языку локализации теперь предлагается выбор из уже существующих элементов проекта типа Локализованные Строки.
Панель свойств
  • Добавлена возможность редактирования свойств команд в панели свойств.
  • Добавлено выделение свойств, в которые разработчик установил значения. Если значение задано явно, то название свойства в панели свойств будет выделено жирным шрифтом. Если значение не задано (даже если свойство имеет значение по умолчанию), название свойства выделено не будет.
  • Добавлена команда сброса значения свойства до значения по умолчанию. Она расположена в контекстном меню в заголовке свойства.
  • В свойствах, в которых можно задавать вычисляемые выражения, добавлена возможность создавать метод нажатием на иконку лупы. Чтобы иконка появилась, необходимо ввести название метода и двойные скобки — «()» (например ВычислитьЗначение()).
  • Свойства, имеющие несколько уровней вложенности, отображаются в свернутом виде. При нажатии на такое свойство его элементы разворачиваются на всю панель свойств.
  • Добавлена возможность установить ПравоНаЭлемент через панель свойств в настройках контроля доступа.
  • При настройке свойства Шрифт добавлена возможность выбирать стиль из предопределенного списка стилей.

Электронная почта

Изменения в программной модели
  • Тип «ЧастьТекстаПисьма»

    Тип возвращаемого значения для свойства ВидТекста изменен с ВидТекстаПисьма? на Строка?.

  • Тип «ВидТекстаПисьма»
    • Из перечисления ВидТекстаПисьма удален элемент Другой.
    • Для перечисления реализован статический метод ПоТипуСодержимого, который возвращает элемент перечисления из значения заголовка типа содержимого либо Неопределено, если элемент не найден:
      Статический ПоТипуСодержимого(ТипСодержимого: Строка): ВидТекстаПисьма?
    • Для элементов перечисления добавлено свойство ТипСодержимого, возвращающее строковое значение типа содержимого.
  • Тип «РежимОткрытияКаталогаПочты»

    Тип РежимОткрытияКаталогаПочты переименован в РежимОткрытияКаталогаImap

    .

Криптография

Шифрование данных
«1С:Шина» позволяет шифровать и расшифровывать данные, используя симметричные и асимметричные алгоритмы шифрования. Для поддержки механизма шифрования реализованы следующие типы:
  • ГенераторПарыКлючей — позволяет сгенерировать открытый и закрытый ключи для асимметричного шифрования данных;
  • ПараКлючейШифрования — позволяет получить доступ к открытому (ОткрытыйКлюч) и закрытому (ЗакрытыйКлюч) ключам асимметричного шифрования;
  • ГенераторСекретногоКлюча — позволяет сгенерировать секретный ключ для симметричного шифрования данных;
  • ГенераторСекретногоКлючаНаОсновеПароля — позволяет сгенерировать секретный ключ для симметричного шифрования данных на основе пароля;
  • СекретныйКлюч — секретный ключ симметричного шифрования;
  • ШифрованиеДанных — позволяет зашифровать или расшифровать данные, используя симметричные и асимметричные алгоритмы шифрования;
  • ОперацияШифрования — определяет, какую операцию необходимо выполнить: шифрование или расшифровку данных;
  • АлгоритмСимметричногоШифрования — перечисляет поддерживаемые алгоритмы симметричного шифрования;
  • ПреобразованиеСимметричногоШифрования — перечисляет основные поддерживаемые трансформации для симметричных шифров.
Тип «АтрибутX500»
Добавлены новые элементы перечисления АтрибутX500:
  • АдресПочты — адрес электронной почты;
  • Должность — должность физического лица в организации;
  • ИдентификаторОрганизации — идентификатор организации, отличный от наименования;
  • ИмяФизическогоЛица — имя физического лица;
  • ИнициалыФизическогоЛица — инициалы физического лица без фамилии;
  • Инн — ИНН физического лица;
  • ИннЮридическогоЛица — ИНН юридического лица;
  • КатегорияБизнеса — категория бизнеса, осуществляемого организацией;
  • КвалификаторНеоднозначности — содержит информационные строки, призванные устранять неоднозначности, для добавления к относительному уникальному имени записи;
  • КвалификаторПоколения — указывает на поколение пользователя (например, младший или II);
  • МестоРождения — место рождения физического лица;
  • НомерТелефона — номер телефона;
  • Огрн — ОГРН владельца квалифицированного сертификата (для юридического лица);
  • Огрнип — ОГРНИП владельца квалифицированного сертификата (для физического лица, являющегося индивидуальным предпринимателем);
  • Описание — дополнительное описание объекта в человекочитаемом формате;
  • Пол — пол физического лица;
  • ПочтовыйИндекс — индекс физического почтового адреса;
  • СерийныйНомер — серийный номер устройства;
  • Снилс — СНИЛС владельца квалифицированного сертификата;
  • СтранаГражданства — страна гражданства физического лица;
  • СтранаПроживания — страна проживания физического лица;
  • УникальныйИдентификатор — содержит строки, необходимые для того, чтобы отличать объекты при повторном использовании уникальных имен;
  • ФамилияФизическогоЛица — фамилия физического лица;
  • ФизическийПочтовыйАдрес — физический почтовый адрес.
Тип «ЦифровойСертификат»
  • Для методов ПолучитьАтрибутыИздателя и ПолучитьАтрибутыСубъекта тип ключа в возвращаемом значении изменен на составной — АтрибутX500|Строка. Это позволит извлекать из сертификата атрибуты издателя и субъекта, отсутствующие в перечислении АтрибутX500.
    • ПолучитьАтрибутыИздателя — возвращает атрибуты издателя в виде соответствия по элементам перечисления АтрибутX500 или строковым значениям OID, если соответствующие значения отсутствуют в АтрибутX500.
      Было:
      ПолучитьАтрибутыИздателя(): ЧитаемоеСоответствие<АтрибутX500, Строка>
      Стало:
      ПолучитьАтрибутыИздателя(): ЧитаемоеСоответствие<АтрибутX500|Строка, Строка>
    • ПолучитьАтрибутыСубъекта — возвращает атрибуты субъекта в виде соответствия по элементам перечисления АтрибутX500 или строковым значениям OID, если соответствующие значения отсутствуют в АтрибутX500.
      Было:
      ПолучитьАтрибутыСубъекта(): ЧитаемоеСоответствие<АтрибутX500, Строка>
      Стало:
      ПолучитьАтрибутыСубъекта(): ЧитаемоеСоответствие<АтрибутX500|Строка, Строка>
  • Добавлен перегруженный метод ПолучитьОтпечаток, позволяющий получить отпечаток (хеш) цифрового сертификата:
    ПолучитьОтпечаток(): Байты

    Возвращает отпечаток текущего сертификата. В качестве алгоритма хеширования будет использован ГОСТ 34.11-2012 с длиной сообщения 256 бит, если открытый ключ сертификата использует один из асимметричных алгоритмом шифрования стандарта ГОСТ 34.10. Во всех остальных случаях будет использован SHA-1.

    ПолучитьОтпечаток(
      Алгоритм: АлгоритмХеширования,
      Криптопровайдер: Криптопровайдер|Строка|? = Неопределено
    ): Байты

    Возвращает отпечаток текущего сертификата с использованием указанного алгоритма, реализуемого заданным криптопровайдером. Если криптопровайдер не указан, то он подбирается автоматически. В первую очередь приоритет отдается КриптоПро, затем Bouncy Castle, а затем любому криптопровайдеру, имеющему реализацию указанного алгоритма хеширования. Порядок приоритетов при выборе криптопровайдера действует только для алгоритма ГОСТ 34.11-2012.

Добавлена поддержка хеширования по ГОСТ
  • Добавлены новые элементы перечисления АлгоритмХеширования:
    • Гост3411_2012_256 — определяет алгоритм ГОСТ 34.11-2012, генерирующий хеш-сумму длиной в 256 бит;
    • Гост3411_2012_512 — определяет алгоритм ГОСТ 34.11-2012, генерирующий хеш-сумму длиной в 512 бит.
  • Для типа ХешированиеДанных внесены следующие изменения:
    • Добавлен конструктор, позволяющий указать криптопровайдера для вычисления хеша:
      ХешированиеДанных(
        Алгоритм: АлгоритмХеширования,
        Криптопровайдер: Криптопровайдер|Строка|? = Неопределено)
    • Добавлены перегрузки метода Хеш, принимающие дополнительный необязательный параметр Криптопровайдер:
      Статический Хеш(
        Данные: Объект?,
        Алгоритм: АлгоритмХеширования,
        Криптопровайдер: Криптопровайдер? = Неопределено
      ): Байты
      Статический Хеш(
        Данные: Строка,
        Алгоритм: АлгоритмХеширования,
        Кодировка: Кодировка|Строка,
        Криптопровайдер: Криптопровайдер|Строка|? = Неопределено
      ): Байты

Элементы проекта

Элемент проекта «Проект»
Добавлены новые свойства:
Элемент проекта «Событие Журнала Событий»
Добавлен новый элемент проекта Событие Журнала Событий. Данный элемент проекта позволяет описать события, наступление которых нужно регистрировать в журнале событий приложения.
Элемент проекта «Регистр Сведений»
  • Больше не требуется создавать для регистра сведений хотя бы одно измерение. Теперь при попытке создать регистр без измерений соответствующая ошибка не выдается.
  • Добавлено свойство Ведущее, которое позволяет при удалении объекта из базы данных удалять ссылающиеся на этот объект записи из регистра сведений (подробнее).
Новые узлы элемента проекта «Процесс Интеграции»
Для элемента проекта Процесс Интеграции добавлены новые узлы: «KafkaИсточник» и «KafkaНазначение». Эти узлы позволяют настроить асинхронную интеграцию с брокером сообщений Apache Kafka.

Язык запросов

Новая функция языка запросов Ууид()
Добавлена новая функция языка запросов для генерации случайных значений типа Ууид (подробнее).
Получение всех доступных имен таблиц элементов проекта
Добавлена возможность получения имен всех таблиц языка запросов, порожденных элементами проекта, а также наименований их полей. Данная функциональность может быть полезна при разработке консоли запросов.