Основы встроенного языка
Прикладные решения в 1С:Предприятие не создаются только путем визуального конструирования, для переопределения стандартного поведения объектов и описания собственных алгоритмов функционирования и обработки данных используется встроенный язык.
Код на встроенном языке пишется в программных модулях.
Типизация переменных
Система 1С:Предприятие поддерживает не жесткую типизацию переменных, так как тип переменной определяется ее значением. Неявным определением переменной является ее первое упоминание в левой части оператора присваивания. Допускается явное объявление переменных с помощью Перем, в этом случае расширяется контекст переменных (будут доступны в других процедурах и функциях данного программного модуля), при использовании ключевого слова Экспорт, переменные будут доступны при обращении к контексту этого модуля из других модулей. Контекст – это окружение модуля, т.е. контекст описывает, какие ему будут доступны переменные, объекты, свойства, методы и события.
Тип переменной может поменяться в каждой новой строчке оператора.
Типы данных
Тип данных – это атрибут определяющий, какого рода данные могут содержаться в переменной или объекте конфигурации.
Классификация типов данных:
- Определенные на уровне платформы:
- Примитивные типы
- Общие типы
- Универсальные коллекции значений
- Интерфейсные типы
- Образуемые в прикладном решении:
- Прикладные типы (эти типы данных существуют только в конкретном прикладном решении и первоначально в платформе их нет)
Примитивные типы
Система 1С:Предприятие поддерживает примитивные типы данных описанные в Синтакс-помощнике в ветке «Общее описание встроенного языка – Примитивные типы».
Неопределено
Пустое значение неизвестного типа. До установки первого значения переменной, тип у нее будет Неопределено. Его можно сравнивать со значением любого типа.
NULL
Значение данного типа, является литералом и используется для определения отсутствия значения при работе с записями в базе данных. Значение NULL проставляется системой в полях записей результата запроса, для которых не найдено соответствие в другой таблице при внешнем соединении.
Число
Значение данного типа может представлено любым десятичным числом. Дробная часть указывается через точку.
Строка
Значение данного типа содержит текст в формате Unicode произвольной длины.
Многострочная строка. Комментарий в разрыв вставлять нельзя, иначе он войдет в строку.
Конкатенация (слияние) строк со значениями других типов.
Если первое значение будет числовым, то система будет пытаться выполнить арифметическую операцию. Строку “ручка” система не может привести к типу Число.
Для решения данной проблемы достаточно в начале поставить двойные кавычки.
Многострочная строка. Комментарий в разрыв вставлять нельзя, иначе он войдет в строку.
Дата
Значение данного типа содержит дату григорианского календаря с 01 января 0001 года, а также время с точностью до 0,1 миллисекунды.
Последовательность записи: ‘ГГГГММДДччммсс’
- ГГГГ – четыре цифры года
- ММ – две цифры месяца
- ДД – две цифры даты
- чч – две цифры часа (в 24-х часовом формате)
- мм – две цифры минут
- сс – две цифры секунд
У даты всегда существует время, даже если не указывать его система сама проставит время по нулям.
Для задания пустой даты используется следующие литералы.
Для получения текущей даты используется функция ТекущаяДата()
Чтобы значение типа Дата увеличить на 1 секунду необходимо к дате прибавить число 1, получается, если нужно увеличить на сутки, то нужно прибавить число 86400.
Булево
Значениями данного типа выступают два литерала: Истина и Ложь.
Тип
Значение данного типа используются для идентификации типа значения. Данный тип возвращается функциями ТипЗнч() иТип().
Общие типы
Для реализации общей функциональности прикладного решения в системе 1С:Предприятие предусмотрены общие типы, описанные в Синтакс-помощнике в ветке «Общие объекты».
Универсальные коллекции значений
Для хранения временных наборов данных в течение сеанса работы пользователя система предлагает Универсальные коллекции значений, описанные в Синтакс-помощнике в ветке «Универсальные коллекции значений».
Рассмотрим часто используемые универсальные коллекции.
Массив
Предназначен для доступа к элементам массива, его методам и конструктору.
Индексирование элементов коллекции начинается с 0 (нуля).
Структура
Представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка.
К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Структура используется обычно для хранения небольшого количества значений, каждое из которых имеет некоторое имя.
Соответствие
Представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть любого типа.
Соответствие чем-то похоже на Структуру, это тоже коллекция пар Ключ и Значение. Но в отличие от Структуры, в Соответствие, чтобы получить значение по определенному ключу, нужно обращаться не как к свойству объекта, а через квадратные скобки.
Интерфейсные типы
Для организации визуального взаимодействия прикладного решения с пользователем в системе 1С:Предприятие предусмотрены интерфейсные типы описанные в Синтакс-помощнике в ветке «Интерфейс (обычный)» или «Интерфейс (управляемый)».
Прикладные типы
Такие типы данных существуют только в конкретном прикладном решении и первоначально в платформе их нет. Новые типы данных создаются при добавлении новых прикладных объектов, таких как константы, справочники, документы и т.д.
Системные перечисления
В платформе 1С:Предприятие есть жестко заданные значения, так называемые системные перечисления, которые менять нельзя. Они предназначены для определения некоторого набора предопределенных значений. Доступ к системным перечислениям осуществляется как к свойствам глобального контекста.
Операторы и синтаксические конструкции
Для выполнения различных операций и упрощения программирования на встроенном языке используются Операторы и синтаксические конструкции. Они представлены в Синтакс-помощнике в ветке «Общее описание встроенного языка – Операторы и синтаксические конструкции».
Вычислить выражение по условию
Позволяет вычислить одно из двух заданных выражений в зависимости от результата вычисления логического выражения.
Условие – Если
Оператор Если управляет выполнением программы, основываясь на результате одного или более логических выражений.
Цикл – Для
Оператор цикла Для предназначен для циклического повторения операторов, находящихся внутри конструкции Цикл – КонецЦикла.
Цикл – Для каждого (обход коллекций значений)
Оператор цикла Для каждого предназначен для циклического обхода коллекций значений.
Виды программных модулей
Встроенный язык в системе 1С:Предприятие позволяет переопределить стандартное поведение объектов и описать собственные алгоритмы обработки данных. По этой причине программные модули, содержащие код на встроенном языке, используются в конкретных, заранее известных местах и обращение к ним происходит при определенных событиях объектов прикладного решения – такое поведение называется событийным. В Синтакс-помощнике у различных объектов можно увидеть список возникающих событий.
Код на встроенном языке пишется в специальных программных модулях. Программный модуль – это текст на встроенном языке, содержащий объявления переменных, процедур и функций с необходимыми алгоритмами, вызываемые системой в определенные моменты работы прикладного решения.
В платформе существует несколько видов программных модулей:
- Модуль обычного приложения
- Модуль управляемого приложения
- Модуль внешнего соединения
- Модуль сеанса
- Общие модули
- Модули объектов
- Модули менеджера
- Модуль команды
- Модули форм
- Модули набора записей
Программный модуль может содержать 3 раздела:
- Раздел объявления переменных
- Раздел описания процедур и функций (порядок следования процедур и функций не имеет значения)
- Раздел основной программы
Модуль обычного приложения
Предназначен для отработки процедур при старте и завершении работы клиентских приложений «Толстого клиента» в режиме «Обычное приложение».
Существует в единственном экземпляре.
Содержит глобальные переменные, которые хранятся на клиенте во время работы программы.
Содержит все разделы программного модуля.
Модуль управляемого приложения
Предназначен для отработки процедур при старте и завершении работы клиентских приложений: «Тонкий клиент», «Веб-клиент» и «Толстый клиент» в режиме «Управляемое приложение».
Компилируется на стороне клиента.
Существует в единственном экземпляре.
Содержит глобальные переменные, которые хранятся на клиенте во время работы программы.
Содержит все разделы программного модуля.
Модуль сеанса
Предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы.
Исполнение происходит после начала исполнения модуля обычного приложения или модуля управляемого приложения (модуля внешнего соединения).
Существует в единственном экземпляре.
Компилируется на стороне сервера.
Он автоматически выполняется при старте прикладного решения в момент загрузки конфигурации.
Всегда исполняется в привилегированном режиме.
Содержит только раздел описания процедур и функций, при этом процедуры и функции не могут быть экспортируемыми.
Модуль внешнего соединения
Предназначен для отработки процедур при старте и завершении работы приложения в режиме COM-соединения для подключения к определенной внешней базе данных.
Существует в единственном экземпляре.
Компилируется на стороне сервера.
Содержит переменные, процедуры и функции, которые будут доступны для внешнего приложения.
Модуль присутствует только в сессии внешнего соединения.
Содержит все разделы программного модуля.
Общие модули
Предназначены для часто используемых процедур и функций, которые вызываются из других модулей.
Компилируется на стороне сервера и/или клиента, поэтому процедуры и функции могут предваряться директивой компиляции: &НаКлиенте, &НаСервере.
Имя общего модуля может совпадать с именами свойства глобального контекста, но только если модуль глобальный.
Содержат только раздел описания процедур и функций.
Модуль объекта
Предназначен для обработки стандартных событий и расширения функциональности прикладных объектов информационной базы за счет объявления переменных, процедур и функций на встроенном языке.
Существует у большинства прикладных объектов конфигурации: Справочники, Документы, Обработки, Отчеты, Планы видов характеристик и др.
Для отмены выполнения стандартных процедур-обработчиков (ОбработкаПроведения, ПередЗаписью, ПриЗаписи, ПередУдалением) используется код:
Отказ = Истина;
Для расширения контекста объекта новым методом, данный метод должен размещаться в модуле объекта и быть экспортным. Для обращения к этому методу, можно воспользоваться методом СоздатьОбъект(). Например, чтобы обратиться к методу Рассчитать() в документе НачисленияСотрудникам, нужно написать код:
Документы.НачисленияСотрудникам.СоздатьДокумент().Рассчитать()
Компилируется на стороне сервера.
Содержит все разделы программного модуля.
Модуль менеджера
Позволяет расширить функциональность объекта метаданных за счет процедур и функций. Фактически это позволяет описать методы, которые относятся не к конкретному объекту базы данных (номенклатура Ручка), а к самому объекту конфигурации (справочник Номенклатура) за счет этого можно обрабатывать не один объект базы данных, а список объектов (Ручка, Ластик, Карандаш и т.д). Например, печать списка номенклатуры. Также позволяет сформировать представление реквизитов объекта, для этого используются два события ОбработкаПолученияПолейПредставления() и ОбработкаПолученияПредставления().
Существует у большинства прикладных объектов конфигурации: Справочники, Документы, Обработки, Отчеты, Планы видов характеристик и др.
Для обращения к методам, находящихся в модуле менеджера, не требуется обращаться к экземпляру объекта данных, обращение происходит напрямую к методу. Например, для обращения к методу ПечатьРасчетногоЛиста() в документе РасходнаяНакладная, нужно написать код:
Документы.НачисленияСотрудникам.ПечатьРасчетногоЛиста()
Компилируется на стороне сервера.
Содержит только раздел описания процедур и функций.
Модуль формы
Предназначен для обработки действий пользователя, например, нажатие кнопки, выполнение команды формы, ввода, выбора и т.д.
Существует у каждой формы.
Модули управляемых форм компилируются и исполняются на стороне сервера и клиента, поэтому процедуры и функции предваряются директивой компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста и &НаКлиентеНаСервереБезКонтекста. При этом клиентские алгоритмы исполняются на стороне клиента (на клиентском компьютере), а серверные на стороне сервера.
Содержит все разделы программного модуля.
Модуль команды
Предназначен для описания действий, которое должно выполнить прикладное решение при вызове команды, например, печать.
Компилируется на стороне сервера и клиента, поэтому процедуры и функции предваряются директивой компиляции: &НаКлиенте, &НаСервере и &НаКлиентеНаСервере.
Содержит только раздел описания процедур и функций.
Модуль набора записей
Является аналогом «Модуля объекта», но существует у регистров и последовательностей. Предназначен для обработки стандартных событий при записи наборов записей.
Компилируется на стороне сервера.
Содержит все разделы программного модуля.
Обработчики событий
Обработчики событий ‑ используются для привязки процедур-обработчиков событий к событиям объектов, что позволяет динамически расширять функциональность объекта.
С помощью команды ДобавитьОбработчик можно назначить обработчик события на COM объект и экземпляр объекта 1С:Предприятие.
При определении обработчика события на экземпляр объекта 1С:Предприятие количество параметров в процедуре – обработчике на один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект).
Добавление обработчиков для COM-событий в 1С может быть полезно для взаимодействия с внешними приложениями или библиотеками, поддерживающими COM-интерфейсы. Использование COM в 1С требует определенной подготовки и знания специфики работы с компонентами автоматизации COM.
При определении обработчика события на COM-объект количество параметров в процедуре – обработчике должно равняться количеству параметров соответствующего события объекта.
Ссылка на событие Application.WorkbookBeforeClose: https://learn.microsoft.com/ru-ru/office/vba/api/excel.application.workbookbeforeclose
При назначении обработчика события на объект (экземпляр объекта 1С:Предприятие, COM объект) процедура, отвечающая за обработку данного события может располагаться в «пределах видимости», при этом выбор модуля не важен.
Подписки на события
Подписки на события ‑ это общие объекты конфигурации, которые позволяют описывать в общих модулях внешние обработчики на события разных объектов (события возникающих в модуле объекта, в модуле менеджера или в модуле набора записей).
При определении подписки на событие для разных объектов названия событий у этих объектов должны совпадать.
У объекта может быть любое количество подписок, располагаемых как в одном, так и в разных общих неглобальных модулях.
При определении подписки на событие количество параметров в процедуре – обработчике всегда на один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект).
При наступлении события выполняется следующая последовательность действий:
- отрабатывает событие самого объекта (если есть, отрабатывают аннотации в расширениях)
- отрабатывают подписки на событие
Нужно учитывать, если на одно событие назначено несколько подписок, эти процедуры вызываются в произвольном порядке.
Локализация
Локализация – это процесс адаптации программы под конкретные национальные требования.
Код локализации используется для указания региональных установок информационной базы, а также для упрощения адаптации прикладных решений к конкретным региональным установкам, при использовании форматных строк.
Для создания интерфейса программы на разных языках используется объект конфигурации «Язык». Количество языков для «Конструктора строк на разных языках» определяется в конфигурации в ветке «Общие – Языки», а также может расширяться программно. Объект языка не содержит базы слов и перевод их, это всего лишь подобие переменной, которая определяет название используемого языка. Название языка и код языка можно указывать любое, но при разработке мобильного приложения нужно указывать согласно стандарту ISO 639.
Важно! Если указали код языка и ввели тексты в свойства «Синоним» или «Заголовок» на этом языке, то при изменении кода языка, введенный текст будет потерян, но восстановить его можно указав прежний код языка.
Использование нескольких языков в конфигурации и локализации интерфейса платформы создаются многоязыковые прикладные решения.
Пример:
Сообщить(НСтр("ru = 'Добрый вечер!'; en = 'Good Evening!'"));
Код локализации сеанса можно поменять в параметрах на закладке «Запуск 1С:Предприятие – Дополнительное» в свойстве Код локализации сеанса.
Сменить язык просмотра (редактирования) конфигурации можно пунктом меню «Конфигурация – Язык редактирования конфигурации…» или в строке состояния справа от кнопки «NUM» раскрыть выпадающий список и выбрать необходимый язык.
В разных странах принято разное написание и отображение чисел, дат и времени, платформа позволяет настроить прикладное решение под региональные установки в зависимости от явно заданного языка запуска и от настроек операционной системы, при этом меняется порядок строк в базе данных. Настройку можно осуществить, выполнив пункт меню «Администрирование – Региональные установки информационной базы…».
Число прописью
Это функция предназначена для формирования представления числа прописью в соответствии с форматной строкой на одном из языков, поддерживаемой платформой.
Параметр Л(L) – задает код локализации.
Например, одно и тоже число можно вывести прописью на русском и английском языках:
Ваганов Сергей, эксперт в области разработки прикладных решений на платформе 1С:Предприятие, преподаватель-методист CORS Academy и автор курса «Разработчик 1С с нуля до профессионала».
































































































