Перейти к содержанию
#std455

Структура модуля

1.1.

Старайтесь выделить из модуля следующие разделы:

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

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

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

1.2.

Не делайте очень большие разделы, разделяйте на подразделы. Так будет проще ориентироваться в коде.

1.3.

Разделы и подразделы оформляйте в виде областей. Называйте области так же, как и переменные. См. Правила образования имен переменных.

1.4.

Шаблон общего модуля:

Паттерн

русск.
#Область ПрограммныйИнтерфейс
// Код процедур и функций (1)
#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс
// Код процедур и функций (2)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (3)
#КонецОбласти
  1. Содержит экспортные процедуры и функции для использования другими объектами конфигурации или другими программами (например, через внешнее соединение).

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

  3. Содержит внутреннюю реализацию общего модуля.

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

англ.
#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.

Шаблон модулей объектов, менеджеров, наборов записей, обработок, отчетов:

Паттерн

русск.
#Область ОписаниеПеременных

#КонецОбласти

#Область ПрограммныйИнтерфейс
// Код процедур и функций (1)
#КонецОбласти

#Область ОбработчикиСобытий
// Код процедур и функций (2)
#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс
// Код процедур и функций (3)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (4)
#КонецОбласти

#Область Инициализация

#КонецОбласти
  1. Содержит экспортные процедуры и функции для использования в других модулях конфигурации или другими программами (например, через внешнее соединение).

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

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

  2. Содержит обработчики событий модуля объекта ПриЗаписи, ПриПроведении и др.

  3. Такое же предназначение, как и в общих модулях 1.4.

  4. Такое же предназначение, как и в общих модулях 1.4.

англ.
#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.

Шаблон модулей форм:

Паттерн

русск.
#Область ОписаниеПеременных

#КонецОбласти

#Область ОбработчикиСобытийФормы
// Код процедур и функций (1)
#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы
// Код процедур и функций (2)
#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормы<ИмяТаблицыФормы>
// Код процедур и функций (3)
#КонецОбласти

#Область ОбработчикиКомандФормы
// Код процедур и функций (4)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (5)
#КонецОбласти
  1. Содержит обработчики событий формы: ПриСозданииНаСервере, ПриОткрытии и др.

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

  3. Таких разделов может быть несколько. Для каждой таблицы свой раздел. Для обработчиков таблиц формы и элементов формы.

  4. Для обработчиков команд формы.

  5. Такое же предназначение, как и в общих модулях 1.4.

англ.
#Region Variables

#EndRegion

#Region FormEventHandlers
// Enter code here.
#EndRegion

#Region FormHeaderItemsEventHandlers
// Enter code here.
#EndRegion

#Region FormTableItemsEventHandlers<FormTableName>
// Enter code here.
#EndRegion

#Region FormCommandsEventHandlers
// Enter code here.
#EndRegion

#Region Private
// Enter code here.
#EndRegion
1.7.

Шаблон модулей команд:

Паттерн

русск.
#Область ОбработчикиСобытий
// Код процедур и функций (1)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (2)
#КонецОбласти
  1. Содержит обработчик команды: ОбработкаКоманды.

  2. Такое же предназначение, как и в общих модулях 1.4.

англ.
#Region EventHandlers
// Enter code here.
#EndRegion

#Region Private
// Enter code here.
#EndRegion
1.8.

Не оставляйте пустых областей в модуле.

2.1.

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

Пример

русск.
////////////////////////////////////////////////////////////////////////////////
// Клиентские процедуры и функции общего назначения:
// - для работы со списками в формах;
// - для работы с журналом регистрации;
// - для обработки действий пользователя в процессе редактирования
//   многострочного текста, например комментария в документах;
// - прочее.
//  
////////////////////////////////////////////////////////////////////////////////
2.2.

Пример описания переменных:

Пример

русск.
#Область ОписаниеПеременных

Перем ВалютаУчета;
Перем АдресПоддержки;
...

#КонецОбласти
англ.
#Region Variables

Var PresentationCurrency;
Var SupportEmail;
...

#EndRegion

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

2.3.

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

  • См. Описание процедур и функций #std453
2.4.1.

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

2.4.2.

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

2.4.3.

Для каждого события создавайте свой обработчик.

Если одинаковые действия ожидаются для событий разных элементов, то:

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

Неправильно

&НаКлиенте
Процедура ПоИсполнителюПриИзменении(Элемент)

    ПараметрыОтбора = Новый Соответствие();
    ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору);
    ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю);
    УстановитьОтборСписка(Список, ПараметрыОтбора);

КонецПроцедуры

&НаКлиенте
Процедура ПоАвторуПриИзменении(Элемент)

    ПоИсполнителюПриИзменении(Неопределено);

КонецПроцедуры

Правильно

&НаКлиенте
Процедура ПоИсполнителюПриИзменении(Элемент)

    УстановитьОтбор();

КонецПроцедуры

&НаКлиенте
Процедура ПоАвторуПриИзменении(Элемент)

    УстановитьОтбор();

КонецПроцедуры

&НаСервере
Процедура УстановитьОтбор()

    ПараметрыОтбора = Новый Соответствие();
    ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору);
    ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю);
    УстановитьОтборСписка(Список, ПараметрыОтбора);

КонецПроцедуры 

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

2.5.

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

2.5.1.

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

2.6.

Служебные процедуры и функции модуля размещайте в модуле следом за обработчиками событий.

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

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

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

2.7.

Пример инициализации переменных:

Пример

русск.
#Область Инициализация

АдресПоддержки = "v8@1c.ru"; 
ВыполнитьИнициализацию();
...

#КонецОбласти
англ.
#Region Initialize

SupportEmail = "v8@1c.ru";
Ctor();
...

#EndRegion
Источник

https://its.1c.ru/db/v8std#content:455