Перейти к содержимому

Какие функции отсутствуют во встроенном языке 1с предприятие 8

  • автор:

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

Встроенный язык является важной частью технологической платформы «1С:Предприятия 8», поскольку позволяет разработчику описывать собственные алгоритмы функционирования прикладного решения.

Встроенный язык имеет много общих черт с другими языками, такими как Pascal, Java Script, Basic, что облегчает его освоение начинающими разработчиками. Однако он не является прямым аналогом какого-либо из перечисленных языков.

Вот лишь некоторые, наиболее значимые особенности встроенного языка:

  • предварительная компиляция — перед исполнением модули, содержащие текст на встроенном языке, преобразуются во внутренний код;
  • кэширование скомпилированных модулей в памяти;
  • мягкая типизация — тип переменной определяется типом значения, которое она содержит, и может изменяться в процессе работы;
  • отсутствие программного описания объектов конфигурации — разработчик может использовать либо встроенные в платформу объекты, либо объекты, созданные системой в результате визуального конструирования прикладного решения.

Событийная ориентированность встроенного языка

Назначение встроенного языка в системе 1С:Предприятие определяется идеологией создания прикладных решений. Прикладные решения в 1С:Предприятии 8 не кодируются целиком. Большая часть прикладного решения создается разработчиком путем визуального конструирования — создания новых объектов конфигурации, задания их свойств, форм представления, взаимосвязей и пр. Встроенный язык используется лишь для того, чтобы определить поведение объектов прикладного решения, отличное от типового, и создать собственные алгоритмы обработки данных.

По этой причине модули, содержащие текст на встроенном языке, используются системой в конкретных, заранее известных ситуациях, которые могут возникнуть в процессе работы прикладного решения. Такие ситуации называются событиями. События могут быть связаны с функционированием объектов прикладного решения или с самим прикладным решением, как таковым.

Например, с функционированием объекта прикладного решения Справочник связан ряд событий, среди которых есть событие ПередЗаписью:

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

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

Таким образом можно сказать, что встроенный язык является скриптовым языком для программирования бизнес-логики, а использование модулей на встроенном языке является событийно-зависимым, т. е. выполнение модулей происходит при возникновении определенных событий в процессе функционирования прикладного решения.

Универсальные коллекции значений

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

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

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

Перечислим кратко их возможности:

Массив

Представляет собой пронумерованную коллекцию значений произвольного типа. К элементу массива можно обращаться по его индексу. В качестве элементов массива могут выступать, в частности, другие массивы. Это позволяет создавать многомерные массивы.

Структура

Представляет собой поименованную коллекцию, состоящую из пар ключ — значение. Ключ может быть только строковым, значение — произвольного типа. К элементу структуры можно обращаться по значению его ключа, т. е. по имени. Обычно используется для хранения небольшого количества значений, каждое из которых имеет некоторое уникальное имя.

Соответствие

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

Список значений

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

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

Таблица значений

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

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

Дерево значений

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

COMSafeArray

Представляет собой объектную оболочку над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.

Фиксированный массив

Неизменяемый массив. Массив заполняется системой при инициализации объектов данного типа или разработчиком, с помощью конструктора.

Редактор текстов и модулей

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

Разбор тестирования 1С:Профессионал и PMP

Встроенный язык 1С является частью платформы 1С:Предприятие, и нужен для создания алгоритмов в ходе разработки. Язык имеет схожие черты с другими языками программирования, но более нигде кроме 1С не используется. Поддерживается написание синтаксических конструкций на русском и английском языках:

Вопрос 06.82 экзамена 1С:Профессионал по платформе. С какой целью используется встроенный язык?

  1. Для определения интерфейса программы по умолчанию
  2. Для описания (на стадии разработки конфигурации) алгоритмов функционирования прикладной задачи
  3. Нет правильного ответа

Вопрос 06.83 экзамена 1С:Профессионал по платформе. Какое написание имеют функции встроенного языка?

  1. Только русское написание
  2. Только английское написание
  3. Русское и английское написание
  4. В зависимости от настроек конфигуратора

Вопрос 06.12 экзамена 1С:Профессионал по платформе. Какие функции отсутствуют во встроенном языке «1С:Предприятие 8»:

  1. Функции работы со значениями типа Дата
  2. Функции работы со значениями типа Время
  3. Функции работы со значениями типа Строка
  4. Функции работы со значениями типа Число
  5. Все вышеперечисленные функции имеются во встроенном языке

Редактор текста и модуля

Редактор текста и модуля — это один из инструментов разработки. Он используется для редактирования текстовых документов и для редактирования программных модулей конфигурации.

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

  • для редактирования текстовых документов;
  • для редактирования текстов модулей (как составную часть редактора формы).

Редактирование текстовых документов

В режиме редактирования текстовых документов редактор поддерживает все стандартные функции редактирования текста:

  • создание нового документа или открытие одного из существующих документов;
  • ввод и редактирование текста;
  • сохранение отредактированного текста;
  • печать текста.

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

Редактор текста и модуля

В дальнейшем быстрый переход по закладкам возможен по сочетанию клавиш или команде меню:

Редактор текста и модуля

Редактирование текстов модулей

Редактирование текстов модулей может выполняться в процессе создания формы объекта прикладного решения, непосредственно при разработке модулей объектов или всего приложения, и при редактировании внешнего текстового файла, содержащего текст модуля.

Помимо стандартных действий, присущих любому текстовому редактору, редактор текстов и модулей имеет ряд специфических особенностей:

Выделение цветом синтаксических конструкций

Для удобства редактирования текстов модулей редактор выделяет цветом элементы встроенного языка: ключевые слова, языковые константы, операторы, комментарии и пр.:

Редактор текста и модуля

Разработчик может использовать цвета выделения, установленные по умолчанию, или настроить их самостоятельно. В общем случае система сама отслеживает необходимость включения режима выделения цветом. Однако в ситуации, когда система «не знает» о том, что редактируется текст модуля (например, если редактируется внешний текстовый файл, содержащий текст модуля), разработчик может включить режим выделения цветом вручную, используя меню конфигуратора:

Редактор текста и модуля

Группировка

При просмотре модулей редактор позволяет объединять некоторые синтаксические конструкции языка в группы, сворачивать и разворачивать их. Использование группировки синтаксических конструкций позволяет лучше воспринимать различные части текста, а также переносить и копировать группы целиком:

Редактор текста и модуля

Свернутый текст замещается специальным маркером, который позволяет просмотреть содержимое свернутой группы в виде подсказки:

Редактор текста и модуля

Разработчику предоставляется возможность настраивать режим группировки, указывая, какие синтаксические конструкции могут группироваться, и каким должно быть исходное состояние группировки (свернутая или развернутая) при открытии документа. Таким образом, он может настроить, например, использование группировок «по максимуму»:

Редактор текста и модуля

Области

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

Каждой области текста, которую выделяет разработчик, он может дать собственное имя. Это позволяет простым и понятным образом выделять части модуля, имеющие сходный смысл.

Редактор текста и модуля

Области выделяются с помощью двух инструкций препроцессора: #Область и #КонецОбласти. Единственное назначение этих инструкций — обозначить группируемые и сворачиваемые строки модуля.

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

Операции с блоками

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

Редактор текста и модуля

Форматирование модуля

Хорошим стилем написания модулей считается использование синтаксического отступа для выделения управляющих конструкций встроенного языка. Редактор позволяет автоматически форматировать текст при его вводе, и кроме этого, выполнять автоматическое форматирование уже введенного текста.

Редактор текста и модуля

Результат автоматического форматирования:

Редактор текста и модуля

Увеличение/уменьшение отступа

Наряду с автоматическим форматированием всего выделенного текста, редактор поддерживает также операции сдвига выделенного блока вправо или влево на шаг табуляции.

Это облегчает ручное форматирование больших фрагментов кода.

Добавление/удаление комментариев

Также редактор содержит очень удобную для разработчика функцию автоматической (одним нажатием мыши) установки и снятия комментариев на выделенный текст. Такая возможность часто используется при отладке модулей:

Редактор текста и модуля

Добавление/удаление переноса строки

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

Таким образом, отладив запрос в консоли запросов, разработчик может просто скопировать текст запроса из консоли, вставить его в модуль и одним движением добавить перенос строки ко всем строкам текста запроса:

Редактор текста и модуля

Переход по процедурам и функциям

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

Редактор текста и модуля

Редактор текста и модуля

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

Переход к определению процедур и функций

Редактор позволяет автоматически переходить к определению процедуры или функции, использованной в тексте модуля. Для этого достаточно установить курсор на имени нужной функции в теле модуля и выполнить команду контекстного меню или нажать «горячую» клавишу. В окне редактора будет открыт текст искомой процедуры или функции:

Редактор текста и модуля

Контекстная подсказка

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

Редактор текста и модуля

Контекстная подсказка также работает и для параметров некоторых методов, если эти параметры задаются строковыми литералами.

Редактор текста и модуля

Копирование имен объектов и реквизитов

При написании текста модуля разработчик может просто перетаскивать мышью имена объектов или их реквизитов из дерева метаданных в нужное место модуля:

Редактор текста и модуля

Проверка модуля

Редактируемый модуль может быть проверен на правильность использования синтаксических конструкций встроенного языка, корректность обращений к методам и свойствам объектов «через точку», а также на корректность некоторых параметров, имеющих тип «Строка»:

Редактор текста и модуля

При наличии ошибок в модуле, их список выдается в окне состояния. Щелкнув мышью на сообщении об ошибке, можно перейти к строке модуля, вызвавшей ошибку. При желании разработчик может включить автоматическое выполнение синтаксического контроля модуля при его закрытии или сохранении всей конфигурации.

Кроме этого конфигуратор поддерживает выполнение полной проверки всех модулей, содержащихся в прикладном решении.

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

Ограничение доступа к модулю

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

Редактор текста и модуля

Использование шаблонов

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

Язык программирования от 1С: в «1С: Исполнитель» и «1С:Предприятие.Элемент»

На дату написания статьи готовится к выходу в публичный доступ технология «1С:Предприятие.Элемент». В данный момент большое количество разработчиков следят за развитием новой технологии «1С: Исполнитель» и ожидают полноценного выхода «1С:Предприятие.Элемент».

В обеих технологиях используется совершенно новый язык программирования. В данной статье будут рассмотрены новые возможности языка «Исполнитель». Поскольку примеры будут приводится с использованиям интерпретатора «1С:Исполнитель», далее по тексту будем называть этот язык «Исполнитель». Однако этот материал будет актуален и для будущей технологии «1С:Предприятие.Элемент».

В первую очередь речь пойдет о принципиально новых функциях, которые отсутствовали в языке «1С: Предприятие», поэтому статья будет полезна 1С разработчикам, которые хотят подготовиться к выходу новых технологий и расширить свой технологический стек за пределы основной платформы.

Что запускаем?

При написании материала использовался «1С:Исполнитель» версии 4.0.5.1. «1С:Исполнитель» выбран как платформа для изучения нового языка поскольку это самый доступный из всех новых технологий 1С – за счет небольшого количества объектов, поставляемых в стандартной библиотеке, приложение уже доступно для скачивания.

Для запуска скриптов используется стандартная поставка для операционной системы Windows и плагин для интеграции с Visual Studio Code. Поскольку «1С:Исполнитель» представляется как средство для выполнения задач системного администрирования, каждый скрипт не зависит от какого-либо внешнего контекста и может запускаться самостоятельно.

В версии языка, используемого в текущей итерации «1С:Исполнитель», нет поддержки подключения объектов из других файлов, поэтому в данный момент «Исполнитель» может работать только с одним скриптом. Возможность разделять код на части по разным файлам уже анонсирована для версии 5 продукта «1С:Исполнитель» и однозначно будет присутствовать в публичной версии технологии «1С:Предприятие.Элемент».

Один раз про основные моменты

Из-за того, что технически язык не является потомком и разрабатывался с нуля для решения задач, отличных от встроенного языка платформы «1С:Предприятие», синтаксис технологий может различаться во множестве базовых правил. Такие базовые правила не требуют дополнительных пояснений, поэтому будут в материале опущены. Например, закрытие блоков кода с помощью «;» или использование ключевых слов в нижнем регистре.

1.png

Рисунок 1 – Закрытие блоков кода с помощью “;”, ключевые слова в нижнем регистре и новый синтаксис тернарной операции

Строгая типизация

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

Пример объявления типов приведен на рисунке. Тип указывается через двоеточие после имени переменной или с помощью литерала типа – элемента программы, непосредственно представляющего значение.

2.png

Рисунок 2 – Объявление типов

Также объявления типа требуют функции и процедуры. В языке такие команды, как «Функция» и «Процедура» отсутствуют. Вместо них используются общее понятие «Метод». Метод с указанным типом возвращаемого значения при объявлении выполняет роль функции, метод без указания типа – процедуры.

3.png

Рисунок 3 – Объявление типов у методов

Перегрузка и интерполяция строк

Появилась возможность полноценной реализации полиморфизма за счет перегрузки методов. Во встроенном языке 1С нельзя было объявить два метода с одинаковыми именами.

Теперь разработчик может описать две разных реализации для одного метода, отличающиеся составом параметров, например:

4.png

Рисунок 4 – Демонстрация перегрузки методов и интерполяции строк

5.png

Рисунок 5 – Шуточная иллюстрация перегрузки методов на примере разных человечков

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

Также в демонстрационном методе приведен пример интерполяции строк – небольшое, но очень полезное нововведение, которое позволит сэкономить разработчику большое количество времени. Любая строка в «Исполнителе» анализируется на наличие символов «%» или «$». В случае вхождения символа в строку исполнитель самостоятельно подставляет параметр, соответствующий набору символов, следующим за знаком. Больше не требуется использовать функции замены или разделять строки – язык сделает это самостоятельно.

Функциональные типы и лямбда — выражения

В «1С:Исполнитель» разрешается присваивать переменной значение функционального типа – ссылку на собственный метод или существующий из стандартной библиотеки.

Функциональные типы увеличивают гибкость кода, повышая актуальность библиотечного подхода разработки. Как пример, можно описывать более абстрактные методы, которые будут оперировать числом и математической функцией как входными параметрами. Параметр — функция в таком случае будет представлена в виде «анонимной функции» — новым термином для 1С разработчиков.

Анонимная функция не имеет имени, уникальной ссылки и, соответственно, конкретной реализации. Это лишь описание входных и выходных параметров метода. Любой метод, типы параметров которого совпадают с описанием анонимной функции, может быть назначен переменной функционального типа. Таким образом, разработчик может передать не только объект, но и операцию, которую необходимо провести над объектом:

6.png

Рисунок 6 – Пример использования анонимных функций в качестве параметра

Сама переменная функционального типа описана с помощью следующего нововведения – ламбда-операции. Это особая синтаксическая конструкция, с помощью которой разработчик может описывать входные и выходные типы у метода, без явного его определения. Рассмотрим несколько примеров:

(тип_входного_параметра) -> тип_выходного_параметра – в левой части выражения количество входных параметров может быть произвольное, соответственно разработчик может указывать типы через запятую в скобках. В правой части указывается возвращаемое значение, если оно имеется.

(Конфигурация) -> Конфигурация – в рамках данного скрипта я определил произвольную структуру под названием «Конфигурация». Нам не так важно, что она в себе содержит, главное, что теперь это наш тип, который мы ожидаем получить в результате выполнения метода.

Конечно, разработчик может определять анонимные функции через более простые типы, например:

(Строка, Число, Объект) -> Строка

В последнем примере разработчик на встроенном языке программирования 1С увидит знакомый термин «Объект». В синтаксисе «Исполнителя» реализована строгая иерархия типов, где все большая часть типов расширяет базовый тип «Объект». Поэтому не стоит ожидать от этого типа привычной для встроенного языка 1С логики. Здесь «Число», «Строка», «Булево» и даже определенная мной структура «Конфигурация» — это всё «Объект». Здесь наступает момент, когда пора познакомиться с иерархией типов – новой парадигмой в языке «1С:Исполнитель».

Иерархия типов

В языке каждый собственный или библиотечный тип является производным от более базовых, заранее описанных разработчиками. Рассмотрим иерархию типа «Булево» из официальной документации, находящейся в общем доступе:

7.png

Рисунок 7 – Иерархия типа «Булево»

«Булево» является производной сразу от двух типов – «Сравнимое» и «Представляемое». От «Сравнимое» ему досталась возможность проводить сравнение через метод Сравнить() или через операции , >=,

Разработчики реализуют иерархическую систему для всех типов, используемых в новых технологиях. Например, тип «Массив» описан более комплексным взаимодействием типов друг с другом.

8.png

Рисунок 8 – Иерархия типа «Массив»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *