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

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

Аннотации во встроенном языке
  • Для некоторых аннотаций добавлена возможность указывать параметры.
  • Добавлены новые аннотации:
    @JsonИгнорироватьСвойство

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

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

    Параметр Имя

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Максимум()

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

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

  • Длина()

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

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

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

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

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

Работа с кодом
  • Контекстная подсказка:
    • В случае, если метод возвращает какой-либо тип, то при выборе ключевого слова возврат из контекстной подсказки автоматически добавляется пробел после ключевого слова. Если метод ничего не возвращает, то при выборе ключевого слова возврат из контекстной подсказки пробел не добавляется.
  • В механизме автоматического приведения типов учтен новый случай. Теперь у переменной составного типа появилась возможность вызывать метод, который присутствует у всех типов данной переменной. При этом дополнительное преобразование типа не требуется. Например, объявляется переменная Набор типа Массив<Строка> | Множество<Строка>:
    пер Набор: Массив<Строка> | Множество<Строка> = новый Массив<Строка>()
    Затем вызывается метод Добавить(), который определен для каждого из типов переменной Набор:
    • Было:
      (Набор как Массив<Строка>).Добавить("МояСтрока")
    • Стало:
      Набор.Добавить("МояСтрока")

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

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

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

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

    Тип РежимОткрытияКаталогаПочты переименован в РежимОткрытияКаталога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 бит.
  • Для типа ХешированиеДанных внесены следующие изменения:
    • Добавлен конструктор, позволяющий указать криптопровайдера для вычисления хеша:
      ХешированиеДанных(
        Алгоритм: АлгоритмХеширования,
        Криптопровайдер: Криптопровайдер|Строка|? = Неопределено)
    • Добавлены перегрузки метода Хеш, принимающие дополнительный необязательный параметр Криптопровайдер:
      Статический Хеш(
        Данные: Объект?,
        Алгоритм: АлгоритмХеширования,
        Криптопровайдер: Криптопровайдер? = Неопределено
      ): Байты
      Статический Хеш(
        Данные: Строка,
        Алгоритм: АлгоритмХеширования,
        Кодировка: Кодировка|Строка,
        Криптопровайдер: Криптопровайдер|Строка|? = Неопределено
      ): Байты