Модули в 1С (7 из 100 дней)

Модули в 1С (7 из 100 дней)

Понятие модули

Модуль - это объект метаданных, содержащий программный код и определяющий поведение приложения

Можно сказать, что модуль - это отдельный файл, в котором располагается текст алгоритма. В модуле размещаются код и алгоритмы поведения программы, а все, что написано в модуле, является СОДЕРЖИМЫМ МОДУЛЯ.

Модуль может быть пустым, как может быть пустым текстовый файл.

Зачем нужны модули?

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

Модули бывают двух видов: общие модули и специальные модули объектов метаданных (Говорили про это на 3-ем дне из 100 (https://dzen.ru/a/an2ccMSmQxrrc1dK))

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

Пример:

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

Модули объектов метаданных - это программные модули в платформе 1С:Предприятие, которые привязаны к конкретным объектам метаданных.

К ним относятся модули:

- Модули форм (Описывают поведение экранных форм)

- Модули объектов (Описывают поведение отдельных экземпляров объектов)

- Модули менеджеров (Описывают поведение целого класса объектов)

- Модули конфигурации

Где найти модули в программе:

- Общие модули располагаются в отдельной ветке дерева конфигурации

Общие модули
Общие модули

- Модули объектов метаданных открываются через контекстное меню объекта конфигурации

Модули в 1С (7 из 100 дней)

- Модули формы открываются через редактор формы

Модули в 1С (7 из 100 дней)

Общие модули

Как мы уже говорили выше, "общий модуль" - это универсальный объект метаданных, который потенциально может быть использован различными объектами.

Расположение и свойства общий модулей:

- Общие модули расположены в ветке метаданных "Общие"

- Можно создавать неограниченное количество общих модулей

- Каждый общий модуль должен отвечать за ОДНУ функциональность программы

- Достаточно один раз описать алгоритм в общем модуле и вызывать его из других мест

Основные свойства общего модуля:

- Имя - по нему обращаются к модулю в коде. Пишут по правилам формирования идентификаторов. Например, УчётНДС, СуммаНДС ()

- Синоним - существует для общности, пользователи его не видят

- Комментарий - не заполняется. Виден другим разработчиком в конфигураторе

Давайте создадим наш первый общий модуль:

1. В дереве конфигуратора выберем "Общий модуль" и создадим его

Модули в 1С (7 из 100 дней)

2. Также создадим новый документ с четырьмя реквизитами (Слагаемое1, Слагаемое2, Множитель, Результат) с типом данных "Число" и создадим новую обработку с теми же реквизитами

Модули в 1С (7 из 100 дней)

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

Модули в 1С (7 из 100 дней)

4. Проворачиваем тоже самое в обработке.

Давайте убедимся, что все работает

Модули в 1С (7 из 100 дней)

Но к нам должна была прийти мысль - "Зачем мы сделали два раза один и тот же код?"

Для этого как раз и нужен общий модуль, который мы будем вызывать:

1. В созданном общем модуле задаем имя "РаботаСФормой" и ставим галочку только на пункте "Клиент"

Модули в 1С (7 из 100 дней)

2. Пропишем следующий код (Мы создаем функцию, в которую будем передавать три наши параметра; Для использования этой функции пропишем "Экспорт"; Для вывода конечного результат пропишем "Возврат Показатель")

Модули в 1С (7 из 100 дней)

3. Теперь обратимся к нашему модулю и созданной функции через код наших объектов (Документ и Обработка) и пропишем следующий код

Модули в 1С (7 из 100 дней)

Убедимся, что все работает

Модули в 1С (7 из 100 дней)

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

Глобальный модуль

Если у общего модуля установлен флажок "Глобальный", использование (Вызов) такого модуля отличается принципиально

- К общему модулю обращаются по имени, а к его алгоритму через точку:

Модули в 1С (7 из 100 дней)

- Если код нужен часто, вы захотите вызывать его без имени модуля:

Модули в 1С (7 из 100 дней)

- Алгоритмы глобальных модулей доступны напрямую и во всех частях программы

ВАЖНО

Не следует злоупотреблять использованием глобального модуля

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

Например, установим флажок на глобальном модуле, и создадим в форме новую команду с таким же именем "РассчитатьПоказатель".

При запуске платформы увидим следующую ошибку:

Модули в 1С (7 из 100 дней)

Серверные и клиентский модули

1. Серверные модули

- Серверный модуль выполняется на сервере - большом мощном компьютере, связанном с базой данных

- Отмечен флажком "Сервер"

Модули в 1С (7 из 100 дней)

- Используется для сложных расчетов и работы с данными

- Имя модуля по стандарту имеет суффикс "Сервер" или его нет вовсе (РаботаСФайламиСервер; ЦифроваяПодписьСервер)

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

Клиенты зачастую сильно ограничены в вычислительно мощности, поэтому сложные расчеты принято выполнять на стороне сервера.

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

2. Клиентские модули

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

- У него в свойствах включен флажок "Клиент"

Модули в 1С (7 из 100 дней)

- Говорят "модуль выполняется на клиенте"

- Имя модуля по стандарту обязательно имеет суффикс "Клиент" (РаботаСФайламиКлиент; ЦифроваяПодписьКлиент)

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

- Показать сообщение на экране

- Прочитать файл с диска компьютера пользователя

- Открыть окно рабочего места

Модули с общим кодом, исполняемым где угодно, имеют оба флажка и суффикс "КлиентСервер". Например, СтроковыеФункцииКлиентСервер.

Модули в 1С (7 из 100 дней)

Посмотрим на практике:

1. Изменим имя нашего модуля, работающего на стороне клиента, на "РаботаСФормойКлиент", платформа автоматически изменит имя во всех функциях, где мы его использовали

Модули в 1С (7 из 100 дней)

2. Создадим новый общий модуль с именем "РаботаСФормойСервер", установив флажок на "Сервер" и общий модуль с именем "РаботаСФормойКлиентСервер", установив флажок на "Клиент" и "Сервер"

Модули в 1С (7 из 100 дней)

Чтобы быстро узнать какие объекты работают с разными модулями, вызовем "Синтаксис-помощник" и узнаем о нужном объекте в разделе "Доступность":

Модули в 1С (7 из 100 дней)

Модуль с флагом "Вызов Сервера"

Для организации взаимодействия между клиентом и сервером мы можем использовать специальные модули с флагом "Вызов Сервер"

- В общем случае клиентские модули не видят модули серверные

- Сервер точечно в явном виде "разрешает" вызывать свои компоненты с клиента

- Модули вида "Вызов сервера" предназначены для взаимодействия сервера с клиентами

- Клиент может вызывать сервер и выполнить алгоритм на сервере

Давай разберемся на практике:

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

- Создадим константу "НазваниеОрганизации" строчного типа данных и с длинной в 150 символов

Модули в 1С (7 из 100 дней)

- В предприятии сформируем нашу константу с именем "Путь в 1С с нуля"

Модули в 1С (7 из 100 дней)

- В нашем общем модуле пропишем следующую процедуру:

Модули в 1С (7 из 100 дней)

- Обратимся к нашей процедуру через форму документа, для этого создадим новую команду "Приветствие" со следующим кодом.

Модули в 1С (7 из 100 дней)

- Проверим, как отображается наше сообщение

Модули в 1С (7 из 100 дней)

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

- В общем модуле "РаботаСФормойСервер" пропишем следующий код

Модули в 1С (7 из 100 дней)

- Создадим новый общий модуль "РаботаСФормойВызовСервера" с установленным флажком "Вызов Сервера" и пропишем следующий код

Модули в 1С (7 из 100 дней)

- В нашем клиентском модуле изменим код

Модули в 1С (7 из 100 дней)

- Запустим платформу и увидим наши изменения

Модули в 1С (7 из 100 дней)

Привилегированный режим

- Привилегированный режим применяют, когда код нужно выполнить в обход всех установленных ограничений прав доступа

- В общем модуле можно установить флажок "привилегированный"

- В этом случае код будет выполнен, даже если пользователь не имеет права на работы с объектом метаданных

Модули в 1С (7 из 100 дней)

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

Повторно используемые значения

- Для сложных расчётов, которые выполняются долго и могут повторяться может на некоторый промежуток времени сохранить результат

- Если этот результат затребовать в нескольких местах программы, он не будет рассчитываться заново, а будет взят из специального хранилища - кеша

- Кешируется - повторное значение не вычисляется, а используется посчитанный ранее результат

Модули в 1С (7 из 100 дней)

Модули с повторным использованием значений нужны в небольшом спектре задач, когда это оправдано по времени:

- Кешировать рекомендуется только тяжелые расчёты, которые нужны чаще, чем длится время расчёта

- Хранение результатов в кеше требует памяти

- Если кеш очень большой, тратится время на поиск нужного результат в нём

Таким модулям принято давать суффикс "ПовтИсп", например, "ОбщегоНазначенияПовтИсп"

Модули приложения, объектов, форм

Модуль приложения - это клиентский модуль, выполняется только на стороне клиента, не имеет доступа к базе данных

Модуль приложения:

- Принадлежит самой конфигурации

- Открывается от корня дерева метаданных

- Отвечает за поведение окна приложения в целом

В модуле приложения можно определить, что будет происходить:

- Перед запуском и при запуске

- По внешнему событию, например, при срабатывании сканера штрихкода

- Перед выходом из программы

Модуль сеанса:

- Принадлежит самой конфигурации

- Работает на сервере

- Отвечает за начало сеанса работы пользователя на сервере

- Запускается и отрабатывает до начала работы пользователя в базе, непосредственно перед запуском модуля приложения

Общая схема запуска приложения:

1. Пользователь запускает приложение

2. Пользователь авторизуется в базе данных

3. На сервере отрабатывает модуль сеанса, который ничего не знает о том, что запускается: он просто понимает, что кто-то зашел в базу и подготавливает для пользователя сеанс работы

4. После запуска сеанса на стороне клиента запускается модуль приложения, в котором может быть выполнен код уже непосредственно на компьютере пользователя: проверка формата запуска (вида клиента) вывод приветственных сообщений

Модуль приложения

Давайте разберем модуль приложения (Разработаем приветствие при запуске платформы)

1. Откроем модуль приложения в конфигурации

Модули в 1С (7 из 100 дней)

2. Пропишем следующий код и воспользуемся нашей функцией, созданной в общем модуле "РаботаСФормойКлиент"

Модули в 1С (7 из 100 дней)

3. Запустим платформу и увидим наше сообщение

Модули в 1С (7 из 100 дней)

Тот код, что мы реализовали - некорректен и так делать не стоит.

Модули объектов

- Модули объектов отвечают за поведение отдельных экземпляров объектов

- В модулях объектов доступны данные объектов, и программист может контролировать, как объект работает

- В модуле справочника "Контрагенты" можно реализовать код, который будет:

1. Заполнять нового контрагента при создании

2. Проверять правильность заполнения перед записью

3. Записывать дополнительные сведения в БД вместе с самим контрагентом

- Для этого в модулях объектов создают обработчики событий

Самые типичные события объектов:

- ПередЗаписью - срабатывает перед записью объекта в базу данных.

- В обработчике можно дополнить или изменить записываем данные

- Например, собрать полное наименование контрагента из краткого и организационно-правовой формы

- ПриЗаписи - объект записан в базу данных, но сама операция работы с данными (транзакция) не завершена

- Например, в обработчике можно вместе с контрагентом записать связанные с ним данные

- ОбработкаЗаполнения - событие, срабатывающее при создании нового объекта.

- В обработчике можно заполнить объект по умолчанию

- Например, задать вид контрагента "Юридическое лицо"

- ПриКопировании - событие, срабатывающее при создании копии объекта

- Например, можно установить новое значение поля "Автор" и новое значение поля "Дата создания"

Давайте разбираться на примере (Создадим справочник, где пол сотрудника уже будет предопределен)

1. Создадим новый справочник "Сотрудники" и перечисление "Пол" с данными "мужской" и "женский", внеся их в справочник

Модули в 1С (7 из 100 дней)

2. Перейдем в модуль объекта "Справочника" и пропишем следующий код

Модули в 1С (7 из 100 дней)

3. Запустим платформу и создадим нового сотрудника (Увидим, что значение предопределенно)

Модули в 1С (7 из 100 дней)

Модули менеджеров

Модули менеджеров определяют поведение класса однородных объектов.

Если представить справочник в виде таблицы:

- Модуль объекта описывает логику работы одной строки этой таблицы

- Модуль менеджера описывает события, связанные со всей таблицей в целом

События модуля менеджера:

- ОбработкаПолучениеПредставления - событие, срабатывающее, когда платформы формирует представление объекта

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

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

В обработчике можно реализовать поиск не только по наименованию, но и по другим реквизитам: по email, по ИНН

Давайте разбираться на примере:

1. Создадим три новых реквизита: реквизит "ТабельныйНомер" для нашего справочника, реквизит "Сотрудник" с ссылочным типом данных на справочник сотрудники для документов (Не забудьте добавить в форму) и точно такой же реквизит "Наименование" для обработки

Модули в 1С (7 из 100 дней)

2. Запустим платформу и увидим, что все работает корректно

Модули в 1С (7 из 100 дней)

3. Пропишем следующий код в модуле менеджера для справочника

Модули в 1С (7 из 100 дней)

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

Модули в 1С (7 из 100 дней)

Модули форм

- Форма - это экранный объект, в который пользователь вносит данные

- На форма размещены поля ввода, флажки, табличные части, кнопки, картинки, подсказки

- Поведение всех этих элементов, реакцию на нажатие кнопок и ввод текста описывают в модуле формы

- События в модуле формы могут быть связаны как с самой формой, так и с элементами формы

Модули в 1С (7 из 100 дней)

Модули формы являются смешанными, так как в них размещен код, который выполняется и на стороне клиента, и на стороне сервера

Чтобы сообщить платформе, где будет размещен код смешанных модулей, используют директивы компиляции: &НаКлиенте, &НаСервере

Модули в 1С (7 из 100 дней)

Давайте разберем на примере:

1. Создадим новый реквизит в документе "ДатаПоследнейЗаписи" с типом "Дата"

Модули в 1С (7 из 100 дней)

2. Добавим наш реквизит в форму и пропишем следующий код в модуле

Модули в 1С (7 из 100 дней)

3. Запустим платформу и увидим, что при записи нового документа устанавливается текущая дата

Модули в 1С (7 из 100 дней)

Стоит понимать, что этот код отработает только при работе с ФОРМОЙ, а не при работе с нашим объектом "Документы", поэтому создадим примерно такой же код для нашего объекта

Модули в 1С (7 из 100 дней)

Теперь наш реквизит дата меняется, как и на форме, так и в самом объекте при обновлении

Модули в 1С (7 из 100 дней)

Давайте рассмотрим ещё один пример (Предположим, мы хотим, чтобы основываясь на отчестве "Владимировна, Алексеевна" был автоматический выбор пола)

1. Создадим в нашем справочнике форму и присвоим нашему объекту "Наименование" событие "ПриИзменении"

Модули в 1С (7 из 100 дней)

2. Пропишем следующий код

Модули в 1С (7 из 100 дней)

3. Запустим платформу и напишем женское отчество, увидим, что пол автоматически поменялся

Модули в 1С (7 из 100 дней)

На этом все, встретимся с вами уже завтра!

1