1С:Предприятие 8
Система программ
Архитектура платформы 1С:Предприятие
(версия 8.3.26)

Новое в 1С:Исполнителе 2.0

Executor IDE

Завершение поддержки и развития Executor IDE. Для написания и отладки скриптов используйте плагин для среды разработки Visual Studio Code.

Отладка

В режиме отладки, после выполнения скрипта, в консоль будет выводиться список незакрытых в процессе выполнения ресурсов.

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

  • Реализована возможность использовать модификатор исп без объявления переменной. Это нужно, чтобы захватить Закрываемое значение, которое будет закрыто автоматически при выходе из текущей области видимости;
  • Добавлены функциональные типы;
  • Включен автоимпорт всех пространств имен из Стд. Больше нет необходимости вручную импортировать пространства имен из Стд;
  • Строковые литералы поддерживают интерполяцию строк;
  • Добавлены операции:
  • Изменен обобщенный синтаксис литералов БайтыУуидВремяДатаДатаВремяМоментЧасовойПояс:
  • Байты{FF01AA}
    Ууид{3298d7dd-93f5-4778-9084-14afb7fc89ca}
    Время{12:00}
    Дата{2020-01-01}
    ДатаВремя{2020-01-01 12:00}
    Момент{2020-01-01 12:00 Z}
    ЧасовойПояс{Europe/Moscow}
  • Изменен синтаксис литерала типа на Тип<ИмяТипа>, например Тип<Строка>;
  • Добавлено ключевое слово ничто. Его можно использовать только в качестве:
    • типа возвращаемого значения метода (для общности), что равносильно отсутствию указания типа;
    • типа результата функционального типа.
    ничто нельзя никуда присвоить и с ним нельзя никак взаимодействовать.
    (XXX)→YYY можно присвоить в (XXX)→ничто;
  • Запрещено вызывать методы, не возвращающие значение, так, как будто они возвращают значение. Исключение составляет системный метод Вычислить():
    • При этом вызов процедуры должен быть последним, т. е. результатом всего Вычислить();
    • Результатом вычисления будет значение Неопределено;
  • Добавлены обобщённые типы;
  • Больше не поддерживается синтаксис обобщенных типов без явного указания параметров типа. Все типы встроенных коллекций теперь обобщенные. Нельзя написать просто Массив — нужно всегда явно задавать параметры типа (если он не может быть автоматически выведен);
  • Реализованы системные обобщенные методы — методы, имеющие тип-параметр, влияющий на типизацию метода. Такой метод может быть вызван для аргумента (аргументов), типы которых определяются типом-параметром метода. Таким же образом тип результата метода может быть связан с типом-параметром метода. Синтаксис вызова с указанием типа:
    имя-метода<имя-типа-1, ..., имя-типа-N>(параметры)
    Методы, которые становятся обобщенными:
    • Минимум()
    Минимум<имя-типа это Сравнимое>(имя-типа, имя-типа) 
    • ПолучитьИлиУмолчание()
    ЧитаемоеСоответствие<тип-ключа, тип-значения>
        .ПолучитьИлиУмолчание<тип-умолчания>(
            ключ: тип-ключа,
            умолчаниетип-значения|тип-умолчания  
        ): тип-значения|тип-умолчания 
    • Создать()
    ЗапланированныеЗадания.Создать<имя-типа-1, имя-типа-2>(
        обработчик: (имя-типа-1, имя-типа-2)->Объект?,
        параметр-1: имя-типа-1,
        параметр-2: имя-типа-2
    ) 
    • Выполнить()
    ФоновыеЗадания.Выполнить<имя-типа-1, имя-типа-2>(
        обработчик: (имя-типа-1, имя-типа-2)->Объект?,
        параметр-1: имя-типа-1,
        параметр-2: имя-типа-2
    ) 
  • Добавляется возможность вызывать методы и конструкторы с именованными параметрами. Можно смешивать позиционную и именованную формы в вызове. Все именованные параметры должны идти после позиционных;
  • Реализованы аннотации во встроенном языке. Доступна аннотация @ИменованныеПараметры, которая может быть размещена на методах и конструкторах. Данная аннотация запрещает вызывать метод с позиционными аргументами (допускаются только именованные аргументы). Пример метода с аннотацией:

    @ИменованныеПараметры
    метод Тест(Параметр: Число)
    
    
    ;

  • Реализовано создание экземпляра типа по известному типу во время работы приложения. Добавлен метод Тип.СоздатьЭкземпляр();
  • Реализованы регулярные выражения. Для работы с регулярными выражениями используется новый тип Образец. Для него реализован литерал вида '\W+'. Для работы с совпадениями используется новый тип Совпадение. Он описывает очередное совпадение и работает с подстроками, захваченными группами захвата;
  • Расширен тип Строка:
    • добавлены методы Строка.Содержит()Строка.ПолноеСовпадение();
    • добавлены перегрузки для методов Строка.Разделить()Строка.Заменить().
    В случае некорректного синтаксиса регулярных выражений выбрасывается исключение ИсключениеНекорректноеРегулярноеВыражение;
  • Реализовано отражение свойств типов: перечисление имеющихся свойств, а также установка значений и чтение значений свойств через отражение;
  • Добавлена возможность форматирования чисел через вызов метода Число.Представление(Формат: Строка) по строке форматирования Формат;
  • Поведение метода Число.Представление() (без параметров) изменилось. Теперь результатом будет строка, содержащая исходное число, отформатированное в соответствии с форматной строкой "_";
  • Добавлено перечисление РежимОкругления с режимами округления чисел. Метод Число.Округлить() теперь принимает режим округления. Добавлена перегрузка метода Число.Округлить(), принимающая только режим округления и округляющая число до целого в соответствии с заданным режимом;
  • Добавлена перегрузка метода Число.ВСтроку(), позволяющая переводить число в другие системы счисления.

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

Списки отозванных сертификатов ЭЦП

Добавлена поддержка чтения и генерации списков отозванных сертификатов электронной цифровой подписи (ЭЦП) в формате CRL.

Добавлены типы криптографии:

  • СписокОтозванныхСертификатов,
  • ГенераторСпискаОтозванныхСертификатов.

Тип генерации сертификатов ЭЦП ПараметрыСертификата переименован в ГенераторСертификата.

Для сертификата добавлена возможность при генерации указать адрес сертификата издателя, точки распространения списков отзыва и сервиса OCSP (Online Certificate Status Protocol).

Чтение даты и времени из JSON

Методы ЧтениеJSON.ПрочитатьСодержимоеКакДата() и ЧтениеJSON.ПрочитатьСодержимоеКакВремя() теперь умеют читать значения из представления даты и времени. Например, из строки "2021-01-01 10:11:12". Контроль «отсечения» лишних частей даты и времени лежит на параметрах этих методов ИгнорироватьДату и ИгнорироватьВремя.

Методы СериализацияJSON.ПрочитатьМассив()СериализацияJSON.ПрочитатьОбъект() и СериализацияJSON.ПрочитатьСоответствие() умеют считывать значения из представления даты и времени в поля структур с типами Дата или Время. Например, из строки "2021-01-01 10:11:12". Контроль «отсечения» лишних частей даты и времени лежит на свойстве НастройкиЧтенияОбъектовJson.ИгнорироватьЛишниеЧастиДатыВремени.

Пустые части даты и времени игнорируются по умолчанию. Например, "2021-01-01 00:00" для типа Дата и "0001-01-01 10:11:12" для типа Время.

Работа с пустыми значениями и коллекциями в JSON

У типа НастройкиЗаписиОбъектовJson, используемого в методе СериализацияJson.ЗаписатьОбъект(), появились новые свойства:

  • НастройкиЗаписиОбъектовJson.ПропускатьНеопределено — при записи объекта в JSON будут пропущены свойства со значением Неопределено;
  • НастройкиЗаписиОбъектовJson.ПропускатьПустыеКоллекции — при записи объекта в JSON будут пропущены свойства со значениями с типом коллекций, если они пусты.

У типа НастройкиЧтенияОбъектовJson, используемого в методах СериализацияJSON.ПрочитатьМассив()СериализацияJSON.ПрочитатьОбъект() и СериализацияJSON.ПрочитатьСоответствие(), появились новые свойства:

  • НастройкиЧтенияОбъектовJson.ИнициализироватьОтсутствующиеПоля — при чтении из JSON, отсутствующие поля у структур будут заполнены явными значениями инициализации (Неопределено имеет приоритет);
  • НастройкиЧтенияОбъектовJson.ИнициализироватьПустыеКоллекции — при чтении из JSON, отсутствующие поля структур с типами коллекций будут инициализированы пустыми значениями этого типа.

Тип «ХешированиеДанных»

Тип ХешированиеДанных теперь умеет вычислять хеш на основе различных типов данных. Ранее это было возможно только для типов Байты и ПотокЧтения.

Реализован новый метод ХешированиеДанных.Хеш(), который упрощает вычисление хеша. Например:

знч Значение = новый ДатаВремя(2022, 4, 1)
знч Хеш = ХешированиеДанных.Хеш(Значение, АлгоритмХеширования.Sha1) 

Для хеширования строк появилась возможность указать кодировку, например:

знч Хеш = ХешированиеДанных.Хеш("Какое-то строковое значение",
                                 АлгоритмХеширования.Sha1,  
                                 "UTF-16") 

Тип «ГенераторQrКода»

Реализован тип ГенераторQrКода, поддерживающий генерацию QR-кодов для текста, телефона, почты, визитной карты, подключения Wi-Fi, URL, календарного события.

Тип «ПотокЧтения»

  • Добавлен метод КопироватьВФайл(). Метод реализует частый сценарий и исключает явную работу с ресурсом (потоком записи для файла) и риск забыть закрыть поток записи;
  • Добавлен метод ПрочитатьКакСтроку(). Отличие от удаленного метода ПрочитатьКакТекст() — удаляется UTF-8 BOM при чтении из потока;
  • Добавлен метод ПрочитатьКакБайты().

 

Тип «ЗаписьZip»

Добавлена поддержка многопоточного сжатия при создании zip-архивов. Максимальное количество потоков для сжатия можно указать в конструкторе ЗаписьZip; по умолчанию значение равно единице. Количество потоков для сжатия будет выбираться исходя из технической возможности использовать многопоточное сжатие и некоторых параметров.

Переименования

Во встроенном языке:

  • Ключевое слово любой переименовано в неизвестно;
  • Ключевое слово enumeration переименовано в enum.

В системе типов:

  • У типа Форматируемое метод Форматировать() переименован в Представление();
  • Метод глобального контекста Число() заменен на конструктор:
    новый Число()
  • Метод глобального контекста Булево() заменен на конструктор:
    новый Булево()
  • Метод глобального контекста Строка() удален. Вместо него следует использовать метод Объект.ВСтроку();
  • Тип СимволыМенеджер переименован в Символы;
  • Тип ФиксированныйМассив переименован в ЧитаемыйМассив;
  • Тип ФиксированноеСоответствие переименован в ЧитаемоеСоответствие;
  • Тип ФиксированноеМножество переименован в ЧитаемоеМножество;
  • Тип ФиксированнаяКоллекция переименован в ЧитаемаяКоллекция;
  • Тип ФиксированныеЗаголовкиHttp переименован в ЧитаемыеЗаголовкиHttp;
  • Тип ВременнаяЗона переименован в ЧасовойПояс;
  • Статический метод ВременнаяЗона.Текущая() переименован в ЧасовойПояс.Текущий();
  • Удалены типы ДиапазонТекста и АдминистрированиеДиапазонПортов. Вместо них следует использовать обобщенный тип Диапазон.

Глобальное переименование:

  • Идентификатор переименован в Ид;
  • ИнформационнаяБаза переименован в Инфобаза;
  • ОткрытьПотокДляЧтения переименован в ОткрытьПотокЧтения.