Структура модуля
Область застосування: керований додаток, мобільний додаток, звичайний додаток.
1.1. У програмному модулі (загальні модулі, модулі об'єктів, модулі менеджерів об'єктів, модулі форм, команд тощо) у загальному випадку можуть бути наступні розділи в наведеній нижче послідовності:
- заголовок модуля
- розділ опису змінних
- експортні процедури та функції модуля, що становлять його програмний інтерфейс
- обробники подій об'єкта (форми)
- службові процедури та функції модуля
- розділ ініціалізації
Деякі розділи можуть бути лише у модулях певного виду. Наприклад, обробники подій елементів форм можуть бути присутніми лише в модулях форм, а розділ опису змінних і розділ ініціалізації не можуть бути визначені в неглобальних загальних модулях, модулях менеджерів об'єктів, наборів записів, значень констант та модулі сеансу.
Вимога про поділ коду модуля на розділи покликана підвищити читання коду та спростити внесення змін до коду різними авторами (розробниками) як при колективній розробці, так і при доопрацюванні прикладних рішень на конкретних впровадженнях.
1.2. Об'ємні розділи модулів рекомендується розбивати на підрозділи за функціональною ознакою.
1.3. Розділи та підрозділи оформляються у вигляді областей. При цьому імена областей повинні задовольняти вимоги стандарту Правила освіти імен змінних
1.4. Шаблон (заготівля для копіювання) розділів для загальних модулів:
#Область ПрограмнийІнтерфейс // Код процедур та функцій #КінецьОбласті #Область СлужбовийПрограмнийІнтерфейс // Код процедур та функцій #КінецьОбласті #Область СлужбовіПроцедуриІФункції // Код процедур та функцій #КінецьОбласті
#Region Public // Enter code here. #EndRegion #Region Internal // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion
- Розділ «Програмний інтерфейс» містить експортні процедури та функції, призначені для використання іншими об'єктами конфігурації або іншими програмами (наприклад, через зовнішнє з'єднання).
- Розділ "Службовий програмний інтерфейс" призначений для модулів, які є частиною деякої функціональної підсистеми. У ньому мають бути розміщені експортні процедури та функції, які допустимо викликати лише з інших функціональних підсистем цієї бібліотеки.
- Розділ «Службові процедури та функції» містить процедури та функції, що становлять внутрішню реалізацію загального модуля. У тих випадках, коли загальний модуль є частиною деякої функціональної підсистеми, що включає кілька об'єктів метаданих, у цьому розділі також можуть бути розміщені службові експортні процедури і функції, призначені тільки для виклику з інших об'єктів даної підсистеми.
#Область ОновленняІнформаційноїБази // Код процедур та функцій #КінецьОбласті
#Region InfobaseUpdate // Enter code here. #EndRegion
1.5. Шаблон оформлення розділів для модулів об'єктів, менеджерів, наборів записів, обробок, звітів тощо:
#Область ОписЗмінних #КінецьОбласті #Область ПрограмнийІнтерфейс // Код процедур та функцій #КінецьОбласті #Область ОбробникиПодії // Код процедур та функцій #КінецьОбласті #Область СлужбовийПрограмнийІнтерфейс // Код процедур та функцій #КінецьОбласті #Область СлужбовіПроцедуриІФун Область Ініціалізація #КінецьОбласті
#Region Variables #EndRegion #Region Public // Enter code here.#EndRegion #Region EventHandlers // Enter code here. #EndRegion #Region Internal // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion #Region Initialize #EndRegion
- Розділ «Програмний інтерфейс» містить експортні процедури та функції, призначені для використання в інших модулях конфігурації або інших програм (наприклад, через зовнішнє з'єднання). Не слід розміщувати експортні функції та процедури, які призначені для виклику виключно з модулів самого об'єкта, його форм та команд. Наприклад, процедури заповнення табличної частини документа, які викликаються з обробки заповнення в модулі об'єкта і форми документа в обробнику команди форми не є програмним інтерфейсом модуля об'єкта, т.к. викликаються тільки в самому модулі та з форм цього ж об'єкта. Їх слід розміщувати у розділі «Службові процедури та функції».
- Розділ «Обробники подій» містить обробники подій модуля об'єкта (ПріЗаписи, ПріПроведення та ін.)
- Розділ «Службовий програмний інтерфейс» має таке саме призначення, як і загальних модулях.
- Розділ «Службові процедури та функції» має таке саме призначення, як у загальних модулях.
1.6. Шаблон оформлення розділів для модулів форм:
#Область ОписЗмінних #КінецьОбласті #Область ОбробникиПодіїФорми // Код процедур та функцій #КінецьОбласті #Область ОбробникиПодіїЕлементівШапкиФорми // Код процедур та функцій #КінецьОбласті #Область ОбробникиПодіїЕлементівТаблиціФорми // Код процедур та процедур // Код процедур та функцій #КінецьОбласті #Область СлужбовіПроцедуриІФункції // Код процедур та функцій #КінецьОбласті
#Region Variables #EndRegion #Region FormEventHandlers // Enter code here. #EndRegion #Region FormHeaderItemsEventHandlers // Enter code here. #EndRegion #Region FormTableItemsEventHandlers // Enter code here. #EndRegion #Region FormCommandsEventHandlers // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion
- Розділ «Обробники подій форми» містить процедури-обробники подій форми: При створенні на сервері, при відкритті і т.п.
- Розділ «Оброблювачі подій елементів шапки форми» містить процедури-оброблювачі елементів, які розташовані в основній частині форми (все, що не пов'язане з таблицями на формі).
- У розділах «Обробники подій елементів таблиці форми» розміщуються процедури-обробники таблиць форми та елементів таблиць. Для процедур-обробників кожної таблиці має бути створений свій розділ.
- Розділ «Обробники команд форми» містить процедури-обробники команд форми (імена яких задаються як Дія команд форми).
- Розділ «Службові процедури та функції» має таке саме призначення, що й у загальних модулях.
1.7. Шаблон оформлення розділів для модулів команд:
#Область ОбробникиПодії // Код процедур та функцій #КінецьОбласті #Область СлужбовіПроцедуриІФункції // Код процедур та функцій #КінецьОбласті
#Region EventHandlers // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion
- Розділ «Обробники подій» містить процедуру-обробник команди Обробка Команди.
- Розділ «Службові процедури та функції» має таке саме призначення, що й у загальних модулях.
1.8. У модулі повинно бути порожніх областей.
2. Загальні вимоги до розділів програмних модулів.
2.1. Заголовок модуля є коментар на самому початку модуля.У заголовку модуля наводиться його короткий опис та умови застосування.
Наприклад:
//////////////////////////////////////////////////// //////////////////////////////// Клієнтські процедури і функції загального призначення: // - для роботи зі списками у формах; // - до роботи з журналом реєстрації; // - для обробки дій користувача в процесі редагування // багаторядкового тексту, наприклад, коментаря в документах; // - інше. // ////////////////////////////////////////////////// //////////////////////////////////
Для модулів форм у заголовку рекомендується розміщувати опис параметрів форми.
2.2. Розділ опису змінних. Імена змінних призначаються відповідно до загальних правил освіти імен змінних, які використання описується у статті Використання глобальних змінних у програмних модулях.
Усі змінні модулі мають бути забезпечені коментарем, достатнім розуміння їх призначення. Коментар рекомендується розміщувати у тому рядку, де оголошується змінна.
Приклад:
#Область ОписЗмінних Перем ВалютаОбліку; Перем АдресаПідтримки; . #КінецьОбласті
#Region Variables Var PresentationCurrency; Var SupportEmail; . #EndRegion
2.3. Програмний інтерфейс. Експортні процедури та функції, що становлять програмний інтерфейс модуля, розміщуються відразу після опису змінних. Такі процедури та функції призначені для використання іншими об'єктами конфігурації або іншими програмами (наприклад, через зовнішнє з'єднання), тому мають бути розташовані в модулі на "видному місці".
2.4.1. Обробники подій форми, команд та елементів форми . Перед службовими процедурами та функціями у модулі форми розташовуються обробники подій форми, а також обробники подій команд та елементів форми.
Методична рекомендація (корисна порада)
2.4.2. Рекомендується обробники одного елемента форми розташовувати разом, дотримуючись, при цьому, порядку їхнього прямування в панелі властивостей редактора форми в конфігураторі.
2.4.3. У кожної події має бути призначена своя процедура-обробник. Якщо однакові дії повинні виконуватися у разі виникнення подій у різних елементах форми слід:
для кожного елемента форми створити окремий обробник з ім'ям, що призначається за умовчанням
&НаКлієнті Процедура За ВиконавцемПриЗміні(Елемент) ПараметриВідбору = Новий Відповідність(); ПараметриОтбору.Вставити("По Автору", По Автору); ПараметрыОтбора.Вставить("По Исполнителю", ПоИсполнителю); Встановити Відбір Списку (Список, Параметри Відбору); КінецьПроцедури &НаКлієнті Процедура ПоАвторуПриЗміні(Елемент) ЗаВиконавцемПриЗміні(Невизначено); КінецьПроцедури
&На Клієнті Процедура За ВиконавцемПриЗміні(Елемент) ВстановитиВідбір(); КінецьПроцедури &НаКлієнті Процедура ПоАвторуПриЗміні(Елемент) ВстановитиВідбір(); КінецьПроцедури &На Сервері Процедура УстановитиОтбор() ПараметриОтбора = Новий Відповідність(); ПараметриОтбору.Вставити("По Автору", По Автору); ПараметрыОтбора.Вставить("По Исполнителю", ПоИсполнителю); Встановити Відбір Списку (Список, Параметри Відбору); КінецьПроцедури
Ця вимога обумовлена тим, що логічно процедури-обробники подій не призначені для використання в коді модуля, а викликаються безпосередньо платформою. Змішування цих двох сценаріїв в одній процедурі невиправдано ускладнює її логіку і знижує її стійкість (замість одного передбаченого сценарію виклику - за подією з платформи - код процедури повинен розраховувати і на інші "прямі" виклики з коду).
2.5.Обробники подій модулів об'єкта та менеджера об'єкта розміщуються після розділу з програмним інтерфейсом, але до службових процедур та функцій модуля.
Методична рекомендація (корисна порада)
2.5.1. Рекомендується розташовувати обробники, дотримуючись порядку їх проходження в описі вбудованої мови.
2.6. Службові процедури та функції модуля , які є обробниками подій, а становлять внутрішню реалізацію модуля, розміщуються у модулі слідом за обробниками подій.
У тих випадках коли загальний модуль є частиною деякої функціональної підсистеми, що включає кілька об'єктів метаданих, в цьому розділі також можуть бути розміщені службові експортні процедури і функції, призначені тільки для виклику з інших об'єктів даної підсистеми.
Процедури та функції, пов'язані між собою за характером або логікою роботи рекомендується розташовувати разом. У модулях форм не рекомендується явно групувати процедури та функції модуля на серверні, клієнтські та функції без контексту, оскільки таке «технологічне» упорядкування ускладнює розуміння логіки модуля, відволікаючи увагу розробника на деталі її реалізації.
2.7. Розділ ініціалізації містить оператори, які ініціалізують змінні модулі або об'єкт (форму).
Наприклад:
#Область Ініціалізація АдресаПідтримки = "[email protected]"; ВиконатиІніціалізацію(); . #КінецьОбласті
#Region Initialize SupportEmail = "[email protected]"; Ctor(); . #EndRegion
Для оформлення розділів коду як областей рекомендується скористатися прикладеною обробкою.
1С створення спільного модуля на сервері та клієнті, виклик процедури
Загальні модулі дозволяють запустити процедуру або функцію з будь-якої іншої ділянки програмного коду в програмі, що допомагає значно скоротити обсяг програмного коду в цілому.
Після найменувань процедур та функцій має стояти слово Експорт (листинг 1). Експорт означає, що ця процедура буде доступна ззовні.
Створення спільного модуля, що виконується на сервері:
- Дерево метаданих: Загальні -> Загальні модулі -> Правою кнопкою миші -> Додати;
- Відзначити прапорці:
- Сервер;
- Зовнішнє з'єднання;
Мал. 1 - модуль на сервері
Створення загального модуля, що виконується на клієнті:
Мал. 2 - модуль на клієнті
Приклад функції загального модуля:
Як вхідні параметри приймаємо значення двох чисел, потім складаємо їх і повертаємо результат.
Функція РозрахунокСуми(Змінна1, Змінна2)
Експорт Повідомити(Повідомлення); РезультатСкладання = Змінна1 + Змінна2;
Повернення РезультатСкладання;
КінецьФункції
Лістинг 1 - приклад процедури
Як бачимо з лістингу 1, перед функцією немає позначення &На Клієнті, т.к. це зазначено у властивостях модуля. Також після процедури прописано слово Експорт.