Объектно-ориентированное программирование и моделирование
База курса:
Цель курса:
Мы даем вам профессию и готовим к реальной работе
Орг-вопросы
3. Проверьте чтобы вы были записаны тут, допишите свои почтовые ящики (которые вы читаете):
2022.intervolga.ru/imit_2022
Выбрать лист группы, найти ФИО, проверить почту, получить номер темы ЛР
4. Для сдачи лабораторных работ заведите приватный репозиторий на github:
Добавьте antonov@intervolga.ru как collaborator к вашему репозиторию:
Внесите адрес репозитория напротив своей фамилии в таблицу
Если вы все сделали верно, в колонке “Приватный” автоматически загорится слово приватный
Правила ведения репозитория
Советы
ПОД ВОПРОСОМ!!!
Лекция 9: Контекст. Программные модули. Событийность. �Объектная модель работы с данными
Контекст. Программные модули. Событийность
Понятие программного модуля
Программный модуль 1С представляет собой текст на встроенном языке 1С:Предприятия, расположенный в определенном месте конфигурации.
Виды программных модулей:
Понятие программного модуля
5. Модуль сеанса.
6. Модули форм - модуль, в котором определяется поведение формы и действия, выполняемые из нее (например, открытие других форм).
7. Модуль менеджера объекта - для переопределения стандартного события выбора, которое возникает в момент ввода по строке и для расширение функционала менеджера.
8. Модули команд.
9. Модули набора записей.
Разделы программного модуля
Любой программный модуль, за исключением общих модулей, состоит из следующих разделов:
Внимание! У общих модулей есть только раздел процедур и функций.
Виды контекста
Контекст – это определенное окружение доступных свойств и методов в данном конкретном программном модуле, в данной конкретной строке.
Даже в одном модуле в разных процедурах может быть совершенно разный контекст.
Виды контекстов в 1С:Предприятии 8
Виды контекста
4. Контекст модуля объекта, в котором есть доступ к реквизитам и табличным частям объекта, а также его методам и событиям (например, в модуле документа РасходнаяНакладная доступны реквизиты документа и его табличные части, можно вызывать методы документа и обрабатывать события).
5. Контекст модуля формы, в котором доступны реквизиты формы, а также ее свойства, методы и события. Если у формы назначен основной реквизит, то в модуле формы становятся доступны свойства и методы прикладного объекта, используемого в качестве основного реквизита, а также экспортируемые переменные, процедуры и функции модуля этого прикладного объекта.
Правила видимости
Правила видимости экспортируемых переменных, процедур и функций различных модулей:
Правила видимости
"Экспорт" - необязательное ключевое слово, которое указывает на то, что процедура является доступной из других программных модулей.
Стрелки на схеме обозначают, что модуль предоставляет другим модулям возможность обращаться к своим экспортируемым переменным, процедурам и функциям. Напомним, что в общих модулях не может быть объявления переменных.
Глобальный контекст
Глобальный контекст доступен во всех местах конфигурации.
Глобальный контекст образуется прежде всего процедурами и функциями глобального контекста Платформы.
Свойства глобального контекста
Все объекты конфигурации являются свойствами глобального контекста.
Т.е. создание справочника, документа - это добавление нового свойства в глобальный контекст.
События глобального контекста
Обработчик события - процедура, которая выполняется при наступлении определенного события в системе (пример - нажатие кнопки)
Описывать события приложения нужно в модуле приложения,
события модуля сеанса - в модуле сеанса,
события внешнего соединения - в модуле внешнего соединения,
Модуль приложения 1С
Модуль приложения 1С предназначен для объявления глобальных переменных, а также обработки событий:
Модуль приложения содержит обработчики, позволяющие перехватить и обработать внешние события от оборудования (например, события от торгового или фискального оборудования).
ВАЖНО! В модуле приложения отслеживается именно интерактивный запуск системы (т.е. когда создается окно программы); он не будет работать, если запуск программы 1С осуществляется, например, в режиме com-соединения, так как в этом случае окно программы не создается.
Модуль приложения 1С
Процедуры, функции и переменные модуля приложения могут быть описаны как экспортные. Все переменные и методы, которые помечены как экспортные будут доступны в любом модуле конфигурации, работающем на стороне клиента. Однако для описания общих алгоритмов рекомендуется использовать "Общие модули", что позволит снизить время компиляции модуля и время запуска приложения.
Расширить контекст модуля приложения можно за счет методов общих модулей, для которых установлено свойство «Вызов сервера».
Виды модуля приложения:
ВАЖНО! Если приложение работает и в режиме управляемого приложения, и в режиме обычного приложения, то необходимо описывать процедуры-обработчики как для модуля управляемого приложения, так и для модуля обычного приложения.
Модуль приложения 1С
В модуле Управляемого приложения не указываются директивы компиляции процедур и функций, так как модуль целиком компилируется на стороне Клиента. Это означает, что в процедурах и функциях модуля мы не сможем непосредственно обратиться, например, к справочникам. Если из модуля Управляемого приложения необходимо сделать Серверный вызов, то для этого нужно будет создавать специальные Общие модули с выставленным флагом "Вызов Сервера".
В модуле Обычного приложения подобных ограничений нет, так как данный модуль будет компилироваться при загрузке Толстого клиента. В Толстом клиенте доступны практически все типы данных.
События приложения. Пример
Напишем несколько событий приложений
События приложения. Пример
ПередНачаломРаботыСистемы
Параметр обработчика событий Отказ = ИСТИНА/ЛОЖЬ. По умолчанию - ЛОЖЬ.
Если Отказ = Истина, тогда программа не запустится.
Перед началом работы системы Сообщить() использовать нельзя. Используем Предупреждение()
ПриЗавершенииРаботыСистемы
Если Отказ = Истина, то работа с программой не будет завершена.
Если Отказ = Ложь, то программа будет завершена в любом случае.
Если Отказ = Истина И ТекстПредупрежедения не пустая строка, то пользователю будет предложен выбор - остаться или выйти без сохранения данных
События приложения. Пример. Результат
Программа еще не запустилась
События приложения. Пример. Результат
Программа запустилась
События приложения. Пример. Результат
Программа запустилась
События приложения. Результат
При закрытии программы
Модуль внешнего соединения
Модуль внешнего соединения срабатывает, когда запуск приложения происходит в режиме com-соединения и предназначен для обработки событий:
Как и в модуле приложения, здесь доступны разделы описания переменных, методов и раздел основной программы. Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом "Экспорт" становятся, как и в случае модуля приложения, частью глобального контекста.
Отличие модуля внешнего соединения от модуля приложения:
Сам процесс внешнего соединения – это процесс неинтерактивный. В этом режиме происходит программная работа с информационной базой и не происходит открытия окна приложения, что накладывает определенные ограничения на использование методов, предназначенных для интерактивной работы. В этом режиме нельзя использовать вызовы диалоговых форм, предупреждающих сообщений и т.п. Они просто не сработают.
Модуль внешнего соединения
События:
Модуль сеанса
Модуль сеанса - это узкоспециализированный модуль, предназначенный исключительно для инициализации параметров сеанса и выполняющийся в любом режиме запуска приложения.
Особенности модуля сеанса:
Модуль сеанса
Событие модуля сеанса
Событие <УстановкаПараметровСеанса>, единственное для этого модуля, выполняется самым первым (даже раньше события модуля приложения <ПередНачаломРаботыСистемы>).
ВАЖНО! Не стоит располагать в модуле сеанса код, не связанный напрямую с инициализацией параметров сеанса:
Модуль сеанса
ВАЖНО! Не стоит располагать в модуле сеанса код, не связанный напрямую с инициализацией параметров сеанса:
Общие модули
Объект "Общие модули" содержит программный код (процедуры и функции), вызываемый из других мест конфигурации (используемый в других программных модулях), и может принадлежать всей конфигурации.
Примеры общего модуля 1С:
Общие модули
Особенности объекта "Общий модуль":
Общие модули. Свойства
Палитра свойств объекта "Общие модули"
"Глобальный" — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте (их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля). При этом названия процедур и функций должны быть уникальны в рамках глобального контекста.
Если флаг не установлен, то экспортируемые методы общего модуля не являются частью глобального контекста и могут иметь одинаковые имена в разных неглобальных общих модулях.
Общие модули. Свойства
"Клиент (управляемое приложение)" — если флаг установлен, методы общего модуля будут доступны для тонкого клиента, веб-клиента, а также для толстого клиента в режиме управляемого приложения.
В контексте неглобального общего модуля с установленным свойством "Клиент (управляемое приложение)" доступны экспортируемые переменные, процедуры и функции модуля управляемого приложения.
"Сервер" — если флаг установлен, процедуры и функции данного общего модуля могут быть выполнены на сервере (в клиент-серверном варианте).
"Внешнее соединение" — если флаг установлен, программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
В контексте неглобального общего модуля с установленным свойством "Внешнее соединение" доступны экспортируемые переменные, процедуры и функции модуля внешнего соединения.
Общие модули
"Вызов сервера" — флаг, разрешающий вызов сервера, процедуры и функции доступны на клиенте (само свойство доступно, если установлен флаг компиляции "Сервер", все остальные флаги компиляции стоит снять во избежание различных проблем). Если флаг "Вызов сервера" не установлен, то процедуры и функции модуля доступны только на сервере.
"Привилегированный" — если флаг установлен, то устанавливаются полные права доступа при выполнении действий с базой данных в процедурах и функциях общего модуля. При установленном свойстве выполнение производится только на сервере.
"Повторное использование" — свойство определяет настройки возвращаемых значений и доступно, если общий модуль не является глобальным. Если опция включена, то в ходе выполнения кода система запоминает параметры и результат работы функций после первого вызова функции. При повторном вызове функции с такими же параметрами, происходит возврат запомненного значения (из первого вызова) без выполнения самой функции.
Опция может принимать следующие значения:
Общие модули
Рекомендации по выставлению флагов общего модуля 1С:
Модуль формы
Модуль формы 1C предназначен для обработки:
Модуль формы компилируется:
В модуле формы доступны разделы описания переменных и методов, а также раздел основной программы.
Модуль формы
События, процедуры и функции модуля управляемой формы 1С
К стандартным событиям формы можно обратиться:
Модуль формы
Особенности управляемых форм:
Модуль объекта
Модуль объекта 1С предназначен, для обработки событий объектов (например, события записи и удаления объектов, событие проведения документов и т.д.).
Некоторые события модуля объекта дублируют события модуля формы (например, события связанные с записью). Однако следует понимать:
Модуль объекта
Особенности модуля объекта:
Модуль объекта можно вызывать:
Модуль менеджера объектов
Модуль менеджера предназначен:
Отличие модуля менеджера от модуля объекта:
Особенности модуля менеджера:
Модуль менеджера объектов
Обработчик событий команд. Пример
Сделаем вывод текущей даты при нажатии на кнопку
Как обработать нажатие пользователем на кнопку?
Пользователь нажимает на кнопку - кнопка вызывает выполнение команды - команда вызывает выполнение своего обработчика событий
Обработчик событий команд. + Формат()
Происходит вывод даты и времени, а нужно только время
Функция Формат(). Промежуточный результат
Происходит вывод даты и времени, а нужно только время
Функция Формат().
Функция Формат(). Результат
Обработчики событий формы. Пример
Общие формы 1С — формы 1С, не принадлежащие конкретным объектам конфигурации и используемые различными объектами для решения схожих задач.
Обычно общие формы используются для форм настроек программы и других сервисных функций, например:
Обработчики событий формы. Пример
Добавим поле “НазваниеТовара”. Перетащить на форму не можем, т.к. нет связанного с полем реквизита.
Добавим реквизит
Обработчики событий формы. Пример
Обработчики событий формы. Пример
Обработчики событий формы. Пример
Результат:
Обработчики событий. Задачи
Обработчики событий. Задачи
Переключение представления свойств:
Обработчики событий. Задачи
Результат:
Объектная модель работы с данными
Объекты - свойства глобального контекста
Все объекты конфигурации являются свойствами глобального контекста.
Это основая структура объектной модели
Еще раз рассмотрим этот слайд…
Уровни объектной модели
Объектная модель разделяется на несколько уровней
1-й уровень - уровень “Менеджер” управляет всеми объектами (справочник, документ, обработка и т.д)
2-й уровень - это конкретный менеджер. Через точку указывается имя объекта, которым управляет данный уровень. Например, СправочникМенеджер.Товар, ДокументМенеджер.ПоступлениеТоваров
3-й уровень - конкретные объекты конкретного справочника или документа, Например, элементы справочника
4-й уровень - ссылочный уровень, который ссылается на конкретный объект
Уровни объектной модели
Объектная модель разделяется на несколько уровней
1-й уровень - уровень “Менеджер” управляет всеми объектами (справочник, документ, обработка и т.д)
2-й уровень - это конкретный менеджер. Через точку указывается имя объекта, которым управляет данный уровень. Например, СправочникМенеджер.Товар, ДокументМенеджер.ПоступлениеТоваров
3-й уровень - конкретные объекты конкретного справочника или документа, Например, элементы справочника
4-й уровень - ссылочный уровень, который ссылается на конкретный объект
Уровни объектной модели. 1-й уровень
Рассмотрим какие есть методы на каждом уровне объектов, на примере справочника.
Уровни объектной модели. 2-й уровень
Визуально уровень справочника можно представить как окно с формой списка.
Уровни объектной модели. 3-й уровень
Когда мы добавляем новый реквизит справочника, мы добавляем новое свойство на этот уровень объекта
Предназначен для чтения, изменения, добавления и удаления элементов справочника.
Важно! У всех событий этого объекта назначены предопределенные процедуры-обработчики. Имена процедур соответствует именам событий. Процедуры должны располагаться в модуле справочника.
Визуально уровень элемента справочника можно представить как окно с формой элемента справочника
Уровни объектной модели. 4-й уровень
Используется для указания ссылки на элемент справочника в реквизитах других объектов и переменных встроенного языка. Данный объект не содержит средств для чтения, изменения, добавления и удаления элемента справочника, однако позволяет обращаться к его реквизитам и другой информации об элементе. При обращении к свойствам объекта будет выполняться считывание всех данных элемента справочника из базы данных
Программное создание элемента
Создадим новый элемент программно.
2. Создадим серверную процедуру
Результат
Программное создание элемента
Сейчас у нас создание элемента справочника произошло в модуле команды. Это некорректно
Вся работа с элементами справочника должна быть разработана в отдельном модуле.�Для работы с СправочникМенеджер (2-й уровень на котором происходит создание элемента) используется модуль менеджера.
А работы с конкретным объектом (3-й уровень) должна вестись в модуле объекта
В модуле менеджера не надо обращаться к уровню Справочники. Пишем сразу метод СоздатьЭлемент()
Программное поиск элемента
Реализуем программный поиск товара
Программное поиск элемента
Реализуем программный поиск товара
НайтиПоРеквизиту - поиск по индексируемому реквизиту
Синтаксическая проверка кода
Задавайте вопросы.
Антонов Виталий Михайлович,
руководитель направления 1С-проектов
ИА ИНТЕРВОЛГА
вертикальная оцифровка бизнеса